diff options
-rw-r--r-- | ManageDocks.hs | 59 | ||||
-rw-r--r-- | MetaModule.hs | 1 |
2 files changed, 60 insertions, 0 deletions
diff --git a/ManageDocks.hs b/ManageDocks.hs new file mode 100644 index 0000000..f487a60 --- /dev/null +++ b/ManageDocks.hs @@ -0,0 +1,59 @@ +----------------------------------------------------------------------------- +-- | +-- 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 diff --git a/MetaModule.hs b/MetaModule.hs index 2b4b210..07fbf49 100644 --- a/MetaModule.hs +++ b/MetaModule.hs @@ -48,6 +48,7 @@ import XMonadContrib.LayoutModifier () import XMonadContrib.LayoutHints () import XMonadContrib.LayoutScreens () import XMonadContrib.MagicFocus () +import XMonadContrib.ManageDocks () -- import XMonadContrib.Magnifier () import XMonadContrib.Maximize () -- import XMonadContrib.Mosaic () |