Commit 7b507248 authored by Jan Djärv's avatar Jan Djärv

* 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.
parent c5c194aa
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.
......
......@@ -636,14 +636,24 @@ xg_frame_resized (f, pixelwidth, pixelheight)
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 @@ xg_frame_set_char_size (f, cols, rows)
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).
......
......@@ -6206,6 +6206,9 @@ handle_one_xevent (dpyinfo, eventp, finish, hold_quit)
/* Check if fullscreen was specified before we where mapped. */
x_check_fullscreen (f);
#ifdef USE_GTK
xg_frame_resized (f, -1, -1);
#endif
}
goto OTHER;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment