diff --git a/src/compositor/compositor.c b/src/compositor/compositor.c index 00779e622..888810fdc 100644 --- a/src/compositor/compositor.c +++ b/src/compositor/compositor.c @@ -755,7 +755,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; @@ -763,7 +763,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 441f05b2e..76aaf3360 100644 --- a/src/compositor/meta-window-actor-private.h +++ b/src/compositor/meta-window-actor-private.h @@ -35,13 +35,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 9df25d6cc..36430cae9 100644 --- a/src/compositor/meta-window-actor.c +++ b/src/compositor/meta-window-actor.c @@ -1299,7 +1299,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); @@ -1307,21 +1308,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 (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