diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/IPC/DBus.hs | 17 | 
1 files changed, 12 insertions, 5 deletions
| diff --git a/src/IPC/DBus.hs b/src/IPC/DBus.hs index b9bffd5..f6fdcb7 100644 --- a/src/IPC/DBus.hs +++ b/src/IPC/DBus.hs @@ -17,7 +17,7 @@ module IPC.DBus (runIPC) where  import DBus  import DBus.Client hiding (interfaceName)  import qualified DBus.Client as DC -import Control.Monad (when) +import Data.Maybe (isNothing)  import Control.Concurrent.STM  import Control.Exception (handle)  import System.IO (stderr, hPutStrLn) @@ -57,10 +57,17 @@ sendSignalMethod mvst = makeMethod sendSignalName      sendSignalName = memberName_ "SendSignal"      sendSignalMethodCall :: MethodCall -> DBusR Reply -    sendSignalMethodCall mc = liftIO $ do -        when ( methodCallMember mc == sendSignalName ) -             $ mapM_ (sendSignal . fromVariant) (methodCallBody mc) -        return ( ReplyReturn [] ) +    sendSignalMethodCall mc = liftIO $ +        if methodCallMember mc == sendSignalName +          then do +            let signals :: [Maybe SignalType] +                signals = map fromVariant (methodCallBody mc) +            mapM_ sendSignal signals +            if any isNothing signals +              then return ( ReplyError errorInvalidParameters [] ) +              else return ( ReplyReturn [] ) +          else +            return ( ReplyError errorUnknownMethod [] )      sendSignal :: Maybe SignalType -> IO ()      sendSignal = maybe (return ()) (atomically . putTMVar mvst) | 
