From 9cacee68c83f0360acd3ed15381ab7ee7aeeb05c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Gerd=20M=C3=B6llmann?= <gerd,moellmann@gmail.com> Date: Mon, 10 Feb 2025 07:55:43 +0100 Subject: [PATCH] Add x-popup-menu-function * src/menu.c (x_popup_menu_1): If non-nil call x-popup-menu-function. (syms_of_menu): DEFSYM x-popup-menu-function, DEFVAR_LISP it. (cherry picked from commit 17bf6b9efe5c40dfa92fa5ec64a99162304395cd) --- src/menu.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/menu.c b/src/menu.c index 0293328c832..a37cb359623 100644 --- a/src/menu.c +++ b/src/menu.c @@ -1111,6 +1111,12 @@ into menu items. */) Lisp_Object x_popup_menu_1 (Lisp_Object position, Lisp_Object menu) { + if (!NILP (Vx_popup_menu_function)) + return run_hook_with_args (3, ((Lisp_Object[]) { + Qx_popup_menu_function, position, + menu}), + Ffuncall); + Lisp_Object keymap, tem, tem2 = Qnil; int xpos = 0, ypos = 0; Lisp_Object title; @@ -1614,6 +1620,7 @@ syms_of_menu (void) DEFSYM (Qhide, "hide"); DEFSYM (Qx_pre_popup_menu_hook, "x-pre-popup-menu-hook"); + DEFSYM (Qx_popup_menu_function, "x-popup-menu-function"); DEFVAR_LISP ("x-pre-popup-menu-hook", Vx_pre_popup_menu_hook, doc: /* Hook run before `x-popup-menu' displays a popup menu. @@ -1622,6 +1629,11 @@ 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; + DEFVAR_LISP ("x-popup-menu-function", Vx_popup_menu_function, + doc: /* Function to call to pop up a menu. +The function is called like `x-popup-menu'. */); + Vx_popup_menu_function = Qnil; + defsubr (&Sx_popup_menu); defsubr (&Sx_popup_dialog); defsubr (&Smenu_bar_menu_at_x_y); -- 2.39.5