Commit Graph

31733 Commits

Author SHA1 Message Date
Carlos Garnacho
bf89ada2c1 backends: Disambiguate output mapped to tablet with connector name
In some circumstances, we may end up with outputs with the same
vendor/product/serial, in which case we have a hard time finding the
right one to map tablets to, since configuration only has these 3
pieces of data.

Add the handling of a 4th argument containing the output name
based on the connector (e.g. HDMI-1), so that it can be used to
disambiguate the output if necessary.

This only kicks in if there actually are multiple outputs with the
same EDID data. A goal of the configuration as it was stored was to
remain useful if the user changed how the device is physically
connected to the computer, this remains true for the vast majority
of users having a single thing of each.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3556>
2024-02-06 10:03:48 +00:00
Peter Hutterer
ff38cf366d backends/x11: Store eraser and stylus tools separately
Our hashtable stores tools by the serial but our stylus tool and eraser
tool share the same serial - they only differ by the tool type.

This results in only one tool being created and this tool re-used for
the other type tool. Fun side-effects of this are that the stylus ends
up using the eraser pressure curve (or vice versa).

Hack around this by bit-flipping the serial for the eraser to
make it distinct - this is the only place we need to wrorry .

Closes #1884

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3542>
2024-02-05 12:33:43 +00:00
Olivier Fourdan
b8914da0c8 input-capture: Fix barrier validation without a monitor at (0.0)
For barrier validation, check_barrier() would start from the
(presumably) left-most monitor and walk the neighbor monitors to the
right.

This is assuming that there is always a monitor at (0.0), which is not
necessarily the case. If the first monitor on the left is not aligned at
the top, there is no logical monitor at (0.0) causing a NULL pointer
derefence.

Instead of starting from the monitor at (0,0), start from the primary
logical monitor, as there is necessarily one.

Fixes: 85885c6 - Check barriers don't extend into nonexisting monitors
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3272
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3562>
2024-02-05 10:45:26 +01:00
Robert Mader
a422ae022b wayland/buffer: Move scanout lifetime handling
There doesn't seem to be a good reason to keep this code in
`MetaWaylandSurface`. Moving it to `MetaWaylandBuffer` cleans things
up and will allow us to tread buffers differently depending on their
type.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3559>
2024-02-02 17:52:30 +01:00
Robert Mader
03a98343d2 wayland/dma-buf: Take MetaWaylandBuffer in try_acquire_scanout
And do some minor variable order cleanup while on it.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3559>
2024-02-02 17:40:37 +01:00
Robert Mader
03c3b642bd cogl: Move CoglScanout declarations from onscreen to types
While closely related, types appears to be the more appropriate place
these days.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3559>
2024-02-02 17:40:37 +01:00
Peter Hutterer
e928128743 core: Handle Alt in the MetaPadActionMapper
In the parser we set MOD1 if we encounter <Alt>, so let's send the
respective key event here.

