Commit ae73e9d8 authored by Carlos Garnacho's avatar Carlos Garnacho

x11: Double check whether the user time window was previously used

Some applications like Wine may choose to juggle the same user time
window across different toplevels, in that case we receive warnings
when trying to register the window a second time, leading to wrong
accounting.

If the window was already used as the user time window for another
toplevel, unset it from the previous MetaWindow owner, and unregister
so the registration with the new MetaWindow is successful.

https://bugzilla.gnome.org/show_bug.cgi?id=774330
parent af920851
......@@ -460,6 +460,8 @@ reload_net_wm_user_time_window (MetaWindow *window,
{
if (value->type != META_PROP_VALUE_INVALID)
{
MetaWindow *prev_owner;
/* Unregister old NET_WM_USER_TIME_WINDOW */
if (window->user_time_window != None)
{
......@@ -472,6 +474,15 @@ reload_net_wm_user_time_window (MetaWindow *window,
NoEventMask);
}
/* Ensure the new user time window is not used on another MetaWindow,
* and unset its user time window if that is the case.
*/
prev_owner = meta_display_lookup_x_window (window->display, value->v.xwindow);
if (prev_owner && prev_owner->user_time_window == value->v.xwindow)
{
meta_display_unregister_x_window (window->display, value->v.xwindow);
prev_owner->user_time_window = None;
}
/* Obtain the new NET_WM_USER_TIME_WINDOW and register it */
window->user_time_window = value->v.xwindow;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment