X.H.ManageDocks: Avoid unnecessary refresh (loop) for decorations This started as an investigation of the root cause of <https://github.com/xmonad/xmonad-contrib/issues/565>, which was addressed by <https://github.com/xmonad/xmonad-contrib/pull/621> without having a full understanding of why xmonad ends up in a busy loop. What was going on: * X.L.SubLayouts group update algorithm assumes no duplicities in the Stack, and results in multiplying those duplicities otherwise. Note that this is a reasonable assumption—duplicities in a Stack have no defined behaviour in xmonad (X11 can't place a window on a screen twice), so "fixing" this algorithm is a waste of time. * X.L.Decoration creates windows which X.H.ManageDocks treats as possible docks, resulting in extra refresh whenever they appear. * The extra refresh causes X.L.SubLayouts to multiply the duplicities, X.L.Decoration to create new decoration windows, and these invalidate the X.H.ManageDocks strut cache, leading to yet another refresh, and an endless loop of these. Having concluded that the no-duplicities assumption is a reasonable one, there's nothing really to fix here after <https://github.com/xmonad/xmonad-contrib/pull/621>. Still, the extra refresh might be causing extra flicker in decorated layouts, and we can easily avoid it, so I do that here. Plus a bit of documentation for X.L.SubLayouts.
xmonad-contrib
Community-maintained extensions for the XMonad window manager.
xmonad core is minimal, stable, yet extensible. xmonad-contrib is home to hundreds of additional tiling algorithms and extension modules. The two combined make for a powerful X11 window-manager with endless customization possibilities. They are, quite literally, libraries for creating your own window manager.
Installation
For installation and configuration instructions, please see:
If you run into any trouble, consult our documentation or ask the community for help.
Contributing
We welcome all forms of contributions:
- bug reports and feature ideas (also to xmonad)
- bug fixes, new features, new extensions (also to xmonad)
- documentation fixes and improvements: xmonad, xmonad-contrib, xmonad-web
- helping others in the community
- financial support: GitHub Sponsors, Open Collective
Please do read the CONTRIBUTING document for more
information about bug reporting and code contributions. For a brief overview
of the architecture and code conventions, see the documentation for the
XMonad.Doc.Developing
module. If in doubt, talk to
us.
License
Code submitted to the xmonad-contrib repo is licensed under the same license as xmonad core itself, with copyright held by the authors.