Simon Ser
00f1870d35
input-method-v2: add popup_surface_from_resource()
...
This checks the resource type before casting its user data pointer.
2 years ago
Kirill Primak
fc9b58e84d
compositor: don't call role unmap hook without an object
2 years ago
Kirill Primak
0f67580aab
compositor: introduce wlr_surface_set_role_object()
2 years ago
Kirill Primak
0040c78c0b
compositor: fix wlr_surface_set_role() error messages
2 years ago
Simon Ser
d59749aa44
cursor: add support for animated XCursor
2 years ago
Simon Ser
6dd8b092e9
output/swapchain: fix error return value types
...
This function returns a bool, not a pointer.
2 years ago
Alexander Orzechowski
b5eaa47049
scene: Use wlr_output_state_copy for direct scanout path
2 years ago
Alexander Orzechowski
4b7c526578
output: Introduce wlr_output_state_copy()
2 years ago
Simon Ser
1e68e1f661
seat: fix keyboard/pointer/touch resource destroy
...
We need to always unlink the resource, even if it's already inert.
seat_client_destroy_*() may be called multiple times on the same
resource.
Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3638
2 years ago
Simon Ser
c4d4409deb
output: stop using wlr_output.back_buffer in output_ensure_buffer()
...
This allows us to use the new render pass API, and drops some
implicit state usage.
2 years ago
Simon Ser
b625a13156
output: attach buffer to state in output_ensure_buffer()
2 years ago
Alexander Orzechowski
2ac31fc630
wlr_scene: Introduce wlr_scene_buffer_set_filter_mode
2 years ago
Alexander Orzechowski
64c0272f81
output_state: Gamma lut should be freed only if committed
...
We consider state that is not committed to be uninitialized.
2 years ago
Simon Ser
220402b717
cursor: add wlr_cursor_unset_image()
...
It's pretty awkward to call wlr_cursor_set_image() with 6 zeroes.
Hide that awkwardness in wlroots.
2 years ago
Simon Ser
da04b066ea
cursor: add wlr_cursor_set_xcursor()
...
This keeps track of the last set XCursor. If it hasn't changed,
skip the texture upload.
In the future, support for animated XCursors can be added.
Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3436
2 years ago
Alexander Orzechowski
58a2f8bd5c
wlr_scene: Clear damage ring on transform change
2 years ago
Alexander Orzechowski
61667404ce
wlr_scene: Clear damage ring on scale change
...
If we were trying to change the scale in wlr_scene_output_build_state,
we would be using incorrect damage
2 years ago
Alexander Orzechowski
96b95bf775
wlr_scene: Reset damage ring bounds every frame
...
This fixes damage issues when a output state attempts to change
the transformed size in some way
2 years ago
Alexander Orzechowski
4391845910
wlr_damage_ring_set_bounds: Ignore duplicate size requests
2 years ago
Alexander Orzechowski
3896b6b107
wlr_scene: Fix transforms with non 1 scale
...
wlr_region_transform / wlr_box_transform want unscaled coordinates here
2 years ago
Kirill Primak
753f3cc4fa
compositor: add wlr_surface_role.no_object
...
This commit allows to make a role as not represented by an object,
which fixes calling role commit handlers for roles like cursor
surfaces.
Fixes: 099b9de752
2 years ago
Simon Ser
670915eeea
output: add wlr_output_state_set_layers()
2 years ago
Alexander Orzechowski
0925a500d1
wlr_scene: Don't use direct scanout if trying to commit a new render_format
...
Found by inspection.
2 years ago
Alexander Orzechowski
a09bb1314d
wlr_output_state: Consider gamma_lut uninitialized if not committed
2 years ago
Alexander Orzechowski
b80e67d6e6
wlr_output_state: Consider buffer uninitialized if not committed
2 years ago
Simon Ser
6e8fb5509f
cursor: only reset the cursor when the surface changes
...
If the set_cursor request is used with the same surface, don't call
cursor_output_cursor_reset_image(). That function sends
wl_surface.leave and can cause an infinite feedback loop with some
clients (submitting a LoDPI cursor when the surface leaves an HiDPI
output).
Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3669
2 years ago
Alexander Orzechowski
05dd08afe5
scene: introduce wlr_scene_output_build_state()
2 years ago
Alexander Orzechowski
7e67b8152b
scene: Don't rely on output current state during rendering
...
In the next commit, state such as scale, transform, width/height that
we gather from the output might be outdated and incorrect.
2 years ago
Alexander Orzechowski
ae7bad86dd
output: introduce wlr_output_state_set_damage()
2 years ago
Simon Ser
36376e2ddf
gamma-control-v1: stop applying gamma LUTs implicitly
...
Make the compositor responsible for doing that, so that they can
properly integrate with their output commit sequence.
2 years ago
Simon Ser
ec9b79ef19
gamma-control-v1: add wlr_gamma_control_v1_send_failed_and_destroy()
2 years ago
Simon Ser
026fc6eda0
gamma-control-v1: add wlr_gamma_control_v1_apply()
2 years ago
Simon Ser
5d5cf34486
output: add wlr_output_state_set_gamma_lut()
2 years ago
Simon Ser
6e635d2fd3
gamma-control-v1: add wlr_gamma_control_manager_v1_get_control()
2 years ago
Simon Ser
70c1a57248
gamma-control-v1: introduce set_gamma event
2 years ago
Kirill Primak
63f3802e0f
subcompositor: set role_data with wlr_surface_set_role()
2 years ago
Kirill Primak
24a479a501
drag: don't set icon's role_data
...
Currently, an icon surface's role_data is set manually to a struct
wlr_drag_icon, which is hacky, incorrect (as role_data is supposed
to be the surface's role object, and drag icons don't have them), and
will be disallowed by future changes.
2 years ago
Kirill Primak
31d958f70a
cursor: fix applying hotspot offset
...
"On surface.attach requests to the pointer surface, hotspot_x and
hotspot_y are _decremented_ by the x and y parameters passed to the
request."
2 years ago
Simon Ser
544c0622fa
presentation-time: constify wlr_presentation_feedback_send_presented()
...
We don't need to mutate the event in this function.
2 years ago
Kirill Primak
25a62a3775
subcompositor: simplify subsurface_consider_map(), call on add
...
Fixes: 49e9be62ae
2 years ago
Kirill Primak
2acc74a3db
Clear input regions if they're ignored
2 years ago
Alexander Orzechowski
9f28366b55
wlr_tablet_v2_tool: Tablet tool surfaces are always mapped
2 years ago
Alexander Orzechowski
d700bd2d7c
wlr_seat_pointer: cursor surfaces are always mapped
2 years ago
Rose Hudson
9e8947e4d5
add render timer API
...
Based on five calls:
wlr_render_timer_create - creates a timer which can be reused across
frames on the same renderer
wlr_renderer_begin_buffer_pass - now takes a timer so that backends can
record when the rendering starts and finishes
wlr_render_timer_get_time - should be called as late as possible so that
queries can make their way back from the GPU
wlr_render_timer_destroy - self-explanatory
The timer is exposed as an opaque `struct wlr_render_timer` so that
backends can store whatever they want in there.
2 years ago
Kirill Primak
37b5f8a89e
compositor: unmap subsurfaces too on unmap
...
Similar to 49e9be62ae
.
2 years ago
Kenny Levinsen
15f2f6642f
gamma-control: Read ramps using pread
...
read advances the file description offset, and requires the client to
ensure that it is reset appropriately before the next gamma ramp
submission. As there is no event to indicate that wlroots finished
processing the new gamma ramp, this can result in a race between the
client seeking in the file and wlroots reading its content.
Use pread with a fixed offset instead.
Fixes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3655
2 years ago
Kirill Primak
b61d5922f1
compositor: notify subsurfaces about a commit in the rendering order
...
This is the default order used across wlroots unless the reversed order
specifically is required (e.g. in wlr_surface_surface_at()).
2 years ago
Kirill Primak
49e9be62ae
subcompositor: consider mapping on parent map
...
Fixes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3654
2 years ago
Väinö Mäkelä
a2f94b500c
virtual-keyboard: Handle inert seats
2 years ago
Väinö Mäkelä
f9f17b6236
virtual-pointer: Handle inert seats
...
Inert seats are handled like inert outputs, so they work as if the
wanted seat was NULL. The seat argument is only a suggestion, so this
is okay.
2 years ago
Väinö Mäkelä
07e27ba854
xdg-popup: Handle inert seats
...
According to the protocol text, the popup will be immediately dismissed
when the grab is rejected. Because the grab can't be executed with a
destroyed seat, the popup is dismissed when one is provided.
2 years ago
Väinö Mäkelä
0601813ab6
text-input: Handle inert seats
2 years ago
Väinö Mäkelä
bcb69b1827
primary-selection: Handle inert seats
2 years ago
Väinö Mäkelä
247e86dca9
keyboard-shortcuts-inhibit: Handle inert seats
2 years ago
Väinö Mäkelä
16948c7369
input-method: Handle inert seats
2 years ago
Väinö Mäkelä
126222884d
wlr_idle: Handle inert seats
2 years ago
Väinö Mäkelä
f988a75a80
tablet: Handle inert seats
2 years ago
Väinö Mäkelä
5120addfbb
data-control: Handle inert seats
2 years ago
Väinö Mäkelä
f97f4496de
data-device: Handle inert seats
2 years ago
Väinö Mäkelä
0e5f76186e
seat: Allow binding to inert seats
...
If a seat is destroyed while a client is trying to bind it, wlroots
needs to create an inert seat resource instead of crashing.
2 years ago
Simon Ser
52b93f7eb4
output/cursor: fix scale and transform
...
Many issues here:
- wlr_output_cursor_set_buffer() takes a buffer already scaled for
the output, not a buffer with scale=1.
- wlr_output_cursor.{width,height,hotspot_x,hotspot_y} are in output
buffer coordinates.
- render_cursor_buffer() had hardcoded no-ops for scale and
transform, instead of using the cursor surface's.
Fixes: b64e7e88bf
("output: add output_cursor_set_texture()")
2 years ago
Simon Ser
09c87cec3f
cursor: fix wl_pointer.set_cursor hotspot updates
...
A client might update the cursor with the same wl_surface as
before, but with a different hotspot. Don't ignore such updates.
Fixes: 9c9e3f6263
("cursor: ignore wlr_cursor_set_surface() with same surface")
2 years ago
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.
2 years ago
Kirill Primak
e75407fd4d
session-lock: remove unused wlr_session_lock_surface_v1.events.map
2 years ago
Kirill Primak
d086ee1b9e
compositor: remove wlr_surface_role.precommit
...
It was previously used to handle unmapping properly but is obsolete now.
2 years ago
Kirill Primak
af4181f388
drag: use unified map logic
2 years ago
Kirill Primak
743da5c0ae
input-method: use unified map logic
2 years ago
Kirill Primak
229abfae0c
session-lock: use unified map logic
2 years ago
Kirill Primak
c63f3659c5
layer-shell: use unified map logic
2 years ago
Kirill Primak
b0437fc416
xdg-shell: use unified map logic
2 years ago
Kirill Primak
c590bb600f
subcompositor: use unified map logic
2 years ago
Kirill Primak
6b40e08148
compositor: introduce unified map logic
2 years ago
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
2 years ago
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.
2 years ago
Simon Ser
5bcd537ff4
output/cursor: use new rendering API
2 years ago
Simon Ser
93a6acae9f
output: add wlr_output_begin_render_pass()
2 years ago
Alexander Orzechowski
95062904c7
wlr_scene: Introduce wlr_scene_buffer_set_opacity
2 years ago
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
2 years ago
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.
2 years ago
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.
2 years ago
Alexander Orzechowski
d495fb8c04
wlr_{box, fbox}_equal: Consider empty boxes NULL
2 years ago
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.
2 years ago
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")
2 years ago
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"
2 years ago
Alexander Orzechowski
c4bed48fcc
output_pick_format: Fail if no format could be chosen
2 years ago
Kirill Primak
75293d5fb0
keyboard: use the new data in wlr_keyboard_set_keymap()
...
Fixes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3647
2 years ago
Simon Ser
e2647c5151
keyboard: add support for resetting the keymap
2 years ago
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.
2 years ago
Simon Ser
69aeccddb7
seat/keyboard: allow no keymap
2 years ago
Alexander Orzechowski
300bd80772
wlr_drm_format_set: Store formats on array
2 years ago
Alexander Orzechowski
90d08f8f1c
wlr_drm_format: Rework wlr_drm_format_intersect
...
Now it takes a reference to a destination format
2 years ago
Alexander Orzechowski
340700cb70
wlr_drm_format: Change wlr_drm_format_dup to copy
2 years ago
Alexander Orzechowski
e427e019c4
wlr_drm_format: Don't take double pointer in wlr_drm_format_add
2 years ago
Alexander Orzechowski
b45396c790
wlr_drm_format: Introduce drm_format_finish
2 years ago
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
2 years ago
Alexander Orzechowski
18139f4d87
wlr_cursor: Don't multiply hotspot by scale^2
...
We are already multiplying in output_cursor_set_texture
2 years ago
Alexander Orzechowski
47a250ae12
wlr_cursor: Consider surface state when setting new cursor surface
...
Found by inspection
2 years ago
Simon Ser
d933f5204b
output: drop wlr_output_cursor_set_surface
2 years ago
Simon Ser
78afce5e2d
cursor: add surface handling
...
Only rely on wlr_output_cursor_set_texture(), because
wlr_output_cursor_set_surface() will get dropped.
2 years ago
Simon Ser
b64e7e88bf
output: add output_cursor_set_texture()
2 years ago