Commit Graph

3211 Commits

Author SHA1 Message Date
Sebastian Wick
7b1e89b046 monitor: Add a getter for the RGB range
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3535>
2024-01-30 16:24:52 +00:00
Sebastian Wick
d945626318 onscreen/native: Set the RGB range when mode setting
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3535>
2024-01-30 16:24:52 +00:00
Sebastian Wick
aa7cd84f7c output: Introduce the RGB range property
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3535>
2024-01-30 16:24:52 +00:00
Sebastian Wick
665c21e65b output: Explicitly initialize output properties
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3535>
2024-01-30 16:24:52 +00:00
Sebastian Wick
c4399bd94d kms/connector: Add support for the Broadcast RGB property
It can be used to force a specific RGB range. Some monitors don't follow
the specification and expect a signal different from what we send. This
property allows to force a mode which hopefully then works correctly for
the sink.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3535>
2024-01-30 16:24:52 +00:00
Sebastian Wick
d45104c14a backends/native: Build up connector updates in onscreen-native
instead of building them in OutputKms. The KMS objects are really not
the place for this.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3535>
2024-01-30 16:24:52 +00:00
Sebastian Wick
af4de2a681 output/native: Remove unused function declarations
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3535>
2024-01-30 16:24:52 +00:00
Carlos Garnacho
3528b54378 backends/native: Fix clutter button number assignment to pointer evcodes
Commit 947c636275 meant to swap BTN_STYLUS* buttons, not BTN_MIDDLE/RIGHT
as used by pointing devices. This was also missed during review.

Fixes: 947c636275 ("backends/native: Swap BTN_STYLUS and BTN_STYLUS2")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3550>
2024-01-27 14:11:42 +01:00
Peter Hutterer
947c636275 backends/native: Swap BTN_STYLUS and BTN_STYLUS2
BTN_STYLUS is the lower one and traditionally (read: in X) maps to
middle button (2), BTN_STYLUS2 is the upper one and traditionally maps
to right button (3).

This is also what GTK does and our desktop actions too map MIDDLE to
BTN_STYLUS and RIGHT to BTN_STYLUS2.

See also gtk!6168

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3541>
2024-01-27 10:32:40 +00:00
Peter Hutterer
d92c89ca23 backends/native: Use the define for BTN_STYLUS3
We #define it if at the top of the file if it's not available.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3541>
2024-01-27 10:32:40 +00:00
Sebastian Keller
f99c6badb9 backends: Update cursor names to match updated metaphors
adwaita-icon-theme updated its cursor metaphors and changed all DnD
cursors to use arrows instead of hands, except for the grab related
ones. Mutter was using "grabbing" as default DnD cursor, which now
does not match the other DnD cursors ("copy" and "no-drop") anymore.
Change this to the "default" cursor.

Additionally, because the "no-drop" cursor now puts a stronger emphasis
on the crossed out symbol also prefer "default" for
META_CURSOR_DND_IN_DRAG and only use "no-drop" for things that
explicitly don't accept a drop.

Related: https://gitlab.gnome.org/GNOME/adwaita-icon-theme/-/merge_requests/63
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3532>
2024-01-26 23:44:02 +00:00
Sebastian Wick
af0ca0cdc2 kms/cursor-manager: Create CrtcStateImpls for all active CRTCs
even if they don't have a cursor plane. This way we can just use the
object. Updating the cursor plane then just looks at the cursor_plane
field to skips updates when there is none.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3254
Fixes: cc7bca073 ("crtc/kms: Dynamically assign primary and cursor planes")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3539>
2024-01-26 23:07:39 +00:00
Dor Askayo
0eaf4b4f4c Revert "frame/native: Remember whether the frame carried a kms update"
This reverts commit 020d128d15.

This API is no longer used and can be removed.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3549>
2024-01-26 22:23:05 +00:00
Bilal Elmoussaoui
a2397e6b80 clutter: Prefer using ClutterTextDirection
In various public APIs, Clutter used to return a PangoDirection
while we have a text direction enum defined in Clutter.

This allows us to drop pango dependency from meta making it specific
to cogl-pango & clutter

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3531>
2024-01-22 15:02:33 +00:00
Dor Askayo
5e13c1dca6 kms/impl-device: Inhibit the deadline timer on permission errors
Set the deadline timer state as "inhibited" in case a permission error
is returned while attempting to arm the deadline timer. This makes each
device enable its deadline timer again after a VT switch.

Also print a note in this case instead of a warning as such errors are
expected during a VT switch and should not raise concerns.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3259
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3534>
2024-01-19 18:46:41 +00:00
Dor Askayo
79063604ad kms: Resume all devices when KMS is resumed
KMS is resumed when the current VT becomes active.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3534>
2024-01-19 18:46:41 +00:00
Dor Askayo
9eb38b4107 kms/impl-device: Add function to resume all devices
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3534>
2024-01-19 18:46:41 +00:00
Dor Askayo
ada4ac49fb kms/impl-device: Add function to handle device resumption
For now, this function only enables the deadline timer in case it was
inhibited. This would result in an attempt to use the deadline timer
again after a device is resumed.

