    ----------------------------------------------------------------------------
    -- |
    -- Module      :  XMonad.Hooks.RestoreMinimized
    -- Copyright   :  (c) Jan Vornberger 2009
    -- License     :  BSD3-style (see LICENSE)
    --
    -- Maintainer  :  jan.vornberger@informatik.uni-oldenburg.de
    -- 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).
    --
    -----------------------------------------------------------------------------

    module XMonad.Hooks.RestoreMinimized
        ( -- * Usage
          -- $usage
          RestoreMinimized (..)
        , restoreMinimizedEventHook
        ) 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.RestoreMinimized
    -- >
    -- > myHandleEventHook = restoreMinimizedEventHook
    -- >
    -- > main = xmonad defaultConfig { handleEventHook = myHandleEventHook }

    data RestoreMinimized = RestoreMinimized deriving ( Show, Read )

    restoreMinimizedEventHook :: Event -> X All
    restoreMinimizedEventHook (ClientMessageEvent {ev_window = w,
                                                    ev_message_type = mt}) = do
        a_aw <- getAtom "_NET_ACTIVE_WINDOW"
        a_cs <- getAtom "WM_CHANGE_STATE"
        when (mt == a_aw || mt == a_cs) $ do
            sendMessage (RestoreMinimizedWin w)
        return (All True)
    restoreMinimizedEventHook _ = return (All True)