summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Config.hs-boot1
-rw-r--r--Main.hs3
-rw-r--r--Operations.hs16
3 files changed, 12 insertions, 8 deletions
diff --git a/Config.hs-boot b/Config.hs-boot
index 681160a..ca01d46 100644
--- a/Config.hs-boot
+++ b/Config.hs-boot
@@ -3,3 +3,4 @@ import Graphics.X11.Xlib.Types (Dimension)
import Graphics.X11.Xlib (KeyMask)
borderWidth :: Dimension
modMask :: KeyMask
+numlockMask :: KeyMask
diff --git a/Main.hs b/Main.hs
index 95b2aa3..f3f2219 100644
--- a/Main.hs
+++ b/Main.hs
@@ -106,8 +106,7 @@ grabKeys dpy rootw = do
kc <- keysymToKeycode dpy sym
-- "If the specified KeySym is not defined for any KeyCode,
-- XKeysymToKeycode() returns zero."
- when (kc /= '\0') $ mapM_ (grab kc . (mask .|.)) $
- [0, numlockMask, lockMask, numlockMask .|. lockMask]
+ when (kc /= '\0') $ mapM_ (grab kc . (mask .|.)) extraModifiers
where grab kc m = grabKey dpy kc m rootw True grabModeAsync grabModeAsync
diff --git a/Operations.hs b/Operations.hs
index f1f5b21..1a25e99 100644
--- a/Operations.hs
+++ b/Operations.hs
@@ -15,7 +15,7 @@ module Operations where
import XMonad
import qualified StackSet as W
-import {-# SOURCE #-} Config (borderWidth, modMask)
+import {-# SOURCE #-} Config (borderWidth, modMask, numlockMask)
import Data.Maybe
import Data.List (genericIndex, intersectBy, partition, delete)
@@ -239,13 +239,17 @@ rescreen = do
-- ---------------------------------------------------------------------
+extraModifiers :: [KeyMask]
+extraModifiers = [0, numlockMask, lockMask, numlockMask .|. lockMask ]
+
-- | setButtonGrab. Tell whether or not to intercept clicks on a given window
setButtonGrab :: Bool -> Window -> X ()
-setButtonGrab grab w = withDisplay $ \d -> io $ do
- when (not grab) $ ungrabButton d anyButton anyModifier w
- grabButton d anyButton mask w False (buttonPressMask .|. buttonReleaseMask)
- grabModeAsync grabModeSync none none
- where mask = if grab then anyModifier else modMask
+setButtonGrab grabAll w = withDisplay $ \d -> io $ do
+ when (not grabAll) $ ungrabButton d anyButton anyModifier w
+ mapM_ (grab d) masks
+ where masks = if grabAll then [anyModifier] else map (modMask .|.) extraModifiers
+ grab d m = grabButton d anyButton m w False (buttonPressMask .|. buttonReleaseMask)
+ grabModeAsync grabModeSync none none
-- ---------------------------------------------------------------------
-- Setting keyboard focus