[gnome-terminal] window: Attach popup menus to their parent widgets



commit 67afb95efd64f29d62ebd32853276a76a5d0760f
Author: Jonas Ådahl <jadahl gmail com>
Date:   Thu Jun 11 10:32:47 2015 +0800

    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

 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 b254cd7..b34514c 100644
--- a/src/terminal-window.c
+++ b/src/terminal-window.c
@@ -2047,6 +2047,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, 
@@ -3172,6 +3175,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;
@@ -3192,6 +3196,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);
@@ -3222,6 +3230,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 ());


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]