diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/XUtil.hsc | 6 | ||||
| -rw-r--r-- | src/Xmobar.hs | 11 | 
2 files changed, 16 insertions, 1 deletions
| diff --git a/src/XUtil.hsc b/src/XUtil.hsc index d5bb591..6511b10 100644 --- a/src/XUtil.hsc +++ b/src/XUtil.hsc @@ -28,6 +28,7 @@ module XUtil      , fi      , withColors      , DynPixel(..) +	, xrrSelectInput      ) where  import Control.Concurrent @@ -257,3 +258,8 @@ setupLocale = withCString "" (setlocale $ #const LC_ALL) >> return ()  setupLocale :: IO ()  setupLocale = return ()  #endif + +--  XRRSelectInput +#include <X11/extensions/Xrandr.h> +foreign import ccall unsafe "X11/extensions/Xrandr.h XRRSelectInput" +  xrrSelectInput :: Display -> Window -> EventMask -> IO () diff --git a/src/Xmobar.hs b/src/Xmobar.hs index eb7a1dd..f0c00cb 100644 --- a/src/Xmobar.hs +++ b/src/Xmobar.hs @@ -103,6 +103,7 @@ eventLoop xc@(XConf d _ w fs c) vs = block $ do      -- event hanlder      handle _ ct (ConfigureEvent {ev_window = win}) = do        rootw <- rootWindow d (defaultScreen d) +      putStrLn "Configure"        when (win == rootw) $ block $ do                        killThread ct                        destroyWindow d w @@ -111,7 +112,13 @@ eventLoop xc@(XConf d _ w fs c) vs = block $ do      handle tvar _ (ExposeEvent {}) = runX xc (updateWin tvar) -    handle _ _ _  = return () +    --  this catches the RRScreenChangeNotify +    handle _ ct _  = block $ do +                      putStrLn "ScreenChange" +                      killThread ct +                      destroyWindow d w +                      (r',w') <- createWin d fs c +                      eventLoop (XConf d r' w' fs c) vs  -- $command @@ -141,6 +148,8 @@ createWin d fs c = do        (r,o) = setPosition (position c) srs (fi ht)    win <- newWindow  d (defaultScreenOfDisplay d) rootw r o    selectInput       d win (exposureMask .|. structureNotifyMask) +  --  RRScreenChangeNotifyMask has the same value as keyPressMask +  xrrSelectInput    d rootw (keyPressMask)    setProperties r c d win srs    when (lowerOnStart c) (lowerWindow d win)    mapWindow         d win | 
