[mutter] compositor: Delay meta_compositor_add_window until the first show
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] compositor: Delay meta_compositor_add_window until the first show
- Date: Sat, 15 Feb 2014 04:51:49 +0000 (UTC)
commit e3a93db712aea3c138b287786e4cd8d3ce0968d8
Author: Jasper St. Pierre <jstpierre mecheye net>
Date: Thu Feb 6 15:01:59 2014 -0500
compositor: Delay meta_compositor_add_window until the first show
In order for the compositor to properly determine whether a client
is an X11 client or not, we need to wait until XWayland calls
set_window_id to mark the surface as an XWayland client. To prevent
the compositor from getting tripped up over this, make sure that
the window has been fully initialized by the time we call
meta_compositor_add_window.
https://bugzilla.gnome.org/show_bug.cgi?id=720631
src/compositor/compositor.c | 26 ++++++++++----------------
src/core/window.c | 7 ++-----
2 files changed, 12 insertions(+), 21 deletions(-)
---
diff --git a/src/compositor/compositor.c b/src/compositor/compositor.c
index e967708..a9cd391 100644
--- a/src/compositor/compositor.c
+++ b/src/compositor/compositor.c
@@ -137,19 +137,6 @@ meta_compositor_destroy (MetaCompositor *compositor)
}
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,
MetaWindow *window)
@@ -737,13 +724,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);
- DEBUG_TRACE ("meta_compositor_add_window\n");
- meta_error_trap_push (display);
+ g_return_if_fail (info != NULL);
- add_win (window);
+ /* Window was already added previously, probably coming
+ * back from hiding */
+ if (window->compositor_private != NULL)
+ return;
+ meta_error_trap_push (display);
+ 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 92d4c39..3583f24 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -1438,9 +1438,6 @@ meta_window_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);
@@ -3054,8 +3051,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);
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]