]> code.delx.au - gnu-emacs/commitdiff
Add calls to GrabKeyboard to remove strange
authorJan Djärv <jan.h.d@swipnet.se>
Mon, 22 Apr 2002 18:27:03 +0000 (18:27 +0000)
committerJan Djärv <jan.h.d@swipnet.se>
Mon, 22 Apr 2002 18:27:03 +0000 (18:27 +0000)
interactions with window managers that steal keypresses.

oldXMenu/Activate.c

index 2c36cc850337731cfbd36a5f52b8f3bd5435c652..5196d0ccc124332da0cc2ff5e12373161b2ef85c 100644 (file)
@@ -1,4 +1,4 @@
-/* $Header: /gd/gnu/cvsroot/emacs/oldXMenu/Activate.c,v 1.2 2000/01/27 15:31:20 gerd Exp $ */
+/* $Header: /cvsroot/emacs//emacs/oldXMenu/Activate.c,v 1.3 2000/07/21 14:36:24 gerd Exp $ */
 /* Copyright    Massachusetts Institute of Technology    1985  */
 
 #include "copyright.h"
@@ -83,6 +83,9 @@
 #include <config.h>
 #include "XMenuInt.h"
 
+/* For debug, set this to 0 to not grab the keyboard on menu popup */
+int x_menu_grab_keyboard = 1;
+
 int
 XMenuActivate(display, menu, p_num, s_num, x_pos, y_pos, event_mask, data,
              help_callback)
@@ -225,6 +228,18 @@ XMenuActivate(display, menu, p_num, s_num, x_pos, y_pos, event_mask, data,
                          menu->mouse_cursor,
                          CurrentTime
                          );
+    if (status == Success && x_menu_grab_keyboard)
+      {
+        status = XGrabKeyboard (display,
+                                menu->parent,
+                                False,
+                                GrabModeAsync,
+                                GrabModeAsync,
+                                CurrentTime);
+        if (status != Success)
+          XUngrabPointer(display, CurrentTime);
+      }
+    
     if (status == _X_FAILURE) {
        _XMErrorCode = XME_GRAB_MOUSE;
        return(XM_FAILURE);
@@ -465,6 +480,7 @@ XMenuActivate(display, menu, p_num, s_num, x_pos, y_pos, event_mask, data,
      * Ungrab the mouse.
      */
     XUngrabPointer(display, CurrentTime);
+    XUngrabKeyboard(display, CurrentTime);
 
     /* 
      * Restore bits under where the menu was if we managed