aboutsummaryrefslogtreecommitdiffstats
path: root/XMonad/Hooks/Minimize.hs
diff options
context:
space:
mode:
authorJustin Bogner <mail@justinbogner.com>2010-06-16 07:11:24 +0200
committerJustin Bogner <mail@justinbogner.com>2010-06-16 07:11:24 +0200
commit6933eb1d3e2b98eac9a165b4007c32629849985c (patch)
tree2320b84478257cfed3a96f8aadbbe28453f85049 /XMonad/Hooks/Minimize.hs
parent49fe8baf11846db67486ad348b443717702f4001 (diff)
downloadXMonadContrib-6933eb1d3e2b98eac9a165b4007c32629849985c.tar.gz
XMonadContrib-6933eb1d3e2b98eac9a165b4007c32629849985c.tar.xz
XMonadContrib-6933eb1d3e2b98eac9a165b4007c32629849985c.zip
A hook to handle minimize/restore window manager hints.
Ignore-this: c562ce1df81bce9a7dc5e7fe2dc67a43 XMonad.Hooks.Minimize handles both minimize and restore messages. Handling restore messages was already done in RestoreMinimized, which this module intends to replace. darcs-hash:20100616051124-18f27-729a41e41728de0e8c32f53032633d34b92ebf0f.gz
Diffstat (limited to 'XMonad/Hooks/Minimize.hs')
-rw-r--r--XMonad/Hooks/Minimize.hs53
1 files changed, 53 insertions, 0 deletions
diff --git a/XMonad/Hooks/Minimize.hs b/XMonad/Hooks/Minimize.hs
new file mode 100644
index 0000000..e293e6d
--- /dev/null
+++ b/XMonad/Hooks/Minimize.hs
@@ -0,0 +1,53 @@
+----------------------------------------------------------------------------
+-- |
+-- Module : XMonad.Hooks.Minimize
+-- Copyright : (c) Justin Bogner 2010
+-- License : BSD3-style (see LICENSE)
+--
+-- Maintainer : Justin Bogner <mail@justinbogner.com>
+-- Stability : unstable
+-- Portability : not portable
+--
+-- Handles window manager hints to minimize and restore windows. Use
+-- this with XMonad.Layout.Minimize.
+--
+-----------------------------------------------------------------------------
+
+module XMonad.Hooks.Minimize
+ ( -- * Usage
+ -- $usage
+ minimizeEventHook
+ ) where
+
+import Data.Monoid
+import Control.Monad(when)
+
+import XMonad
+import XMonad.Layout.Minimize
+
+-- $usage
+-- You can use this module with the following in your @~\/.xmonad\/xmonad.hs@:
+--
+-- > import XMonad.Hooks.Minimize
+-- > import XMonad.Layout.Minimize
+-- >
+-- > myHandleEventHook = minimizeEventHook
+-- > myLayout = minimize (Tall 1 (3/100) (1/2)) ||| Full ||| etc..
+-- > main = xmonad defaultConfig { layoutHook = myLayout
+-- > , handleEventHook = myHandleEventHook }
+
+minimizeEventHook :: Event -> X All
+minimizeEventHook (ClientMessageEvent {ev_window = w,
+ ev_message_type = mt,
+ ev_data = dt}) = do
+ a_aw <- getAtom "_NET_ACTIVE_WINDOW"
+ a_cs <- getAtom "WM_CHANGE_STATE"
+
+ when (mt == a_aw) $ sendMessage (RestoreMinimizedWin w)
+ when (mt == a_cs) $ do
+ let message = fromIntegral . head $ dt
+ when (message == normalState) $ sendMessage (RestoreMinimizedWin w)
+ when (message == iconicState) $ sendMessage (MinimizeWin w)
+
+ return (All True)
+minimizeEventHook _ = return (All True)