blob: 3919d86d321d37256cfaa6a884f1c5e2bd812cfa (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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 ()
|