module XMonad.Util.NamedWindows (
NamedWindow,
getName,
withNamedWindow,
unName
) where
import qualified XMonad.StackSet as W ( peek )
import XMonad
data NamedWindow = NW !String !Window
instance Eq NamedWindow where
(NW s _) == (NW s' _) = s == s'
instance Ord NamedWindow where
compare (NW s _) (NW s' _) = compare s s'
instance Show NamedWindow where
show (NW n _) = n
getName :: Window -> X NamedWindow
getName w = asks display >>= \d -> do s <- io $ getClassHint d w
n <- maybe (resName s) id `fmap` io (fetchName d w)
return $ NW n w
unName :: NamedWindow -> Window
unName (NW _ w) = w
withNamedWindow :: (NamedWindow -> X ()) -> X ()
withNamedWindow f = do ws <- gets windowset
whenJust (W.peek ws) $ \w -> getName w >>= f