X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Fblackbox.cc;h=63e0ef0536676703ed1b14d1cd16913c46361559;hb=db451d95bf97b8a8e995f031ac98da50606fd3a0;hp=efb782a559ecea0f970336a7bd58b743a4ba590e;hpb=a2db09b869a588e56f816a41e3e7f31140183406;p=chaz%2Fopenbox diff --git a/src/blackbox.cc b/src/blackbox.cc index efb782a5..63e0ef05 100644 --- a/src/blackbox.cc +++ b/src/blackbox.cc @@ -96,21 +96,20 @@ extern "C" { #include 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