Closes: gnome-control-center#2593
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3522>
2024-02-01 10:22:22 +00:00
Bilal Elmoussaoui
3774554028 core/window: Guard some x11 calls
Also drops an unused x11 header

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3540>
2024-01-31 12:25:39 +00:00
Bilal Elmoussaoui
e68a8a0a17 core/launch-context: Guard X11 calls
Also make use of display where possible to avoid a warning
about an unused display variable if one tries to build without x11

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3540>
2024-01-31 12:25:39 +00:00
Bilal Elmoussaoui
d8812c0d2f compositor/drag: Guard X11 call
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3540>
2024-01-31 12:25:39 +00:00
Bilal Elmoussaoui
67e21e0881 compositor/actor: Guard X11 actor usage
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3540>
2024-01-31 12:25:39 +00:00
Bilal Elmoussaoui
b6f38b21b7 backends/barrier: Guard X11 usage
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3540>
2024-01-31 12:25:39 +00:00
Bilal Elmoussaoui
8922ada681 core/context: Guard X11 calls
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3540>
2024-01-31 12:25:39 +00:00
Bilal Elmoussaoui
c388abe1e3 core/context: Make notify_ready vfunc optional
As it is used only in a X11 build for session management
See next commit

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3540>
2024-01-31 12:25:39 +00:00
Sebastian Wick
947f20b1a7 renderer-native: Ensure all planes support EGL config format
For secondary GPU rendering contexts we currently might choose an EGL
config with a format which is not supported on all primary planes. The
renderer is created when a GPU is detected and lighting up outputs and
thus assigning CRTC and primary planes can happen at any point after
that. This means we have to make sure that all possible plane
assignments will work with the rendering context when we create it.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3235
Fixes: cc7bca073 ("crtc/kms: Dynamically assign primary and cursor planes")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3512>
2024-01-31 00:58:29 +00:00
Sebastian Wick
fbf68bf88c crtc-kms: Get rid of meta_crtc_kms_supports_format
Instead get the assigned primary plane and use
meta_kms_plane_is_format_supported.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3512>
2024-01-31 00:58:29 +00:00
Sebastian Wick
60fd80b616 crtc-kms: Get rid of meta_crtc_kms_get_modifiers
Instead get the assigned primary plane and use
meta_kms_plane_get_modifiers_for_format.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3512>
2024-01-31 00:58:29 +00:00
Sebastian Wick
2fda8ae6d9 crtc-kms: Get rid of meta_crtc_kms_copy_drm_format_list
Instead get the assigned primary plane and use
meta_kms_plane_copy_drm_format_list.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3512>
2024-01-31 00:58:29 +00:00
Sebastian Wick
ee60e33d95 crtc-kms: Get rid of unusedmeta_crtc_kms_set_is_underscanning
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3512>
2024-01-31 00:58:29 +00:00
Sebastian Wick
84070b4a3f crtc-kms: Get rid of unused is_transform_handled
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3512>
2024-01-31 00:58:29 +00:00
Sebastian Wick
d6dc403fa8 backends/native: Move KmsUpdate plane assignment to OnscreenNative
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3512>
2024-01-31 00:58:29 +00:00
Sebastian Wick
23b30267b5 monitor-unit-tests: Add basic tests for RGB range
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3535>
2024-01-30 16:24:52 +00:00
Sebastian Wick
926f7ea26d backends: Get the RGB range from a monitor config to the output
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3535>
2024-01-30 16:24:52 +00:00
Sebastian Wick
3f866d22c9 monitor-config-store: Store and parse rgbrange monitor property
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3535>
2024-01-30 16:24:52 +00:00
Sebastian Wick
5ca2e06b2c monitor-config-store: Explicitly initialize MonitorConfig
To the defaults. This will become useful in the next commit where we
want a default value that's not 0.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3535>
2024-01-30 16:24:52 +00:00
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
Sebastian Keller
88bc52838a doc: Update link to looking glass documentation
The file has been renamed in the gnome-shell repo.

Related: https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3122
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3554>
2024-01-29 20:05:39 +01: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
a26d08d3bc core: Detect pad ring wraparound values
A ring will naturally go from 355 degrees to 5 degrees (or vice versa),
giving us the illusion of a direction change. Avoid this by assuming
that any change larger than 180 degrees is actually the equivalent
smaller change in the other direction.

Closes #1885

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3545>
2024-01-27 10:44:51 +00: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
Carlos Garnacho
381048cf90 wayland: Restore IM state flushing before handling key events
The code that maybe flushed IM state before processing a key event
became ineffective at commit 7716b62fa2, since the handle_event()
method on MetaWaylandTextInput won't handle key events, only IM
events and touch/button press events causing IM state to be
committed. Basically, the events that directly change the IM state.

Move this ineffective code to the the filter_event() method handling
the key presses in order to let the IM maybe filter them, and handle
them so that any key event that is let through (both key events
previously injected by the IM, and key events that the IM chooses to
ignore) will ensure that the pending IM state is flushed before the
key event is handled and emitted to the client.

This brings back lost guarantees of orderly event emission when IMs
alternate key events and IM actions.

Fixes: 7716b62fa2 ("clutter: Separate ClutterInputFocus event processing and filtering")
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3090
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3536>
2024-01-27 10:18:40 +00:00
Bilal Elmoussaoui
92ef543a44 window: Clarify rectangle type
It is no longer a cairo rectangle

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3530>
2024-01-27 10:03:15 +00:00
Bilal Elmoussaoui
73651b553e clutter: Explicitly depend on cairo
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3530>
2024-01-27 10:03:15 +00:00
Bilal Elmoussaoui
f0ebc41205 cogl: Move cairo dependency to cogl-pango
As cairo is not used in cogl API

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3530>
2024-01-27 10:03:15 +00:00
Bilal Elmoussaoui
a55b080129 gir: Remove unnused cairo include
As cairo is not used in the public API

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3530>
2024-01-27 10:03:15 +00:00
Bilal Elmoussaoui
700ef19e8b tests: Remove unnused cairo import
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3530>
2024-01-27 10:03:15 +00:00
Bilal Elmoussaoui
bbd06f26e0 clutter: Drop cairo-gobject dependency
It is no longer used since the switch to MtkRegion
and the removal of ClutterCanvas

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3530>
2024-01-27 10:03:15 +00:00
Bilal Elmoussaoui
baa051dcd2 tools: Remove no longer useful scripts
They are all very old and still assume svn/bugzilla/autotools

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3529>
2024-01-27 09:54:15 +00:00
Jonas Dreßler
265f6ef64e clutter/actor: Use g_signal_connect for connecting to pango context
In commit ba8f5a1178 it might have been overseen
to switch to g_signal_connect from g_signal_connect_object, so do that now to
make things a bit more clear.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3543>
2024-01-27 09:42:05 +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
Dor Askayo
b8deb4caa0 wayland: Emit frame callbacks when the frame is pending presentation
When Wayland clients send commits without a buffer attached ("empty"
commits), they may lead to stage updates that do not result in any
frame being submitted for presentation ("empty" updates).

Due to how frame scheduling is handled, there can be many such
"empty" updates in a single refresh cycle. If frame callbacks were
emitted after each of these "empty" updates, and if the client
sending "empty" commits was using frame callbacks to throttle the
same logic that results in these "empty" commits being sent, it would
result in a feedback loop between Mutter and the client where the
client would send "empty" commits and Mutter would reply almost
immediately with a frame callback causing the client to send "empty"
commits continuously.

As such, when an "empty" update is detected, frame callbacks are
scheduled to be emitted only once in every refresh cycle, avoiding the
feedback loop.

When a "non-empty" update is detected, frame callbacks are instead
emitted immediately to allow clients to draw their next frame as soon
as possible. It is safe to emit frame callbacks in this case because
the frame for the current refresh cycle is already "finalized" and
that any commit sent by the client at that point would only be handled
in a future refresh cycle.

To implement this, the previous logic had used
meta_frame_native_had_kms_update() to detect "non-empty" updates,
assuming that those would always result in a KMS presentation with the
native backend.

However, this approach misses the fact that virtual monitors do not
use KMS, and as such do not result in KMS presentation even for
"non-empty" updates. As a result, frame callbacks would not be emitted
immediately, resulting in unintended throttling of client rendering.

Instead, assume that it is safe to emit frame callbacks immediately
whenever an update results in the frame clock waiting to be notified
of presentation, since this is also when commits sent by clients are
scheduled to be handled in a future refresh cycle.

This issue was mostly hidden because frame callbacks would be sent
immediately when the target presentation time for the frame had
changed compared to the previous frame. However, this behavior was
removed in 26d8b9c69 ("wayland: Remove unnecessary dispatch of frame
callback source"), exposing the issue.

Fixes: a7a7933e0 ("wayland: Emit frame events in GSource after "empty" updates")
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3263
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3549>
2024-01-26 22:22:52 +00:00