X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2FScreen.cc;h=0186e97bf26384db990cec7a7d2ed49500674dce;hb=c6a826bf663d3cb286025642f5e2a725b5d1c660;hp=9922435023e6ebc74dad250b1680ee967cb866ba;hpb=f320a023977e430785454e70c8c861b7c95f9a8f;p=chaz%2Fopenbox 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(); }