10 November 2009
The current implementation for dialog detection only treats transient windows of the parent window as dialogs, and ignores EWMH compliant applications that set the window type to _NET_WM_WINDOW_TYPE_DIALOG
The following code detects EMWH dialog windows:
import XMonad
import Graphics.X11.Xlib.Extras
-- | Float all dialog windows
manageDialogs :: ManageHook
manageDialogs = checkDialog --> doFloat
-- | Check if window is DIALOG window
checkDialog :: Query Bool
checkDialog = ask >>= \w -> liftX $ do
a <- getAtom "_NET_WM_WINDOW_TYPE"
dialog <- getAtom "_NET_WM_WINDOW_TYPE_DIALOG"
mbr <- getProp a w
case mbr of
Just [r] -> return $ elem (fromIntegral r) [dialog]
_ -> return False
-- | Helper to read a property
getProp :: Atom -> Window -> X (Maybe [CLong])
getProp a w = withDisplay $ \dpy -> io $ getWindowProperty32 dpy a w
It's then just a matter of adding the manageDialogs hook to your manageHooks, here is my manageHooks:
myManageHook :: ManageHook
myManageHook = composeAll
[ manageDocks
, manageDialogs
, manageHook defaultConfig
]
Comments are closed.
Comments have been close for this post.