diff options
author | Po Lu <luangruo@yahoo.com> | 2022-06-21 22:14:49 +0800 |
---|---|---|
committer | Po Lu <luangruo@yahoo.com> | 2022-06-21 22:14:49 +0800 |
commit | a4dcc8b9a94466c792be3743760a4a45cf6e1e61 (patch) | |
tree | 72f8dfc69c3fde77b9fc7461f65cbc6ba6027c44 /lwlib | |
parent | be35c92c90d455739a6ff9d4beefa2b35d044852 (diff) | |
download | emacs-a4dcc8b9a94466c792be3743760a4a45cf6e1e61.tar.gz |
Fix recent change to xlwmenu.c
* lwlib/xlwmenu.c (ungrab_all): Ungrab keyboard if it was
grabbed. This handles `lucid--menu-grab-keyboard' changing
while the menu is open.
(XlwMenuDestroy):
(pop_up_menu): Record if the keyboard was grabbed.
Diffstat (limited to 'lwlib')
-rw-r--r-- | lwlib/xlwmenu.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/lwlib/xlwmenu.c b/lwlib/xlwmenu.c index 3c7a4936163..eba85631bd8 100644 --- a/lwlib/xlwmenu.c +++ b/lwlib/xlwmenu.c @@ -48,6 +48,7 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */ #endif /* not emacs */ static int pointer_grabbed; +static int keyboard_grabbed; static XEvent menu_post_event; static char @@ -254,7 +255,8 @@ static void ungrab_all (Widget w, Time ungrabtime) { XtUngrabPointer (w, ungrabtime); - if (lucid__menu_grab_keyboard) + + if (keyboard_grabbed) XtUngrabKeyboard (w, ungrabtime); } @@ -2100,6 +2102,7 @@ XlwMenuDestroy (Widget w) if (pointer_grabbed) ungrab_all ((Widget)w, CurrentTime); pointer_grabbed = 0; + keyboard_grabbed = 0; if (!XtIsShell (XtParent (w))) submenu_destroyed = 1; @@ -2717,15 +2720,22 @@ pop_up_menu (XlwMenuWidget mw, XButtonPressedEvent *event) mw->menu.cursor_shape, event->time) == Success) { - if (!lucid__menu_grab_keyboard - || XtGrabKeyboard ((Widget)mw, False, GrabModeAsync, - GrabModeAsync, event->time) == Success) + if (true +#ifdef emacs + && lucid__menu_grab_keyboard +#endif + && XtGrabKeyboard ((Widget) mw, False, GrabModeAsync, + GrabModeAsync, event->time) == Success) { - XtSetKeyboardFocus((Widget)mw, None); + XtSetKeyboardFocus ((Widget) mw, None); pointer_grabbed = 1; + keyboard_grabbed = 1; } else - XtUngrabPointer ((Widget)mw, event->time); + { + XtUngrabPointer ((Widget) mw, event->time); + keyboard_grabbed = 0; + } } #ifdef emacs |