Commit graph

7573 commits

Author SHA1 Message Date
Simon Ser
b56f1930f7 Stop using wlr_scene_buffer_send_frame_done()
That function now takes the output as input. We don't always have
the output at hand, so use the function operating on a
wlr_scene_surface instead.
2025-06-30 22:23:51 +00:00
hwsmm
7407691e09 seatop_default: Call seatop_rebase with proper timestamp 2025-06-30 22:23:51 +00:00
hwsmm
201c6ce4be Rename get_current_time_msec to get_current_time_in_msec and move to util.c
get_current_time_msec conflicts with a function with the same name in wlroots.
2025-06-30 22:23:51 +00:00
Simon Ser
f440fbd4ed build: set wrap_mode=nodownload in default options
This can be surprising (e.g. in CI, this can download source code
instead of using system libraries) and users can easily turn it
back on if desired.
2025-06-30 22:23:51 +00:00
Attila Fidan
f8a28c7da8 text_input: Don't relay IM state from unfocused windows
Otherwise, applications can enable their text input and affect IM state
while a different application is focused.
2025-06-30 22:23:51 +00:00
Attila Fidan
890add590a text_input: Ignore enable requests from unfocused windows
Unfocused windows shouldn't be allowed to activate the IM.

This fixes an issue with swaymsg invocations that contain several
commands which result in multiple swift focus changes. An application
briefly gets text input focus, sends an enable request, then sway
processes it and activates the IM only after the commands are all
finished and focus is on something else which did not send an enable
request.
2025-06-30 22:23:51 +00:00
Simon Ser
9b06f37737 build: bump version to 1.12-dev 2025-06-30 22:23:51 +00:00
Callum Andrew
8ec0c9658b config.in: bind XF86Audio* keycodes to playerctl 2025-06-30 22:23:51 +00:00
Simon Ser
0381624968 Remove trailing spaces 2025-06-30 22:23:51 +00:00
YaoBing Xiao
b1134d3ee3 server: fix socket path memory leak
The socket path allocated with strdup() in server_init() was
not being freed in server_fini().
Remove const qualifier and add proper cleanup.

Rebased from origin/master.
2025-06-30 22:23:38 +00:00
Konstantin Pospelov
e01eff4810 swaybar: deduplicate mode and workspace rendering code
The render_workspace_button and render_binding_mode_indicator functions are
almost the same. This commit extracts the common rendering code into a new
render_box function.
2025-06-30 22:20:48 +00:00
Simon Ser
274166a4b6 Log message on for_window command error 2025-06-30 22:20:48 +00:00
Bonsaiiv
311ef216ff Improve example of input section in default config
Previous example included a specific device name. This can be confusing
for beginners, as the default did not work on most devices.
2025-06-30 22:20:48 +00:00
Kenny Levinsen
a0c7395c97 tree/workspace: Remove exclude arg from get_highest_available
workspace_output_get_highest_available took an output to exclude as
argument, meant to avoid accidentally reselecting an output we are
evacuating workspaces from.

Outputs are now removed from the list before we evacuate, making
exclusion unnecessary. Remove the argument.
2025-06-30 22:20:48 +00:00
Kenny Levinsen
25b4b7392b output: Minimize interaction with output after destroy
When an output is destroyed, we go through the process of disabling it.
This includes evacuating all content away from the output, which can
lead to various modifications to the scene. With the scene_output still
present, this can lead to things like output_enter events being emitted
for the output currently being destroyed.

Ensure that the scene output is destroyed first and that the output is
immediately considered disabled.

References: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3974
2025-06-30 22:20:48 +00:00
alex-huff
bb19080461 transaction: fix floating fullscreen containers
8fecf3a introduced a regression where fullscreening a child of a
floating container would result in a black screen. This is because the
order of 'arrange_fullscreen' and 'arrange_worksplace_floating' was
swapped causing the fullscreen container's scene to get reparented after
it was parented in the fullscreen layer.

Fixes #8729
2025-06-30 22:20:48 +00:00
alex-huff
f153d951ed layer-shell: reclaim space from unmapped layer surfaces
wlroots resets 'initialized' when a layer surface is unmapped and sway
doesn't rearrange the layer surfaces in response to a commit of a
surface where 'initialized' is false. This results in space not getting
reclaimed from a recently unmapped layer surface until some other action
causes 'arrange_layers' to get called. This commit makes sure all layer
surfaces get rearranged when a layer surface is unmapped.
2025-06-30 22:20:48 +00:00
Simon Ser
47f90761a8 input: fix udev_device leak
libinput_device_get_udev_device() returns a ref'ed handle:
https://wayland.freedesktop.org/libinput/doc/latest/api/group__device.html#gac13c64ba19fc19094cff0e5354a2a7ce

