]> Dogcows Code - chaz/openbox/commitdiff
on reconfigure, save all of the open submenus instead of just one, and then reopen...
authorDana Jansens <danakj@orodu.net>
Sat, 1 Jun 2002 17:14:32 +0000 (17:14 +0000)
committerDana Jansens <danakj@orodu.net>
Sat, 1 Jun 2002 17:14:32 +0000 (17:14 +0000)
src/Basemenu.hh
src/Screen.cc

index 87592ec5865597b5ac2647d3f1ae093fcceac179..46a8d52821f5bf9e598273ac930218695cd3b94b 100644 (file)
@@ -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; }
index 3b2b4cb9075b78de4c40a91722a8227f79f7437a..8bdf9480cd4b0d2e051ebadd0fc9519964b39429 100644 (file)
@@ -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();
 
This page took 0.02515 seconds and 4 git commands to generate.