[gtk+] gtkdnd: Don't bind/unbind keycodes that couldn't be determined



commit 794a3706cd29f8457731b09ac39870ee1d11bf94
Author: Daniel Drake <dsd laptop org>
Date:   Sun Jun 12 17:48:17 2011 +0100

    gtkdnd: Don't bind/unbind keycodes that couldn't be determined
    
    At http://dev.laptop.org/ticket/10643 we are seeing that drag-and-drop
    within the Sugar shell causes all of Sugar's custom keybindings to be
    removed.
    
    This is because gtkdnd tries to unbind XK_KP_Space, which (on my systems)
    is resolved to NoSymbol by XKeycodeToKeysym(). NoSymbol has value 0,
    the same as AnyKey, and XUngrabKey(AnyKey) is equivalent to unbinding
    all possible keycodes.
    
    Fix this by catching NoSymbol before binding/unbinding.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=652402

 gtk/gtkdnd.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)
---
diff --git a/gtk/gtkdnd.c b/gtk/gtkdnd.c
index 4805a6f..617a02e 100644
--- a/gtk/gtkdnd.c
+++ b/gtk/gtkdnd.c
@@ -475,6 +475,8 @@ grab_dnd_keys (GtkWidget *widget,
   for (i = 0; i < G_N_ELEMENTS (grab_keys); ++i)
     {
       keycode = XKeysymToKeycode (GDK_WINDOW_XDISPLAY (window), grab_keys[i].keysym);
+      if (keycode == NoSymbol)
+        continue;
       XGrabKey (GDK_WINDOW_XDISPLAY (window),
    	        keycode, grab_keys[i].modifiers,
 	        GDK_WINDOW_XID (root),
@@ -508,6 +510,8 @@ ungrab_dnd_keys (GtkWidget *widget,
   for (i = 0; i < G_N_ELEMENTS (grab_keys); ++i)
     {
       keycode = XKeysymToKeycode (GDK_WINDOW_XDISPLAY (window), grab_keys[i].keysym);
+      if (keycode == NoSymbol)
+        continue;
       XUngrabKey (GDK_WINDOW_XDISPLAY (window),
       	          keycode, grab_keys[i].modifiers,
                   GDK_WINDOW_XID (root));



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