aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--XMonad/Actions/UpdatePointer.hs54
-rw-r--r--xmonad-contrib.cabal1
2 files changed, 55 insertions, 0 deletions
diff --git a/XMonad/Actions/UpdatePointer.hs b/XMonad/Actions/UpdatePointer.hs
new file mode 100644
index 0000000..292bfdc
--- /dev/null
+++ b/XMonad/Actions/UpdatePointer.hs
@@ -0,0 +1,54 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module : XMonadContrib.UpdatePointer
+-- Copyright : (c) Robert Marlow <robreim@bobturf.org>
+-- License : BSD3-style (see LICENSE)
+--
+-- Maintainer : Robert Marlow <robreim@bobturf.org>
+-- Stability : stable
+-- Portability : portable
+--
+-- Causes the pointer to follow whichever window focus changes to. Compliments
+-- the idea of switching focus as the mouse crosses window boundaries to
+-- keep the mouse near the currently focussed window
+--
+-----------------------------------------------------------------------------
+
+module XMonad.Actions.UpdatePointer
+ (
+ -- * Usage
+ -- $usage
+ updatePointer
+ )
+ where
+
+import XMonad
+import Control.Monad
+
+-- $usage
+-- You can use this module with the following in your @~\/.xmonad\/xmonad.hs@:
+--
+-- > import XMonad
+-- > import XMonad.Hooks.DynamicLog
+--
+-- Enable it by including it in your logHook definition. Eg:
+--
+-- > logHook = updatePointer (1%2) (1%2)
+--
+-- which will move the pointer to the middle of a newly focused window if the
+-- focus moves away from the pointer
+
+
+-- | Update the pointer's location to the currently focused window unless it's
+-- already there
+updatePointer :: Rational -> Rational -> X ()
+updatePointer h v = withFocused $ \w -> do
+ dpy <- asks display
+ root <- asks theRoot
+ wa <- io $ getWindowAttributes dpy w
+ (sameRoot,_,w',_,_,_,_,_) <- io $ queryPointer dpy root
+ unless (sameRoot && w == w') $
+ io $ warpPointer dpy none w 0 0 0 0
+ (fraction h (wa_width wa)) (fraction v (wa_height wa))
+ where fraction x y = floor (x * fromIntegral y)
+
diff --git a/xmonad-contrib.cabal b/xmonad-contrib.cabal
index 657c5cb..336b4d3 100644
--- a/xmonad-contrib.cabal
+++ b/xmonad-contrib.cabal
@@ -82,6 +82,7 @@ library
XMonad.Actions.Submap
XMonad.Actions.SwapWorkspaces
XMonad.Actions.TagWindows
+ XMonad.Actions.UpdatePointer
XMonad.Actions.Warp
XMonad.Actions.WindowGo
XMonad.Actions.WindowBringer