]> Dogcows Code - chaz/openbox/blobdiff - src/blackbox.cc
merged with 2_1-merged-to-HEAD-2002-09-30
[chaz/openbox] / src / blackbox.cc
index ed12c55948679bc4908e6441eb983d9cb5156580..ecf69651665c488ea929eedbc1d4d3211798edb3 100644 (file)
@@ -574,6 +574,8 @@ void Blackbox::process_event(XEvent *e) {
         has moved to a known window.
       */
       e->xfocus.window = None;
+
+      no_focus = False;   // focusing is back on
     }
 
     break;
@@ -682,8 +684,10 @@ void Blackbox::process_event(XEvent *e) {
           if (win->isIconic())
             win->deiconify(False, False);
           if (! win->isStuck() &&
-              (win->getWorkspaceNumber() != screen->getCurrentWorkspaceID()))
+              (win->getWorkspaceNumber() != screen->getCurrentWorkspaceID())) {
+            no_focus = True;
             screen->changeWorkspaceID(win->getWorkspaceNumber());
+          }
           if (win->isVisible() && win->setInputFocus()) {
             win->getScreen()->getWorkspace(win->getWorkspaceNumber())->
               raiseWindow(win);
@@ -904,6 +908,28 @@ void Blackbox::process_event(XEvent *e) {
             }
           }
         }
+      } else if (e->xclient.message_type ==
+                 xatom->getAtom(XAtom::openbox_show_root_menu) ||
+                 e->xclient.message_type ==
+                 xatom->getAtom(XAtom::openbox_show_workspace_menu)) {
+        // find the screen the mouse is on
+        int x, y;
+        ScreenList::iterator it, end = screenList.end();
+        for (it = screenList.begin(); it != end; ++it) {
+          Window w;
+          int i;
+          unsigned int m;
+          if (XQueryPointer(getXDisplay(), (*it)->getRootWindow(),
+                            &w, &w, &x, &y, &i, &i, &m))
+            break;
+        }
+        if (it != end) {
+          if (e->xclient.message_type ==
+              xatom->getAtom(XAtom::openbox_show_root_menu))
+            (*it)->showRootMenu(x, y);
+          else
+            (*it)->showWorkspaceMenu(x, y);
+        }
       }
     }
 
@@ -921,7 +947,7 @@ void Blackbox::process_event(XEvent *e) {
       XShapeEvent *shape_event = (XShapeEvent *) e;
       BlackboxWindow *win = searchWindow(e->xany.window);
 
-      if (win)
+      if (win && shape_event->kind == ShapeBounding)
         win->shapeEvent(shape_event);
     }
 #endif // SHAPE
This page took 0.022881 seconds and 4 git commands to generate.