diff options
Diffstat (limited to 'lib/Graphics/X11/EWMH.hs')
-rw-r--r-- | lib/Graphics/X11/EWMH.hs | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/lib/Graphics/X11/EWMH.hs b/lib/Graphics/X11/EWMH.hs new file mode 100644 index 0000000..4f539ad --- /dev/null +++ b/lib/Graphics/X11/EWMH.hs @@ -0,0 +1,48 @@ +module Graphics.X11.EWMH + ( module Graphics.X11.EWMH + , module Graphics.X11.EWMH.Atom + ) where + +import Control.Applicative ((<|>)) +import Data.Text (Text) +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 (getWindowPropertyText) +import Graphics.X11.Xlib.Types (Display) +import qualified Data.Text as Text + + +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 [Text]) +getDesktopNames dpy = do + (fmap (init . Text.split (=='\NUL')) <$>) $ + getWindowPropertyText dpy _NET_DESKTOP_NAMES w <|> + getWindowPropertyText 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 Text) +getWindowTitle dpy w = + getWindowPropertyText dpy _NET_WM_NAME w <|> + getWindowPropertyText dpy _WM_NAME w |