]> Dogcows Code - chaz/openbox/blobdiff - src/Screen.cc
window-to-window corner snapping!
[chaz/openbox] / src / Screen.cc
index d22999efe81083e21a70ddb9dfd64c437b37812a..8779733cbcd1a90129847e188ead7e52093751e6 100644 (file)
@@ -66,8 +66,11 @@ extern "C" {
 #endif // HAVE_STDARG_H
 }
 
+#include <assert.h>
+
 #include <algorithm>
 #include <functional>
+#include <string>
 using std::string;
 
 #include "i18n.hh"
@@ -681,11 +684,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();
 
@@ -1019,7 +1042,7 @@ void BScreen::changeWorkspaceID(unsigned int id) {
 
     if (blackbox->getFocusedWindow() &&
         blackbox->getFocusedWindow()->getScreen() == this &&
-        (! blackbox->getFocusedWindow()->isStuck())) {
+        ! blackbox->getFocusedWindow()->isStuck()) {
       current_workspace->setLastFocusedWindow(blackbox->getFocusedWindow());
       blackbox->setFocusedWindow((BlackboxWindow *) 0);
     }
@@ -1117,9 +1140,6 @@ void BScreen::removeNetizen(Window w) {
 }
 
 
-  xatom->setValue(getRootWindow(), XAtom::net_number_of_desktops,
-                  XAtom::cardinal, workspacesList.size());
-
 void BScreen::updateNetizenCurrentWorkspace(void) {
   std::for_each(netizenList.begin(), netizenList.end(),
                 std::mem_fun(&Netizen::sendCurrentWorkspace));
@@ -1127,6 +1147,9 @@ void BScreen::updateNetizenCurrentWorkspace(void) {
 
 
 void BScreen::updateNetizenWorkspaceCount(void) {
+  xatom->setValue(getRootWindow(), XAtom::net_number_of_desktops,
+                  XAtom::cardinal, workspacesList.size());
+
   std::for_each(netizenList.begin(), netizenList.end(),
                 std::mem_fun(&Netizen::sendWorkspaceCount));
 }
This page took 0.020854 seconds and 4 git commands to generate.