GdkWindowX11: Prevent non renderered window to be display by the compositor

When mapping a window for the first time, make sure the compositor
won't display it until we're done painting.

https://bugzilla.gnome.org/show_bug.cgi?id=702196
This commit is contained in:
Lionel Landwerlin 2013-06-13 16:36:56 +01:00
parent f75aa5fdb4
commit e62a6dfdbc

View File

@ -325,7 +325,8 @@ gdk_x11_window_predict_presentation_time (GdkWindow *window)
} }
static void static void
gdk_x11_window_begin_frame (GdkWindow *window) gdk_x11_window_begin_frame (GdkWindow *window,
gboolean force_frame)
{ {
GdkWindowImplX11 *impl; GdkWindowImplX11 *impl;
@ -350,6 +351,13 @@ gdk_x11_window_begin_frame (GdkWindow *window)
window_pre_damage (window); window_pre_damage (window);
} }
else if (force_frame)
{
/* When mapping the window, we really want to freeze the
rendering of the window by the compositor until we've
actually painted something into the window's buffer. */
window_pre_damage (window);
}
else else
{ {
hook_surface_changed (window); hook_surface_changed (window);
@ -945,7 +953,7 @@ setup_toplevel_window (GdkWindow *window,
ensure_sync_counter (window); ensure_sync_counter (window);
/* Start off in a frozen state - we'll finish this when we first paint */ /* Start off in a frozen state - we'll finish this when we first paint */
gdk_x11_window_begin_frame (window); gdk_x11_window_begin_frame (window, TRUE);
} }
static void static void
@ -953,7 +961,7 @@ on_frame_clock_before_paint (GdkFrameClock *clock,
GdkWindow *window) GdkWindow *window)
{ {
gdk_x11_window_predict_presentation_time (window); gdk_x11_window_predict_presentation_time (window);
gdk_x11_window_begin_frame (window); gdk_x11_window_begin_frame (window, FALSE);
} }
static void static void