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:
Owen W. Taylor 2009-06-15 14:31:04 -04:00
parent 7309b6cfe3
commit ef966854d5
3 changed files with 34 additions and 25 deletions

View File

@ -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;

View File

@ -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

View File

@ -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);