]> Dogcows Code - chaz/openbox/blobdiff - src/blackbox.cc
add comment
[chaz/openbox] / src / blackbox.cc
index 710984442d1d4b14377e4d9d197996d34259e69c..29de882089e3c2570e5b7e02393c17a9cfdf9bcc 100644 (file)
@@ -439,8 +439,12 @@ void Blackbox::process_event(XEvent *e) {
     if ( i > 0 )
       e = &realevent;
 
+    // the pointer is on the wrong screen
+    if (! e->xmotion.same_screen)
+      break;
+
     // strip the lock key modifiers
-    e->xbutton.state &= ~(NumLockMask | ScrollLockMask | LockMask);
+    e->xmotion.state &= ~(NumLockMask | ScrollLockMask | LockMask);
 
     last_time = e->xmotion.time;
 
@@ -755,7 +759,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 +786,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
@@ -984,11 +975,11 @@ void Blackbox::process_event(XEvent *e) {
 bool Blackbox::handleSignal(int sig) {
   switch (sig) {
   case SIGHUP:
-    restart();
+    reconfigure();
     break;
 
   case SIGUSR1:
-    reconfigure();
+    restart();
     break;
 
   case SIGUSR2:
@@ -1177,6 +1168,32 @@ void Blackbox::shutdown(void) {
 }
 
 
+#ifdef    XINERAMA
+void Blackbox::saveXineramaPlacement(bool x) {
+  resource.xinerama_placement = x;
+  config.setValue("session.xineramaSupport.windowPlacement",
+                  resource.xinerama_placement);
+  reconfigure();  // make sure all screens get this change
+}
+
+
+void Blackbox::saveXineramaMaximizing(bool x) {
+  resource.xinerama_maximize = x;
+  config.setValue("session.xineramaSupport.windowMaximizing",
+                  resource.xinerama_maximize);
+  reconfigure();  // make sure all screens get this change
+}
+
+
+void Blackbox::saveXineramaSnapping(bool x) {
+  resource.xinerama_snap = x;
+  config.setValue("session.xineramaSupport.windowSnapping",
+                  resource.xinerama_snap);
+  reconfigure();  // make sure all screens get this change
+}
+#endif // XINERAMA
+
+  
 /*
  * Save all values as they are so that the defaults will be written to the rc
  * file
@@ -1195,6 +1212,12 @@ void Blackbox::save_rc(void) {
   config.setValue("session.styleFile", resource.style_file);
   config.setValue("session.titlebarLayout", resource.titlebar_layout);
   
+#ifdef    XINERAMA
+  saveXineramaPlacement(resource.xinerama_placement);
+  saveXineramaMaximizing(resource.xinerama_maximize);
+  saveXineramaSnapping(resource.xinerama_snap);
+#endif // XINERAMA
+
   std::for_each(screenList.begin(), screenList.end(),
                 std::mem_fun(&BScreen::save_rc));
  
@@ -1241,10 +1264,28 @@ void Blackbox::load_rc(void) {
   
   if (! config.getValue("session.titlebarLayout", resource.titlebar_layout))
     resource.titlebar_layout = "ILMC";
+
+#ifdef    XINERAMA
+  if (! config.getValue("session.xineramaSupport.windowPlacement",
+                        resource.xinerama_placement))
+    resource.xinerama_placement = false;
+
+  if (! config.getValue("session.xineramaSupport.windowMaximizing",
+                        resource.xinerama_maximize))
+    resource.xinerama_maximize = false;
+
+  if (! config.getValue("session.xineramaSupport.windowSnapping",
+                        resource.xinerama_snap))
+    resource.xinerama_snap = false;
+#endif // XINERAMA
 }
 
 
 void Blackbox::reconfigure(void) {
+  // don't reconfigure while saving the initial rc file, it's a waste and it
+  // breaks somethings (workspace names)
+  if (isStartup()) return;
+
   reconfigure_wait = True;
 
   if (! timer->isTiming()) timer->start();
This page took 0.022498 seconds and 4 git commands to generate.