This adds an argument to the raise/lower/restackBelow/restackAbove window functions (default to false) which immediately reorders the window list. This is needed to make the functions work as expected when doing multiple restacks. Obviously, you would't be able to keep cycling through the window list, so this should not be used in that situation (as indicated in the comment in header).
This was needed to make my plugin (tag) work correctly. I have tried going through the list of windows I need pulled in front: both forwards and reverse, stacking above instead of below, raising bottom window instead of top - and not been able to make any combination work correctly. Even with maniac103's help I couldn't get it working ;) maniac said that this was a fundamental problem with the stacking code, and the whole lot needs to be looked over (iirc, or at least, something similar). This may not be what is needed, but it at least works, and doesn't affect anything else (only gives the ability to plugins which need such a feature). Or is this solution a bit too hacky? CompWindow::updateAttributes does something similar though. Comments? Joel. ----- >From b15c5e8f779becd08e31a858502b7d4d796fbcd4 Mon Sep 17 00:00:00 2001 From: Joel Bosveld <[email protected]> Date: Fri, 27 Feb 2009 11:48:49 +0900 Subject: [PATCH] Allow immediate reorder of window list after restack --- include/core/window.h | 11 +++++++---- src/window.cpp | 20 ++++++++++++++++---- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/include/core/window.h b/include/core/window.h index 3a62f58..6dee0bc 100644 --- a/include/core/window.h +++ b/include/core/window.h @@ -370,13 +370,16 @@ class CompWindow : int gravity, unsigned int source); - void raise (); + /* If immediate is true for these functions, + * it will reorder the window list immediately. + * Do not do this while cycling through window list */ + void raise (bool immediate = false); - void lower (); + void lower (bool immediate = false); - void restackAbove (CompWindow *sibling); + void restackAbove (CompWindow *sibling, bool immediate = false); - void restackBelow (CompWindow *sibling); + void restackBelow (CompWindow *sibling, bool immediate = false); void updateAttributes (CompStackingUpdateMode stackingMode); diff --git a/src/window.cpp b/src/window.cpp index 83bb4fa..46c84ae 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -2806,7 +2806,7 @@ PrivateWindow::addWindowStackChanges (XWindowChanges *xwc, } void -CompWindow::raise () +CompWindow::raise (bool immediate) { XWindowChanges xwc; int mask; @@ -2814,11 +2814,14 @@ CompWindow::raise () mask = priv->addWindowStackChanges (&xwc, PrivateWindow::findSiblingBelow (this, false)); if (mask) + { configureXWindow (mask, &xwc); + if(immediate) priv->restack (xwc.sibling); + } } void -CompWindow::lower () +CompWindow::lower (bool immediate) { XWindowChanges xwc; int mask; @@ -2826,11 +2829,14 @@ CompWindow::lower () mask = priv->addWindowStackChanges (&xwc, PrivateWindow::findLowestSiblingBelow (this)); if (mask) + { configureXWindow (mask, &xwc); + if(immediate) priv->restack (xwc.sibling); + } } void -CompWindow::restackAbove (CompWindow *sibling) +CompWindow::restackAbove (CompWindow *sibling, bool immediate) { for (; sibling; sibling = sibling->next) if (PrivateWindow::validSiblingBelow (this, sibling)) @@ -2843,7 +2849,10 @@ CompWindow::restackAbove (CompWindow *sibling) mask = priv->addWindowStackChanges (&xwc, sibling); if (mask) + { configureXWindow (mask, &xwc); + if(immediate) priv->restack (xwc.sibling); + } } } @@ -2887,7 +2896,7 @@ PrivateWindow::findValidStackSiblingBelow (CompWindow *w, } void -CompWindow::restackBelow (CompWindow *sibling) +CompWindow::restackBelow (CompWindow *sibling, bool immediate) { XWindowChanges xwc; unsigned int mask; @@ -2896,7 +2905,10 @@ CompWindow::restackBelow (CompWindow *sibling) PrivateWindow::findValidStackSiblingBelow (this, sibling)); if (mask) + { configureXWindow (mask, &xwc); + if(immediate) priv->restack (xwc.sibling); + } } void -- 1.6.0.6
0001-Allow-immediate-reorder-of-window-list-after-restack.patch
Description: Binary data
_______________________________________________ Dev mailing list [email protected] http://lists.compiz-fusion.org/mailman/listinfo/dev
