Files
xmonad-contrib/ManageDocks.hs
mail 6c2b35046d (un)Manage Docks based on WINDOW_TYPE
Hi,

this is a replacement for the example code in Config.hs that should detect
and unamange, for example, the gnome-panel.

The problem with that code is that it also unamangs dialog boxes from gnome-panel
which then are not usable (no keyboard intput, at least here).

Greetings,
Joachim
2007-10-06 13:28:02 +00:00

60 lines
1.6 KiB
Haskell

-----------------------------------------------------------------------------
-- |
-- Module : XMonadContrib.ManageDocks
-- Copyright : (c) Joachim Breitner <mail@joachim-breitner.de>
-- License : BSD
--
-- Maintainer : Joachim Breitner <mail@joachim-breitner.de>
-- Stability : unstable
-- Portability : unportable
--
-- Makes xmonad detect windows with type DOCK and does not put them in
-- layouts.
-----------------------------------------------------------------------------
module XMonadContrib.ManageDocks (
-- * Usage
-- $usage
manageDocksHook
) where
import Control.Monad.Reader
import XMonad
import Operations
import qualified StackSet as W
import Graphics.X11.Xlib
import Graphics.X11.Xlib.Extras
-- $usage
-- Add the imports to your configuration file and add the mangeHook:
--
-- > import XMonadContrib.ManageDocks
--
-- > manageHook w _ _ _ = manageDocksHook w
-- %import XMonadContrib.ManageDocks
-- %def -- comment out default manageHook definition above if you uncomment this:
-- %def manageHook _ _ _ = manageDocksHook w
-- |
-- Deteckts if the given window is of type DOCK and if so, reveals it, but does
-- not manage it
manageDocksHook :: Window -> X (WindowSet -> WindowSet)
manageDocksHook w = do
isDock <- checkDock w
if isDock then do
reveal w
return (W.delete w)
else do
return id
checkDock :: Window -> X (Bool)
checkDock w = do
a <- getAtom "_NET_WM_WINDOW_TYPE"
d <- getAtom "_NET_WM_WINDOW_TYPE_DOCK"
mbr <- withDisplay $ \dpy -> do
io $ getWindowProperty32 dpy a w
case mbr of
Just [r] -> return (r == d)
_ -> return False