Similar to this wlroots MR:
https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/5074
2025-06-30 22:20:48 +00:00
alex-huff
39eabd2def transaction: reparent scenes of containers behind fullscreen containers
Currently we do a good job of reparenting the scenes of a container when
it moves into a disabled workspace. We need to do this since normally
the scenes are reparented in the 'arrange_{children,container}'
functions but these don't get called for disabled workspaces. However,
the 'arrange_{children,container}' functions also don't get called when
there is a fullscreen container hiding them.

This commit makes sure to call 'disable_workspace' on workspaces with a
fullscreen container so that when a container is moved into the
workspace its scenes will be properly reparented. Also, when there is a
fullscreen global container 'disable_workspace' is called for all
workspaces since the scenes of a previously fullscreen global container
may still be parented in the 'fullscreen_global' layer.
Fixes #8705 #8659 #8432
2025-06-30 22:20:48 +00:00
alex-huff
0d4d1dc78e transaction: fix size of child container decorations in stacking layouts
Before this commit stacking containers with more than one child sized
the active container's decorations as if there was only one titlebar.
Commit a25645a introduced the local variable 'net_height' but
incorrectly calculated it for stacking containers. Fixes #8686.
2025-06-30 22:20:48 +00:00
odyxz
d6fd76ccc1 raise scratchpad container 2025-06-30 22:20:48 +00:00
alex-huff
53b3abbaf8 transaction: ensure border scene is enabled for floating containers
When a container that was previously an inactive child of a tabbed or
stacking layout becomes floating it's border scene-tree remains
disabled. This results in only the titlebar being rendered for the
container. This commit ensures the border scene-tree is enabled when
arranging floating containers.
Fixes #8721
2025-06-30 22:20:48 +00:00
Bill Li
8503d203be input/text_input: chase wlroots update
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/5032

Fix #8718
2025-06-30 22:20:48 +00:00
GreyXor
cdede9b8d7 build: bump wlroots version 2025-06-30 22:20:48 +00:00
alex-huff
860d5d2936 move: fix broken titlebar when moving child to new workspace
Before this commit, when moving a non-leaf child of a tabbed or stacking
container to a new workspace, the child would be detached from the
parent container and the grandchildren would be sent to the new
workspace but the child itself wouldn't be destroyed causing the
titlebar to still be rendered as part of the parent container.
Fixes #8648.
2025-06-30 22:20:48 +00:00
Furkan Sahin
c097d67d34 input/seatop_down: Update decorations for touchscreen inputs
fixes #8675
2025-06-30 22:20:48 +00:00
alex-huff
54263175b1 transaction: Ensure all tabs are visible in tabbed mode
Before this commit when a child of a tabbed or stacking container was
taken out of fullscreen and a different sibling was focused in the same
transaction, the titlebar of the previously fullscreen container would
remain hidden. This commit makes sure that scene tree for decorations is
enabled for all containers within a tabbed or stacking container when it
is arranged.
2025-06-30 22:20:48 +00:00
Kenny Levinsen
02ca7a4faa config/output: Fix missing output config supersedes
color_transform and allow_tearing was not handled by
supersede_output_config which could lead to configuration being
incorrectly applied.
2025-06-30 22:20:48 +00:00
Kenny Levinsen
df79c55b66 config/output: Use INT_MAX as x/y unset value
We oftne use -1 to indicate unset values. In case of output (x, y), we
would consider the fields set if they are not both -1. This means that
(0, -1) and (-1, 0) are valid coordinates, but (-1, -1) is not.

We support negative output positioning, so we cannot use -1 to mean
unset. Zero is also not an option as that would disallow reverting a set
position back to (0, 0).

INT_MAX is an unreasonable output position, so use it to indicate unset
values, and only use the value when both are set.
2025-06-30 22:20:48 +00:00
Pavel 'LEdoian' Turinsky
c55b69c832 Fix includes with relative paths
The function `load_include_configs` already changes the directory to the
one containing the parent config. Therefore, `load_include_config`
trying to assemble the "full" path leads to repetition of path segments,
making the `realpath` call fail with ENOENT.

Just calling `realpath` on the path itself from the directory with the
parent configuration is sufficient, so there is no point in passing
`parent_dir` to `load_include_config`.
2025-06-30 22:20:48 +00:00
Simon Ser
274af12ad4 build: bump version to 1.11-rc2 2025-06-30 22:20:48 +00:00
Furkan Sahin
9cc30afe3c sway/commands: Handle incorrect resize unit
problem: an invalid usage of the command resize set will cause sway to crash because it doesn't check for an invalid height.
solution: validate height along with width.
2025-06-30 22:20:48 +00:00
Simon Ser
75b6c174c9 Replace signal() with sigaction()
The man page for signal(3) reads:

