Kirill Primak
56cc25185d
cursor: fix and simplify region mapping
...
Fixes: 4462f5dcb3
2024-02-01 14:42:00 +00:00
Leo Li
71fb55f3bf
render/pixel-format: Move has_alpha into it's own array
...
Some opaque pixel formats (nv12, p010) require per-plane bytes_per_block
info. However, it doesn't make sense to store them in
wlr_pixel_format_info, as they will never be useful (currently, this
info is used for shm, which doesn't have a concept of multi-planar
buffers.)
Let's define a separate array and function for determining whether a
pixel format has alpha.
2024-01-31 13:47:17 -05:00
Andri Yngvason
3a91dc1b48
Create & implement transient seat protocol
2024-01-31 08:22:05 +00:00
Simon Ser
435ca39960
linux-dmabuf-v1: bump to v5
...
We already send a protocol error when the modifiers aren't the same
for all planes.
References: https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/224
2024-01-31 08:20:17 +00:00
Simon Ser
6991f03767
linux-dmabuf-v1: switch to stable
...
The protocol is no longer unstable.
2024-01-31 08:20:17 +00:00
Alexander Orzechowski
8dff1bb9bd
wlr_damage_ring: Replace wlr_damage_ring_rotate_buffer with original list impl
...
The seq based implementation is complex to reason about and doesn't even
work.
2024-01-29 19:17:39 +00:00
Kirill Primak
4688a371e0
compositor: don't get buffer from pending buffer resource too early
...
Fixes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3795
2024-01-27 17:48:07 +03:00
Simon Ser
4ec901bb33
scene: release shm buffers once uploaded
...
Once a shm buffer is uploaded there's no reason for wlr_scene_buffer
to keep it locked any further. Allow the compositor to re-use it.
2024-01-27 12:21:54 +00:00
Kirill Primak
0052078bd3
compositor: introduce wlr_surface_reject_pending()
2024-01-27 12:05:05 +00:00
Alexander Orzechowski
cca2bfbe92
output: Drop pending state
2024-01-24 18:46:45 +00:00
Simon Ser
00bb1b0f84
seat/pointer: add support for axis_relative_direction event
2024-01-23 08:37:29 +00:00
Simon Ser
b80337a8f2
xdg-shell: assert that configure events carry positive or zero sizes
...
Negative values here would indicate a compositor bug. For xdg_popup,
zero values are not allowed.
2024-01-22 17:49:38 +01:00
Kirill Primak
be1c48cbfb
layer-shell: forbid set_size with values ≥INT32_MAX
2024-01-22 19:01:57 +03:00
Kirill Primak
0b090c83fb
single-pixel-buffer: send wl_buffer.release
2024-01-18 21:20:32 +03:00
Kirill Primak
58bb49a00b
security-context-v1: fix possible leaks on wl_client_create() and state copying errors
2024-01-17 15:44:37 +00:00
Isaac Freund
7129eaa1f2
keyboard: fix type of wlr_keyboard_modifiers.group
...
This isn't a breaking change since both of these typedefs are uint32_t
but this should make things a bit less confusing for readers.
2024-01-17 11:00:52 +03:00
Simon Ser
a0b1329ee6
Fix bool return types
...
This makes wlroots build in C23 mode.
C23 is more strict and rejects implicit conversions from bool to a
pointer.
2024-01-04 22:24:06 +01:00
Simon Ser
ab924064f2
scene: drop wlr_scene_set_presentation()
2023-12-27 13:41:20 +01:00
Simon Ser
d68ba9d6c2
presentation-time: drop wlr_presentation arg
...
There can only be a single presentation-time global advertised to
clients, this it's unnecessary to pass around the wlr_presentation
pointer.
2023-12-27 13:41:01 +01:00
Simon Ser
1968ada213
tearing-control-v1: synchronize state with surface
2023-12-25 18:55:30 +01:00
Simon Ser
0ea6b6e2cc
session-lock-v1: use wlr_surface_synced
2023-12-25 18:55:21 +01:00
Simon Ser
aa32d1a127
session-lock-v1: drop negative buffer size checks
...
The buffer size will never be negative, and the negative checks
are distracting from the real checks here.
2023-12-25 18:54:11 +01:00
Simon Ser
dc3b2b9439
content-type-v1: use wlr_surface_synced
2023-12-25 11:47:15 +01:00
Simon Ser
90e12fb978
pointer-constraints-v1: use wlr_surface_synced
2023-12-25 11:47:15 +01:00
Simon Ser
a6122c3ec5
layer-shell-v1: use wlr_surface_synced
2023-12-25 11:47:15 +01:00
Simon Ser
0e3d2222c2
xdg-decoration: use wlr_surface_synced for toplevel
2023-12-25 11:47:15 +01:00
Simon Ser
96aec06b0a
subcompositor: use wlr_surface_synced
2023-12-25 11:47:15 +01:00
Simon Ser
1c3c24825f
presentation-time: use wlr_surface_synced
2023-12-25 11:47:15 +01:00
Simon Ser
4b3553409a
xdg-shell: use wlr_surface_synced for popups
2023-12-25 11:47:15 +01:00
Simon Ser
9201431c29
xdg-shell: use wlr_surface_synced for toplevel
2023-12-25 11:47:15 +01:00
Simon Ser
69d9a4e2cb
xdg-shell: use wlr_surface_synced for wlr_xdg_surface
2023-12-25 11:47:15 +01:00
Simon Ser
7e1ae5548c
compositor: add wlr_surface_role.client_commit
2023-12-25 11:47:15 +01:00
Simon Ser
d847516765
compositor: add wlr_surface_synced
...
A lot of protocols extend the wl_surface state. Such protocols need
to synchronize their extended state with wl_surface.commit and
cached states. Add a new utility for this purpose.
2023-12-25 11:47:15 +01:00
Simon Ser
34d5af4172
compositor: add wlr_surface_state_has_buffer()
2023-12-25 11:47:15 +01:00
Simon Ser
66b6c349e7
compositor: remove unnecessary wlr_surface.has_buffer
...
No need to store this bit, we can infer it from buffer_width and
buffer_height.
2023-12-25 11:43:41 +01:00
Simon Ser
cd157a0bd9
compositor: adjust surface_state_move() comment
2023-12-25 11:43:41 +01:00
Simon Ser
da5f53b461
pointer-constraints-v1: reset committed on commit
...
Knowing which fields changed in the last commit is more useful than
knowing which fields were ever set on the surface.
2023-12-25 10:36:26 +00:00
Simon Ser
85f44f3684
pointer-constraints-v1: add cursor_hint.enabled
...
This allows compositors to check whether the cursor hint is set.
2023-12-25 10:36:26 +00:00
Simon Ser
df27b29d49
compositor: reset wlr_surface.current.committed on commit
...
Knowing which fields changed in the last commit is more useful than
knowing which fields were ever set on the surface.
2023-12-25 10:36:26 +00:00
Simon Ser
11e3c376e7
output-layout: fix missing global for outputs with a custom mode
...
Before we were populating wlr_output.current_mode with a generated
fixed mode when a custom mode was committed in the DRM backend. But
that's no longer the case: now a custom mode behaves the same under
the DRM backend and other backends.
wlr_output_layout was still assuming that an output without a
current_mode was disabled. Fix that assumption.
Fixes: 5567aefb1c
("backend/drm: Don't add pollute fixed modes list with custom modes")
Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3743
2023-12-21 11:28:58 +01:00
Guido Günther
b032161785
input-method: Simplify resetting of input state
...
We have current and pending state and the code uses struct
assignments between them and resets and frees in multiple places.
Introduce a reset() function so we can unify that.
2023-12-18 16:21:48 +01:00
pastel raschke
3bf9000a52
input-method-v2: validate commit serial
2023-12-18 11:15:51 +01:00
pastel raschke
6ee5bd9eee
input-method-v2: free current strings on commit
2023-12-18 11:14:41 +01:00
Simon Ser
81f5607ad9
input-method-v2: drop unnecessary variable and cast
2023-12-18 11:14:08 +01:00
Simon Ser
d7ac8c0cc1
cursor: drop unnecessary commented code
...
This is unused.
2023-12-12 19:39:33 +00:00
Simon Ser
7ef62cc995
cursor: fix initial cursor position for new outputs
...
The fresh new wlr_output_cursor is positioned at (0, 0).
Call wlr_output_cursor_move() after creating the wlr_output_cursor
to fix this.
Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3777
2023-12-12 19:39:33 +00:00
Simon Ser
3475b1880f
linux-dmabuf-v1: ignore scanout output for secondary DRM backends
...
We don't support direct scanout on such backends yet.
2023-12-12 14:42:52 +00:00
Simon Ser
6a2ff0dffe
compositor: drop surface precommit event
...
This is unused.
2023-12-04 19:32:44 +01:00
Simon Ser
78836298ef
cursor: send surface scale events
...
wlr_cursor is responsible for sending enter/leave events, but
doesn't send fractional-scale-v1 and wl_surface.preferred_buffer_scale
events. This is not an easy thing to do from a compositor, so let's
just do it in wlr_cursor itself.
2023-12-04 15:39:04 +00:00
Alexander Orzechowski
6287b61025
wlr_damage_ring: Fix inverted conditional
2023-12-04 07:16:46 -05:00
Alexander Orzechowski
62169bf5ac
wlr_scene: fix transformed outputs backend damage clearing
...
When we cleared the pending backend damage when the output committed,
we would not take into account the output transform. It's easiest to fix
this by just changing pending_commit_damage to always have transformed
coordinates.
2023-12-04 07:06:35 -05:00
Alexander Orzechowski
364d7cba42
wlr_scene: Apply output damage once
...
We would apply it twice if we failed direct scanout. Once when we attempt
direct scanout and again when we composite.
2023-12-04 06:58:35 -05:00
Alexander Orzechowski
fe8916fef0
wlr_scene: Don't damage whole damage ring when exiting direct scanout
...
Direct scanout damage will just accumulate on the damage ring while in
direct scanout and properly damage when we exit anyway. On the flip side
since we now manage backend damage submission ourselves, this won't break
that either.
2023-12-03 05:29:05 +00:00
Alexander Orzechowski
0619c99dc7
wlr_scene: Use wlr_damage_ring_rotate_buffer()
...
Compositors who use _build_state are no longer required to call
damage_ring_rotate themselves. This is a minor breaking change.
2023-12-03 05:29:05 +00:00
Alexander Orzechowski
06d301bf1a
wlr_scene: Track output damage separately
...
The damage ring is only supposed to keep track of damage within
the swapchain
2023-12-03 05:29:05 +00:00
Alexander Orzechowski
3ed1268f64
render: Nuke old read pixels API
...
Sadly, the new API is not backwards compatible with the old API. Since
we have already switched all users in wlroots to the new API compositors
are already practically mandated to implement the new API. Let's get rid
of the old one since there is no point.
2023-11-30 20:01:12 -05:00
Alexander Orzechowski
b3575fedbc
screencopy_v1: Use new read pixels API
2023-11-30 20:01:12 -05:00
Simon Ser
a165261f7f
output: replace wlr_render_timer arg with wlr_buffer_pass_options
...
This scales better when more render pass options are added.
2023-11-30 19:48:01 +01:00
Simon Zeni
5d639394f3
types/output: emit destroy event before destroying global
2023-11-30 13:29:18 -05:00
Alexander Orzechowski
7702a19739
output: Drop back_buffer
2023-11-29 16:00:24 -05:00
Alexander Orzechowski
fc6000251c
output: Drop wlr_output_attach_render
2023-11-29 16:00:23 -05:00
Simon Ser
2093564616
damage_ring: add wlr_damage_ring_rotate_buffer()
...
This adds an alternate way to use wlr_damage_ring without the
concept of buffer age. Buffer age is a concept inherited from EGL
but there is no real reason why we should continue to use that in
wlroots. Instead, use wlr_buffer pointers.
Eventually, we should be able to remove the buffer age based
functions.
2023-11-29 14:45:10 -05:00
Simon Ser
4fbe648faf
viewporter: fix src buffer bounds check
...
The surface scale and transform are applied before the viewport.
Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3766
2023-11-26 11:56:28 +00:00
Simon Ser
7dcb045176
viewporter: listen to client_commit
...
The commit event fires too late: we're interested in checking the
values at wl_surface.commit time, not after.
2023-11-26 11:56:28 +00:00
Simon Ser
d1c88a22a3
viewporter: rename state var in viewport_handle_surface_commit()
...
"current" is misleading, since we are using the pending state here.
2023-11-26 11:56:28 +00:00
Kirill Primak
87346b3393
Revert "subcompositor: emit new_subsurface immediately"
...
new_subsurface emitted immediately isn't actually that useful. Revert the change
and document that this event is special.
This reverts commit 504b9491f0
.
2023-11-25 11:47:11 +00:00
Simon Ser
56ec13596a
Cleanup wlr_matrix.h includes
...
Many files used to require wlr_matrix but no longer do.
2023-11-25 08:37:43 +01:00
Kirill Primak
7661ab2bf1
compositor: deprecate wlr/types/wlr_region.h
...
The only function in that header is now also declared in
wlr/types/wlr_compositor.h.
2023-11-24 15:09:31 +03:00
Alexander Orzechowski
26158d0718
output: Drop transform matrix
2023-11-23 16:32:58 -05:00
Kirill Primak
78a09573af
output: fix display destroy listener double removal
...
Fixes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3762
2023-11-23 21:20:46 +03:00
Kirill Primak
504b9491f0
subcompositor: emit new_subsurface immediately
...
See https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3608 .
2023-11-23 13:18:06 +00:00
Kirill Primak
43fd3a007e
subcompositor: don't map unadded subsurfaces
2023-11-23 13:18:06 +00:00
Kirill Primak
e841366068
layer-shell: emit new_surface event at the proper time
2023-11-23 13:02:10 +00:00
Kirill Primak
c85838892d
xdg-{shell,decoration}: improve events
...
This commit changes the behavior of `new_*` signals to better match
their names (see https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3608 ).
wlr_xdg_shell.events.new_surface is now emitted when an xdg_surface is
created, and wlr_xdg_shell.events.new_{toplevel,popup} events are
introduced to get notified when an xdg_{toplevel,popup} is created.
Same applies to
`wlr_xdg_decoration_manager_v1.events.new_toplevel_decoration`. As a
result, wlr_xdg_surface.added and wlr_xdg_toplevel_decoration_v1.added
are removed, as we no longer need to track whether the corresponding
event was emitted.
Additionally, this commit changes the behavior of
wlr_xdg_surface.events.destroy: it is now emitted when the xdg_surface
is destroyed, as the name suggests.
wlr_xdg_{toplevel,popup}.events.destroy events are added to get
notified when an xdg_{toplevel,popup} is destroyed.
2023-11-23 12:52:20 +00:00
Simon Ser
d61ec694b3
output: take wl_event_loop in wlr_output_init()
...
We don't need the whole wl_display here anymore. The wl_event_loop
is enough.
2023-11-23 11:39:25 +00:00
Simon Ser
d23d8ed3ba
output: setup display destroy listener in wlr_output_create_global()
...
The wl_display destroy listener cleans up the global (if any).
wlr_output.display will go away, so setup the listener in
wlr_output_create_global() instead of wlr_output_init().
2023-11-23 11:39:25 +00:00
Simon Ser
5717e27c06
output: take wl_display in wlr_output_create_global()
...
Currently wlr_output holds a wl_display, but it will go away soon.
Instead of relying on that field in wlr_output_create_global(),
make the dependency explicit by taking a wl_display as argument.
2023-11-23 11:39:25 +00:00
Simon Ser
6a7463bb8e
output-layout: take wl_display in constructor
...
The output layout creates and destroys wl_output globals. We will
soon need the wl_display to do so.
2023-11-23 11:39:25 +00:00
Simon Ser
2eb225236e
util/transform: add wlr_output_transform_coords()
...
We hand-roll this in multiple places.
2023-11-23 11:07:34 +01:00
Simon Ser
9e702e9cfe
util/transform: move over wl_output_transform helpers
...
These aren't really tied to wlr_output.
2023-11-23 11:03:57 +01:00
Manuel Stoeckl
a3d22dbe97
xdg-toplevel: check that title provided actually is UTF-8
...
While the xdg-shell protocol requires this, it does not yet have
a dedicated error code for invalid titles; this commit makes
wlroots send a generic error instead.
2023-11-22 22:03:00 +03:00
Simon Ser
0c83c331ca
output/cursor: drop legacy rendering API
2023-11-22 11:30:14 +01:00
Kirill Primak
5dd614b9ad
input-inhibitor: drop
...
wlr_input_inhibitor.h has been marked as deprecated in 0.17.0.
2023-11-21 20:10:18 +03:00
Simon Ser
fe6a432299
linux-dmabuf-v1: skip import check on split render/display SoCs
...
Unfortunately we have no way to get back the proper render node in
that case. This will be fixed with [1]: with that Mesa patch, the
wlr_renderer will return the proper render node and the existing
logic will work fine.
[1]: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24825
Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3757
2023-11-20 19:54:16 +01:00
Alexander Orzechowski
515681503e
screencopy: Use box size instead for shm copy
...
This doesn't change functionality, both the values are the same. Less
confusing to use the box size.
2023-11-20 11:33:11 -05:00
Alexander Orzechowski
7a22030071
screencopy: Move frame bounds sanity check into common code
2023-11-20 11:33:11 -05:00
Alexander Orzechowski
c8861a2865
screencopy: Define proper destination for dmabuf copy
...
Leaving this empty would have it filled in with the size of the source
texture, but we want the destination size.
Fixes : #3758
2023-11-20 11:33:10 -05:00
Alexander Orzechowski
303f23d7dd
wlr_scene: Update outputs if subpixel status changes
...
This is important for buffers that are meant to render any sort of
text.
2023-11-15 18:42:12 -05:00
Alexander Orzechowski
50446fe75e
wlr_scene: Update outputs when primary output is changed
...
Helpers care about the primary output. They need to know when it changes
even if intersection status has not changed necessarily.
2023-11-15 18:42:12 -05:00
Alexander Orzechowski
889c5ed5ff
wlr_scene: Update outputs when output scale/transform changes
...
We want to call the outputs updated signal when an output scale or transform
changes. Otherwise helpers like the scene surface helpers will not be
notified of scale changes and not pass them to clients.
2023-11-15 18:38:12 -05:00
Alexander Orzechowski
3d3cca9164
wlr_scene: Introduce wlr_scene_subsurface_tree_set_clip
2023-11-14 17:27:08 +00:00
Alexander Orzechowski
d1ddd4ca3a
wlr_scene_surface: Introduce scene_surface_set_clip
2023-11-14 17:27:08 +00:00
Alexander Orzechowski
c6d356648c
set_buffer_with_surface_state: Take whole surface struct
2023-11-14 17:27:08 +00:00
Alexander Orzechowski
1c0b10b61a
wlr_scene_subsurface_tree: Addon to scene
...
We will need this later so that we can determine the subsurface tree
that owns any given scene node.
2023-11-14 17:27:08 +00:00
Alexander Orzechowski
33b437d574
wlr_scene: Amend scene_buffer.point_accepts_input to take coordinate pointers
...
The pointers mean that we can mutate them. This will be useful later
so we can hide details from the compositor when we clip subsurface trees.
2023-11-14 17:27:08 +00:00
Simon Ser
319e4125ab
xdg-shell: add wlr_xdg_{toplevel,popup}_try_from_wlr_surface()
...
Convenience helpers for compositors. Saves them the trouble of
manually checking the role (and if they forget to do so, prevents
an invalid cast).
2023-11-13 10:31:00 +01:00
Väinö Mäkelä
5de9e1a99d
wlr-output-management: Send custom modes to clients
...
Since commit 5567aefb
, fixed modes haven't been automatically generated
for custom modes, so the output management implementation needs to be
able to handle them directly. To avoid polluting the mode list, only a
single custom mode can be listed at a time and will be removed when a
fixed mode is set.
Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3744
2023-11-06 17:46:55 +00:00
Simon Ser
22df8d3847
cursor: log missing XCursor
...
Log a debug message when the XCursor theme is missing a cursor.
Eases debugging.
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3746
2023-10-31 13:37:00 +00:00
sunzhguy
dbf20b0ad3
wlr_cursor: update cursor when output enable and transform changed
...
Signed-off-by: zhoulei <zhoulei@kylinos.cn>
Signed-off-by: sunzhguy <sunzhigang1@kylinos.cn>
2023-10-31 01:29:02 -04:00
Simon Ser
1c24b1182b
backend: drop wlr_backend_get_presentation_clock()
...
We can just assume CLOCK_MONOTONIC everywhere.
Simplifies the backend API, and fixes clock mismatches when multiple
backends are used together with different clocks.
2023-10-30 18:39:39 +01:00