diff options
author | Jochen Keil <jochen.keil@gmail.com> | 2012-08-08 19:54:22 +0200 |
---|---|---|
committer | Jochen Keil <jochen.keil@gmail.com> | 2012-08-09 10:43:39 +0200 |
commit | 77ce9cbe7f8371aadf24713a6d700a436d983eaf (patch) | |
tree | 3a959d4785734a9e4c79b6cd846a571361e29c92 /src/Signal.hs | |
parent | a52c4a076807ae04db67894aebd741924ff9f926 (diff) | |
download | xmobar-77ce9cbe7f8371aadf24713a6d700a436d983eaf.tar.gz xmobar-77ce9cbe7f8371aadf24713a6d700a436d983eaf.tar.bz2 |
Move signal handler and data types to own module
This is necessary to make SignalType available for other modules without
import loops. This also decoupels the modules and their functionality a
bit more so this is generally a cleaner solution.
Diffstat (limited to 'src/Signal.hs')
-rw-r--r-- | src/Signal.hs | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/Signal.hs b/src/Signal.hs new file mode 100644 index 0000000..3919d86 --- /dev/null +++ b/src/Signal.hs @@ -0,0 +1,33 @@ +{-# LANGUAGE DeriveDataTypeable #-} + +module Signal where + +import Data.Typeable (Typeable) +import Control.Concurrent +import Control.Exception hiding (handle) +import System.Posix.Signals + +data WakeUp = WakeUp deriving (Show,Typeable) +instance Exception WakeUp + +data SignalType = Wakeup + | Reposition + | ChangeScreen + +-- | Signal handling +setupSignalHandler :: IO (MVar SignalType) +setupSignalHandler = do + tid <- newEmptyMVar + installHandler sigUSR2 (Catch $ updatePosHandler tid) Nothing + installHandler sigUSR1 (Catch $ changeScreenHandler tid) Nothing + return tid + +updatePosHandler :: MVar SignalType -> IO () +updatePosHandler sig = do + putMVar sig Reposition + return () + +changeScreenHandler :: MVar SignalType -> IO () +changeScreenHandler sig = do + putMVar sig ChangeScreen + return () |