@@ -29,15 +29,12 @@ module XMonad.Util.Grab
29
29
) where
30
30
31
31
-- core
32
- import XMonad hiding ( mkGrabs )
32
+ import XMonad
33
33
34
34
import Control.Monad ( when )
35
- import Data.Bits ( setBit )
36
35
import Data.Foldable ( traverse_ )
37
36
-- base
38
- import qualified Data.Map.Strict as M
39
37
import Data.Semigroup ( All (.. ) )
40
- import Data.Traversable ( for )
41
38
42
39
-- }}}
43
40
@@ -70,9 +67,8 @@ grabUngrab
70
67
-> [(KeyMask , KeySym )] -- ^ Keys to ungrab
71
68
-> X ()
72
69
grabUngrab gr ugr = do
73
- f <- mkGrabs
74
- traverse_ (uncurry ungrabKP) (f ugr)
75
- traverse_ (uncurry grabKP) (f gr)
70
+ traverse_ (uncurry ungrabKP) =<< mkGrabs ugr
71
+ traverse_ (uncurry grabKP) =<< mkGrabs gr
76
72
77
73
-- | A convenience function to grab keys. This also ungrabs all
78
74
-- previously grabbed keys.
@@ -88,49 +84,9 @@ customRegrabEvHook regr = \case
88
84
e@ MappingNotifyEvent {} -> do
89
85
io (refreshKeyboardMapping e)
90
86
when (ev_request e `elem` [mappingKeyboard, mappingModifier])
91
- $ setNumlockMask
87
+ $ cacheNumlockMask
92
88
>> regr
93
89
pure (All False )
94
90
_ -> pure (All True )
95
91
96
92
-- }}}
97
-
98
- -- --< Private Utils >-- {{{
99
-
100
- -- | Private action shamelessly copied and restyled from XMonad.Main source.
101
- setNumlockMask :: X ()
102
- setNumlockMask = withDisplay $ \ dpy -> do
103
- ms <- io (getModifierMapping dpy)
104
- xs <- sequence
105
- [ do
106
- ks <- io (keycodeToKeysym dpy kc 0 )
107
- pure $ if ks == xK_Num_Lock
108
- then setBit 0 (fromIntegral m)
109
- else 0 :: KeyMask
110
- | (m, kcs) <- ms
111
- , kc <- kcs
112
- , kc /= 0
113
- ]
114
- modify $ \ s -> s { numberlockMask = foldr (.|.) 0 xs }
115
-
116
- -- | Private function shamelessly copied and refactored from XMonad.Main source.
117
- mkGrabs :: X ([(KeyMask , KeySym )] -> [(KeyMask , KeyCode )])
118
- mkGrabs = withDisplay $ \ dpy -> do
119
- let (minCode, maxCode) = displayKeycodes dpy
120
- allCodes = [fromIntegral minCode .. fromIntegral maxCode]
121
- syms <- io . for allCodes $ \ code -> keycodeToKeysym dpy code 0
122
- let keysymMap = M. fromListWith (++) (zip syms $ pure <$> allCodes)
123
- keysymToKeycodes sym = M. findWithDefault [] sym keysymMap
124
- extraMods <- extraModifiers
125
- pure $ \ ks -> do
126
- (mask, sym) <- ks
127
- keycode <- keysymToKeycodes sym
128
- extraMod <- extraMods
129
- pure (mask .|. extraMod, keycode)
130
-
131
- -- }}}
132
-
133
-
134
- -- NOTE: there is some duplication between this module and core. The
135
- -- latter probably will never change, but this needs to be kept in sync
136
- -- with any potential bugs that might arise.
0 commit comments