diff options
author | raveit65 <[email protected]> | 2017-01-08 09:02:22 +0100 |
---|---|---|
committer | raveit65 <[email protected]> | 2017-01-08 09:02:22 +0100 |
commit | 575fc201f08cefecf469344ba3b2b02f1174fbc1 (patch) | |
tree | bb11a9311d9fdeb51c7b4ed4b655efc546ab451f | |
parent | c2ee31947b6711dfdbd0e9593e0e493b32c11897 (diff) | |
download | mate-terminal-575fc201f08cefecf469344ba3b2b02f1174fbc1.tar.bz2 mate-terminal-575fc201f08cefecf469344ba3b2b02f1174fbc1.tar.xz |
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
-rw-r--r-- | src/terminal-window.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/terminal-window.c b/src/terminal-window.c index 7bdc0d1..fb536f7 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, @@ -2898,6 +2901,7 @@ notebook_button_press_cb (GtkWidget *widget, TerminalWindowPrivate *priv = window->priv; TerminalScreen *active_screen = priv->active_screen; GtkNotebook *notebook = GTK_NOTEBOOK (widget); + GtkWidget *tab; GtkWidget *menu; GtkAction *action; int tab_clicked; @@ -2929,6 +2933,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); @@ -2959,6 +2967,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 ()); |