[xmonad] Pointer follows focus (with patch)

lithis xmonad at s001.hethrael.com
Fri Feb 22 18:22:44 EST 2008


Thanks Robert! I got your code to work in my Config.hs
without any modifications to xmonad. Here's what I have:

pointerFollowsFocus ::  Rational -> Rational -> X ()
pointerFollowsFocus h v = do
    dpy <- asks display
    root <- asks theRoot
    withFocused $ \w -> do
        wa <- io $ getWindowAttributes dpy w
        (sameRoot,_,w',_,_,_,_,_) <- io $ queryPointer dpy root
        if (sameRoot && w == w') then
            return ()
           else
            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)
[...]
logHook = dynamicLogWithPP hethraelPP
    {ppOutput = hPutStrLn xmobar } >> pointerFollowsFocus 1 1

'unless' was not in scope, so I changed it to an if
statement.

I have found a couple of issues with it, but otherwise it's
great. First, the pointer warps when tabs are clicked. The
second is a little more complicated. When using a full or
tabbed layout, calling focusDown (mod+J) to move from the
last window to the first window causes the pointer to warp
even if the pointer is in the window. When calling focusUp
(mod+K), the pointer always warps unless moving from the
master window to the last window.


More information about the xmonad mailing list