[mutter/override-redirect-exclusion: 14/15] Don't do stacking for override-redirect windows
- From: Owen Taylor <otaylor src gnome org>
- To: svn-commits-list gnome org
- Subject: [mutter/override-redirect-exclusion: 14/15] Don't do stacking for override-redirect windows
- Date: Tue, 16 Jun 2009 09:59:18 -0400 (EDT)
commit ef966854d52fe9240e1ea4ece521bac9f7176721
Author: Owen W. Taylor <otaylor fishsoup net>
Date: Mon Jun 15 14:31:04 2009 -0400
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
src/core/stack.c | 52 +++++++++++++++++++++++++---------------------
src/core/window-props.c | 3 +-
src/core/window.c | 10 ++++++--
3 files changed, 37 insertions(+), 28 deletions(-)
---
diff --git a/src/core/stack.c b/src/core/stack.c
index de70fb8..40a9365 100644
--- a/src/core/stack.c
+++ b/src/core/stack.c
@@ -1015,31 +1015,35 @@ raise_window_relative_to_managed_windows (MetaScreen *screen,
* to be moved below.
*/
}
- else if (meta_display_lookup_x_window (screen->display,
- children[i]) != NULL)
+ else
{
- XWindowChanges changes;
-
- /* children[i] is the topmost managed child */
- meta_topic (META_DEBUG_STACK,
- "Moving 0x%lx above topmost managed child window 0x%lx\n",
- xwindow, children[i]);
-
- changes.sibling = children[i];
- changes.stack_mode = Above;
-
- meta_error_trap_push (screen->display);
- meta_stack_tracker_record_raise_above (screen->stack_tracker,
- xwindow,
- children[i],
- XNextRequest (screen->display->xdisplay));
- XConfigureWindow (screen->display->xdisplay,
- xwindow,
- CWSibling | CWStackMode,
- &changes);
- meta_error_trap_pop (screen->display, FALSE);
-
- break;
+ 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 */
+ meta_topic (META_DEBUG_STACK,
+ "Moving 0x%lx above topmost managed child window 0x%lx\n",
+ xwindow, children[i]);
+
+ changes.sibling = children[i];
+ changes.stack_mode = Above;
+
+ meta_error_trap_push (screen->display);
+ meta_stack_tracker_record_raise_above (screen->stack_tracker,
+ xwindow,
+ children[i],
+ XNextRequest (screen->display->xdisplay));
+ XConfigureWindow (screen->display->xdisplay,
+ xwindow,
+ CWSibling | CWStackMode,
+ &changes);
+ meta_error_trap_pop (screen->display, FALSE);
+
+ break;
+ }
}
--i;
diff --git a/src/core/window-props.c b/src/core/window-props.c
index 6b5a6c4..d86eb76 100644
--- a/src/core/window-props.c
+++ b/src/core/window-props.c
@@ -1435,7 +1435,8 @@ reload_transient_for (MetaWindow *window,
meta_window_recalc_window_type (window);
/* 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
* equivalent to making it your group leader, to work around shortcomings
diff --git a/src/core/window.c b/src/core/window.c
index cca089a..9a30769 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -955,8 +955,11 @@ meta_window_new_with_attrs (MetaDisplay *display,
* and thus constraints may try to auto-fullscreen it which also
* means restacking it.
*/
- meta_stack_add (window->screen->stack,
- window);
+ if (!window->override_redirect)
+ 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,
* passing TRUE for is_configure_request, ICCCM says
@@ -1311,7 +1314,8 @@ meta_window_unmanage (MetaWindow *window,
}
#endif
- meta_stack_remove (window->screen->stack, window);
+ if (!window->override_redirect)
+ meta_stack_remove (window->screen->stack, window);
if (window->frame)
meta_window_destroy_frame (window);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]