all repos — openbox @ a0cf45a0ef5f7e2cbf0833f4d8655131912400cc

openbox fork - make it a bit more like ryudo

handle all combinations of lock modifiers on keypress
this should be an rc file option
Scott Moynes smoynes@nexus.carleton.ca
commit

a0cf45a0ef5f7e2cbf0833f4d8655131912400cc

parent

f754eb0ea4de43f4d99861e4c8311f7a57b87a11

3 files changed, 49 insertions(+), 1 deletions(-)

jump to
M util/epist/epist.hhutil/epist/epist.hh

@@ -67,6 +67,11 @@ void addWindow(XWindow *window);

void removeWindow(XWindow *window); XWindow *findWindow(Window window) const; + void getLockModifiers(int &numlockMask, int &scrolllockMask) const { + numlockMask = NumLockMask; + scrolllockMask = ScrollLockMask; + } + const ActionList &actions(void) { return _actions; } };
M util/epist/screen.ccutil/epist/screen.cc

@@ -155,11 +155,18 @@ }

} void screen::handleKeypress(const XEvent &e) { + int scrolllockMask, numlockMask; + ActionList::const_iterator it = _epist->actions().begin(); ActionList::const_iterator end = _epist->actions().end(); + + _epist->getLockModifiers(numlockMask, scrolllockMask); + for (; it != end; ++it) { + unsigned int state = e.xkey.state & ~(LockMask|scrolllockMask|numlockMask); + if (e.xkey.keycode == it->keycode() && - e.xkey.state == it->modifierMask()) { + state == it->modifierMask()) { switch (it->type()) { case Action::nextWorkspace: cycleWorkspace(true);

@@ -491,3 +498,37 @@ assert(_managed);

_xatom->sendClientMessage(_root, XAtom::net_current_desktop, _root, num); } + +void screen::grabKey(const KeyCode keyCode, const int modifierMask) const { + + Display *display = _epist->getXDisplay(); + int numlockMask, scrolllockMask; + + _epist->getLockModifiers(numlockMask, scrolllockMask); + + XGrabKey(display, keyCode, modifierMask, + _root, True, GrabModeAsync, GrabModeAsync); + XGrabKey(display, keyCode, + modifierMask|LockMask, + _root, True, GrabModeAsync, GrabModeAsync); + XGrabKey(display, keyCode, + modifierMask|scrolllockMask, + _root, True, GrabModeAsync, GrabModeAsync); + XGrabKey(display, keyCode, + modifierMask|numlockMask, + _root, True, GrabModeAsync, GrabModeAsync); + + XGrabKey(display, keyCode, + modifierMask|LockMask|scrolllockMask, + _root, True, GrabModeAsync, GrabModeAsync); + XGrabKey(display, keyCode, + modifierMask|scrolllockMask|numlockMask, + _root, True, GrabModeAsync, GrabModeAsync); + XGrabKey(display, keyCode, + modifierMask|numlockMask|LockMask, + _root, True, GrabModeAsync, GrabModeAsync); + + XGrabKey(display, keyCode, + modifierMask|numlockMask|LockMask|scrolllockMask, + _root, True, GrabModeAsync, GrabModeAsync); +}
M util/epist/screen.hhutil/epist/screen.hh

@@ -80,6 +80,8 @@ void cycleWorkspace(const bool forward, const bool loop = true) const;

void changeWorkspace(const int num) const; void toggleShaded(const Window win) const; void execCommand(const std::string &cmd) const; + + void grabKey(const KeyCode keyCode, const int modifierMask) const; }; #endif // __screen_hh