aboutsummaryrefslogtreecommitdiffstats
path: root/XMonad/Hooks/EwmhDesktops
diff options
context:
space:
mode:
authorgwern0 <gwern0@gmail.com>2007-11-06 20:17:51 +0100
committergwern0 <gwern0@gmail.com>2007-11-06 20:17:51 +0100
commit318d99779ffc7f999b4ff9b22e8b6e0f8a446efa (patch)
treee3b6941cc293ddeeb2a222cd44a4d8087ad4272c /XMonad/Hooks/EwmhDesktops
parent872331eb10871682dbb44027782e87f71bc18131 (diff)
downloadXMonadContrib-318d99779ffc7f999b4ff9b22e8b6e0f8a446efa.tar.gz
XMonadContrib-318d99779ffc7f999b4ff9b22e8b6e0f8a446efa.tar.xz
XMonadContrib-318d99779ffc7f999b4ff9b22e8b6e0f8a446efa.zip
EwmhDesktops: move to correct name, update so it compiles
darcs-hash:20071106191751-f7719-83d0cc7d50c7ce615a66c9fe38c1060cf2ef9405.gz
Diffstat (limited to 'XMonad/Hooks/EwmhDesktops')
-rw-r--r--XMonad/Hooks/EwmhDesktops130
1 files changed, 0 insertions, 130 deletions
diff --git a/XMonad/Hooks/EwmhDesktops b/XMonad/Hooks/EwmhDesktops
deleted file mode 100644
index 4e2d754..0000000
--- a/XMonad/Hooks/EwmhDesktops
+++ /dev/null
@@ -1,130 +0,0 @@
------------------------------------------------------------------------------
--- |
--- Module : XMonadContrib.EwmhDesktops
--- Copyright : (c) Joachim Breitner <mail@joachim-breitner.de>
--- License : BSD
---
--- Maintainer : Joachim Breitner <mail@joachim-breitner.de>
--- Stability : unstable
--- Portability : unportable
---
--- Makes xmonad use the EWMH hints to tell panel applications about its
--- workspaces and the windows therein.
------------------------------------------------------------------------------
-module XMonadContrib.EwmhDesktops (
- -- * Usage
- -- $usage
- ewmhDesktopsLogHook
- ) where
-
-import Data.List (elemIndex, sortBy)
-import Data.Ord (comparing)
-import Data.Maybe (fromMaybe)
-
-import Control.Monad.Reader
-import XMonad
-import qualified XMonad.StackSet as W
-import Graphics.X11.Xlib
-import Graphics.X11.Xlib.Extras
-
-import XMonadContrib.SetWMName
-
--- $usage
--- Add the imports to your configuration file and add the logHook:
---
--- > import XMonadContrib.EwmhDesktops
---
--- > logHook :: X()
--- > logHook = do ewmhDesktopsLogHook
--- > return ()
-
--- %import XMonadContrib.EwmhDesktops
--- %def -- comment out default logHook definition above if you uncomment this:
--- %def logHook = ewmhDesktopsLogHook
-
-
--- |
--- Notifies pagers and window lists, such as those in the gnome-panel
--- of the current state of workspaces and windows.
-ewmhDesktopsLogHook :: X ()
-ewmhDesktopsLogHook = withWindowSet $ \s -> do
- -- Bad hack because xmonad forgets the original order of things, it seems
- -- see http://code.google.com/p/xmonad/issues/detail?id=53
- let ws = sortBy (comparing W.tag) $ W.workspaces s
- let wins = W.allWindows s
-
- setSupported
-
- -- Number of Workspaces
- setNumberOfDesktops (length ws)
-
- -- Names thereof
- setDesktopNames (map W.tag ws)
-
- -- Current desktop
- fromMaybe (return ()) $ do
- n <- W.lookupWorkspace 0 s
- i <- elemIndex n $ map W.tag ws
- return $ setCurrentDesktop i
-
- setClientList wins
-
- -- Per window Desktop
- forM (zip ws [(0::Int)..]) $ \(w, wn) ->
- forM (W.integrate' (W.stack w)) $ \win -> do
- setWindowDesktop win wn
-
- return ()
-
-
-setNumberOfDesktops :: (Integral a) => a -> X ()
-setNumberOfDesktops n = withDisplay $ \dpy -> do
- a <- getAtom "_NET_NUMBER_OF_DESKTOPS"
- c <- getAtom "CARDINAL"
- r <- asks theRoot
- io $ changeProperty32 dpy r a c propModeReplace [fromIntegral n]
-
-setCurrentDesktop :: (Integral a) => a -> X ()
-setCurrentDesktop i = withDisplay $ \dpy -> do
- a <- getAtom "_NET_CURRENT_DESKTOP"
- c <- getAtom "CARDINAL"
- r <- asks theRoot
- io $ changeProperty32 dpy r a c propModeReplace [fromIntegral i]
-
-setDesktopNames :: [String] -> X ()
-setDesktopNames names = withDisplay $ \dpy -> do
- -- Names thereof
- r <- asks theRoot
- a <- getAtom "_NET_DESKTOP_NAMES"
- c <- getAtom "UTF8_STRING"
- let names' = map (fromIntegral.fromEnum) $
- concatMap (("Workspace "++) . (++['\0'])) names
- io $ changeProperty8 dpy r a c propModeReplace names'
-
-setClientList :: [Window] -> X ()
-setClientList wins = withDisplay $ \dpy -> do
- -- (What order do we really need? Something about age and stacking)
- r <- asks theRoot
- c <- getAtom "WINDOW"
- a <- getAtom "_NET_CLIENT_LIST"
- io $ changeProperty32 dpy r a c propModeReplace (fmap fromIntegral wins)
- a' <- getAtom "_NET_CLIENT_LIST_STACKING"
- io $ changeProperty32 dpy r a' c propModeReplace (fmap fromIntegral wins)
-
-setWindowDesktop :: (Integral a) => Window -> a -> X ()
-setWindowDesktop win i = withDisplay $ \dpy -> do
- a <- getAtom "_NET_WM_DESKTOP"
- c <- getAtom "CARDINAL"
- io $ changeProperty32 dpy win a c propModeReplace [fromIntegral i]
-
-setSupported :: X ()
-setSupported = withDisplay $ \dpy -> do
- r <- asks theRoot
- a <- getAtom "_NET_SUPPORTED"
- c <- getAtom "ATOM"
- supp <- mapM getAtom ["_NET_WM_STATE_HIDDEN"]
- io $ changeProperty32 dpy r a c propModeReplace (fmap fromIntegral supp)
-
- setWMName "xmonad"
-
-