3180 Commits

Author SHA1 Message Date
Bilal Elmoussaoui
6f9e75b6f2 boxes: Move Rectangle.is_adjacent_to to Mtk
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3501>
2024-01-09 18:47:34 +00:00
Peter Hutterer
b5e9279ea0 backends/x11: Fetch the tablet serial prop on device add
For tablet device, the tool was created when the "Wacom Serial IDs" prop
changed values. This property does not exist on the xf86-input-libinput
driver but v1.5.0 of that driver has a different property for the serial.

The serial is constant (the driver creates one X device per serial), so
we can fetch it after device creation and set it then. For earlier
versions of the driver we assign the random serial 0xffffffaa - good
enough to have at least a tool.

This fixes the crash in #3120 - clutter_event_motion_new()
overrides event->device to the tool's device (if any). Without a tool
motion events use the Virtual Core Pointer instead and our source device
is never added to the stage's priv->pointer_devices.

When we generate an crossing event (which uses the source device) we
fall afoul of an assert in clutter_stage_update_device() that expects
our source device to be in priv->pointer_devices.

Fixes https://gitlab.gnome.org/GNOME/mutter/-/issues/3120

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3383>
2024-01-09 17:33:33 +00:00
Bilal Elmoussaoui
52c64d44fc docs: Move kms abstractions to a separate file
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3489>
2024-01-09 15:23:04 +00:00
Bilal Elmoussaoui
00b4d4c4bc docs: Update more links to gi-docgen
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3489>
2024-01-09 15:23:04 +00:00
Albert Esteve
1a0d00467d backends/native: Fix atomic cursor plane assign
Make atomic cursor plane assignment not depending on
cursor hotspot support.

Fixes: 4b9d1271a ("backends/native: Add PLANE_PROP_HOTSPOT_[X,Y]")
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3238
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3503>
2024-01-09 13:52:37 +00:00
Bilal Elmoussaoui
39a8b153d5 backends: Drop unused private functions
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3492>
2024-01-09 13:14:35 +00:00
Zack Rusin
27f798b6d0 kms/impl-device/atomic: Implement mouse cursor hotspots
DRM's kms atomic code was updated to include an API to set the mouse
cursor hotspot. This has historically been missing in the atomic kms
which meant that the virtualized drivers which require mouse cursor
hotspot info to properly render had to be put on a deny list and
had to fallback to the legacy DRM kms code.

Implement the new hotspot API by checking whether the device supports
hotspot properties and if it does set them on the cursor plane. This
enables atomic kms on all virtualized drivers for kernels where
mouse cursor hotspots are in drm core.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3337>
2024-01-08 15:54:15 +01:00
Albert Esteve
3885d2b3f6 backends/native: Set hotspot property on updates
Add a `has_update` flag to the cursor hotspot struct
to allow selective update of the hotsport property
only when it will take an effect.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3337>
2024-01-08 15:54:01 +01:00
Albert Esteve
4b9d1271a0 backends/native: Add PLANE_PROP_HOTSPOT_[X,Y]
Add META_KMS_PLANE_PROP_HOTSPOT_[X,Y] properties
to the MetaKmsPlaneProp enumeration, and
properly initialise them.

Also, add a convenience method in meta-kms-plane
(i.e., `meta_kms_plane_supports_cursor_hotspot`)
to check whether a plane supports hotspot
property setting.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3337>
2024-01-08 15:15:25 +01:00
Daniel van Vugt
8252f71447 onscreen/native: Replace an old strerror with g_strerror
For consistency with the previous commit.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3418>
2024-01-08 13:05:17 +00:00
Daniel van Vugt
ee3968981f onscreen/native: Explain why surface creation failed in the error message
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3418>
2024-01-08 13:05:17 +00:00
Bilal Elmoussaoui
9e4d1f51ee misc: Drop remaining nick/blurbs
Those were added again after we dropped their usage in the codebase

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3498>
2024-01-08 11:54:58 +00:00
Bilal Elmoussaoui
6b8c1c430e cleanup: Make clutter includes consistent
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3491>
2024-01-05 14:22:22 +01:00
Peter Hutterer
e7ba16689d backends/native: Use a pre-sampled bezier pressure curve
Based on the pressure curve control points sample a bezier curve and
then look up the pressure at that point of the curve.

