mirror of
https://github.com/xmonad/xmonad-contrib.git
synced 2025-05-19 11:30:22 -07:00
X.H.StatusBar: Use addAfterRescreenHook instead of listening for RRScreenChangeNotifyEvent
The new X.H.Rescreen provides a simpler composable API for hooking into rescreen. Unfortunately it also breaks other code that listens for RRScreenChangeNotifyEvent, so this conversion isn't really optional. Not that there's any dispute this is nicer, is there? :-)
This commit is contained in:
parent
eab9a3a58e
commit
30995c41ff
@ -74,11 +74,10 @@ import qualified XMonad.Util.ExtensibleState as XS
|
||||
|
||||
import XMonad.Layout.LayoutModifier
|
||||
import XMonad.Hooks.ManageDocks
|
||||
import XMonad.Hooks.Rescreen
|
||||
import XMonad.Hooks.StatusBar.PP
|
||||
import qualified XMonad.StackSet as W
|
||||
|
||||
import Graphics.X11.Xrandr (xrrSelectInput)
|
||||
|
||||
-- $usage
|
||||
-- You can use this module with the following in your @~\/.xmonad\/xmonad.hs@:
|
||||
--
|
||||
@ -422,13 +421,9 @@ instance ExtensionClass ActiveSBs where
|
||||
--
|
||||
-- Heavily inspired by "XMonad.Hooks.DynamicBars"
|
||||
dynamicSBs :: (ScreenId -> IO StatusBarConfig) -> XConfig l -> XConfig l
|
||||
dynamicSBs f conf = conf
|
||||
{ startupHook = startupHook conf
|
||||
>> setupEventHandler
|
||||
>> killAllStatusBars
|
||||
>> updateSBs f
|
||||
dynamicSBs f conf = addAfterRescreenHook (updateSBs f) $ conf
|
||||
{ startupHook = startupHook conf >> killAllStatusBars >> updateSBs f
|
||||
, logHook = logHook conf >> logSBs
|
||||
, handleEventHook = eventHookSBs f <> handleEventHook conf
|
||||
}
|
||||
|
||||
-- | Like 'dynamicSBs', but applies 'docks' to the
|
||||
@ -457,23 +452,10 @@ updateSBs f = do
|
||||
traverse_ (sbStartupHook . snd) added
|
||||
XS.put (ASB (toKeep ++ added))
|
||||
|
||||
-- | Handles 'RRScreenChangeNotifyEvent' by updating the
|
||||
-- status bars.
|
||||
eventHookSBs :: (ScreenId -> IO StatusBarConfig) -> Event -> X All
|
||||
eventHookSBs f RRScreenChangeNotifyEvent{} = updateSBs f >> return (All True)
|
||||
eventHookSBs _ _ = return (All True)
|
||||
|
||||
-- | Run 'sbLogHook' for the saved 'StatusBarConfig's
|
||||
logSBs :: X ()
|
||||
logSBs = XS.get >>= traverse_ (sbLogHook . snd) . getASBs
|
||||
|
||||
-- | Subscribe to the 'RRScreenChangeNotifyEvent'
|
||||
setupEventHandler :: X ()
|
||||
setupEventHandler = do
|
||||
dpy <- asks display
|
||||
root <- asks theRoot
|
||||
io $ xrrSelectInput dpy root rrScreenChangeNotifyMask
|
||||
|
||||
-- | Kill the given 'StatusBarConfig's from the given
|
||||
-- list
|
||||
cleanSBs :: [StatusBarConfig] -> X ()
|
||||
|
Loading…
x
Reference in New Issue
Block a user