module Graphics.X11.EWMH ( module Graphics.X11.EWMH , module Graphics.X11.EWMH.Atom ) where import Control.Applicative ((<|>)) import Data.List.Extra (split) import Foreign.C.Types (CLong) import Graphics.X11.EWMH.Atom import Graphics.X11.Types (Window) import Graphics.X11.Xlib.Atom.Extra import Graphics.X11.Xlib.Display (defaultRootWindow) import Graphics.X11.Xlib.Extras (getWindowProperty32) import Graphics.X11.Xlib.Extras.Extra (getWindowPropertyString) import Graphics.X11.Xlib.Types (Display) getActiveWindow :: Display -> IO (Maybe Window) getActiveWindow dpy = (fmap (fromIntegral . head) <$>) $ getWindowProperty32 dpy _NET_ACTIVE_WINDOW w where w = defaultRootWindow dpy getCurrentDesktop :: Display -> IO (Maybe CLong) getCurrentDesktop dpy = (fmap head <$>) $ getWindowProperty32 dpy _NET_CURRENT_DESKTOP w <|> getWindowProperty32 dpy _WIN_WORKSPACE w where w = defaultRootWindow dpy getDesktopNames :: Display -> IO (Maybe [String]) getDesktopNames dpy = do (fmap (init . split (=='\NUL')) <$>) $ getWindowPropertyString dpy _NET_DESKTOP_NAMES w <|> getWindowPropertyString dpy _WIN_WORKSPACE_NAMES w where w = defaultRootWindow dpy getWindowDesktop :: Display -> Window -> IO (Maybe CLong) getWindowDesktop dpy w = (fmap head <$>) $ getWindowProperty32 dpy _NET_WM_DESKTOP w <|> getWindowProperty32 dpy _WIN_WORKSPACE w getWindowTitle :: Display -> Window -> IO (Maybe String) getWindowTitle dpy w = getWindowPropertyString dpy _NET_WM_NAME w <|> getWindowPropertyString dpy _WM_NAME w