]> Pileus Git - ~andy/gtk/commitdiff
Pop up context menus at the right device
authorMatthias Clasen <mclasen@redhat.com>
Sat, 5 Nov 2011 05:23:06 +0000 (01:23 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Sat, 5 Nov 2011 05:24:17 +0000 (01:24 -0400)
When multiple pointers are in play, we need to be careful
not to loose track of the device between receiving a button
press and popping up a menu.

https://bugzilla.gnome.org/show_bug.cgi?id=663396

gtk/gtkentry.c
gtk/gtktextview.c

index 180646425bbe4e1c050ba8d112a333b788731bf3..0acf72d2142ac6458f4bd23430eec7ab89e968d0 100644 (file)
@@ -8882,6 +8882,7 @@ typedef struct
   GtkEntry *entry;
   gint button;
   guint time;
+  GdkDevice *device;
 } PopupInfo;
 
 static void
@@ -8989,15 +8990,15 @@ popup_targets_received (GtkClipboard     *clipboard,
                     info_entry_priv->popup_menu);
 
 
-      if (info->button)
-       gtk_menu_popup (GTK_MENU (info_entry_priv->popup_menu), NULL, NULL,
-                       NULL, NULL,
+      if (info->device)
+       gtk_menu_popup_for_device (GTK_MENU (info_entry_priv->popup_menu),
+                        info->device, NULL, NULL, NULL, NULL, NULL,
                        info->button, info->time);
       else
        {
          gtk_menu_popup (GTK_MENU (info_entry_priv->popup_menu), NULL, NULL,
                          popup_position_func, entry,
-                         info->button, info->time);
+                         0, gtk_get_current_event_time ());
          gtk_menu_shell_select_first (GTK_MENU_SHELL (info_entry_priv->popup_menu), FALSE);
        }
     }
@@ -9022,11 +9023,13 @@ gtk_entry_do_popup (GtkEntry       *entry,
     {
       info->button = event->button;
       info->time = event->time;
+      info->device = event->device;
     }
   else
     {
       info->button = 0;
       info->time = gtk_get_current_event_time ();
+      info->device = NULL;
     }
 
   gtk_clipboard_request_contents (gtk_widget_get_clipboard (GTK_WIDGET (entry), GDK_SELECTION_CLIPBOARD),
index a2e5020b3d437b43b7f03264142e46a69a102725..585c2a5fc5d420edf7d5a4768943da068c358d47 100644 (file)
@@ -8157,6 +8157,7 @@ typedef struct
   GtkTextView *text_view;
   gint button;
   guint time;
+  GdkDevice *device;
 } PopupInfo;
 
 static gboolean
@@ -8310,9 +8311,9 @@ popup_targets_received (GtkClipboard     *clipboard,
                     0,
                     priv->popup_menu);
       
-      if (info->button)
-       gtk_menu_popup (GTK_MENU (priv->popup_menu), NULL, NULL,
-                       NULL, NULL,
+      if (info->device)
+       gtk_menu_popup_for_device (GTK_MENU (priv->popup_menu), 
+      info->device, NULL, NULL, NULL, NULL, NULL,
                        info->button, info->time);
       else
        {
@@ -8343,11 +8344,13 @@ gtk_text_view_do_popup (GtkTextView    *text_view,
     {
       info->button = event->button;
       info->time = event->time;
+      info->device = event->device;
     }
   else
     {
       info->button = 0;
       info->time = gtk_get_current_event_time ();
+      info->device = NULL;
     }
 
   gtk_clipboard_request_contents (gtk_widget_get_clipboard (GTK_WIDGET (text_view),