From 537d09c86a41c2cf2766f98b9a380e25e929f44b Mon Sep 17 00:00:00 2001 From: raveit65 Date: Sun, 8 Jan 2017 09:02:22 +0100 Subject: [PATCH] window: Attach popup menus to their parent widgets When running on Wayland, popup menus must have a parent widget to attach to. If a parent widget is not explicitly set, the GDK backend tries to guess what parent widget seems appropriate. In order to have more reliable popups, change the popups in the terminal window to set their parent widgets explicitly. https://bugzilla.gnome.org/show_bug.cgi?id=750755 taken from: https://git.gnome.org/browse/gnome-terminal/commit/?id=67afb95 --- src/terminal-window.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/terminal-window.c b/src/terminal-window.c index 2846d0d..b0977fb 100644 --- a/src/terminal-window.c +++ b/src/terminal-window.c @@ -1533,6 +1533,9 @@ popup_clipboard_targets_received_cb (GtkClipboard *clipboard, if (info->button == 0) gtk_menu_shell_select_first (GTK_MENU_SHELL (popup_menu), FALSE); + if (gtk_menu_get_attach_widget (GTK_MENU (popup_menu))) + gtk_menu_detach (GTK_MENU (popup_menu)); + gtk_menu_attach_to_widget (GTK_MENU (popup_menu), GTK_WIDGET (screen), NULL); gtk_menu_popup (GTK_MENU (popup_menu), NULL, NULL, NULL, NULL, @@ -2897,6 +2900,7 @@ notebook_button_press_cb (GtkWidget *widget, { TerminalWindowPrivate *priv = window->priv; GtkNotebook *notebook = GTK_NOTEBOOK (widget); + GtkWidget *tab; GtkWidget *menu; GtkAction *action; int tab_clicked; @@ -2917,6 +2921,10 @@ notebook_button_press_cb (GtkWidget *widget, gtk_action_activate (action); menu = gtk_ui_manager_get_widget (priv->ui_manager, "/NotebookPopup"); + if (gtk_menu_get_attach_widget (GTK_MENU (menu))) + gtk_menu_detach (GTK_MENU (menu)); + tab = gtk_notebook_get_nth_page (notebook, tab_clicked); + gtk_menu_attach_to_widget (GTK_MENU (menu), tab, NULL); gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, event->button, event->time); @@ -2947,6 +2955,9 @@ notebook_popup_menu_cb (GtkWidget *widget, gtk_action_activate (action); menu = gtk_ui_manager_get_widget (priv->ui_manager, "/NotebookPopup"); + if (gtk_menu_get_attach_widget (GTK_MENU (menu))) + gtk_menu_detach (GTK_MENU (menu)); + gtk_menu_attach_to_widget (GTK_MENU (menu), tab_label, NULL); gtk_menu_popup (GTK_MENU (menu), NULL, NULL, position_menu_under_widget, tab_label, 0, gtk_get_current_event_time ());