Commit graph

2246 commits

Author SHA1 Message Date
Kirill Primak
8c0eeb6a86 session-lock: fix buffer check
If the first commit has no buffer, the unmap hook won't catch it. Check
in the commit hook instead.
2023-06-02 23:26:38 +03:00
Kirill Primak
e75407fd4d session-lock: remove unused wlr_session_lock_surface_v1.events.map 2023-06-02 23:20:05 +03:00
Kirill Primak
d086ee1b9e compositor: remove wlr_surface_role.precommit
It was previously used to handle unmapping properly but is obsolete now.
2023-06-02 21:04:16 +03:00
Kirill Primak
af4181f388 drag: use unified map logic 2023-06-02 17:26:18 +00:00
Kirill Primak
743da5c0ae input-method: use unified map logic 2023-06-02 17:26:18 +00:00
Kirill Primak
229abfae0c session-lock: use unified map logic 2023-06-02 17:26:18 +00:00
Kirill Primak
c63f3659c5 layer-shell: use unified map logic 2023-06-02 17:26:18 +00:00
Kirill Primak
b0437fc416 xdg-shell: use unified map logic 2023-06-02 17:26:18 +00:00
Kirill Primak
c590bb600f subcompositor: use unified map logic 2023-06-02 17:26:18 +00:00
Kirill Primak
6b40e08148 compositor: introduce unified map logic 2023-06-02 17:26:18 +00:00
Simon Ser
6668c822b3 cursor: unset wlr_output_cursor.texture on surface destroy
When the surface is destroyed, its current wlr_texture is about to
get destroyed as well. Reset wlr_output_cursor.texture to prevent
use-after-free.

Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3652
2023-06-02 16:27:54 +00:00
Simon Ser
9c9e3f6263 cursor: ignore wlr_cursor_set_surface() with same surface
Avoids damaging the output and rendering the cursor again if it
hasn't changed.
2023-06-02 16:27:54 +00:00
Simon Ser
5bcd537ff4 output/cursor: use new rendering API 2023-05-30 16:18:19 +00:00
Simon Ser
93a6acae9f output: add wlr_output_begin_render_pass() 2023-05-30 16:18:19 +00:00
Alexander Orzechowski
95062904c7 wlr_scene: Introduce wlr_scene_buffer_set_opacity 2023-05-30 15:43:29 +00:00
Alexander Orzechowski
2346b90a9f wlr_scene: Make scene_rect_from_node public
This is in an effort to be more consistent with both already public
getters: wlr_scene_buffer_from_node and wlr_scene_tree_from_node
2023-05-30 15:40:41 +00:00
Alexander Orzechowski
88f80c4a7c wlr_scene: Make scene_tree_from_node public
This is to allow for compositors that want to be more implicit about
how their scene is organized. Such a compositor may want to walk up
at a certain scene node to find something such as a surface to focus on.
2023-05-30 15:40:41 +00:00
Simon Ser
2c6aeed7d6 output: use pending render format if any
If a modeset contains a render format change, use that instead of
the current one stored in wlr_output.render_format.

This fixes render_bit_depth configuration not being applied without
a second modeset in Sway.
2023-05-26 16:50:58 +00:00
Alexander Orzechowski
d495fb8c04 wlr_{box, fbox}_equal: Consider empty boxes NULL 2023-05-23 17:57:16 +00:00
Simon Ser
96f3f3c92e render/pixel-format: add support for block-based formats
Some formats like sub-sampled YCbCr use a block of bytes to
store the color values for more than one pixel. Update our format
table to be able to handle such formats.
2023-05-21 20:28:45 +00:00
Simon Ser
a0ebc401d0 linux-dmabuf-v1: fix wlr_drm_format_set leak in feedback_compile()
Fixes: 43b25fd34e ("dmabuf: Remove assumption that all mods are in fallback tranche")
2023-05-18 11:20:21 +02:00
Austin Shafer
43b25fd34e dmabuf: Remove assumption that all mods are in fallback tranche
According to the spec the compositor should send scanout modifiers in
their respective device tranches, and all other texture modifiers
in the main tranche. Currently wlroots expects all modifiers to be
present in the last (i.e. "fallback") tranche, this removes that assumption
in the feedback compilation stage so that scanout modifiers for secondary
device can be advertised.

