diff options
-rw-r--r-- | XMonad/Hooks/FadeInactive.hs | 73 | ||||
-rw-r--r-- | xmonad-contrib.cabal | 1 |
2 files changed, 74 insertions, 0 deletions
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 <mail@justinbogner.com> +-- License : BSD +-- +-- Maintainer : Justin Bogner <mail@justinbogner.com> +-- 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 <http://freedesktop.org/wiki/Software/xapps> +-- 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 diff --git a/xmonad-contrib.cabal b/xmonad-contrib.cabal index 7a3d345..dec4267 100644 --- a/xmonad-contrib.cabal +++ b/xmonad-contrib.cabal @@ -109,6 +109,7 @@ library XMonad.Hooks.DynamicLog XMonad.Hooks.EventHook XMonad.Hooks.EwmhDesktops + XMonad.Hooks.FadeInactive XMonad.Hooks.ManageDocks XMonad.Hooks.ManageHelpers XMonad.Hooks.Script |