summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Vogt <vogt.adam@gmail.com>2012-01-03 02:39:16 +0100
committerAdam Vogt <vogt.adam@gmail.com>2012-01-03 02:39:16 +0100
commitaccd7087733c335b47d1282e4e06307366d2e7e4 (patch)
tree8c88b56d941721fc63520c88caf6e617403b5735
parent7b5a7a40fe9066122c0de2c8455becaa4621b868 (diff)
downloadmetatile-accd7087733c335b47d1282e4e06307366d2e7e4.tar
metatile-accd7087733c335b47d1282e4e06307366d2e7e4.zip
Add configuration option clickToFocus (issue 225)
Ignore-this: 78961f6256e1a1ee25c085e9056af758 To summarize this allows clicks which change the focus to also be passed on to that window. darcs-hash:20120103013916-1499c-1c29f13f0565f4812cf5787caefb6142882f25b5
-rw-r--r--XMonad/Config.hs10
-rw-r--r--XMonad/Core.hs1
-rw-r--r--XMonad/Main.hsc7
-rw-r--r--XMonad/Operations.hs9
4 files changed, 20 insertions, 7 deletions
diff --git a/XMonad/Config.hs b/XMonad/Config.hs
index 114df2a..1fdef5b 100644
--- a/XMonad/Config.hs
+++ b/XMonad/Config.hs
@@ -27,11 +27,11 @@ module XMonad.Config (defaultConfig) where
import XMonad.Core as XMonad hiding
(workspaces,manageHook,keys,logHook,startupHook,borderWidth,mouseBindings
,layoutHook,modMask,terminal,normalBorderColor,focusedBorderColor,focusFollowsMouse
- ,handleEventHook)
+ ,handleEventHook,clickJustFocuses)
import qualified XMonad.Core as XMonad
(workspaces,manageHook,keys,logHook,startupHook,borderWidth,mouseBindings
,layoutHook,modMask,terminal,normalBorderColor,focusedBorderColor,focusFollowsMouse
- ,handleEventHook)
+ ,handleEventHook,clickJustFocuses)
import XMonad.Layout
import XMonad.Operations
@@ -157,6 +157,11 @@ terminal = "xterm"
focusFollowsMouse :: Bool
focusFollowsMouse = True
+-- | Whether a mouse click select the focus or is just passed to the window
+clickJustFocuses :: Bool
+clickJustFocuses = True
+
+
-- | The xmonad key bindings. Add, modify or remove key bindings here.
--
-- (The comment formatting character is used when generating the manpage)
@@ -248,6 +253,7 @@ defaultConfig = XConfig
, XMonad.manageHook = manageHook
, XMonad.handleEventHook = handleEventHook
, XMonad.focusFollowsMouse = focusFollowsMouse
+ , XMonad.clickJustFocuses = clickJustFocuses
}
-- | Finally, a copy of the default bindings in simple textual tabular format.
diff --git a/XMonad/Core.hs b/XMonad/Core.hs
index ba7aebf..414437b 100644
--- a/XMonad/Core.hs
+++ b/XMonad/Core.hs
@@ -110,6 +110,7 @@ data XConfig l = XConfig
, logHook :: !(X ()) -- ^ The action to perform when the windows set is changed
, startupHook :: !(X ()) -- ^ The action to perform on startup
, focusFollowsMouse :: !Bool -- ^ Whether window entry events can change focus
+ , clickJustFocuses :: !Bool -- ^ False to make a click which changes focus to be additionally passed to the window
}
diff --git a/XMonad/Main.hsc b/XMonad/Main.hsc
index bd2ec0a..c459f14 100644
--- a/XMonad/Main.hsc
+++ b/XMonad/Main.hsc
@@ -253,8 +253,11 @@ handle e@(ButtonEvent {ev_window = w,ev_event_type = t,ev_button = b })
m <- cleanMask $ ev_state e
mact <- asks (M.lookup (m, b) . buttonActions)
case mact of
- (Just act) | isr -> act $ ev_subwindow e
- _ -> focus w >> io (allowEvents dpy replayPointer currentTime)
+ Just act | isr -> act $ ev_subwindow e
+ _ -> do
+ focus w
+ ctf <- asks (clickJustFocuses . config)
+ unless ctf $ io (allowEvents dpy replayPointer currentTime)
broadcastMessage e -- Always send button events.
-- entered a normal window: focus it if focusFollowsMouse is set to
diff --git a/XMonad/Operations.hs b/XMonad/Operations.hs
index f2beea4..6bca311 100644
--- a/XMonad/Operations.hs
+++ b/XMonad/Operations.hs
@@ -283,11 +283,14 @@ rescreen = do
-- | setButtonGrab. Tell whether or not to intercept clicks on a given window
setButtonGrab :: Bool -> Window -> X ()
-setButtonGrab grab w = withDisplay $ \d -> io $
- if grab
+setButtonGrab grab w = do
+ pointerMode <- asks $ \c -> if clickJustFocuses (config c)
+ then grabModeAsync
+ else grabModeSync
+ withDisplay $ \d -> io $ if grab
then forM_ [button1, button2, button3] $ \b ->
grabButton d b anyModifier w False buttonPressMask
- grabModeSync grabModeSync none none
+ pointerMode grabModeSync none none
else ungrabButton d anyButton anyModifier w
-- ---------------------------------------------------------------------