Fix unrelated help text tooltips if a popup is shown during the delay
* doc/lispref/frames.texi (Pop-Up Menus): Document new hook. * etc/NEWS: Announce `x-pre-popup-menu-hook'. * lisp/tooltip.el (tooltip-mode): Make sure `tooltip-hide' is run before any popup menu is displayed to prevent unrelated help text from obscuring the popup menu if it pops up during the tooltip delay. * src/menu.c (x_popup_menu_1): Run said hook right before the popup menu is displayed. (syms_of_menu): New hook `x-pre-popup-menu-hook'.
This commit is contained in:
parent
0a5ece3da1
commit
e380fb509b
4 changed files with 31 additions and 3 deletions
|
@ -3744,6 +3744,13 @@ still use a menu keymap to implement it. To make the contents vary, add
|
|||
a hook function to @code{menu-bar-update-hook} to update the contents of
|
||||
the menu keymap as necessary.
|
||||
|
||||
@defvar x-pre-popup-menu-hook
|
||||
A normal hook run immediately before a pop-up menu is displayed,
|
||||
either directly by calling @code{x-popup-menu}, or through a menu
|
||||
keymap. It won't be called if @code{x-popup-menu} returns for some
|
||||
other reason without displaying a pop-up menu.
|
||||
@end defvar
|
||||
|
||||
@node Dialog Boxes
|
||||
@section Dialog Boxes
|
||||
@cindex dialog boxes
|
||||
|
|
5
etc/NEWS
5
etc/NEWS
|
@ -1085,6 +1085,11 @@ This event is sent when a user performs a pinch gesture on a touchpad,
|
|||
which is comprised of placing two fingers on the touchpad and moving
|
||||
them towards or away from each other.
|
||||
|
||||
+++
|
||||
** New hook 'x-pre-popup-menu-hook'.
|
||||
This hook is run before 'x-popup-menu' is about to display a
|
||||
deck-of-cards menu on screen.
|
||||
|
||||
** Text security and suspiciousness
|
||||
|
||||
+++
|
||||
|
|
|
@ -58,9 +58,11 @@ echo area, instead of making a pop-up window."
|
|||
(if (and tooltip-mode (fboundp 'x-show-tip))
|
||||
(progn
|
||||
(add-hook 'pre-command-hook 'tooltip-hide)
|
||||
(add-hook 'tooltip-functions 'tooltip-help-tips))
|
||||
(add-hook 'tooltip-functions 'tooltip-help-tips)
|
||||
(add-hook 'x-pre-popup-menu-hook 'tooltip-hide))
|
||||
(unless (and (boundp 'gud-tooltip-mode) gud-tooltip-mode)
|
||||
(remove-hook 'pre-command-hook 'tooltip-hide))
|
||||
(remove-hook 'pre-command-hook 'tooltip-hide)
|
||||
(remove-hook 'x-pre-popup-menu-hook 'tooltip-hide))
|
||||
(remove-hook 'tooltip-functions 'tooltip-help-tips))
|
||||
(setq show-help-function
|
||||
(if tooltip-mode 'tooltip-show-help 'tooltip-show-help-non-mode)))
|
||||
|
|
16
src/menu.c
16
src/menu.c
|
@ -1395,6 +1395,8 @@ x_popup_menu_1 (Lisp_Object position, Lisp_Object menu)
|
|||
record_unwind_protect_void (discard_menu_items);
|
||||
#endif
|
||||
|
||||
run_hook (Qx_pre_popup_menu_hook);
|
||||
|
||||
/* Display them in a menu, but not if F is the initial frame that
|
||||
doesn't have its hooks set (e.g., in a batch session), because
|
||||
such a frame cannot display menus. */
|
||||
|
@ -1408,7 +1410,11 @@ x_popup_menu_1 (Lisp_Object position, Lisp_Object menu)
|
|||
discard_menu_items ();
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_NTGUI /* FIXME: Is it really w32-specific? --Stef */
|
||||
#ifdef HAVE_NTGUI /* W32 specific because other terminals clear
|
||||
the grab inside their `menu_show_hook's if
|
||||
it's actually required (i.e. there isn't a
|
||||
way to query the buttons currently held down
|
||||
after XMenuActivate). */
|
||||
if (FRAME_W32_P (f))
|
||||
FRAME_DISPLAY_INFO (f)->grabbed = 0;
|
||||
#endif
|
||||
|
@ -1602,6 +1608,14 @@ syms_of_menu (void)
|
|||
staticpro (&menu_items);
|
||||
|
||||
DEFSYM (Qhide, "hide");
|
||||
DEFSYM (Qx_pre_popup_menu_hook, "x-pre-popup-menu-hook");
|
||||
|
||||
DEFVAR_LISP ("x-pre-popup-menu-hook", Vx_pre_popup_menu_hook,
|
||||
doc: /* Hook run before `x-popup-menu' displays a popup menu.
|
||||
It is only run before the menu is really going to be displayed. It
|
||||
won't be run if `x-popup-menu' fails or returns for some other reason
|
||||
(such as the keymap is invalid). */);
|
||||
Vx_pre_popup_menu_hook = Qnil;
|
||||
|
||||
defsubr (&Sx_popup_menu);
|
||||
defsubr (&Sx_popup_dialog);
|
||||
|
|
Loading…
Add table
Reference in a new issue