all repos — openbox @ 8cb1108f4e281421e59d04dcac0b937e932160c8

openbox fork - make it a bit more like ryudo

properly lower windows and keep desktop windows on the bottom.
Dana Jansens danakj@orodu.net
commit

8cb1108f4e281421e59d04dcac0b937e932160c8

parent

043e42a316e67183a3210035f238e872e020996a

3 files changed, 22 insertions(+), 11 deletions(-)

jump to
M src/Screen.ccsrc/Screen.cc

@@ -1380,13 +1380,27 @@ updateStackingList();

} -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 + + Window *session_stack = new Window[(num + desktopWindowList.size())]; + unsigned int i = 0, k = num; + + XLowerWindow(blackbox->getXDisplay(), workspace_stack[0]); - XLowerWindow(blackbox->getXDisplay(), desktopWindowList[0]); - if (desktopWindowList.size() > 1) - XRestackWindows(blackbox->getXDisplay(), &desktopWindowList[0], - desktopWindowList.size()); + 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(); }
M src/Screen.hhsrc/Screen.hh

@@ -326,7 +326,7 @@ void updateStackingList(void);

void manageWindow(Window w); void unmanageWindow(BlackboxWindow *w, bool remap); void raiseWindows(Window *workspace_stack, unsigned int num); - void lowerDesktops(void); + void lowerWindows(Window *workspace_stack, unsigned int num); void reassociateWindow(BlackboxWindow *w, unsigned int wkspc_id, bool ignore_sticky); void propagateWindowName(const BlackboxWindow *bw);
M src/Workspace.ccsrc/Workspace.cc

@@ -322,10 +322,7 @@ wkspc->stackingList.remove(win);

wkspc->stackingList.push_back(win); } - XLowerWindow(screen->getBaseDisplay()->getXDisplay(), stack_vector.front()); - XRestackWindows(screen->getBaseDisplay()->getXDisplay(), - &stack_vector[0], stack_vector.size()); - screen->lowerDesktops(); + screen->lowerWindows(&stack_vector[0], stack_vector.size()); }