[Top][All Lists]
[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))
{