From 6933eb1d3e2b98eac9a165b4007c32629849985c Mon Sep 17 00:00:00 2001 From: Justin Bogner Date: Wed, 16 Jun 2010 07:11:24 +0200 Subject: 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 --- XMonad/Hooks/Minimize.hs | 53 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 XMonad/Hooks/Minimize.hs (limited to 'XMonad/Hooks/Minimize.hs') 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 +-- 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) -- cgit v1.2.3