summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/XUtil.hsc6
-rw-r--r--src/Xmobar.hs11
-rw-r--r--xmobar.cabal1
3 files changed, 17 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
diff --git a/xmobar.cabal b/xmobar.cabal
index ecafe1d..bb46101 100644
--- a/xmobar.cabal
+++ b/xmobar.cabal
@@ -82,6 +82,7 @@ executable xmobar
if true
ghc-options: -funbox-strict-fields -Wall
+ extra-libraries: Xrandr
if impl (ghc == 6.10.1) && arch (x86_64)
ghc-options: -O0