"The full-screen feedback parameters have two tranches: one with the
format/modifier pairs supported by the KMS plane, with the scanout flag
set in the tranche_flags event and with tranche_target_device set to the
KMS scan-out device; the other with the rest of the format/modifier
pairs (supported for texturing, but not for scan-out), without the
scanout flag set in the tranche_flags event, an"
2023-05-18 09:08:18 +00:00
Alexander Orzechowski
c4bed48fcc output_pick_format: Fail if no format could be chosen 2023-05-18 07:05:30 +00:00
Kirill Primak
75293d5fb0 keyboard: use the new data in wlr_keyboard_set_keymap()
Fixes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3647
2023-05-18 08:39:24 +03:00
Simon Ser
e2647c5151 keyboard: add support for resetting the keymap 2023-05-17 22:08:34 +00:00
Simon Ser
e725f234d7 keyboard: don't change current keymap on wlr_keyboard_set_keymap() error
This function was unsetting the keymap on error. Instead, let's
leave the current keymap untouched on error.
2023-05-17 22:08:34 +00:00
Simon Ser
69aeccddb7 seat/keyboard: allow no keymap 2023-05-17 22:08:34 +00:00
Alexander Orzechowski
300bd80772 wlr_drm_format_set: Store formats on array 2023-05-11 18:25:52 +02:00
Alexander Orzechowski
90d08f8f1c wlr_drm_format: Rework wlr_drm_format_intersect
Now it takes a reference to a destination format
2023-05-11 18:24:43 +02:00
Alexander Orzechowski
340700cb70 wlr_drm_format: Change wlr_drm_format_dup to copy 2023-05-11 18:24:43 +02:00
Alexander Orzechowski
e427e019c4 wlr_drm_format: Don't take double pointer in wlr_drm_format_add 2023-05-11 03:51:01 -04:00
Alexander Orzechowski
b45396c790 wlr_drm_format: Introduce drm_format_finish 2023-05-11 03:51:01 -04:00
Simon Ser
2a1234a820 wlr-export-dmabuf-v1: handle output destroy
We were storing a wlr_output without listening for the destroy
event.

Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3646
2023-05-10 20:45:48 +00:00
Alexander Orzechowski
18139f4d87 wlr_cursor: Don't multiply hotspot by scale^2
We are already multiplying in output_cursor_set_texture
2023-05-08 09:17:22 +00:00
Alexander Orzechowski
47a250ae12 wlr_cursor: Consider surface state when setting new cursor surface
Found by inspection
2023-05-06 20:55:11 +00:00
Simon Ser
d933f5204b output: drop wlr_output_cursor_set_surface 2023-05-06 13:59:05 -04:00
Simon Ser
78afce5e2d cursor: add surface handling
Only rely on wlr_output_cursor_set_texture(), because
wlr_output_cursor_set_surface() will get dropped.
2023-05-06 17:48:56 +00:00
Simon Ser
b64e7e88bf output: add output_cursor_set_texture() 2023-05-06 17:48:56 +00:00
Alexander Orzechowski
1ee75786b4 drm_format_set_union: Require initialized dst and remove assert 2023-05-04 18:19:33 +00:00
Alexander Orzechowski
ec796afb6e wlr_compositor: Decide opacity from new has_buffer flag.
`wlr_surface_get_texture` will always return NULL if the compositor was
not given a renderer.
2023-05-04 11:53:26 +02:00
Alexander Orzechowski
394accbe4a wlr_compositer: Keep track if surface has committed a buffer before.
This would break if you are running with a NULL renderer.
2023-05-04 11:53:26 +02:00
Alexander Orzechowski
cbe8876050 linux_dmabuf_v1: Use wlr_drm_format_set_union 2023-05-03 12:38:28 -04:00
Simon Ser
bf8ae8a036 output/cursor: fix buffer size when nested and scaled
The Wayland, X11 and headless backends don't really care about the
cursor size. We were picking a size identical to the texture size
in that case. This is incorrect for LoDPI cursor textures on HiDPI
outputs: in that case, we need to scale up the cursor texture.

Fixes the cursor being chopped off under the Wayland backend with
scale > 1.
2023-05-03 11:32:51 +02:00
Simon Ser
d7fcc1e96f scene: port to wlr_render_pass 2023-04-25 17:26:35 +02:00
Simon Ser
587852056c output: add wlr_output_add_software_cursors_to_render_pass()
Same as wlr_output_render_software_cursors(), but takes a
struct wlr_render_pass.
2023-04-25 17:26:34 +02:00
Simon Ser
44069dfd5e output-layer: add cropping support
Add a src_box state field. Use the SRC_* KMS props in the DRM
backend, reject the layers in the Wayland backend (for now, we can
support it later via viewporter).
2023-04-20 10:39:46 +02:00
Andri Yngvason
00489b11a0 seat: Provide dummy resources for inert seats 2023-04-18 08:29:30 +00:00
Andri Yngvason
3898bb482d seat: Let client manage its own resources
This makes seat_client resources inert when seats and/or input devices are
destroyed, rather than destroying the resources.

When the client calls e.g. wl_keyboard_release(), it's not expecting the
keyboard global to be already destroyed, so this results in an error such
as this:

    wl_display@1: error 0: invalid object 22
2023-04-18 08:29:30 +00:00
Andri Yngvason
1689a3503b wlr_seat: Extract seat_client_create() function 2023-04-18 08:29:30 +00:00
Alexander Orzechowski
eac2eaa6a9 wlr_scene: Fix potential use-after-free in wlr_scene_buffer_set_buffer
Fixes: #3636
2023-04-16 14:01:54 +02:00