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:
parent
fbfab93c63
commit
790bfcad9a
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user