From 16203eb215341f93af44757412f27e7ec862494f Mon Sep 17 00:00:00 2001
From: Devin Mullins <me@twifkak.com>
Date: Sun, 11 Nov 2007 00:27:06 +0100
Subject: add dzenUrgencyHook back

TODO: fix all the doco

darcs-hash:20071110232706-78224-44f4f2a6c3cdefa2313cd684ce3a526bd78babf1.gz
---
 XMonad/Hooks/UrgencyHook.hs | 31 +++++++++++++++++++++++++++----
 1 file changed, 27 insertions(+), 4 deletions(-)

diff --git a/XMonad/Hooks/UrgencyHook.hs b/XMonad/Hooks/UrgencyHook.hs
index 8d54c48..147906a 100644
--- a/XMonad/Hooks/UrgencyHook.hs
+++ b/XMonad/Hooks/UrgencyHook.hs
@@ -21,14 +21,17 @@ module XMonad.Hooks.UrgencyHook (
                                  -- $usage
                                  withUrgencyHook,
                                  focusUrgent,
-                                 readUrgents,
-                                 withUrgents
+                                 readUrgents, withUrgents,
+                                 dzenUrgencyHook, seconds
                                  ) where
 
+import XMonad
 import XMonad.Operations (windows)
 import qualified XMonad.StackSet as W
-import XMonad
+
 import XMonad.Layout.LayoutModifier
+import XMonad.Util.Dzen (dzenWithArgs, seconds)
+import XMonad.Util.NamedWindows (getName)
 
 import Control.Monad (when)
 import Control.Monad.Reader (asks)
@@ -138,4 +141,24 @@ withUrgencyHook :: (UrgencyHook h Window, LayoutClass l Window) =>
 withUrgencyHook theHook = ModifiedLayout $ WithUrgencyHook theHook
 
 class (Read h, Show h) => UrgencyHook h a where
-  urgencyHook :: h -> a -> X ()
+    urgencyHook :: h -> a -> X ()
+
+data DzenUrgencyHook = DzenUrgencyHook { duration :: Int, args :: [String] }
+    deriving (Read, Show)
+
+instance UrgencyHook DzenUrgencyHook Window where
+    urgencyHook DzenUrgencyHook { duration = d, args = a } w = do
+        visibles <- gets mapped
+        name <- getName w
+        ws <- gets windowset
+        whenJust (W.findTag w ws) (flash name visibles)
+      where flash name visibles index =
+                  when (not $ S.member w visibles) $
+                  dzenWithArgs (show name ++ " requests your attention on workspace " ++ index) a d
+
+-- | Flashes when a window requests your attention and you can't see it. For use with
+-- XMonad.Hooks.UrgencyHook. Usage:
+-- > urgencyHook = dzenUrgencyHook (5 `seconds`)
+-- > urgencyHook = dzenUrgencyHookWithArgs ["-bg", "darkgreen"] (5 `seconds`)
+dzenUrgencyHook :: DzenUrgencyHook
+dzenUrgencyHook = DzenUrgencyHook { duration = (5 `seconds`), args = [] }
-- 
cgit v1.2.3