]> Dogcows Code - chaz/openbox/blobdiff - src/blackbox.cc
rename, remove bullshit. ya
[chaz/openbox] / src / blackbox.cc
index efb782a559ecea0f970336a7bd58b743a4ba590e..63e0ef0536676703ed1b14d1cd16913c46361559 100644 (file)
@@ -96,21 +96,20 @@ extern "C" {
 #include <string>
 using std::string;
 
-#include "i18n.hh"
 #include "blackbox.hh"
-#include "Basemenu.hh"
-#include "Clientmenu.hh"
-#include "GCCache.hh"
-#include "Image.hh"
-#include "Rootmenu.hh"
-#include "Screen.hh"
-#include "Slit.hh"
-#include "Toolbar.hh"
-#include "Util.hh"
-#include "Window.hh"
-#include "Workspace.hh"
-#include "Workspacemenu.hh"
-#include "XAtom.hh"
+#include "basemenu.hh"
+#include "clientmenu.hh"
+#include "gccache.hh"
+#include "image.hh"
+#include "rootmenu.hh"
+#include "screen.hh"
+#include "slit.hh"
+#include "toolbar.hh"
+#include "util.hh"
+#include "window.hh"
+#include "workspace.hh"
+#include "workspacemenu.hh"
+#include "xatom.hh"
 
 Blackbox *blackbox;
 
@@ -134,8 +133,17 @@ Blackbox::Blackbox(char **m_argv, char *dpy_name, char *rc, char *menu)
   if (! rc) rc = "~/.openbox/rc";
   rc_file = expandTilde(rc);
   config.setFile(rc_file);  
-  if (! menu) menu = "~/.openbox/menu";
-  menu_file = expandTilde(menu);
+
+  string rcmenu;
+  if (! menu) {
+    //have to come up with something better than this
+    config.load();
+    if (! config.getValue("session.menuFile", rcmenu))
+      rcmenu = "~/.openbox/menu";
+  } else {
+    rcmenu = menu;
+  }
+  menu_file = expandTilde(rcmenu.c_str());
 
   no_focus = False;
 
@@ -908,6 +916,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);
+        }
       }
     }
 
@@ -925,7 +955,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.024776 seconds and 4 git commands to generate.