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
This commit is contained in:
parent
7cdf55871e
commit
e3a93db712
2 changed files with 13 additions and 22 deletions
|
@ -136,19 +136,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,
|
||||
|
@ -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);
|
||||
|
||||
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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue