Layer shell popups were missing a handler for the xdg_popup reposition
event. When a client (e.g. GTK4) creates a popup and then sends a
reposition request, wlroots resets the scheduled geometry back to the
positioner's original value. Without a reposition handler, the
unconstrained geometry computed on the initial commit was lost, causing
popups such as tooltips to render outside the screen viewport.
This was most visible with GTK4 layer shell apps (e.g. taskbars) where
tooltips would appear below the bottom edge of the screen instead of
being flipped/slid into the visible area.
Also switch the destroy listener from wlr_popup->base->events.destroy
to wlr_popup->events.destroy so that cleanup runs before wlroots
asserts that all popup signal listeners have been removed.
Fixes#8518
workspace_valid_on_output() and workspace_next_name() check whether an
output appears anywhere in a workspace's output list, ignoring priority
order. This allows a lower-priority output to claim a workspace even
when a higher-priority output is available.
Fix by stopping early when iterating the output list: if a different
available output is found before the current one, the workspace belongs
to that higher-priority output.
When evaluating a __focused__ pattern, sway's logic is to consider the
pattern match to have failed for a given view and attribute if a view is
focused and the value of attribute in question of the focused view is
not that of the view in question. Expected behaviour is that the pattern
matches if there is a focused view and that the values of the attribute
for the focused view and the other view are equal. (See #6753, which is
the case where the `workspace` attribute is matched against.). I.e., if
we write out the function `criteria_matches_view` as a logical formula,
expected behaviour is
criteria_matches_view(criteria, view) <=>
forall (attribute, pattern) in criteria,
(pattern is __focused__ and
focused view exists and view.attribute == focused.attribute)
or
(pattern is not __focused__ and view.attribute =~ pattern)
but it is actually (pay attention to the fourth line)
criteria_matches_view(criteria, view) <=>
forall (attribute, pattern) in criteria,
(pattern is __focused__ and
(no focused view or view.attribute == focused.attribute))
or
(pattern is not __focused__ and view.attribute =~ pattern).
Fix program logic to reflect (the disjunctive form of) the first formula
to be compatible with i3. (In passing, this fixes #6753.)
This commit shows a swaynag message when an unsupported GPU is detected
which must be acknowledged by users. It also adds an environment
variable (`SWAY_UNSUPPORTED_GPU`) which may be used instead of the
`--unsupported-gpu` argument.
The `static` storage class for flag variables in main has also been
removed, as this should have no effect on the program.
Resolves: #8999
Fix documentation of sway-ipc. The example reply for GET_BINDIG_STATE is an example and not the exact reply.
This bug seems to come from copy/paste from the ipc command SYNC directly above.
handle_tool_tip() previously used event->tool->data without checking
for NULL. When launching sway for the first time after a reboot, and
then tapping with a USI 2.0 stylus, the tool tip event is fired before
the tool proximity event. As event->tool is initialized during the tool
proximity handler handle_tool_proximity(), this was causing a crash.
The fix adds a NULL check before accessing the fields of
event->tool->data. In case of a NULL, a log message is emitted
indicating that the tool tip event fired before proximity. This logic is
identical to the logic in handle_tool_axis().
Fixes issue #8907
Currently, config apply sets the output's image description before the
initial commit, but sets the output's color transform after the commit.
In the case of a config reload removing a color profile and enabling
HDR, both the color transform and image description will be set, which
trips an assert in wlroots
Closing a tiled window (mod+shift+q) while resizing (mod+click) causes
an use-after-free in handle_unref.
Both conditions can be true in this case, which will result in
dereferencing `e` on the second check after it has already been freed by
the first `seatop_begin_default`.
Fix by combining separate checks for the main container and its
horizontal/vertical siblings into a single condition.
The second check was added in 9e272a7986
and I've checked that this fix does not regress that issue.
Update the information about display manager support (see #8861), as
well as markdown formatting of links and change some wording in the
German README.
Updated italian readme to follow the recent changes to the English one.
I also removed "gestore di accesso" which in theory translates to
display manager, but in practice is never used in this context. Other
wikis such as [Debian](https://wiki.debian.org/it/DisplayManager) and
[Ubuntu](https://wiki.ubuntu-it.org/AmbienteGrafico/DisplayManager) just
use the term "Display Manager" as is. Another small thing that I
corrected is "canale di IRC" which sounds a bit weird.
It's been a long while since we've heard about issues related to
display managers. Some used to be unreliable in the past, but by
now most issues have been ironed out. Let's start supporting them
officially.
I've considered translating other languages but I'm concerned about
messing up the sentence. I've updated languages I'm comfortable
with.
Previously it was reporting window_menu and maximize instead of fullscreen because wlr_xdg_toplevel_set_wm_capabilities expects a bitmask (WLR_XDG_TOPLEVEL_WM_CAPABILITIES_*), and XDG_TOPLEVEL_WM_CAPABILITIES_* are supposed to be used as values in wl_array, so the values are different:
XDG_TOPLEVEL_WM_CAPABILITIES_FULLSCREEN = 3
WLR_XDG_TOPLEVEL_WM_CAPABILITIES_FULLSCREEN = 4