From fe48ecd3b1cc11f176c1080539b70abac956f0a0 Mon Sep 17 00:00:00 2001 From: tv Date: Tue, 7 Feb 2023 03:01:37 +0100 Subject: move EWMH-related stuff to Graphics.X11.EWMH --- lib/Graphics/X11/EWMH.hs | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 lib/Graphics/X11/EWMH.hs (limited to 'lib/Graphics/X11/EWMH.hs') 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 -- cgit v1.2.3