diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Window.hs | 15 | ||||
| -rw-r--r-- | src/Xmobar.hs | 11 | 
2 files changed, 26 insertions, 0 deletions
diff --git a/src/Window.hs b/src/Window.hs index 4917f57..e59c5ff 100644 --- a/src/Window.hs +++ b/src/Window.hs @@ -134,3 +134,18 @@ drawBorder b d p gc c wi ht =  case b of                   sf >> drawRectangle d p gc mp mp (w - pad) (h - pad)    where sf = setForeground d gc c          (w, h) = (wi - 1, ht - 1) + +hideWindow :: Display -> Window -> IO () +hideWindow d w = do +    a <- internAtom d "_NET_WM_STRUT_PARTIAL"    False +    c <- internAtom d "CARDINAL"                 False +    changeProperty32 d w a c propModeReplace $ replicate 12 0 +    unmapWindow d w +    sync d False + +showWindow :: Display -> Window -> IO () +showWindow d w = mapWindow d w >> sync d False + +isMapped :: Display -> Window -> IO Bool +isMapped d w = fmap ism $ getWindowAttributes d w +    where ism (WindowAttributes { wa_map_state = wms }) = wms /= waIsUnmapped diff --git a/src/Xmobar.hs b/src/Xmobar.hs index 1b58352..a65a236 100644 --- a/src/Xmobar.hs +++ b/src/Xmobar.hs @@ -140,7 +140,18 @@ eventLoop tv xc@(XConf d _ w fs cfg) signal = do              ncfg <- updateConfigPosition cfg              reposWindow ncfg +         Hide ->   hide +         Reveal -> reveal +         Toggle -> toggle +      where +        hide   = hideWindow d w >> eventLoop tv xc signal +        reveal = do +            r' <- repositionWin d w fs cfg +            showWindow d w +            eventLoop tv (XConf d r' w fs cfg) signal +        toggle = isMapped d w >>= \b -> if b then hide else reveal +          reposWindow rcfg = do            r' <- repositionWin d w fs rcfg            eventLoop tv (XConf d r' w fs rcfg) signal  | 
