summaryrefslogtreecommitdiff
path: root/src/Screen.cc
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2002-07-13 21:25:19 +0000
committerDana Jansens <danakj@orodu.net>2002-07-13 21:25:19 +0000
commit8cb1108f4e281421e59d04dcac0b937e932160c8 (patch)
treeefba5fb5f61f44529eb6643a79d1dbf1c45ec5b8 /src/Screen.cc
parent043e42a316e67183a3210035f238e872e020996a (diff)
properly lower windows and keep desktop windows on the bottom.
Diffstat (limited to 'src/Screen.cc')
-rw-r--r--src/Screen.cc26
1 files changed, 20 insertions, 6 deletions
diff --git a/src/Screen.cc b/src/Screen.cc
index 99224350..0186e97b 100644
--- a/src/Screen.cc
+++ b/src/Screen.cc
@@ -1380,13 +1380,27 @@ void BScreen::raiseWindows(Window *workspace_stack, unsigned int num) {
}
-void BScreen::lowerDesktops(void) {
- if (desktopWindowList.empty()) return;
+void BScreen::lowerWindows(Window *workspace_stack, unsigned int num) {
+ assert(num > 0); // this would cause trouble in the XRaiseWindow call
- XLowerWindow(blackbox->getXDisplay(), desktopWindowList[0]);
- if (desktopWindowList.size() > 1)
- XRestackWindows(blackbox->getXDisplay(), &desktopWindowList[0],
- desktopWindowList.size());
+ Window *session_stack = new Window[(num + desktopWindowList.size())];
+ unsigned int i = 0, k = num;
+
+ XLowerWindow(blackbox->getXDisplay(), workspace_stack[0]);
+
+ while (k--)
+ *(session_stack + i++) = *(workspace_stack + k);
+
+ WindowList::iterator dit = desktopWindowList.begin();
+ const WindowList::iterator d_end = desktopWindowList.end();
+ for (; dit != d_end; ++dit)
+ *(session_stack + i++) = *dit;
+
+ XRestackWindows(blackbox->getXDisplay(), session_stack, i);
+
+ delete [] session_stack;
+
+ updateStackingList();
}