emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] Changes to emacs/lwlib/xlwmenu.c


From: Jan Djärv
Subject: [Emacs-diffs] Changes to emacs/lwlib/xlwmenu.c
Date: Mon, 22 Apr 2002 14:21:07 -0400

Index: emacs/lwlib/xlwmenu.c
diff -c emacs/lwlib/xlwmenu.c:1.48 emacs/lwlib/xlwmenu.c:1.49
*** emacs/lwlib/xlwmenu.c:1.48  Sat Apr 20 09:39:57 2002
--- emacs/lwlib/xlwmenu.c       Mon Apr 22 14:21:06 2002
***************
*** 257,266 ****
--- 257,278 ----
  
  int submenu_destroyed;
  
+ /* For debug, set this to 0 to not grab the keyboard on menu popup */
+ int x_menu_grab_keyboard = 1;
+ 
  static int next_release_must_exit;
  
  /* Utilities */
  
+ /* Ungrab pointer and keyboard */
+ static void
+ ungrab_all (w, ungrabtime)
+      Widget w;
+      Time ungrabtime;
+ {
+   XtUngrabPointer (w, ungrabtime);
+   if (x_menu_grab_keyboard) XtUngrabKeyboard (w, ungrabtime);
+ }
  
  /* Like abort, but remove grabs from widget W before.  */
  
***************
*** 270,276 ****
  {
    if (XtIsShell (XtParent (w)))
      XtRemoveGrab (w);
!   XtUngrabPointer (w, CurrentTime);
    abort ();
  }
  
--- 282,288 ----
  {
    if (XtIsShell (XtParent (w)))
      XtRemoveGrab (w);
!   ungrab_all (w, CurrentTime);
    abort ();
  }
  
***************
*** 1795,1801 ****
    XlwMenuWidget mw = (XlwMenuWidget) w;
  
    if (pointer_grabbed)
!     XtUngrabPointer ((Widget)w, CurrentTime);
    pointer_grabbed = 0;
  
    submenu_destroyed = 1;
--- 1807,1813 ----
    XlwMenuWidget mw = (XlwMenuWidget) w;
  
    if (pointer_grabbed)
!     ungrab_all ((Widget)w, CurrentTime);
    pointer_grabbed = 0;
  
    submenu_destroyed = 1;
***************
*** 2197,2203 ****
    if (mw->menu.popped_up)
      {
        mw->menu.popped_up = False;
!       XtUngrabPointer ((Widget)mw, ev->xmotion.time);
        if (XtIsShell (XtParent ((Widget) mw)))
        XtPopdown (XtParent ((Widget) mw));
        else
--- 2209,2215 ----
    if (mw->menu.popped_up)
      {
        mw->menu.popped_up = False;
!       ungrab_all ((Widget)mw, ev->xmotion.time);
        if (XtIsShell (XtParent ((Widget) mw)))
        XtPopdown (XtParent ((Widget) mw));
        else
***************
*** 2238,2244 ****
    if (mw->menu.popped_up)
      {
        mw->menu.popped_up = False;
!       XtUngrabPointer ((Widget)mw, ev->xmotion.time);
        if (XtIsShell (XtParent ((Widget) mw)))
        XtPopdown (XtParent ((Widget) mw));
        else
--- 2250,2256 ----
    if (mw->menu.popped_up)
      {
        mw->menu.popped_up = False;
!       ungrab_all ((Widget)mw, ev->xmotion.time);
        if (XtIsShell (XtParent ((Widget) mw)))
        XtPopdown (XtParent ((Widget) mw));
        else
***************
*** 2313,2327 ****
  #ifdef emacs
    count = x_catch_errors (display);
  #endif
!   XtGrabPointer ((Widget)mw, False,
!                (PointerMotionMask
!                 | PointerMotionHintMask
!                 | ButtonReleaseMask
!                 | ButtonPressMask),
!                GrabModeAsync, GrabModeAsync, None,
!                mw->menu.cursor_shape,
!                event->time);
!   pointer_grabbed = 1;
  #ifdef emacs
    if (x_had_errors_p (display))
      {
--- 2325,2350 ----
  #ifdef emacs
    count = x_catch_errors (display);
  #endif
!   if (XtGrabPointer ((Widget)mw, False,
!                      (PointerMotionMask
!                       | PointerMotionHintMask
!                       | ButtonReleaseMask
!                       | ButtonPressMask),
!                      GrabModeAsync, GrabModeAsync, None,
!                      mw->menu.cursor_shape,
!                      event->time) == Success)
!     {
!       if (! x_menu_grab_keyboard
!           || XtGrabKeyboard ((Widget)mw, False, GrabModeAsync,
!                              GrabModeAsync, event->time) == Success)
!         {
!           XtSetKeyboardFocus((Widget)mw, None);
!           pointer_grabbed = 1;
!         }
!       else
!         XtUngrabPointer ((Widget)mw, event->time);
!     }
! 
  #ifdef emacs
    if (x_had_errors_p (display))
      {



reply via email to

[Prev in Thread] Current Thread [Next in Thread]