diff options
| author | Sven Kocksch <github@miniskipper.at> | 2017-05-15 11:25:45 +0200 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-05-15 11:25:45 +0200 | 
| commit | a53a9afb7fd0d20b1667407f5d218ad9cb3d195a (patch) | |
| tree | cd2f977aeba5f3950f97e4c431f8db3f440bf274 /qxt-mini | |
| parent | 5c23666b58bb1dd4aea15c0d62a2f716d5be7f52 (diff) | |
Linux/X11: Fix hotkeys
Diffstat (limited to 'qxt-mini')
| -rw-r--r-- | qxt-mini/qxtglobalshortcut_x11.cpp | 33 | 
1 files changed, 28 insertions, 5 deletions
diff --git a/qxt-mini/qxtglobalshortcut_x11.cpp b/qxt-mini/qxtglobalshortcut_x11.cpp index a2e47ade..1cc99b67 100644 --- a/qxt-mini/qxtglobalshortcut_x11.cpp +++ b/qxt-mini/qxtglobalshortcut_x11.cpp @@ -206,19 +206,44 @@ public:          return DefaultRootWindow(display());      } -    bool grabKey(quint32 keycode, Window window) +    bool grabKey(quint32 keycode, quint32 modifiers, Window window)      {          if (keybinding::incf(keycode))          {              QxtX11ErrorHandler errorHandler; +            bool error = false; -            XGrabKey(display(), keycode, AnyModifier, window, True, +            XGrabKey(display(), keycode, modifiers, window, True,                       GrabModeAsync, GrabModeAsync); +            if (errorHandler.error) { +                error=true; +            } +            //Also grab key with num lock = on +            XGrabKey(display(), keycode, modifiers | Mod2Mask, window, True, +                     GrabModeAsync, GrabModeAsync); +            if (errorHandler.error) { +                error=true; +            } +            //...and with scroll lock = on +            XGrabKey(display(), keycode, modifiers | Mod5Mask, window, True, +                     GrabModeAsync, GrabModeAsync);              if (errorHandler.error) { +                error=true; +            } + +            //...and with bot = on +            XGrabKey(display(), keycode, modifiers | Mod2Mask | Mod5Mask, window, True, +                     GrabModeAsync, GrabModeAsync); +            if (errorHandler.error) { +                error=true; +            } + +            if(error){                  ungrabKey(keycode, window);                  return false;              } +          }          return true; @@ -262,8 +287,6 @@ bool QxtGlobalShortcutPrivate::nativeEventFilter(const QByteArray & eventType,              keystate |= Mod4Mask;          if(kev->state & XCB_MOD_MASK_SHIFT) //shift              keystate |= ShiftMask; -        if(kev->state & XCB_MOD_MASK_2) //numlock -            keystate |= Mod2Mask;  #if 0          if(key->state & XCB_MOD_MASK_3) // alt gr aka right-alt or ctrl+left-alt -- what mask is it?              keystate |= AltGrMask; @@ -323,7 +346,7 @@ quint32 QxtGlobalShortcutPrivate::nativeKeycode(Qt::Key key)  bool QxtGlobalShortcutPrivate::registerShortcut(quint32 nativeKey, unused(quint32, nativeMods))  {      QxtX11Data x11; -    return x11.isValid() && x11.grabKey(nativeKey, x11.rootWindow()); +    return x11.isValid() && x11.grabKey(nativeKey, nativeMods, x11.rootWindow());  }  bool QxtGlobalShortcutPrivate::unregisterShortcut(quint32 nativeKey, unused(quint32, nativeMods))  | 