We sample 256 points and do linear interpolation in between, this
strikes a balance between having to calculate the point for all
8K pressure points a modern pen supports while still giving us
reasonable detailed curves.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3158
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3399>
2024-01-05 10:21:42 +00:00
Peter Hutterer
4d6add290e backends/native: Switch the pressurecurve points to graphene points
No functional changes but a little bit of type-safety for future
patches.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3399>
2024-01-05 10:21:42 +00:00
Peter Hutterer
5ec67a8e90 backends/native: Change the MetaBezier API to sampling and lookup
This keeps the existing ClutterBezier implementation but changes
the visible API to match the needs of the tablet tool pressure curve:
a bezier defined within a [0.0/0.0, 1.0/1.0] box,(sampled
into a set of x->y mappings for each possible pressure input x, and
a lookup function to get those values out of the curve.

This patch moves the internally-only functions to be statics and changes
meta_bezier_init() to take only the second and third control point, as
normalized doubles. Because internally we still work with integers, the
bezier curve now has an integer "precision" that defines how many points
between 0.0 and 1.0 we can sample.

The meta_bezier_rasterize() function calculates the x->y mapping for
each point on the bezier curve given the initial scale of the curve.
That value is then available to the caller via meta_bezier_lookup().

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3399>
2024-01-05 10:21:42 +00:00
Peter Hutterer
f2ed377f48 backends/native: Update MetaBezier coding style for modern standards
Let's try to get past that pesky code-style checker.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3399>
2024-01-05 10:21:42 +00:00
Peter Hutterer
414357a70f backends/native: Restore the ClutterBezier code to here
The ClutterBezier code was removed in
    580d62b9b clutter: Remove unused Path related types
because it wasn't used anywhere. We do need a bezier curve for the
tablet tool pressure curve calculation though so let's move it
to the native backend and rename it to MetaBezier in the process.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3399>
2024-01-05 10:21:42 +00:00
Bilal Elmoussaoui
cebde5c2d1 backend/native: Move DrmFormatBuf to cogl-drm-formats
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3480>
2024-01-03 14:46:41 +01:00
Bilal Elmoussaoui
786a9d9072 build: Require libdrm >= 2.4.95
So we can drop the DRM_FORMAT_INVALID fallback

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3480>
2024-01-03 14:46:04 +01:00
Bilal Elmoussaoui
50fd53d465 x11/seat: Initialize group/mode for pad events
Otherwise, if Mutter is built without libwacom, garbage values would be
passed to clutter_event_pad_button_new

Closes https://gitlab.gnome.org/GNOME/mutter/-/issues/3227

Fixes: 1611979fa ("x11: Implement ClutterSeat")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3479>
2024-01-03 10:56:11 +00:00
Mart Raudsepp
d7db784b54 build: Fix building without wayland headers
Fixes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3046
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3471>
2024-01-03 10:48:00 +00:00
Robert Mader
cb794329e7 clutter/stage-view: Remove superfluous return in void function
Fixes: 9d3e4fd402 ("clutter/stage-cogl: Use buffer age when view monitor is rotated")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3473>
2024-01-02 13:54:38 +00:00
Jonas Ådahl
3b46b4a099 kms/device: Replace get_plane*() with has_plane*()
There might not be a single plane that is "for" a CRTC, so remove the
API that made it appear as if it did. The existing users only cared if
there was some plane for said CRTC, so replace the getters with API that
just checks the existance at all.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3428>
2023-12-18 13:35:09 +00:00
Jonas Ådahl
48c7caadd2 monitor-manager: Remove is_transform_handled()
There was one user, but it got changed to bypass the monitor manager and
talk directly to MetaCrtcNative.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3428>
2023-12-18 13:35:09 +00:00
Jonas Ådahl
cc7bca073b crtc/kms: Dynamically assign primary and cursor planes
When there are a set of primary planes, and a set of CRTCs, where each
plane can be used on multiple CRTCs, we need to make sure that when we
mode set and page flip, each CRTC gets assigned an individual plane that
isn't used with any other CRTC.

Do this during the monitor resource assignments that sets up later to be
applied configurations of the mode setting objects, but with the new
hooks into the backend, so that we don't need to teach the monitor
config manager about planes.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2398
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3428>
2023-12-18 13:35:09 +00:00
Jonas Ådahl
48145a91f9 monitor-config-manager: Let CRTC assignment transform be logical
This means that it doesn't necessarily mean what transform / rotation
the hardware resource gets, e.g. it instead represents the logical
transform related to the configured mode. This allows us to postpone
checking the plane capabilities until later (as rotation capabilities
depends is a plane property), when a plane has been assigned.

This was in practice already handled when configuring the
transform-via-offscreen case, handled when creating the view, and the
mode setting configuration.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3428>
2023-12-18 13:35:09 +00:00
Jonas Ådahl
429e65b993 monitor-config-manager: Allow backends to assign extra data
When we're configuring monitors, allow backends to add backend specific
assignments during resource assignment (mapping connectors and CRTCs
etc).

This will later allow the native backend's KMS monitor resources to
assign a primary plane and optionally a cursor plane during
configuration. This will then dictate what plane will be used for
primary plane updates, as well as cursor updates, until reconfigured
again.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3428>
2023-12-18 13:35:09 +00:00
Jonas Ådahl
2bb75a3c97 crtc: Make the caller allocate the config struct
This will make it more convenient to offload some part of the
configuring the backend by passing the config forward.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3428>
2023-12-18 13:35:09 +00:00
Jonas Ådahl
c87fc36804 crtc: Remove trailing empty line in header
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3428>
2023-12-18 13:35:09 +00:00
Jonas Ådahl
4c0f3ea80f renderer/x11/nested: Remove dead view transform handling
With the (nested) X11 we always "handle" view transforms, so lets remove
the code that handles when we don't.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3428>
2023-12-18 13:35:09 +00:00
Daniel van Vugt
74ce9592b5 kms: Avoid queuing multiple (un)assignments to the same plane in an update
Just like we already do in `meta_kms_update_assign_plane`.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2620>
2023-12-15 16:00:26 +00:00
Christopher Fore
ec1778a37f backends: Include unistd.h to fix compilation on musl
Musl doesn't seem to include this by default so explicitly including it
should fix compilation on Musl.

Tested with Clang 16/17 and GCC 14.

Error:
src/backends/meta-fd-source.c:70:3: error: call to undeclared function 'close'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
  close (fd_source->poll_fd.fd);
  ^

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3078
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3455>
2023-12-15 14:59:26 +00:00
Peter Hutterer
f76952e83f backends/native: If the tablet tool is relative, constrain it normally
If we're moving our tool like a relative pointer, constrain to our
viewports, if any. This fixes the cursor moving off the screen in
relative mode.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3168
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3410>
2023-12-15 14:36:19 +00:00
Peter Hutterer
d575138cce backends/native: Shuffle static constrain functions up
No functional changes, this just moves two functions up to make the
follow-up patch more obvious.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3410>
2023-12-15 14:36:19 +00:00
Peter Hutterer
e7f91fad9d backends/native: Fix whitespace
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3410>
2023-12-15 14:36:19 +00:00
Peter Hutterer
01f78c0451 backends/native: Pass the axes down to the relative clutter motion event
Otherwise we get a happy segfault when we're trying broadcast_axis()
during the tablet event handling.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3410>
2023-12-15 14:36:19 +00:00
Peter Hutterer
9e781545aa backends/native: Set the tool for relative events
Otherwise a tablet in relative mode will never have a tool set and
nothing happens on motion events - meta_wayland_tablet_seat_update()
simply exits early for tablet proximity, button or motion events.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3410>
2023-12-15 14:36:19 +00:00
Peter Hutterer
baafec089a backends/x11: Fix tab/space indentation issue
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3410>
2023-12-15 14:36:19 +00:00
Olivier Fourdan
a191af1f3d remote-desktop/eis: Fix ConnectToEIS device-types
The change to the device types in xdg-desktop-portal-gnome needs to be
reflected in mutter as well, otherwise the device types are not properly
passed along.

As a result, input emulation fails.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3194
See-also: https://gitlab.gnome.org/GNOME/xdg-desktop-portal-gnome/-/merge_requests/108/diffs?commit_id=2b3163a
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3447>
2023-12-13 17:22:10 +00:00
Bilal Elmoussaoui
3f09a86e7a clutter: Drop CLUTTER_PARAM_* defines
They are not used every where making the codebase very incosistent
So just drop the current usages

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3437>
2023-12-13 11:20:04 +00:00
Ivan Molodetskikh
5cbcf1c94f meta/kms-impl: Emit trace message on page flips
It's sometimes useful to see the earliest point when the compositor
became aware of a page flip.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3417>
2023-12-06 16:12:58 +00:00
Ivan Molodetskikh
e11ee42dfa screen-cast/stream-src: Add trace spans to recording
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3417>
2023-12-06 16:12:58 +00:00
Ivan Molodetskikh
3c27b75f2f meta/stage-impl: Add trace span to paint_damage_region
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3417>
2023-12-06 16:12:58 +00:00
Ivan Molodetskikh
752632276d meta/stage-impl: Move swap framebuffer span inside the function
It was covering damage calculation also.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3417>
2023-12-06 16:12:58 +00:00
Ivan Molodetskikh
5669ee2dc3 meta/stage-impl: Add trace span to redraw_view_primary
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3417>
2023-12-06 16:12:58 +00:00
Ivan Molodetskikh
8f5d0c236e backend: Add a trace span for clutter_source_dispatch
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3417>
2023-12-06 16:12:57 +00:00
Michel Dänzer
50980f995b tree-wide: Fix spelling of "inhibition"
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3444>
2023-12-06 16:01:36 +00:00
Jonas Ådahl
83e2f70f1f backend: Rename update_screen_size() to update_stage()
We don't only update the size of the screen / stage, but also regenerate
views etc. Make this a bit more obvious by renaming the function to
update_stage().

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3443>
2023-12-06 13:45:03 +00:00
Jonas Ådahl
b282097834 clutter/stage-view: Rename offscreen pipeline vfunc
It doesn't really "set it up", it just sets the transform according to
the renderer view state. We'll do more setup outside, so lets rename it.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3443>
2023-12-06 13:45:03 +00:00