diff options
| author | Dana Jansens <danakj@orodu.net> | 2002-06-01 17:14:32 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2002-06-01 17:14:32 +0000 |
| commit | 20bac0772c548fe1e41eed21d55849bad2f34b2f (patch) | |
| tree | cb7bb63c3c4def8b5980c9796bd6ec8950eb34b3 /src/Screen.cc | |
| parent | e149ab6c299d96f0208b793b83f4c0d6f08a840f (diff) | |
on reconfigure, save all of the open submenus instead of just one, and then reopen them all as best as possible.
Diffstat (limited to 'src/Screen.cc')
| -rw-r--r-- | src/Screen.cc | 24 |
1 files changed, 22 insertions, 2 deletions
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(); |
