[mutter] window-actor: Keep in compositor's window list until destroyed



commit 98fa34358817cbee70b0d714495bec9d6ccae3e9
Author: Florian Müllner <fmuellner gnome org>
Date:   Wed Sep 10 22:24:26 2014 +0200

    window-actor: Keep in compositor's window list until destroyed
    
    When a window is destroyed, the corresponding actor may still be
    kept around for the destroy effect. But as the actor is removed
    from the compositor's stack list immediately, the compositor will
    always stack it above "valid" window actors - this is not what we
    want, so only update the compositor's list when the actor is
    actually destroyed.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=735927

 src/compositor/compositor.c        |    4 ++--
 src/compositor/meta-window-actor.c |    7 -------
 2 files changed, 2 insertions(+), 9 deletions(-)
---
diff --git a/src/compositor/compositor.c b/src/compositor/compositor.c
index 586bdc1..47bea31 100644
--- a/src/compositor/compositor.c
+++ b/src/compositor/compositor.c
@@ -920,7 +920,7 @@ meta_compositor_sync_stack (MetaCompositor  *compositor,
           old_actor = old_stack->data;
           old_window = meta_window_actor_get_meta_window (old_actor);
 
-          if (old_window->hidden &&
+          if ((old_window->hidden || old_window->unmanaging) &&
               !meta_window_actor_effect_in_progress (old_actor))
             {
               old_stack = g_list_delete_link (old_stack, old_stack);
@@ -954,7 +954,7 @@ meta_compositor_sync_stack (MetaCompositor  *compositor,
        * filtered out non-animating hidden windows above.
        */
       if (old_actor &&
-          (!stack_actor || old_window->hidden))
+          (!stack_actor || old_window->hidden || old_window->unmanaging))
         {
           actor = old_actor;
           window = old_window;
diff --git a/src/compositor/meta-window-actor.c b/src/compositor/meta-window-actor.c
index 8043157..7b9d3a5 100644
--- a/src/compositor/meta-window-actor.c
+++ b/src/compositor/meta-window-actor.c
@@ -1171,7 +1171,6 @@ meta_window_actor_destroy (MetaWindowActor *self)
 {
   MetaWindowActorPrivate *priv = self->priv;
   MetaWindow *window = priv->window;
-  MetaCompositor *compositor = priv->compositor;
   MetaWindowType window_type = meta_window_get_window_type (window);
 
   meta_window_set_compositor_private (window, NULL);
@@ -1182,12 +1181,6 @@ meta_window_actor_destroy (MetaWindowActor *self)
       priv->send_frame_messages_timer = 0;
     }
 
-  /*
-   * We remove the window from internal lookup hashes and thus any other
-   * unmap events etc fail
-   */
-  compositor->windows = g_list_remove (compositor->windows, (gconstpointer) self);
-
   if (window_type == META_WINDOW_DROPDOWN_MENU ||
       window_type == META_WINDOW_POPUP_MENU ||
       window_type == META_WINDOW_TOOLTIP ||


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]