From 1c54d11f556ef4850165832072ccbed55e417f4e Mon Sep 17 00:00:00 2001 From: mail Date: Sat, 6 Oct 2007 15:28:02 +0200 Subject: (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 darcs-hash:20071006132802-c9905-befdbe36f6f280d987dfb62702b7a6e05ce3306c.gz --- ManageDocks.hs | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ MetaModule.hs | 1 + 2 files changed, 60 insertions(+) create mode 100644 ManageDocks.hs 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 +-- License : BSD +-- +-- Maintainer : Joachim Breitner +-- 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 () -- cgit v1.2.3