Mercurial > emacs
changeset 103690:6cf0c4de552b
* gtkutil.c (xg_frame_set_char_size): Do set width/height if the
frame isn't visible.
(xg_frame_resized): If width/height is -1, get size of window
from X server.
* xterm.c (handle_one_xevent): Call xg_frame_resized for USE_GTK
for MapNotify.
author | Jan Djärv <jan.h.d@swipnet.se> |
---|---|
date | Thu, 02 Jul 2009 12:27:23 +0000 |
parents | 3666f62113ed |
children | 1cd332c1ef9a |
files | src/ChangeLog src/gtkutil.c src/xterm.c |
diffstat | 3 files changed, 46 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ChangeLog Thu Jul 02 10:38:05 2009 +0000 +++ b/src/ChangeLog Thu Jul 02 12:27:23 2009 +0000 @@ -1,5 +1,13 @@ 2009-07-02 Jan Djärv <jan.h.d@swipnet.se> + * gtkutil.c (xg_frame_set_char_size): Do set width/height if the + frame isn't visible. + (xg_frame_resized): If width/height is -1, get size of window + from X server. + + * xterm.c (handle_one_xevent): Call xg_frame_resized for USE_GTK + for MapNotify. + * gtkutil.c (xg_frame_set_char_size): Do not set pixel width/height here or call change_frame_size. Just call flush_and_sync. (flush_and_sync): Reintroduced.
--- a/src/gtkutil.c Thu Jul 02 10:38:05 2009 +0000 +++ b/src/gtkutil.c Thu Jul 02 12:27:23 2009 +0000 @@ -636,14 +636,24 @@ FRAME_PTR f; int pixelwidth, pixelheight; { - int rows = FRAME_PIXEL_HEIGHT_TO_TEXT_LINES (f, pixelheight); - int columns = FRAME_PIXEL_WIDTH_TO_TEXT_COLS (f, pixelwidth); - - if (FRAME_GTK_WIDGET (f) - && (columns != FRAME_COLS (f) - || rows != FRAME_LINES (f) - || pixelwidth != FRAME_PIXEL_WIDTH (f) - || pixelheight != FRAME_PIXEL_HEIGHT (f))) + int rows, columns; + + if (pixelwidth == -1 && pixelheight == -1) + { + if (FRAME_GTK_WIDGET (f) && GTK_WIDGET_MAPPED (FRAME_GTK_WIDGET (f))) + gdk_window_get_geometry(FRAME_GTK_WIDGET (f)->window, 0, 0, + &pixelwidth, &pixelheight, 0); + else return; + } + + + rows = FRAME_PIXEL_HEIGHT_TO_TEXT_LINES (f, pixelheight); + columns = FRAME_PIXEL_WIDTH_TO_TEXT_COLS (f, pixelwidth); + + if (columns != FRAME_COLS (f) + || rows != FRAME_LINES (f) + || pixelwidth != FRAME_PIXEL_WIDTH (f) + || pixelheight != FRAME_PIXEL_HEIGHT (f)) { FRAME_PIXEL_WIDTH (f) = pixelwidth; FRAME_PIXEL_HEIGHT (f) = pixelheight; @@ -704,14 +714,23 @@ pixelwidth, pixelheight); x_wm_set_size_hint (f, 0, 0); - SET_FRAME_GARBAGED (f); - - /* We can not call change_frame_size here, we can not set pixel - width/height either. The window manager may override our resize - request, XMonad does this all the time. The best we can do - is try to sync, so lisp code sees the updated size as fast as - possible. */ - flush_and_sync (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. + The best we can do is try to sync, so lisp code sees the updated + size as fast as possible. + 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); + else + { + 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); + } } /* Handle height changes (i.e. add/remove menu/toolbar).