Make Lucid menus work from the keyboard also when uninstalled

* lwlib/xlwmenu.c (ungrab_all, pop_up_menu): Use it.

* src/keyboard.c (syms_of_keyboard): New variable (bug#46990).
This commit is contained in:
Lars Ingebrigtsen 2022-06-21 12:15:11 +02:00
parent 8cf3c3203b
commit 649b43d20c
2 changed files with 12 additions and 7 deletions

View file

@ -245,11 +245,6 @@ WidgetClass xlwMenuWidgetClass = (WidgetClass) &xlwMenuClassRec;
int submenu_destroyed;
/* For debug, if installation-directory is non-nil this is not an installed
Emacs. In that case we do not grab the keyboard to make it easier to
debug. */
#define GRAB_KEYBOARD (EQ (Vinstallation_directory, Qnil))
static int next_release_must_exit;
/* Utilities */
@ -259,7 +254,8 @@ static void
ungrab_all (Widget w, Time ungrabtime)
{
XtUngrabPointer (w, ungrabtime);
if (GRAB_KEYBOARD) XtUngrabKeyboard (w, ungrabtime);
if (!lucid__menu_grab_keyboard)
XtUngrabKeyboard (w, ungrabtime);
}
/* Like abort, but remove grabs from widget W before. */
@ -2721,7 +2717,7 @@ pop_up_menu (XlwMenuWidget mw, XButtonPressedEvent *event)
mw->menu.cursor_shape,
event->time) == Success)
{
if (! GRAB_KEYBOARD
if (!lucid__menu_grab_keyboard
|| XtGrabKeyboard ((Widget)mw, False, GrabModeAsync,
GrabModeAsync, event->time) == Success)
{

View file

@ -12648,6 +12648,15 @@ See also `pre-command-hook'. */);
doc: /* Non-nil means menu bar, specified Lucid style, needs to be recomputed. */);
Vlucid_menu_bar_dirty_flag = Qnil;
#ifdef USE_LUCID
DEFVAR_BOOL ("lucid--menu-grab-keyboard",
lucid__menu_grab_keyboard,
doc: /* If non-nil, grab keyboard during menu operations.
This is only relevant when using the Lucid X toolkit. It can be
convenient to disable this for debugging purposes. */);
lucid__menu_grab_keyboard = true;
#endif
DEFVAR_LISP ("menu-bar-final-items", Vmenu_bar_final_items,
doc: /* List of menu bar items to move to the end of the menu bar.
The elements of the list are event types that may have menu bar