XMonad: скрыть монитор при наведении курсора мыши (config.hs) - PullRequest
0 голосов
/ 16 ноября 2011

в моем config.hs Я использую Монитор, чтобы показать wmclockmon поверх всех окон, например:

myClckMonitor = monitor
    { prop = ClassName "DockApp" `And` Title "wmclockmon"
    , rect = Rectangle (1680 - 64) 0 64 64
    , persistent = False
    , name = "clock"
    }
myNewLayout = ModifiedLayout myClckMonitor $ smartBorders $ avoidStruts $ myLayout ||| noBorders Full

И дополнительно добавил его вигнорирует manageHook.

Теперь я хочу скрыть монитор, когда наведу на него курсор (навести курсор мыши) (и, конечно, показать его снова, когда покину эту область).Есть ли у вас какие-либо советы, как этого добиться?

1 Ответ

1 голос
/ 17 ноября 2011

Я наконец получил это!

Соответствующая часть моего xmonad.hs :

import Data.IORef
import XMonad.Layout.Monitor

myClckMonitor = monitor
    { prop = ClassName "DockApp" `And` Title "wmclockmon"
    , rect = Rectangle (1680 - 64) 0 64 64
    , persistent = False
    , name = "clock"
    }

screenRectEventHook :: Event -> X All
screenRectEventHook CrossingEvent { ev_window = win } = do
    dpy <- asks display
    root <- asks theRoot
    (posX, posY, acc) <- io $ do
        -- queryPointer :: Display -> Window -> IO (Bool, Window, Window, Int, Int, Int, Int, Modifier)
        --    interface to the X11 library function XQueryPointer().
        (_, _, _, ix, iy, _, _, _) <- queryPointer dpy root
        r <- newIORef Nothing
        return (fromIntegral ix, fromIntegral iy, r)

    if (posY < 64 && posX > (1680 - 64))
        then do
            broadcastMessage HideMonitor >> refresh
            return (All True)
        else do
            broadcastMessage ShowMonitor >> refresh
            return (All True)
screenRectEventHook _ = return (All True)

и затем зарегистрируйте перехват событий:

myEventHook e = do
    screenRectEventHook e
    return (All True)

Как видите, координаты моего монитора жестко закодированы!Вопрос о том, как заново отобразить часы, до сих пор остается открытым.Однако если вы переключите рабочую область или другое окно, оно снова станет видимым.Это достаточно хорошо для меня.

...