From 403cc1a7e117ed52d751b382995e4b1cdb2f6589 Mon Sep 17 00:00:00 2001 From: Justin Bogner Date: Fri, 23 May 2008 22:58:38 +0200 Subject: add FadeInactive to fade out inactive windows using xcompmgr darcs-hash:20080523205838-18f27-7839527e8dc201d7b47e93d70b14ec6c2a6077c7.gz --- XMonad/Hooks/FadeInactive.hs | 73 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 XMonad/Hooks/FadeInactive.hs (limited to 'XMonad/Hooks/FadeInactive.hs') diff --git a/XMonad/Hooks/FadeInactive.hs b/XMonad/Hooks/FadeInactive.hs new file mode 100644 index 0000000..c7fc75e --- /dev/null +++ b/XMonad/Hooks/FadeInactive.hs @@ -0,0 +1,73 @@ +----------------------------------------------------------------------------- +-- | +-- Module : XMonad.Hooks.FadeInactive +-- Copyright : (c) 2008 Justin Bogner +-- License : BSD +-- +-- Maintainer : Justin Bogner +-- Stability : unstable +-- Portability : unportable +-- +-- Makes XMonad set the _NET_WM_WINDOW_OPACITY atom for inactive windows, +-- which causes those windows to become slightly translucent if something +-- like xcompmgr is running +----------------------------------------------------------------------------- +module XMonad.Hooks.FadeInactive ( + -- * Usage + -- $usage + fadeInactiveLogHook + ) where + +import XMonad +import qualified XMonad.StackSet as W +import Control.Monad (forM_) + +-- $usage +-- You can use this module with the following in your @~\/.xmonad\/xmonad.hs@: +-- +-- > import XMonad +-- > import XMonad.Hooks.FadeInactive +-- > +-- > myLogHook :: X () +-- > myLogHook = fadeInactiveLogHook +-- > +-- > main = xmonad defaultConfig { logHook = myLogHook } +-- +-- you will need to have xcompmgr +-- or something similar for this to do anything +-- +-- For more detailed instructions on editing the layoutHook see: +-- +-- "XMonad.Doc.Extending#The_log_hook_and_external_status_bars" +-- +-- For more detailed instructions on editing the layoutHook see: +-- +-- "XMonad.Doc.Extending#Editing_the_layout_hook" + +-- | +-- sets the opacity of a window +setOpacity :: Window -> Integer -> X () +setOpacity w t = withDisplay $ \dpy -> do + a <- getAtom "_NET_WM_WINDOW_OPACITY" + c <- getAtom "CARDINAL" + io $ changeProperty32 dpy w a c propModeReplace [fromIntegral t] + +-- | +-- fades a window out by setting the opacity to an arbitrary amount +fadeOut :: Window -> X () +fadeOut = flip setOpacity 0xdddddddd + +-- | +-- makes a window completely opaque +fadeIn :: Window -> X () +fadeIn = flip setOpacity 0xffffffff + +-- | +-- lowers the opacity of inactive windows +fadeInactiveLogHook :: X () +fadeInactiveLogHook = withWindowSet $ \s -> + forM_ (concatMap visibleWins $ W.current s : W.visible s) fadeOut >> + withFocused fadeIn + where + visibleWins = maybe [] unfocused . W.stack . W.workspace + unfocused (W.Stack _ l r) = l ++ r -- cgit v1.2.3