summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Basemenu.hh2
-rw-r--r--src/Screen.cc24
2 files changed, 23 insertions, 3 deletions
diff --git a/src/Basemenu.hh b/src/Basemenu.hh
index 87592ec5..46a8d528 100644
--- a/src/Basemenu.hh
+++ b/src/Basemenu.hh
@@ -67,7 +67,6 @@ private:
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 @@ public:
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; }
diff --git a/src/Screen.cc b/src/Screen.cc
index 3b2b4cb9..8bdf9480 100644
--- a/src/Screen.cc
+++ b/src/Screen.cc
@@ -681,11 +681,31 @@ void BScreen::reconfigure(void) {
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();