]> Dogcows Code - chaz/openbox/commitdiff
handle all combinations of lock modifiers on keypress
authorScott Moynes <smoynes@nexus.carleton.ca>
Sun, 21 Jul 2002 22:35:43 +0000 (22:35 +0000)
committerScott Moynes <smoynes@nexus.carleton.ca>
Sun, 21 Jul 2002 22:35:43 +0000 (22:35 +0000)
this should be an rc file option

util/epist/epist.hh
util/epist/screen.cc
util/epist/screen.hh

index 7bd0d27661c830ca0c2755b7cec2538d01b0058c..c0687e021cb0edcc58cd79d2401c956021bf7fdb 100644 (file)
@@ -67,6 +67,11 @@ public:
   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; }
 };
 
index 78f3a9d0805b5c2a21707685075ce8552cc3b0cb..1086ce4ab861aa0a0844c9f250012fbd286c2773 100644 (file)
@@ -155,11 +155,18 @@ void screen::processEvent(const XEvent &e) {
 }
 
 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 @@ void screen::changeWorkspace(const int num) const {
 
   _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);
+}
index 4c3a47c2f89a5c8b7387f6fbb28808e3bab9a18c..be30baa58fce1e89524987a6bb8000c4c918d776 100644 (file)
@@ -80,6 +80,8 @@ public:
   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
This page took 0.025993 seconds and 4 git commands to generate.