From 5da9fdfa169d86a46377ef4af91a612abbf39e37 Mon Sep 17 00:00:00 2001 From: YAMAMOTO Mitsuharu Date: Wed, 18 Mar 2009 08:37:56 +0000 Subject: [PATCH] (xdialog_show): Move Fredisplay call ... (Fx_popup_dialog): ... here. --- src/ChangeLog | 5 +++++ src/xmenu.c | 19 +++++++++++-------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 0c2b34a4ee6..e80dd578c13 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2009-03-18 YAMAMOTO Mitsuharu + + * xmenu.c (xdialog_show): Move Fredisplay call ... + (Fx_popup_dialog): ... here. + 2009-03-18 Stefan Monnier * dired.c (file_name_completion): Disable the first optimization just diff --git a/src/xmenu.c b/src/xmenu.c index 6767c1b38f8..c6d7b0d9585 100644 --- a/src/xmenu.c +++ b/src/xmenu.c @@ -604,6 +604,17 @@ for instance using the window manager, then this produces a quit and if (! FRAME_X_P (f) && ! FRAME_MSDOS_P (f)) error ("Can not put X dialog on this terminal"); + /* Force a redisplay before showing the dialog. If a frame is created + just before showing the dialog, its contents may not have been fully + drawn, as this depends on timing of events from the X server. Redisplay + is not done when a dialog is shown. If redisplay could be done in the + X event loop (i.e. the X event loop does not run in a signal handler) + this would not be needed. + + Do this before creating the widget value that points to Lisp + string contents, because Fredisplay may GC and relocate them. */ + Fredisplay (Qt); + #if ! defined (USE_X_TOOLKIT) && ! defined (USE_GTK) /* Display a menu with these alternatives in the middle of frame F. */ @@ -2448,14 +2459,6 @@ xdialog_show (f, keymaps, title, header, error_name) /* No selection has been chosen yet. */ menu_item_selection = 0; - /* Force a redisplay before showing the dialog. If a frame is created - just before showing the dialog, its contents may not have been fully - drawn, as this depends on timing of events from the X server. Redisplay - is not done when a dialog is shown. If redisplay could be done in the - X event loop (i.e. the X event loop does not run in a signal handler) - this would not be needed. */ - Fredisplay (Qt); - /* Actually create and show the dialog. */ create_and_show_dialog (f, first_wv); -- 2.39.5