summaryrefslogtreecommitdiff
path: root/lwlib
diff options
context:
space:
mode:
authorPo Lu <luangruo@yahoo.com>2022-06-21 22:14:49 +0800
committerPo Lu <luangruo@yahoo.com>2022-06-21 22:14:49 +0800
commita4dcc8b9a94466c792be3743760a4a45cf6e1e61 (patch)
tree72f8dfc69c3fde77b9fc7461f65cbc6ba6027c44 /lwlib
parentbe35c92c90d455739a6ff9d4beefa2b35d044852 (diff)
downloademacs-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.c22
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