diff options
Diffstat (limited to 'src/Window.hs')
-rw-r--r-- | src/Window.hs | 49 |
1 files changed, 28 insertions, 21 deletions
diff --git a/src/Window.hs b/src/Window.hs index ec50883..aff2c95 100644 --- a/src/Window.hs +++ b/src/Window.hs @@ -16,7 +16,7 @@ module Window where import Prelude -import Control.Monad (when) +import Control.Monad (when, unless) import Graphics.X11.Xlib hiding (textExtents, textWidth) import Graphics.X11.Xlib.Extras import Graphics.X11.Xinerama @@ -40,7 +40,7 @@ createWin d fs c = do (r,o) = setPosition (position c) srs (fi ht) win <- newWindow d (defaultScreenOfDisplay d) rootw r o when (lowerOnStart c) (lowerWindow d win) - when (not $ hideOnStart c) $ showWindow r c d win + unless (hideOnStart c) $ showWindow r c d win setProperties r c d win srs return (r,win) @@ -88,25 +88,32 @@ setPosition p rs ht = setProperties :: Rectangle -> Config -> Display -> Window -> [Rectangle] -> IO () -setProperties r c d w srs = do - a1 <- internAtom d "_NET_WM_STRUT_PARTIAL" False - c1 <- internAtom d "CARDINAL" False - a2 <- internAtom d "_NET_WM_WINDOW_TYPE" False - c2 <- internAtom d "ATOM" False - v <- internAtom d "_NET_WM_WINDOW_TYPE_DOCK" False - p <- internAtom d "_NET_WM_PID" False +setProperties r c d w rs = do + pstrut <- internAtom d "_NET_WM_STRUT_PARTIAL" False + strut <- internAtom d "_NET_WM_STRUT" False + card <- internAtom d "CARDINAL" False + wtype <- internAtom d "_NET_WM_WINDOW_TYPE" False + atom <- internAtom d "ATOM" False + dock <- internAtom d "_NET_WM_WINDOW_TYPE_DOCK" False + pid <- internAtom d "_NET_WM_PID" False setTextProperty d w "xmobar" wM_CLASS setTextProperty d w "xmobar" wM_NAME ismapped <- isMapped d w - changeProperty32 d w a1 c1 propModeReplace $ - if ismapped - then map fi $ getStrutValues r (position c) (getRootWindowHeight srs) - else replicate 12 0 - changeProperty32 d w a2 c2 propModeReplace [fromIntegral v] - - getProcessID >>= changeProperty32 d w p c1 propModeReplace . return . fromIntegral + let svs = if ismapped + then map fi $ getStrutValues r + (position c) + (getRootWindowHeight rs) + else replicate 12 0 + changeProperty32 d w pstrut card propModeReplace svs + changeProperty32 d w strut card propModeReplace (take 4 svs) + changeProperty32 d w wtype atom propModeReplace [fi dock] + when (allDesktops c) $ do + desktop <- internAtom d "_NET_WM_DESKTOP" False + changeProperty32 d w desktop card propModeReplace [0xffffffff] + + getProcessID >>= changeProperty32 d w pid card propModeReplace . return . fi getRootWindowHeight :: [Rectangle] -> Int getRootWindowHeight srs = maximum (map getMaxScreenYCoord srs) @@ -115,7 +122,7 @@ getRootWindowHeight srs = maximum (map getMaxScreenYCoord srs) getStrutValues :: Rectangle -> XPosition -> Int -> [Int] getStrutValues r@(Rectangle x y w h) p rwh = - case p of + case p of OnScreen _ p' -> getStrutValues r p' rwh Top -> [0, 0, st, 0, 0, 0, 0, 0, nx, nw, 0, 0] TopP _ _ -> [0, 0, st, 0, 0, 0, 0, 0, nx, nw, 0, 0] @@ -126,10 +133,10 @@ getStrutValues r@(Rectangle x y w h) p rwh = BottomW _ _ -> [0, 0, 0, sb, 0, 0, 0, 0, 0, 0, nx, nw] BottomSize {} -> [0, 0, 0, sb, 0, 0, 0, 0, 0, 0, nx, nw] Static {} -> getStaticStrutValues p rwh - where st = fi y + fi h - sb = rwh - fi y - nx = fi x - nw = fi (x + fi w - 1) + where st = fi y + fi h + sb = rwh - fi y + nx = fi x + nw = fi (x + fi w - 1) -- get some reaonable strut values for static placement. getStaticStrutValues :: XPosition -> Int -> [Int] |