Probably a very niche use-case: I have an ultra-wide display that I
split into two using `xrandr --setmonitor`, and I want the workspaces to
stay in place when the split ratio is adjusted.
Furthermore, this fixes workspace reshuffling when a virtual monitor is
added for screensharing a portion of the screen
(https://news.ycombinator.com/item?id=41837204).
Can't think of a scenario involving just physical screens where this
would be useful. Those are mostly added/removed, so if anything, one
might wish to preserve the workspace that is currently being showed, but
that would require knowing the output name (only available via RandR,
not via Xinerama). If someone physically moves their displays around and
then invokes `xrandr` to update the layout, this might very well do the
right thing, but I don't think anyone moves their displays around often
enough to be annoyed by xmonad reshuffling the workspaces. :-)
This handles errors in hooks set using `rescreenHook` as well, not just
those set using the individual adders/setters.
Fixes: 2e3254a908 ("X.H.Rescreen: Catch exceptions in user-provided hooks in add*Hook")
The primary motivation is to fix `rescreen` messing up the
workspaces/screens order when making small changes to the layout of
multiple screens — such as resizing virtual monitors via `xrandr
--setmonitor`.
Previous version most of the time just got "stuck" on floating windows,
switching back and forth between floating window and tiled window underneath.
This was because "magic point" was left in the same position and thus next
navigation commands selected the same windows over and over again.
Now the "magic point" is moved around such that it doesn't overlap with the previously selected window,
and there are more complicated rules to make navigation between floating and tiled windows more natural.
The original behavior of navigating between tiled windows is preserved almost precisely.
Previous version also prevented switching windows using focusUp/focusDown
when in Full layout. Now there's a special case that handles such situations.
In the original code, when a GridSelect is shown, user has to use
keyboard to cancel it (ESC key by default). With this field added,
when it is set to True (the default), mouse click on empty space
can cancel the GridSelect.
For ease of use, provide `fixSteamFlicker` as a pre-packaged
`floatConfReqHook` that can easily be added directly to a
`handleEventHook`.
Also, for discoverability, re-export it from X.U.Hacks.
Implements a replacement event handler for 'ConfigureRequestEvent' to
work around misbehaving client applications such as Steam, URxvt and
others that try to restore their absolute window positions. Primarily
motivated by the Steam client being almost completely unusable in xmonad
lately.
(I've been running this code in my xmonad.hs for other purposes for
years.)
More specifically, ignore ClientMessageEvents for unmanaged windows.
Steam likes to send _NET_ACTIVE_WINDOW requests for all its windows,
including override-redirect ones, which used to result in an invocation
of `windows` with a no-op Endo—equivalent to a call to `refresh`. But
this refresh makes Steam close its menus immediately.
Fixes: https://github.com/ValveSoftware/steam-for-linux/issues/9376
Fixes: https://github.com/xmonad/xmonad/issues/451
This contains a breaking change for readHistory, writeHistory,
historyCompletion, and historyCompletionP to take an XPConfig, so they
are aware of this choice. While the latter two are exported, it seems
unlikely to affect many users.
`EwmhFullscreen` unconditionally sinks windows in response to a
`_NET_WM_STATE` root window message removing `_NET_WM_STATE_FULLSCREEN`.
Unfortunately, at least some versions of either the Gtk or GNOME
libraries send this on startup while restoring a window's last
known state, which means a `manageHook` `doFloat` will be undone.
This change ignores the remove if the window is not fullscreen.
A followup issue, #865, has been added for the follow-on problem
that the floating state of a window is not restored on removal of
the fullscreen state.
Fixes: #820
* First version of DecorationEx.
* Fixed most warnings.
* Fix build error with ghc-9.8.1.
* Fix title shrinking with text decoration.
* Add convinience re-exports.
* Get rid of orphan instances.
* Fix a couple of warnings.
* Rename X.L.DecorationEx.Types -> X.L.DecorationEx.Common
* Add instance Default StandardCommand.
* Fix some typos and formatting
thanks to @geekosaur
Co-authored-by: brandon s allbery kf8nh <allbery.b@gmail.com>
* Fix reference to xmonad.hs
See also #859
Co-authored-by: brandon s allbery kf8nh <allbery.b@gmail.com>
* Fix reference to xmonad.hs
Co-authored-by: brandon s allbery kf8nh <allbery.b@gmail.com>
* Fix formatting
Co-authored-by: brandon s allbery kf8nh <allbery.b@gmail.com>
* Fix some typos and formatting
thanks to @geekosaur
Co-authored-by: brandon s allbery kf8nh <allbery.b@gmail.com>
* Remove commented code.
* Update CHANGES.md.
* calcWidgetPlace is now allowed to return rectangle with any X,
but that will be ignored.
* More generic instance for DecorationWidget GenericWidget.
* Replace explicit definition of `fi` with import from X.Prelude.
thanks to @slotThe.
* Move fetch-all pattern to the end of definition.
thanks to @slotThe.
* X.L.DecorationEx: Add screenshot
---------
Co-authored-by: brandon s allbery kf8nh <allbery.b@gmail.com>
Co-authored-by: Tony Zorman <soliditsallgood@mailbox.org>