summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOwen W. Taylor <otaylor@fishsoup.net>2013-09-25 13:13:19 -0400
committerOwen W. Taylor <otaylor@fishsoup.net>2013-09-25 13:13:19 -0400
commit7b84590c71f2bcb72ab595eee5899e0a24c697f0 (patch)
tree2a3e88f7f0b64e48ca40ef4d8b8d8cc6e5687e7e
parent2601b30c7e90d00e7ac9221e8206695483e295e8 (diff)
downloadmutter-7b84590c71f2bcb72ab595eee5899e0a24c697f0.tar.gz
MetaWindowActor: fix updates with multiple size changes in one frame
We must set size_changed even if we are frozen, as every window size change makes the X server drop the pixmap, and we might lose the information at the next thaw() if the window changes size twice in one frame (so we would keep drawing with the old pixmap until something else causes another resize) Fix done together with Giovanni Campagna <gcampagn@redhat.com>
-rw-r--r--src/compositor/meta-window-actor.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/src/compositor/meta-window-actor.c b/src/compositor/meta-window-actor.c
index 63c12c00a..7dc8bf099 100644
--- a/src/compositor/meta-window-actor.c
+++ b/src/compositor/meta-window-actor.c
@@ -1430,6 +1430,16 @@ meta_window_actor_sync_actor_geometry (MetaWindowActor *self,
MetaWindowActorPrivate *priv = self->priv;
MetaRectangle window_rect;
+ meta_window_get_input_rect (priv->window, &window_rect);
+
+ if (priv->last_width != window_rect.width ||
+ priv->last_height != window_rect.height)
+ {
+ priv->size_changed = TRUE;
+ priv->last_width = window_rect.width;
+ priv->last_height = window_rect.height;
+ }
+
/* Normally we want freezing a window to also freeze its position; this allows
* windows to atomically move and resize together, either under app control,
* or because the user is resizing from the left/top. But on initial placement
@@ -1440,17 +1450,10 @@ meta_window_actor_sync_actor_geometry (MetaWindowActor *self,
if (is_frozen (self) && !did_placement)
return;
- meta_window_get_input_rect (priv->window, &window_rect);
-
- if (priv->last_width != window_rect.width ||
- priv->last_height != window_rect.height)
+ if (priv->size_changed)
{
- priv->size_changed = TRUE;
meta_window_actor_queue_create_pixmap (self);
meta_window_actor_update_shape (self);
-
- priv->last_width = window_rect.width;
- priv->last_height = window_rect.height;
}
if (meta_window_actor_effect_in_progress (self))