diff options
| author | Dana Jansens <danakj@orodu.net> | 2002-07-13 21:25:19 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2002-07-13 21:25:19 +0000 |
| commit | 8cb1108f4e281421e59d04dcac0b937e932160c8 (patch) | |
| tree | efba5fb5f61f44529eb6643a79d1dbf1c45ec5b8 /src/Screen.cc | |
| parent | 043e42a316e67183a3210035f238e872e020996a (diff) | |
properly lower windows and keep desktop windows on the bottom.
Diffstat (limited to 'src/Screen.cc')
| -rw-r--r-- | src/Screen.cc | 26 |
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(); } |
