diff --git a/src/compositor/compositor.c b/src/compositor/compositor.c index 73378903d..3936e1452 100644 --- a/src/compositor/compositor.c +++ b/src/compositor/compositor.c @@ -873,7 +873,7 @@ set_unredirected_window (MetaCompScreen *info, if (info->unredirected_window != NULL) { MetaWindowActor *window_actor = META_WINDOW_ACTOR (meta_window_get_compositor_private (info->unredirected_window)); - meta_window_actor_set_redirected (window_actor, TRUE); + meta_window_actor_set_unredirected (window_actor, FALSE); } info->unredirected_window = window; @@ -881,7 +881,7 @@ set_unredirected_window (MetaCompScreen *info, if (info->unredirected_window != NULL) { MetaWindowActor *window_actor = META_WINDOW_ACTOR (meta_window_get_compositor_private (info->unredirected_window)); - meta_window_actor_set_redirected (window_actor, FALSE); + meta_window_actor_set_unredirected (window_actor, TRUE); } meta_shape_cow_for_window (info->screen, info->unredirected_window); diff --git a/src/compositor/meta-window-actor-private.h b/src/compositor/meta-window-actor-private.h index 82326d29b..0207a88f4 100644 --- a/src/compositor/meta-window-actor-private.h +++ b/src/compositor/meta-window-actor-private.h @@ -39,13 +39,13 @@ void meta_window_actor_frame_complete (MetaWindowActor *self, void meta_window_actor_invalidate_shadow (MetaWindowActor *self); -void meta_window_actor_set_redirected (MetaWindowActor *self, gboolean state); - -gboolean meta_window_actor_should_unredirect (MetaWindowActor *self); - void meta_window_actor_get_shape_bounds (MetaWindowActor *self, cairo_rectangle_int_t *bounds); +gboolean meta_window_actor_should_unredirect (MetaWindowActor *self); +void meta_window_actor_set_unredirected (MetaWindowActor *self, + gboolean unredirected); + gboolean meta_window_actor_effect_in_progress (MetaWindowActor *self); void meta_window_actor_sync_actor_geometry (MetaWindowActor *self, gboolean did_placement); diff --git a/src/compositor/meta-window-actor.c b/src/compositor/meta-window-actor.c index 10275c37d..9989f863a 100644 --- a/src/compositor/meta-window-actor.c +++ b/src/compositor/meta-window-actor.c @@ -1352,7 +1352,8 @@ meta_window_actor_should_unredirect (MetaWindowActor *self) } void -meta_window_actor_set_redirected (MetaWindowActor *self, gboolean state) +meta_window_actor_set_unredirected (MetaWindowActor *self, + gboolean unredirected) { MetaWindow *metaWindow = meta_window_actor_get_meta_window (self); MetaDisplay *display = meta_window_get_display (metaWindow); @@ -1360,21 +1361,20 @@ meta_window_actor_set_redirected (MetaWindowActor *self, gboolean state) Display *xdisplay = meta_display_get_xdisplay (display); Window xwin = meta_window_get_toplevel_xwindow (metaWindow); - if (state) + meta_error_trap_push (display); + + if (unredirected) { - meta_error_trap_push (display); - XCompositeRedirectWindow (xdisplay, xwin, CompositeRedirectManual); - meta_error_trap_pop (display); - meta_window_actor_detach_x11_pixmap (self); - self->priv->unredirected = FALSE; + XCompositeUnredirectWindow (xdisplay, xwin, CompositeRedirectManual); } else { - meta_error_trap_push (display); - XCompositeUnredirectWindow (xdisplay, xwin, CompositeRedirectManual); - meta_error_trap_pop (display); - self->priv->unredirected = TRUE; + XCompositeRedirectWindow (xdisplay, xwin, CompositeRedirectManual); + meta_window_actor_detach_x11_pixmap (self); } + + self->priv->unredirected = unredirected; + meta_error_trap_pop (display); } void