xmonad-config/lib/XMonad/Internal/DBus/Common.hs

50 lines
1.5 KiB
Haskell
Raw Normal View History

2020-04-01 22:06:00 -04:00
--------------------------------------------------------------------------------
-- | Common internal DBus functions
2020-04-01 20:17:47 -04:00
module XMonad.Internal.DBus.Common
2021-11-21 16:58:01 -05:00
-- ( callMethod
-- , callMethod'
( addMatchCallback
, xmonadBus
, xmonadBusName
2021-11-20 11:48:05 -05:00
, xDbusDep
-- , initControls
2020-04-01 20:17:47 -04:00
) where
2020-04-01 20:17:47 -04:00
import DBus
import DBus.Client
2021-11-11 00:11:15 -05:00
import XMonad.Internal.Dependency
xmonadBusName :: BusName
xmonadBusName = busName_ "org.xmonad"
xmonadBus :: Bus
xmonadBus = Bus False xmonadBusName
2021-11-20 11:48:05 -05:00
xDbusDep :: ObjectPath -> InterfaceName -> DBusMember -> Dependency
xDbusDep o i m = DBusEndpoint xmonadBus $ Endpoint o i m
2021-11-21 16:58:01 -05:00
-- -- | Call a method and return its result if successful
-- callMethod :: MethodCall -> IO (Maybe [Variant])
-- callMethod mc = do
-- client <- connectSession
-- r <- callMethod' client (Just xmonadBusName) mc
-- disconnect client
-- return r
-- callMethod' :: Client -> Maybe BusName -> MethodCall -> IO (Maybe [Variant])
-- callMethod' client bn mc = do
-- -- TODO handle clienterrors here
-- reply <- call client mc { methodCallDestination = bn }
-- -- TODO not all methods warrant that we wait for a reply? (see callNoReply)
-- return $ case reply of
-- Left _ -> Nothing
-- Right ret -> Just $ methodReturnBody ret
2020-04-01 22:06:00 -04:00
-- | Bind a callback to a signal match rule
addMatchCallback :: MatchRule -> ([Variant] -> IO ()) -> IO SignalHandler
addMatchCallback rule cb = do
client <- connectSession
addMatch client rule $ cb . signalBody