Mercurial > emacs
diff src/gtkutil.c @ 105693:964ff7cbc8a6
Fix resize due to font change on a maximized/xmonad-controlled frame.
* xterm.h (x_wait_for_event): Declare it.
* xterm.c (pending_event_wait): New variable.
(handle_one_xevent): Set pending_event_wait.eventtype to 0 if we
see pending_event_wait.eventtype.
(handle_one_xevent): Don't change gravity when parent changes.
(x_new_font): Call change_frame_size with new rows/columns before we try
to resize the frame.
(x_wait_for_event): New function.
(x_set_window_size_1): Don't change gravity unless change_gravity is set.
Call XResizeWindow with FRAME_OUTER_WINDOW. If we are visible,
don't change frame size, instead wait for the ConfigureNotify.
(x_set_window_size): Call x_set_window_size_1 for USE_X_TOOLKIT also.
(x_wm_set_size_hint): Remove ifdefs for USE_X_TOOLKIT.
(x_initialize): Initialize pending_event_wait.
* xmenu.c (set_frame_menubar): Add internal border width to menu bar
size.
* widget.c (EmacsFrameSetValues): Add comment.
(EmacsFrameSetCharSize): Just call x_set_window_size.
* gtkutil.c (xg_frame_set_char_size): Flush events and call
x_wait_for_event.
(flush_and_sync): Removed again.
(xg_get_font_name): Suggest monospace if no previous font is known.
author | Jan Djärv <jan.h.d@swipnet.se> |
---|---|
date | Wed, 21 Oct 2009 18:29:46 +0000 |
parents | 68dd71358159 |
children | 5910e0380daf |
line wrap: on
line diff
--- a/src/gtkutil.c Wed Oct 21 14:04:00 2009 +0000 +++ b/src/gtkutil.c Wed Oct 21 18:29:46 2009 +0000 @@ -665,20 +665,6 @@ } } -static void -flush_and_sync (f) - FRAME_PTR f; -{ - gdk_window_process_all_updates (); - x_sync (f); - while (gtk_events_pending ()) - { - gtk_main_iteration (); - gdk_window_process_all_updates (); - x_sync (f); - } -} - /* Resize the outer window of frame F after chainging the height. COLUMNS/ROWS is the size the edit area shall have after the resize. */ @@ -715,6 +701,9 @@ pixelwidth, pixelheight); x_wm_set_size_hint (f, 0, 0); + SET_FRAME_GARBAGED (f); + cancel_mouse_face (f); + /* We can not call change_frame_size for a mapped frame, we can not set pixel width/height either. The window manager may override our resize request, XMonad does this all the time. @@ -723,14 +712,17 @@ For unmapped windows, we can set rows/cols. When the frame is mapped again we will (hopefully) get the correct size. */ if (f->async_visible) - flush_and_sync (f); + { + /* Must call this to flush out events */ + (void)gtk_events_pending (); + gdk_flush (); + x_wait_for_event (f, ConfigureNotify); + } else { + change_frame_size (f, rows, cols, 0, 1, 0); FRAME_PIXEL_WIDTH (f) = pixelwidth; FRAME_PIXEL_HEIGHT (f) = pixelheight; - change_frame_size (f, rows, cols, 0, 1, 0); - SET_FRAME_GARBAGED (f); - cancel_mouse_face (f); } } @@ -1640,9 +1632,10 @@ #endif /* HAVE_GTK_AND_PTHREAD */ w = gtk_font_selection_dialog_new ("Pick a font"); - if (default_name) - gtk_font_selection_dialog_set_font_name (GTK_FONT_SELECTION_DIALOG (w), - default_name); + if (!default_name) + default_name = "Monospace 10"; + gtk_font_selection_dialog_set_font_name (GTK_FONT_SELECTION_DIALOG (w), + default_name); xg_set_screen (w, f); gtk_widget_set_name (w, "emacs-fontdialog");