]> code.delx.au - dotfiles/commitdiff
xmonad: rewrote managehook to handle avoidMaster the way I want
authorJames Bunton <jamesbunton@delx.net.au>
Mon, 13 May 2013 13:17:46 +0000 (23:17 +1000)
committerJames Bunton <jamesbunton@delx.net.au>
Mon, 13 May 2013 13:18:14 +0000 (23:18 +1000)
.xmonad/xmonad.hs

index a16164a247545faeca22915555f65cc6e7cf5fc6..03a84163b738f144bab95386e4678b86370aa53f 100644 (file)
@@ -3,12 +3,12 @@ import XMonad
 import XMonad.Hooks.DynamicLog
 import XMonad.Hooks.ICCCMFocus
 import XMonad.Hooks.ManageDocks
+import XMonad.Hooks.ManageHelpers
 import XMonad.Hooks.Script
 import XMonad.Hooks.SetWMName
 import XMonad.Layout.IM
 import XMonad.Layout.LayoutHints
 import qualified XMonad.Layout.Magnifier as Mag
-import XMonad.Hooks.ManageHelpers
 import XMonad.Layout.NoBorders
 import XMonad.Layout.NoFrillsDecoration
 import XMonad.Layout.PerWorkspace
@@ -18,6 +18,7 @@ import XMonad.Layout.Tabbed
 import XMonad.Layout.ThreeColumns
 import XMonad.Layout.TwoPane
 import XMonad.Util.Run(spawnPipe)
+import XMonad.Util.WindowProperties(getProp32s)
 import qualified Data.Map as M
 import qualified XMonad.StackSet as W
 
@@ -73,17 +74,21 @@ avoidMaster = W.modify' $ \c -> case c of
        W.Stack t [] (r:rs) -> W.Stack t [r] rs
        otherwise -> c
 
-myManageHook = composeAll [
-               (className =? "Gnome-fallback-mount-helper" <&&> resource =? "gnome-fallback-mount-helper") --> doFloat,
-               (className =? "Gdu-notification-daemon" <&&> resource =? "gdu-notification-daemon") --> doFloat,
-               (className =? "Firefox" <&&> resource =? "Dialog") --> doFloat,
-               (className =? "Firefox" <&&> resource =? "Popup") --> (ask >>= doF . W.sink),
-               (className =? "Firefox" <&&> resource =? "Navigator" <&&> currentWs =? "1") --> (doShift "2"),
-               (className =? "Screenruler" <&&> resource =? "screenruler") --> doFloat,
-               (className =? "Plugin-container" <&&> resource =? "plugin-container") --> doFullFloat,
-               (className =? "Sushi-start" <&&> resource =? "sushi-start") --> (doFloatAt 0.1 0.1),
-               (fmap not isDialog --> doF avoidMaster),
-               manageDocks
+isTransient = ask >>= \w -> liftX $ do
+       r <- getProp32s "WM_TRANSIENT_FOR" w
+       return $ case r of
+               Just [_] -> True
+               _ -> False
+
+myManageHook =
+       manageDocks <+>
+       composeOne [
+               (className =? "Firefox" <&&> resource =? "Popup") -?> (ask >>= doF . W.sink),
+               (className =? "Firefox" <&&> resource =? "Navigator" <&&> currentWs =? "1") -?> (doShift "2"),
+               (isDialog -?> doFloatAt 0.1 0.1),
+               (isTransient -?> doFloatAt 0.1 0.1),
+               (isFullscreen -?> doFullFloat),
+               (fmap Just $ doF avoidMaster)
        ]
 
 
@@ -186,7 +191,7 @@ main = do
        xmonadDir <- getXMonadDir
        xmobar <- spawnPipe ("xmobar " ++ xmonadDir ++ "/xmobar.hs")
        xmonad $ defaultConfig {
-               manageHook = myManageHook <+> manageHook defaultConfig,
+               manageHook = myManageHook,
                layoutHook = myLayout,
                workspaces = myWorkspaces,
                logHook = myLogHook xmobar,