summaryrefslogtreecommitdiffstats
path: root/lib/Graphics/X11/EWMH.hs
blob: 210d1bf782a975526e7bfac772a501666ab03a67 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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