Commit Graph

2545 Commits

Author SHA1 Message Date
Alexander Orzechowski
2aebb8e444 wlr_scene: Fix crash when committing NULL buffer
If we commit a null buffer, we want to avoid the buffer damage path and
instead just update the node to avoid it.
2024-03-13 07:50:54 +00:00
Alexander Orzechowski
8da93e5936 wlr_scene: Add support for custom swapchains 2024-03-12 11:26:03 -04:00
Alexander Orzechowski
239354d644 wlr_scene: Decide when to commit output damage with buffers in damage ring
We will soon support custom swapchains. In order to track output damage
we should instead use the damage_ring which will hold all the buffers
we are currently tracking anyway across an arbitrary amount of swapchains.
2024-03-12 11:25:58 -04:00
Alexander Orzechowski
8220184a72 wlr_scene: Assert that buffer returned from swapchain is the right size 2024-03-12 11:16:30 -04:00
Simon Ser
c79ed0706d scene: simplify scene_node_update() condition when setting buffer 2024-03-12 12:11:35 +01:00
Alexander Orzechowski
2d97935e82 wlr_scene: Call surface enter scale events on surface create
We would fail to call scene_node_update() which would then call output
events for us. We need to make sure to update the node when we first map
a buffer, as the comment explained.
2024-03-12 01:57:07 -04:00
Simon Ser
11ee3ae5b5 tablet-v2: use wlr_tablet.usb_{vendor,product}_id 2024-03-07 11:08:18 +00:00
Isaac Freund
22178451f7
cursor-shape-v1: expose tablet tool in event
This allows compositors which use a separate cursor per tablet tool to
support setting tablet tool cursors individually using this protocol.
2024-03-05 11:20:05 +01:00
Simon Ser
31c842e5ec cursor-shape-v1: handle inert tablet tool client
If the tablet tool is inert, the wlr_tablet_tool_client_v2 can be
NULL.
2024-03-04 17:38:37 +01:00
Isaac Freund
2a897af7dc
wlr_tablet_v2: fix destroy listener name 2024-02-29 16:09:08 +01:00
Isaac Freund
b821be5749
input-device: unconfuse tablet naming
WLR_INPUT_DEVICE_TABLET_TOOL is renamed to WLR_INPUT_DEVICE_TABLET

The input device corresponds to wlr_tablet, not wlr_tablet_tool.
2024-02-29 16:09:07 +01:00
Simon Ser
889150f866 cursor: use switch for input device type
Slightly improves the code style.
2024-02-29 14:03:55 +01:00
Simon Ser
091c6e09b1 tablet-v2: only send id event is vendor is set
Some tablets may not have a USB vendor/product set.

References: https://gitlab.freedesktop.org/wayland/wayland-protocols/-/issues/180#note_2303637
2024-02-29 11:33:06 +00:00
Simon Ser
488a23c169 pointer: drop enum wlr_axis_orientation
Instead, use enum wl_pointer_axis from the Wayland protocol.
2024-02-28 16:39:18 +00:00
Simon Ser
ec5263e6b7 pointer: drop enum wlr_axis_relative_direction
Instead, use enum wl_pointer_axis_relative_direction from the
Wayland protocol.
2024-02-28 16:39:18 +00:00
Simon Ser
812451cd8f pointer: use enum wl_pointer_button_state 2024-02-28 16:39:18 +00:00
Simon Ser
9f4cf242d9 pointer: drop enum wlr_axis_source
Instead, use enum wl_pointer_axis_source from the Wayland protocol.
2024-02-28 16:39:18 +00:00
Simon Ser
e8b7fe8f39 output: use output_pending_enabled() in output_basic_test() 2024-02-26 17:20:12 +01:00
Kenny Levinsen
2b1c0ffdd0 gamma-control-v1: Remove dead variable assignment 2024-02-22 23:12:41 +01:00
Kenny Levinsen
0cb091f1a2 drm-lease-v1: Free the wlr_drm_lease_v1 on error 2024-02-22 00:41:06 +01:00
Simon Ser
cf7b91cc5f buffer: add single-pixel-buffer-v1 special case in buffer_is_opaque() 2024-02-21 08:54:35 +00:00
Simon Ser
431e8a7fd7 scene: ignore duplicate wlr_scene_output_layout_add_output() calls
An assert was added in [1] to avoid tracking the same output multiple
times. However, this is cumbersome for compositors [2]: they need to
add a special check for this. Additionally, this is inconsistent with
wlr_output_layout_add().

