Bug 44763
| Summary: | Xiphos: зависает при нажатии ПКМ по кнопки выбора Книги | ||
|---|---|---|---|
| Product: | Sisyphus | Reporter: | Anton Zhukharev <ancieg> |
| Component: | xiphos | Assignee: | Ilya Mashkin <oddity> |
| Status: | RESOLVED FIXED | QA Contact: | qa-sisyphus |
| Severity: | normal | ||
| Priority: | P5 | CC: | oddity |
| Version: | unstable | ||
| Hardware: | x86_64 | ||
| OS: | Linux | ||
Результат проверки актуальности Состояние: p10: xiphos 4.2.1, hang ПКМ по книге. Sisyphus: 4.3.2.14 «Corrected a GTK signal error»; селекторы 4.4 в репозитории нет. Рекомендация: ретест ПКМ по кнопке Книги на Sisyphus 4.3.2.14 Воспроизводится на xiphos-4.3.2.14-alt2 (Sisyphus x86_64, задание https://packages.altlinux.org/tasks/401138/, GNOME 50/Wayland; пакет пересобран с webkit2gtk-4.1, стоковый не стартует — см. #44755): ПКМ по кнопке книги «К Римлянам» (и по кнопке главы) — меню не появляется, окно перестаёт реагировать (меню «Файл» не открывается, Esc не помогает), в stderr на каждое движение мыши Gtk-CRITICAL **: _gtk_widget_captured_event: assertion 'WIDGET_REALIZED_FOR_EVENT (widget, event)' failed (21 сообщение за несколько секунд, процесс жив, CPU 0%). Причина: select_{book,chapter,verse}_button_press_callback (src/gtk/navbar_versekey.c:183-233, 254-281, 302-329 и те же три функции в navbar_versekey_{dialog,editor,parallel}.c) строят меню main_versekey_drop_down_*_menu() для любой кнопки мыши, а показывают его (gtk_menu_popup_at_widget) только при event->button == 1. Внутри построения src/main/navbar_versekey.cc:770-771 вызывает gtk_menu_shell_select_item() на ещё не показанном меню — GTK активирует menu shell и ставит gtk_grab_add() на нереализованный виджет; при ПКМ меню не показывается и не уничтожается, grab остаётся навсегда, все события уходят в него. Исправление — ранний выход до построения меню в 12 обработчиках (по 3 в 4 файлах): --- a/src/gtk/navbar_versekey.c +++ b/src/gtk/navbar_versekey.c @@ -196,6 +196,8 @@ g_get_current_time(&start_time); // XI_message(("Start time is: %d sec %d mil", start_time.tv_sec, start_time.tv_usec)); + if (event->type != GDK_BUTTON_PRESS || event->button != 1) + return FALSE; menu = main_versekey_drop_down_book_menu(navbar_versekey, NB_MAIN, NULL, NULL); (аналогично перед main_versekey_drop_down_chapter_menu и main_versekey_drop_down_verse_menu; в сборке применялось одной заменой: perl -0777 -pi -e 's/(\tmenu =\s*\n?\s*main_versekey_drop_down_(book|chapter|verse)_menu\()/\tif (event->type != GDK_BUTTON_PRESS || event->button != 1)\n\t\treturn FALSE;\n$1/g' src/gtk/navbar_versekey*.c ) Проверено на пересобранном пакете: после ПКМ по книге и главе меню «Файл» открывается, CRITICAL нет (grep -c = 0), ЛКМ по-прежнему показывает список книг. Апстримного тикета не нашёл (github.com/crosswire/xiphos/issues; #881 — про другой crash навбара). Перевешиваю на сопровождающего. xiphos-4.3.2.14-alt3 -> sisyphus: Sat Sep 19 2026 Ilya Mashkin <oddity@altlinux.ru> 4.3.2.14-alt3 - Fixed conflict between libsoup2 and libsoup3 (Closes: #60587) - Fixed crush/freeze (Closes: #44763) |

Description
Anton Zhukharev 2022-12-29 10:16:53 MSK