mirror of
https://github.com/brl/mutter.git
synced 2024-11-25 09:30:45 -05:00
Don't do stacking for override-redirect windows
Don't add override-redirect windows to MetaStack; we shouldn't be restacking them. Since we *aren't* stacking the override-redirect windows, we need to be careful that to ignore them when looking for the top managed window. http://bugzilla.gnome.org/show_bug.cgi?id=585984
This commit is contained in:
parent
7309b6cfe3
commit
ef966854d5
@ -1015,31 +1015,35 @@ raise_window_relative_to_managed_windows (MetaScreen *screen,
|
|||||||
* to be moved below.
|
* to be moved below.
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
else if (meta_display_lookup_x_window (screen->display,
|
else
|
||||||
children[i]) != NULL)
|
|
||||||
{
|
{
|
||||||
XWindowChanges changes;
|
MetaWindow *other = meta_display_lookup_x_window (screen->display,
|
||||||
|
children[i]);
|
||||||
|
if (other != NULL && !other->override_redirect)
|
||||||
|
{
|
||||||
|
XWindowChanges changes;
|
||||||
|
|
||||||
/* children[i] is the topmost managed child */
|
/* children[i] is the topmost managed child */
|
||||||
meta_topic (META_DEBUG_STACK,
|
meta_topic (META_DEBUG_STACK,
|
||||||
"Moving 0x%lx above topmost managed child window 0x%lx\n",
|
"Moving 0x%lx above topmost managed child window 0x%lx\n",
|
||||||
xwindow, children[i]);
|
xwindow, children[i]);
|
||||||
|
|
||||||
changes.sibling = children[i];
|
changes.sibling = children[i];
|
||||||
changes.stack_mode = Above;
|
changes.stack_mode = Above;
|
||||||
|
|
||||||
meta_error_trap_push (screen->display);
|
meta_error_trap_push (screen->display);
|
||||||
meta_stack_tracker_record_raise_above (screen->stack_tracker,
|
meta_stack_tracker_record_raise_above (screen->stack_tracker,
|
||||||
xwindow,
|
xwindow,
|
||||||
children[i],
|
children[i],
|
||||||
XNextRequest (screen->display->xdisplay));
|
XNextRequest (screen->display->xdisplay));
|
||||||
XConfigureWindow (screen->display->xdisplay,
|
XConfigureWindow (screen->display->xdisplay,
|
||||||
xwindow,
|
xwindow,
|
||||||
CWSibling | CWStackMode,
|
CWSibling | CWStackMode,
|
||||||
&changes);
|
&changes);
|
||||||
meta_error_trap_pop (screen->display, FALSE);
|
meta_error_trap_pop (screen->display, FALSE);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
--i;
|
--i;
|
||||||
|
@ -1435,7 +1435,8 @@ reload_transient_for (MetaWindow *window,
|
|||||||
meta_window_recalc_window_type (window);
|
meta_window_recalc_window_type (window);
|
||||||
|
|
||||||
/* update stacking constraints */
|
/* update stacking constraints */
|
||||||
meta_stack_update_transient (window->screen->stack, window);
|
if (!window->override_redirect)
|
||||||
|
meta_stack_update_transient (window->screen->stack, window);
|
||||||
|
|
||||||
/* possibly change its group. We treat being a window's transient as
|
/* possibly change its group. We treat being a window's transient as
|
||||||
* equivalent to making it your group leader, to work around shortcomings
|
* equivalent to making it your group leader, to work around shortcomings
|
||||||
|
@ -955,8 +955,11 @@ meta_window_new_with_attrs (MetaDisplay *display,
|
|||||||
* and thus constraints may try to auto-fullscreen it which also
|
* and thus constraints may try to auto-fullscreen it which also
|
||||||
* means restacking it.
|
* means restacking it.
|
||||||
*/
|
*/
|
||||||
meta_stack_add (window->screen->stack,
|
if (!window->override_redirect)
|
||||||
window);
|
meta_stack_add (window->screen->stack,
|
||||||
|
window);
|
||||||
|
else
|
||||||
|
window->layer = META_LAYER_OVERRIDE_REDIRECT; /* otherwise set by MetaStack */
|
||||||
|
|
||||||
/* Put our state back where it should be,
|
/* Put our state back where it should be,
|
||||||
* passing TRUE for is_configure_request, ICCCM says
|
* passing TRUE for is_configure_request, ICCCM says
|
||||||
@ -1311,7 +1314,8 @@ meta_window_unmanage (MetaWindow *window,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
meta_stack_remove (window->screen->stack, window);
|
if (!window->override_redirect)
|
||||||
|
meta_stack_remove (window->screen->stack, window);
|
||||||
|
|
||||||
if (window->frame)
|
if (window->frame)
|
||||||
meta_window_destroy_frame (window);
|
meta_window_destroy_frame (window);
|
||||||
|
Loading…
Reference in New Issue
Block a user