]> Dogcows Code - chaz/openbox/blobdiff - src/blackbox.cc
switch workspaces if neccessary for a NET_WM_ACTIVE_WINDOW ClientMessage
[chaz/openbox] / src / blackbox.cc
index 6bd47f9c4fee61fdf6e7eacb49d4fdac5737b729..ba0b07478d2b79a12fa5b369aec9fef442711d00 100644 (file)
@@ -462,9 +462,13 @@ void Blackbox::process_event(XEvent *e) {
   case PropertyNotify: {
     last_time = e->xproperty.time;
 
-    BlackboxWindow *win = searchWindow(e->xproperty.window);
-    if (win)
+    BlackboxWindow *win = (BlackboxWindow *) 0;
+    BScreen *screen = (BScreen *) 0;
+
+    if ((win = searchWindow(e->xproperty.window)))
       win->propertyNotifyEvent(&e->xproperty);
+    else if ((screen = searchScreen(e->xproperty.window)))
+      screen->propertyNotifyEvent(&e->xproperty);
     break;
   }
 
@@ -701,18 +705,29 @@ void Blackbox::process_event(XEvent *e) {
         if (screen && workspace < screen->getWorkspaceCount())
           screen->changeWorkspaceID(workspace);
       } else if (e->xclient.message_type == 
-                 xatom->getAtom(XAtom::blackbox_change_window_focus) ||
-                 e->xclient.message_type == 
+                 xatom->getAtom(XAtom::blackbox_change_window_focus)) {
+        // TEMP HACK TO KEEP BBKEYS WORKING
+        BlackboxWindow *win = searchWindow(e->xclient.window);
+
+        if (win && win->isVisible() && win->setInputFocus())
+          win->installColormap(True);
+      } else if (e->xclient.message_type == 
                  xatom->getAtom(XAtom::net_active_window)) {
         // NET_ACTIVE_WINDOW
         BlackboxWindow *win = searchWindow(e->xclient.window);
 
         if (win) {
+          BScreen *screen = win->getScreen();
+
           if (win->isIconic())
             win->deiconify(False, True);
+          if (win->isShaded())
+            win->shade();
+          if (win->getWorkspaceNumber() != screen->getCurrentWorkspaceID())
+            screen->changeWorkspaceID(win->getWorkspaceNumber());
           if (win->isVisible() && win->setInputFocus()) {
-            //win->getScreen()->getWorkspace(win->getWorkspaceNumber())->
-            //  raiseWindow(win);
+            win->getScreen()->getWorkspace(win->getWorkspaceNumber())->
+              raiseWindow(win);
             win->installColormap(True);
           }
         }
This page took 0.021411 seconds and 4 git commands to generate.