summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorraveit65 <[email protected]>2017-01-08 09:02:22 +0100
committerraveit65 <[email protected]>2017-01-27 09:33:26 +0100
commit537d09c86a41c2cf2766f98b9a380e25e929f44b (patch)
tree600bd08a3da787c0d808eebe63aa05ddd3ecb357
parent82b97e200aaf4854dd7e60de6b063492176da840 (diff)
downloadmate-terminal-537d09c86a41c2cf2766f98b9a380e25e929f44b.tar.bz2
mate-terminal-537d09c86a41c2cf2766f98b9a380e25e929f44b.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.c11
1 files changed, 11 insertions, 0 deletions
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 ());