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/Config/Bluetile.hs | 4 +-- XMonad/Doc/Extending.hs | 10 +++++--- XMonad/Hooks/Minimize.hs | 53 ++++++++++++++++++++++++++++++++++++++++ XMonad/Hooks/RestoreMinimized.hs | 6 ++--- XMonad/Layout/Minimize.hs | 4 +-- 5 files changed, 67 insertions(+), 10 deletions(-) create mode 100644 XMonad/Hooks/Minimize.hs (limited to 'XMonad') diff --git a/XMonad/Config/Bluetile.hs b/XMonad/Config/Bluetile.hs index b57c713..10b0f45 100644 --- a/XMonad/Config/Bluetile.hs +++ b/XMonad/Config/Bluetile.hs @@ -50,7 +50,7 @@ import XMonad.Hooks.EwmhDesktops import XMonad.Hooks.ManageDocks import XMonad.Hooks.ManageHelpers import XMonad.Hooks.PositionStoreHooks -import XMonad.Hooks.RestoreMinimized +import XMonad.Hooks.Minimize import XMonad.Hooks.ServerMode import XMonad.Hooks.WorkspaceByPos @@ -205,7 +205,7 @@ bluetileConfig = logHook = currentWorkspaceOnTop >> ewmhDesktopsLogHook, handleEventHook = ewmhDesktopsEventHook `mappend` fullscreenEventHook - `mappend` restoreMinimizedEventHook + `mappend` minimizeEventHook `mappend` serverModeEventHook' bluetileCommands `mappend` positionStoreEventHook, workspaces = bluetileWorkspaces, diff --git a/XMonad/Doc/Extending.hs b/XMonad/Doc/Extending.hs index 749b72e..cb915e8 100644 --- a/XMonad/Doc/Extending.hs +++ b/XMonad/Doc/Extending.hs @@ -382,13 +382,17 @@ Here is a list of the modules found in @XMonad.Hooks@: * "XMonad.Hooks.ManageHelpers": provide helper functions to be used in @manageHook@. +* "XMonad.Hooks.Minimize": + Handles window manager hints to minimize and restore windows. Use + this with XMonad.Layout.Minimize. + * "XMonad.Hooks.Place": Automatic placement of floating windows. * "XMonad.Hooks.RestoreMinimized": - Lets you restore minimized windows (see "XMonad.Layout.Minimize") - by selecting them on a taskbar (listens for _NET_ACTIVE_WINDOW - and WM_CHANGE_STATE). + (Deprecated: Use XMonad.Hooks.Minimize) Lets you restore minimized + windows (see "XMonad.Layout.Minimize") by selecting them on a + taskbar (listens for _NET_ACTIVE_WINDOW and WM_CHANGE_STATE). * "XMonad.Hooks.Script": Provides a simple interface for running a ~\/.xmonad\/hooks script with the 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) diff --git a/XMonad/Hooks/RestoreMinimized.hs b/XMonad/Hooks/RestoreMinimized.hs index 42cf8fb..3759ce5 100644 --- a/XMonad/Hooks/RestoreMinimized.hs +++ b/XMonad/Hooks/RestoreMinimized.hs @@ -8,9 +8,9 @@ -- Stability : unstable -- Portability : not portable -- --- Lets you restore minimized windows (see "XMonad.Layout.Minimize") --- by selecting them on a taskbar (listens for _NET_ACTIVE_WINDOW --- and WM_CHANGE_STATE). +-- (Deprecated: Use XMonad.Hooks.Minimize) Lets you restore minimized +-- windows (see "XMonad.Layout.Minimize") by selecting them on a +-- taskbar (listens for _NET_ACTIVE_WINDOW and WM_CHANGE_STATE). -- ----------------------------------------------------------------------------- diff --git a/XMonad/Layout/Minimize.hs b/XMonad/Layout/Minimize.hs index 8bd8b1e..aced551 100644 --- a/XMonad/Layout/Minimize.hs +++ b/XMonad/Layout/Minimize.hs @@ -62,8 +62,8 @@ import Foreign.C.Types (CLong) -- the keyboard. Include 'BW.boringWindows' in your layout hook and see the -- documentation of "XMonad.Layout.BoringWindows" on how to modify your keybindings. -- --- Also see "XMonad.Hooks.RestoreMinimized" if you want to be able to restore --- minimized windows from your taskbar. +-- Also see "XMonad.Hooks.Minimize" if you want to be able to minimize +-- and restore windows from your taskbar. data Minimize a = Minimize [Window] (M.Map Window W.RationalRect) deriving ( Read, Show ) minimize :: LayoutClass l Window => l Window -> ModifiedLayout Minimize l Window -- cgit v1.2.3