mirror of
https://github.com/xmonad/xmonad-contrib.git
synced 2025-05-19 11:30:22 -07:00
X.L.NoBorders: Listen to DestroyWindowEvents and garbage collect
Previously, it was necessary to use `borderEventHook` to make sure the `alwaysHidden`/`neverHidden` lists are garbage collected when a window is destroyed, but this was largely undocumented. Since xmonad v0.17.0, the DestroyWindowEvent is broadcast to layouts, so we can just use that instead and deprecate the event hook.
This commit is contained in:
parent
d19ea051d4
commit
fe826ca8db
@ -24,6 +24,13 @@
|
|||||||
used to avoid flicker and unnecessary workspace reshuffling if multiple
|
used to avoid flicker and unnecessary workspace reshuffling if multiple
|
||||||
`xrandr` commands are used to reconfigure the display layout.
|
`xrandr` commands are used to reconfigure the display layout.
|
||||||
|
|
||||||
|
* `XMonad.Layout.NoBorders`
|
||||||
|
|
||||||
|
- It's no longer necessary to use `borderEventHook` to garbage collect
|
||||||
|
`alwaysHidden`/`neverHidden` lists. The layout listens to
|
||||||
|
`DestroyWindowEvent` messages instead, which are broadcast to layouts
|
||||||
|
since xmonad v0.17.0.
|
||||||
|
|
||||||
## 0.18.1 (August 20, 2024)
|
## 0.18.1 (August 20, 2024)
|
||||||
|
|
||||||
### Breaking Changes
|
### Breaking Changes
|
||||||
|
@ -143,10 +143,8 @@ data ConfigurableBorder p w = ConfigurableBorder
|
|||||||
|
|
||||||
-- | Only necessary with 'BorderMessage' - remove non-existent windows from the
|
-- | Only necessary with 'BorderMessage' - remove non-existent windows from the
|
||||||
-- 'alwaysHidden' or 'neverHidden' lists.
|
-- 'alwaysHidden' or 'neverHidden' lists.
|
||||||
|
{-# DEPRECATED borderEventHook "No longer needed." #-}
|
||||||
borderEventHook :: Event -> X All
|
borderEventHook :: Event -> X All
|
||||||
borderEventHook DestroyWindowEvent{ ev_window = w } = do
|
|
||||||
broadcastMessage $ ResetBorder w
|
|
||||||
return $ All True
|
|
||||||
borderEventHook _ = return $ All True
|
borderEventHook _ = return $ All True
|
||||||
|
|
||||||
instance (Read p, Show p, SetsAmbiguous p) => LayoutModifier (ConfigurableBorder p) Window where
|
instance (Read p, Show p, SetsAmbiguous p) => LayoutModifier (ConfigurableBorder p) Window where
|
||||||
@ -167,14 +165,17 @@ instance (Read p, Show p, SetsAmbiguous p) => LayoutModifier (ConfigurableBorder
|
|||||||
in ConfigurableBorder gh <$> consNewIf ah (not b)
|
in ConfigurableBorder gh <$> consNewIf ah (not b)
|
||||||
<*> consNewIf nh b
|
<*> consNewIf nh b
|
||||||
<*> pure ch
|
<*> pure ch
|
||||||
| Just (ResetBorder w) <- fromMessage m =
|
| Just (ResetBorder w) <- fromMessage m = resetBorder w
|
||||||
|
| Just DestroyWindowEvent { ev_window = w } <- fromMessage m = resetBorder w
|
||||||
|
| otherwise = Nothing
|
||||||
|
where
|
||||||
|
resetBorder w =
|
||||||
let delete' e l = if e `elem` l then (True,delete e l) else (False,l)
|
let delete' e l = if e `elem` l then (True,delete e l) else (False,l)
|
||||||
(da,ah') = delete' w ah
|
(da,ah') = delete' w ah
|
||||||
(dn,nh') = delete' w nh
|
(dn,nh') = delete' w nh
|
||||||
in if da || dn
|
in if da || dn
|
||||||
then Just cb { alwaysHidden = ah', neverHidden = nh' }
|
then Just cb { alwaysHidden = ah', neverHidden = nh' }
|
||||||
else Nothing
|
else Nothing
|
||||||
| otherwise = Nothing
|
|
||||||
|
|
||||||
-- | SetsAmbiguous allows custom actions to generate lists of windows that
|
-- | SetsAmbiguous allows custom actions to generate lists of windows that
|
||||||
-- should not have borders drawn through 'ConfigurableBorder'
|
-- should not have borders drawn through 'ConfigurableBorder'
|
||||||
|
Loading…
x
Reference in New Issue
Block a user