diff --git a/src/compositor/compositor.c b/src/compositor/compositor.c index 0fb8df9e3..6ed2df400 100644 --- a/src/compositor/compositor.c +++ b/src/compositor/compositor.c @@ -140,19 +140,6 @@ meta_compositor_destroy (MetaCompositor *compositor) clutter_threads_remove_repaint_func (compositor->repaint_func_id); } -static void -add_win (MetaWindow *window) -{ - MetaScreen *screen = meta_window_get_screen (window); - MetaCompScreen *info = meta_screen_get_compositor_data (screen); - - g_return_if_fail (info != NULL); - - meta_window_actor_new (window); - - sync_actor_stacking (info); -} - static void process_damage (MetaCompositor *compositor, XDamageNotifyEvent *event, @@ -835,13 +822,20 @@ meta_compositor_add_window (MetaCompositor *compositor, { MetaScreen *screen = meta_window_get_screen (window); MetaDisplay *display = meta_screen_get_display (screen); + MetaCompScreen *info = meta_screen_get_compositor_data (screen); + + g_return_if_fail (info != NULL); + + /* Window was already added previously, probably coming + * back from hiding */ + if (window->compositor_private != NULL) + return; - DEBUG_TRACE ("meta_compositor_add_window\n"); meta_error_trap_push (display); - - add_win (window); - + meta_window_actor_new (window); meta_error_trap_pop (display); + + sync_actor_stacking (info); } void diff --git a/src/core/window.c b/src/core/window.c index e08704d92..8c0f66e03 100644 --- a/src/core/window.c +++ b/src/core/window.c @@ -1204,9 +1204,6 @@ _meta_window_shared_new (MetaDisplay *display, set_net_wm_state (window); } - if (screen->display->compositor) - meta_compositor_add_window (screen->display->compositor, window); - /* Sync stack changes */ meta_stack_thaw (window->screen->stack); @@ -2757,8 +2754,8 @@ meta_window_show (MetaWindow *window) break; } - meta_compositor_show_window (window->display->compositor, - window, effect); + meta_compositor_add_window (window->display->compositor, window); + meta_compositor_show_window (window->display->compositor, window, effect); } }