If the conditions that resulted in the timer becoming inhibited
remain, it is expected to return to this state after the next frame
and before being armed.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3534>
2024-01-19 18:46:41 +00:00
Dor Askayo
98cdafdf0b kms/impl-device: Use enum for deadline timer state
The "disabled" state indicates that the deadline timer is disabled
for the lifetime of the device, while the "inhibited" state indicates
that it is disabled temporarily for the device.

This distinction is needed to handle each state differently in a
following commit. For now, only "disabled" is used.

No change in behavior.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3534>
2024-01-19 18:46:41 +00:00
Leorize
8e39398d05 backends: Allow XKB model to be configured
This allows GNOME Shell to communicate the user desired XKB model
to the compositor instead of sticking with the pc105 default.

Particularly useful for those with a custom keyboard layout/irregular
keyboards.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2760>
2024-01-18 18:51:42 +00:00
Kai-Heng Feng
8e58aa46ac gen_default_modes: Consider reduced blanking with lower pixelclock
Some panels only support fixed resolutions and fixed refresh rate with reduced blanking:
  Established Timings I & II: none
  Standard Timings: none
  Detailed Timing Descriptors:
    DTD 1:  2560x1600  120.001823 Hz   8:5    203.283 kHz    552.930000 MHz (345 mm x 215 mm)
                 Hfront   48 Hsync  32 Hback   80 Hpol P
                 Vfront    3 Vsync   6 Vback   85 Vpol N
    DTD 2:  2560x1600   48.000295 Hz   8:5     81.312 kHz    221.170000 MHz (345 mm x 215 mm)
                 Hfront   48 Hsync  32 Hback   80 Hpol P
                 Vfront    3 Vsync   6 Vback   85 Vpol N
...
    Minimum Pixel Clock: 552922 kHz
    Maximum Pixel Clock: 552922 kHz

When using mirror mode, resolutions like 2560x1440 120Hz can be too high
to meet the pixelclock limitation, so 2560x1440 90Hz is selected
instead. However, the panel only supports 120Hz so using 90Hz result to
failed mode set.

So add reduced blanking to fallback mode, so correct refresh rate can be
used.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3449>
2024-01-18 12:12:06 +08:00
Bilal Elmoussaoui
b1bc03a314 native: Use subclassing macros for InputDeviceToolNative
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3520>
2024-01-13 17:22:26 +00:00
Bilal Elmoussaoui
a79834a1ff x11: Use subclassing macros for InputSettingsX11
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3520>
2024-01-13 17:22:26 +00:00
Bilal Elmoussaoui
b1fc022ee6 x11: Use subclassing macros for InputDeviceX11
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3520>
2024-01-13 17:22:26 +00:00
Bilal Elmoussaoui
5387135220 x11: Use subclassing macros for InputDeviceToolX11
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3520>
2024-01-13 17:22:26 +00:00
Bilal Elmoussaoui
4f96b43222 x11: Use subclassing macros for CursorRendererX11
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3520>
2024-01-13 17:22:26 +00:00
Bilal Elmoussaoui
59bdc69544 native: Use subclassing macros for InputSettingsNative
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3520>
2024-01-13 17:22:26 +00:00
Dallas Strouse
c8c5560916 backends/native: Main thread rt-scheduler: experimental feature no more
To paraphrase jadahl: we have a dedicated KMS thread now, which also
has realtime scheduling enabled unconditionally. realtime scheduling
on the main thread isn't too great of an idea, considering GC can
take a hot minute.

And to quote rmader: we most likely won't be able to make the main
thread rt as long as we use GJS and thus have GC.

So let's get rid of it! It's just been breaking things anyways.

This just ignores the setting; we'll fully remove it when GNOME 46
comes around.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3296>
2024-01-13 15:10:31 +01:00
Sebastian Wick
399ffdfc88 kms/connector: Keep a ref to the KmsImplDevice instead of KmsDevice
The KmsImplDevice always exists as long as a KmsConnector exists. The
KmsDevice doesn't exist yet as long as the KmsImplDevice is not fully
initiallized. Going through the KmsImplDevice makes sure we always have
a valid reference and can release the device fd correctly when the
initialization fails.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3243
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3518>
2024-01-12 14:51:14 +00:00
Bilal Elmoussaoui
94f9d88371 x11: Drop error trap helpers
They are no longer that useful as they end up calling
mtk functions nowadays

Followup of https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3230

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3483>
2024-01-10 13:58:18 +00:00
Bilal Elmoussaoui
2a75661883 region: Move RegionBuilder to Mtk
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3501>
2024-01-09 18:47:34 +00:00
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