> new applications should use sigaction() rather than signal()
2025-06-30 22:20:48 +00:00
Simon Ser
692208118f Use pthread_atfork() to restore signals and NOFILE limit
This ensures these functions are always called (even when a library
such as wlroots or libc perform the fork) and removes the need to
manually call them.
2025-06-30 22:20:48 +00:00
Simon Ser
2bc286ae30 build: bump version to 1.11-rc1 2025-06-30 22:20:48 +00:00
Simon Ser
98d979f0a9 Drop wl_drm again
In [1] we re-introduced a debug flag to enable wl_drm. Time has
passed and Xwayland + VA-API + amdvlk now all support
linux-dmabuf-v1.

[1]: https://github.com/swaywm/sway/pull/7916
2025-06-30 22:20:48 +00:00
Simon Ser
4bcb7a4aa0 server: move sway_terminate() definition to header 2025-06-30 22:20:47 +00:00
Simon Ser
302eb4097a swaymsg, swaynag: drop sway_terminate() definitions
These are unused.
2025-06-30 22:20:47 +00:00
llyyr
a0a283ba59 layer_shell: destroy layer_surface on assigned output destruction
According to the spec, the closed event should be sent when the surface
is no longer shown, because the output may have been destroyed or the
user may have asked for it to be removed. In such cases, the clients
should destroy the resource.

This fixes mako not being able to show notifications if the assigned
output was destroyed while a notificataion was still visible

Fixes: 188811f808 ("scene_graph: Port layer_shell")
2025-06-30 22:20:47 +00:00
Filip Vujičić
444ef5d839 Remove duplicate arrange_container 2025-06-30 22:20:47 +00:00
myrslint
17dc5071fd Extends former behavior to include loading of icons if they are
specified as an absolute path. Fixes size selection for SVG (scalable)
icons relying on whose nominal size read via gdk-pixbuf loader may not
correctly indicate that they can be scaled to neatly fill the available
scale e.g., symbolic icons from Adwaita specify a nominal size of 16x16.
2025-04-30 02:32:07 +00:00
myrslint
aeeb99c5a3 Finds paths to icon files using libsfdo. Libsfdo is currently an
optional compile time dependency. This means the former code paths are
all retained and new ones are wrapped in #if HAVE_LIBSFDO. Behavior
should be identical now between the two code paths. Later commits will
add the handling of icons specified as absolute paths which both former
swaybar code and libsfdo have thus far avoided.
2025-04-29 17:37:58 +00:00
myrslint
3a21b8c6f1 Clean up build scaffolding for libsfdo and add the creation and
destruction of an sfdo data structure associated with a sway server with
a view to future use of icon themes in places such as titlebars
2025-04-16 20:50:42 +00:00
myrslint
d9a6bdb85e Add basic scaffolding for including libsfdo in builds 2025-04-16 03:25:36 +00:00
Simon Ser
3f0b3f8f9b Fix crash on shutdown when Xwayland is disabled 2025-04-14 10:21:18 +02:00
Loukas Agorgianitis
4943534929 server: fix shutdown crash when running on x11 backend
Signed-off-by: Loukas Agorgianitis <loukas@agorgianitis.com>
2025-04-14 09:30:49 +02:00
Ferdinand Bachmann
240a69ad63 server: recreate renderer in idle callback to avoid UAF
Destroying the wlr_renderer in a callback to its own renderer_lost event
is unsafe due to wl_signal_emit*() still accessing it after it was
destroyed.

Delegate recreation of renderer to an idle callback and ensure that only
one such idle callback is scheduled at a time by storing the returned
event source.
2025-04-13 23:40:56 +02:00
Ferdinand Bachmann
ab2e1f5817 tree/container: remove event listeners on destroy
Change begin_destroy to remove event listeners before the final destroy,
since otherwise event listeners would be removed twice, which crashes.

This fixes a crash in wlroots listener checks. See #8509.
2025-04-13 23:40:56 +02:00
Ferdinand Bachmann
53126cdceb input/text_input: remove event listeners on destroy
sway_input_method_relay can be destroyed from two sources, either the
seat is destroyed or the manager protocol objects are destroyed due
compositor exit.

This fixes a crash in wlroots listener checks. See #8509.
2025-04-13 23:40:56 +02:00
Ferdinand Bachmann
92c82e6952 desktop/idle_inhibit: remove event listeners on destroy
This fixes a crash in wlroots listener checks. See #8509.
2025-04-13 23:40:56 +02:00