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

94 lines
2.7 KiB
Haskell
Raw Normal View History

{-# LANGUAGE ScopedTypeVariables #-}
2020-03-20 00:51:36 -04:00
2020-04-01 22:06:00 -04:00
--------------------------------------------------------------------------------
-- | High-level interface for managing XMonad's DBus
2020-04-01 20:17:47 -04:00
module XMonad.Internal.DBus.Control
( Client
, startXMonadService
2020-04-01 20:17:47 -04:00
, stopXMonadService
, pathExists
, xmonadBus
, DBusXMonad(..)
2020-04-01 20:17:47 -04:00
) where
2020-03-20 00:51:36 -04:00
import Data.Either
import DBus
import DBus.Client
2020-03-20 00:51:36 -04:00
import XMonad.Internal.DBus.Brightness.Common
-- import XMonad.Internal.DBus.Brightness.IntelBacklight
import XMonad.Internal.DBus.Common
2020-04-01 20:17:47 -04:00
import XMonad.Internal.DBus.Screensaver
-- import XMonad.Internal.Dependency
2020-04-01 20:17:47 -04:00
introspectInterface :: InterfaceName
introspectInterface = interfaceName_ "org.freedesktop.DBus.Introspectable"
introspectMethod :: MemberName
introspectMethod = memberName_ "Introspect"
data DBusXMonad = DBusXMonad
{ dxClient :: Client
, dxIntelBacklightCtrl :: BrightnessControls
-- , dxClevoBacklightCtrl :: MaybeExe BrightnessControls
2021-11-08 00:27:39 -05:00
, dxScreensaverCtrl :: SSControls
}
-- blankControls :: BrightnessControls
-- blankControls = BrightnessControls
-- { bctlMax = BlankFeature
-- , bctlMin = BlankFeature
-- , bctlInc = BlankFeature
-- , bctlDec = BlankFeature
-- }
-- blankSSToggle :: SSControls
-- blankSSToggle = SSControls { ssToggle = BlankFeature }
-- xmonadService :: Feature (IO Client)
-- xmonadService = Feature
-- { ftrAction = undefined
-- , ftr
2021-11-08 00:27:39 -05:00
startXMonadService :: IO Client
2020-03-20 00:51:36 -04:00
startXMonadService = do
client <- connectSession
res <- requestName client xmonadBus []
case res of
NamePrimaryOwner -> return ()
_ -> putStrLn $ "error when requesting '" ++ formatBusName xmonadBus ++ "'"
2020-03-20 00:51:36 -04:00
-- TODO if the client is not released on shutdown the owner will be
-- different
-- (i, s) <- if requestResult /= NamePrimaryOwner then do
-- putStrLn "Another service owns \"org.xmonad\""
-- return (blankControls, blankSSToggle)
-- else do
-- putStrLn "Started xmonad dbus client"
-- bc <- exportIntelBacklight client
-- sc <- exportScreensaver client
-- return (bc, sc)
return client
-- return $ DBusXMonad
-- { dxClient = client
-- , dxIntelBacklightCtrl = i
-- -- , dxClevoBacklightCtrl = c
-- , dxScreensaverCtrl = s
-- }
2020-03-20 00:51:36 -04:00
stopXMonadService :: Client -> IO ()
stopXMonadService client = do
_ <- releaseName client xmonadBus
2020-03-20 00:51:36 -04:00
disconnect client
return ()
pathExists :: Bool -> BusName -> ObjectPath -> IO Bool
pathExists sysbus n p = do
client <- if sysbus then connectSystem else connectSession
r <- call client (methodCall p introspectInterface introspectMethod)
{ methodCallDestination = Just n }
disconnect client
return $ isRight r