MetaWindow: always resize the frame first when we have synchronization

Resizing the frame triggers creation of a new backing pixmap for the
window, so we should do that first before we resize the client window
and mess up the contents of the old backing pixmap.

https://bugzilla.gnome.org/show_bug.cgi?id=685463
This commit is contained in:
Owen W. Taylor 2012-10-03 23:10:56 -04:00
parent fbfab93c63
commit 790bfcad9a

View File

@ -5059,12 +5059,28 @@ meta_window_move_resize_internal (MetaWindow *window,
* efficiently as possible * efficiently as possible
*/ */
/* configure frame first if we grow more than we shrink /* Normally, we configure the frame first depending on whether
* we grow the frame more than we shrink. The idea is to avoid
* messing up the window contents by having a temporary situation
* where the frame is smaller than the window. However, if we're
* cooperating with the client to create an atomic frame upate,
* and the window is redirected, then we should always update
* the frame first, since updating the frame will force a new
* backing pixmap to be allocated, and the old backing pixmap
* will be left undisturbed for us to paint to the screen until
* the client finishes redrawing.
*/ */
size_dx = w - window->rect.width; if (window->extended_sync_request_counter)
size_dy = h - window->rect.height; {
configure_frame_first = TRUE;
}
else
{
size_dx = w - window->rect.width;
size_dy = h - window->rect.height;
configure_frame_first = (size_dx + size_dy >= 0); configure_frame_first = size_dx + size_dy >= 0;
}
if (use_static_gravity) if (use_static_gravity)
meta_window_set_gravity (window, StaticGravity); meta_window_set_gravity (window, StaticGravity);