From: Yuuki Harano Date: Sun, 5 Apr 2020 10:23:10 +0000 (+0900) Subject: use pgtk_menu_set_in_use. X-Git-Tag: emacs-29.0.90~3811 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=de7b0daf2b70648c968356036110cbe8c0c3188c;p=emacs.git use pgtk_menu_set_in_use. * ../src/pgtkfns.c: (Fx_file_dialog, clean_up_dialog): * src/pgtkmenu.c (pgtk_menu_wait_for_event): --- diff --git a/src/pgtkfns.c b/src/pgtkfns.c index 69a7430b8d3..b7d34d56803 100644 --- a/src/pgtkfns.c +++ b/src/pgtkfns.c @@ -2916,6 +2916,12 @@ visible. */) return Qnil; } +static void +clean_up_dialog (void) +{ + pgtk_menu_set_in_use (false); +} + DEFUN ("x-file-dialog", Fx_file_dialog, Sx_file_dialog, 2, 5, 0, doc: /* Read file name, prompting with PROMPT in directory DIR. Use a file selection dialog. Select DEFAULT-FILENAME in the dialog's file @@ -2940,14 +2946,17 @@ value of DIR as in previous invocations; this is standard MS Windows behavior. check_window_system (f); + if (popup_activated ()) + error ("Trying to use a menu from within a menu-entry"); + else + pgtk_menu_set_in_use (true); + CHECK_STRING (prompt); CHECK_STRING (dir); /* Prevent redisplay. */ specbind (Qinhibit_redisplay, Qt); -#if 0 record_unwind_protect_void (clean_up_dialog); -#endif block_input (); diff --git a/src/pgtkmenu.c b/src/pgtkmenu.c index b9462208d66..6f4195d6d8a 100644 --- a/src/pgtkmenu.c +++ b/src/pgtkmenu.c @@ -69,7 +69,7 @@ pgtk_menu_set_in_use (bool in_use) /* Wait for an X event to arrive or for a timer to expire. */ -void +static void pgtk_menu_wait_for_event (void *data) { struct timespec next_time = timer_check (), *ntp; diff --git a/src/pgtkterm.h b/src/pgtkterm.h index 73e04b7da67..e7403184393 100644 --- a/src/pgtkterm.h +++ b/src/pgtkterm.h @@ -610,6 +610,9 @@ extern struct pgtk_display_info *check_pgtk_display_info (Lisp_Object object); extern void pgtk_default_font_parameter (struct frame *f, Lisp_Object parms); +extern void pgtk_menu_set_in_use (bool in_use); + + extern void pgtk_enqueue_string(struct frame *f, gchar *str); extern void pgtk_enqueue_preedit(struct frame *f, Lisp_Object image_data); extern void pgtk_im_focus_in(struct frame *f);