]> Dogcows Code - chaz/openbox/commitdiff
changing the number of workspaces in the rc does something without restarting now!
authorDana Jansens <danakj@orodu.net>
Fri, 19 Jul 2002 14:38:10 +0000 (14:38 +0000)
committerDana Jansens <danakj@orodu.net>
Fri, 19 Jul 2002 14:38:10 +0000 (14:38 +0000)
src/Screen.cc
src/Screen.hh
src/blackbox.cc

index 2887dc4d3f0d2fff8dbe3a00d16f8e19c6fc700c..81bf99ee04751010f8c74e1370e040a8639dbedc 100644 (file)
@@ -686,6 +686,23 @@ void BScreen::load_rc(void) {
 }
 
 
+void BScreen::changeWorkspaceCount(unsigned int new_count) {
+  assert(new_count > 0);
+
+  if (new_count < workspacesList.size()) {
+    // shrink
+    for (unsigned int i = workspacesList.size(); i > new_count; --i)
+      removeLastWorkspace();
+    // removeLast already sets the current workspace to the 
+    // last available one.
+  } else if (new_count > workspacesList.size()) {
+    // grow
+    for(unsigned int i = workspacesList.size(); i < new_count; ++i)
+      addWorkspace();
+  }
+}
+
+
 void BScreen::reconfigure(void) {
   // don't reconfigure while saving the initial rc file, it's a waste and it
   // breaks somethings (workspace names)
@@ -696,6 +713,10 @@ void BScreen::reconfigure(void) {
   slit->load_rc();
   LoadStyle();
 
+  // we need to do this explicitly, because just loading this value from the rc
+  // does nothing
+  changeWorkspaceCount(resource.workspaces);
+
   XGCValues gcv;
   gcv.foreground = WhitePixel(blackbox->getXDisplay(),
                               getScreenNumber());
index 7cbe441ab4265b773c07bd2acd45f894e10d0110..9f0834192efd465c49512d9581ec3c3d6ca112f5 100644 (file)
@@ -267,6 +267,8 @@ public:
   inline int getColPlacementDirection(void) const
   { return resource.col_direction; }
 
+  void changeWorkspaceCount(unsigned int new_count);
+  
   inline void setRootColormapInstalled(bool r) { root_colormap_installed = r; }
   void saveSloppyFocus(bool s);
   void saveAutoRaise(bool a);
index 710984442d1d4b14377e4d9d197996d34259e69c..4c7259ed03e13187c41c5bc780d14d61f7da5eac 100644 (file)
@@ -755,7 +755,8 @@ void Blackbox::process_event(XEvent *e) {
             else
               win->show();
             screen->reassociateWindow(win, wksp, True);
-          } else if (wksp == 0xfffffffe) { // XXX: BUG, BUT DOING THIS SO KDE WORKS FOR NOW!!
+          } else if (wksp == 0xfffffffe || // XXX: BUG, BUT DOING THIS SO KDE WORKS FOR NOW!!
+                     wksp == 0xffffffff) {
             if (win->isIconic()) win->deiconify(False, True);
             if (! win->isStuck()) win->stick();
             if (! win->isVisible()) win->show();
@@ -781,22 +782,8 @@ void Blackbox::process_event(XEvent *e) {
         // NET_NUMBER_OF_DESKTOPS
         BScreen *screen = searchScreen(e->xclient.window);
         
-        if (e->xclient.data.l[0] > 0) {
-          if ((unsigned) e->xclient.data.l[0] < screen->getWorkspaceCount()) {
-            // shrink
-            for (int i = screen->getWorkspaceCount();
-                 i > e->xclient.data.l[0]; --i)
-              screen->removeLastWorkspace();
-            // removeLast already sets the current workspace to the 
-            // last available one.
-          } else if ((unsigned) e->xclient.data.l[0] >
-                     screen->getWorkspaceCount()) {
-            // grow
-            for(int i = screen->getWorkspaceCount(); 
-                i < e->xclient.data.l[0]; ++i)
-              screen->addWorkspace();
-          }
-        }
+        if (e->xclient.data.l[0] > 0)
+          screen->changeWorkspaceCount((unsigned) e->xclient.data.l[0]);
       } else if (e->xclient.message_type ==
                  xatom->getAtom(XAtom::net_close_window)) {
         // NET_CLOSE_WINDOW
This page took 0.03472 seconds and 4 git commands to generate.