[1]: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4380
[2]: https://github.com/cage-kiosk/cage/pull/315
2024-02-20 11:04:46 +01:00
Simon Ser
842093bb84 Define _POSIX_C_SOURCE globally
Stop trying to maintain a per-file _POSIX_C_SOURCE. Instead,
require POSIX.1-2008 globally. A lot of core source files depend
on that already.

Some care must be taken on a few select files where we need a bit
more than POSIX. Some files need XSI extensions (_XOPEN_SOURCE) and
some files need BSD extensions (_DEFAULT_SOURCE). In both cases,
these feature test macros imply _POSIX_C_SOURCE. Make sure to not
define both these macros and _POSIX_C_SOURCE explicitly to avoid
POSIX requirement conflicts (e.g. _POSIX_C_SOURCE says POSIX.1-2001
but _XOPEN_SOURCE says POSIX.1-2008).

Additionally, there is one special case in render/vulkan/vulkan.c.
That file needs major()/minor(), and these are system-specific.
On FreeBSD, _POSIX_C_SOURCE hides system-specific symbols so we need
to make sure it's not defined for this file. On Linux, we can
explicitly include <sys/sysmacros.h> and ensure that apart from
symbols defined there the file only uses POSIX toys.
2024-02-15 15:41:12 +01:00
Kirill Primak
4c69bc47f4 ext-foreign-toplevel-list-v1: improve/fix update_state()
This extracts common string updating logic into a function and fixes a
possible NULL dereference.
2024-02-13 19:36:21 +03:00
Paul Cercueil
220df2aa0f
Add more POSIX compliance macros to fix uClibc support
- Add POSIX 1993.09 compliance macro in source files that use
  "struct timespec";
- Add POSIX 2001.12 compliance macro in source files that use
  "struct sigaction" and the SA_SIGINFO macro, or the fchmod()
  function;
- Add POSIX 2008.09 compliance macro in source files that use the
  getline() function.

These compliance macros are enough for wlroots to compile with the
git-master version of uClibc-ng.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
2024-02-12 17:41:45 +01:00
columbarius
9e426e70e6 ext-foreign-toplevel-list-v1: new protocol implementation
This implements the new ext-foreign-toplevel-list-v1 protocol [1].
Implemented analog to the zwlr-foreign-toplevel-management-v1 implementation.
The additional _ext_ in the names was added to avoid name collisions.

[1]: https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/187

Co-authored-by: Leon Henrik Plickat <leonhenrik.plickat@stud.uni-goettingen.de>
2024-02-12 01:05:19 +01:00
Kirill Primak
cb815e8847 pointer-constraints: handle inert pointer resources correctly 2024-02-06 22:06:09 +03:00
Austin Shafer
4cd556ea20 linux_dmabuf_v1: allow callbacks for checking dmabuf import 2024-02-06 16:11:30 +00:00
Kirill Primak
811ca199c4 xdg-shell: drop automatic surface configuration
Compositors now are expected to wait for an initial commit by checking
wlr_xdg_surface.initial_commit on every surface commit and send
(schedule) configure events manually.
2024-02-06 13:48:00 +00:00
Kirill Primak
5b08f91004 compositor: don't handle size or viewport src change in surface_update_damage()
This is incorrectly leads to buffer reuploading.
2024-02-01 14:51:43 +00:00
Kirill Primak
7dfbd87771 compositor: drop wlr_surface.external_damage 2024-02-01 14:51:43 +00:00
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