all repos — openbox @ 20bac0772c548fe1e41eed21d55849bad2f34b2f

openbox fork - make it a bit more like ryudo

on reconfigure, save all of the open submenus instead of just one, and then reopen them all as best as possible.
Dana Jansens danakj@orodu.net
commit

20bac0772c548fe1e41eed21d55849bad2f34b2f

parent

e149ab6c299d96f0208b793b83f4c0d6f08a840f

2 files changed, 23 insertions(+), 3 deletions(-)

jump to
M src/Basemenu.hhsrc/Basemenu.hh

@@ -67,7 +67,6 @@ Basemenu(const Basemenu&);

Basemenu& operator=(const Basemenu&); protected: - BasemenuItem *find(int index); inline void setTitleVisibility(bool b) { title_vis = b; } inline void setMovable(bool b) { movable = b; } inline void setHideTree(bool h) { hide_tree = h; }

@@ -106,6 +105,7 @@ inline int getX(void) const { return menu.x; }

inline int getY(void) const { return menu.y; } inline unsigned int getCount(void) { return menuitems.size(); } inline int getCurrentSubmenu(void) const { return which_sub; } + BasemenuItem *find(int index); inline unsigned int getWidth(void) const { return menu.width; } inline unsigned int getHeight(void) const { return menu.height; }
M src/Screen.ccsrc/Screen.cc

@@ -681,11 +681,31 @@

workspacemenu->reconfigure(); iconmenu->reconfigure(); - int remember_sub = rootmenu->getCurrentSubmenu(); + typedef std::vector<int> SubList; + SubList remember_subs; + + // save the current open menus + Basemenu *menu = rootmenu; + int submenu; + while ((submenu = menu->getCurrentSubmenu()) >= 0) { + remember_subs.push_back(submenu); + menu = menu->find(submenu)->submenu(); + assert(menu); + } + InitMenu(); raiseWindows(0, 0); rootmenu->reconfigure(); - rootmenu->drawSubmenu(remember_sub); + + // reopen the saved menus + menu = rootmenu; + const SubList::iterator subs_end = remember_subs.end(); + for (SubList::iterator it = remember_subs.begin(); it != subs_end; ++it) { + menu->drawSubmenu(*it); + menu = menu->find(*it)->submenu(); + if (! menu) + break; + } configmenu->reconfigure();