[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