Commit Graph

3065 Commits

Author SHA1 Message Date
Jonas Ådahl
f9bbe22499 monitor-manager/native: Update assignments on empty-config too
Not doing so means we'll have whatever old assignments were there, which
can cause problems when e.g. newly generated output/crtc objects
automatically find old assignments.

Related: https://bugzilla.redhat.com/show_bug.cgi?id=2242612
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3318>
2023-10-11 01:57:19 +00:00
Jonas Ådahl
23876efad3 renderer/native: Clear old pending mode sets when unsetting all modes
If we queued a mode set, but didn't end up compositing all frames, we'll
have pending mode sets in a hash table waiting to be applied. If we
before all monitors again try to reconfigure things we should drop the
old pending mode sets and start fresh.

We already do this when we're doing so when generating views, but when
just unsetting modes, we didn't, so fix that.

Related: https://bugzilla.redhat.com/show_bug.cgi?id=2242612
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3318>
2023-10-11 01:57:19 +00:00
Jonas Ådahl
a4e1afc648 renderer/native: Fold mode unsetting into renamed unset_modes()
We had a function called "reset_modes()" on MetaRendererNative, but what
it expected to do was to unset all modes on all CRTCs. Despite this, it
had code to unset modes on unconfigured CRTCs, probably because it was
used for multiple things in the past.

Make this a bit easier to follow by renaming the function
"unset_modes()" and fold the function doing the unsetting into the
function itself.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3318>
2023-10-11 01:57:19 +00:00
Sebastian Wick
3d318e18b5 kms/impl-device/atomic: Fix blob size
Fixes: ed0682003 ("kms/impl-device/atomic: Fix stack overflow")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3323>
2023-10-11 00:54:23 +02:00
Sebastian Wick
ed06820035 kms/impl-device/atomic: Fix stack overflow
Intel has started to advertise big gamma LUT sizes on some hardware
because the hardware supports segmented LUTs. This means they have a lot
more precision at certain segments then others. The uAPI can't expose
this functionality meaningfully so they chose to expose a huge number of
TAPs to sample from to their segmented LUT.

This increase in uAPI LUT size resulted in stack overflows because we
allocated the LUT on the stack. This commit moves it to the heap
instead.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3064
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3322>
2023-10-10 14:20:27 +00:00
Robert Mader
9b663f44e6 screen-cast/strieam-src: Fix stride and max buffer size calculation
1. Centralize stride calculation in one function.
2. For dmabufs query the stride instead of assuming a certain value.
3. For system memory buffers use the pixel format to calculate the
   stride.
4. Stop negotiating `SPA_PARAM_BUFFERS_size` and
   `SPA_PARAM_BUFFERS_stride`.

2. fixes an actual bug where we reported wrong max buffer sizes,
resulting in crashes in Gstreamer when doing area screencasts on AMD
GPUs.

The reasoning for 4. is that the values were possibly wrong for
dmabufs as the negotiation happens before we create any buffers.
Further more neither Mutter nor the common consumers required it.
The later either ignore the values (OBS), always accept (gstpipewiresrc)
them or calculate the exact same possibly wrong values (libwebrtc).

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6747
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3311>
2023-10-09 23:11:16 +02:00
Robert Mader
b258e1f7ee screen-cast/stream-src: Various code cleanups
No functional changes.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3311>
2023-10-09 23:11:16 +02:00
Michel Dänzer
83b762e0e4 kms/impl-device: Reverse update merge order in process_mode_set_update
This makes sure the new update takes effect over the pending update for
any common properties. It matches the other users of
meta_kms_update_merge_from.

Fixes: 27ed069766 ("kms/impl-device: Add deadline based KMS commit scheduling")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3316>
2023-10-08 19:35:36 +00:00
Rohan Hendrik Jotz-Lean
74b9d46d7c input-settings: Apply pointing stick settings
Apply the pointing stick (TrackPoint) configuration -- speed,
acceleration profile, and scrolling method -- from the gsettings desktop
schema.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3089>
2023-10-06 15:06:02 +00:00
Jonas Ådahl
1802065953 monitor-config-store: Discard config with fractional scale when unusable
When a configuration has a fractional scale, but we're using a physical
monitor layout, we can't use the scale, but if we do, we end up with
wierd issues down the line. Just discard the config if we run into this.

Eventually we probably want to store the layout mode in the
configuration so we can handle more seamless switching between physical
and logical layout mode, but first do this.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3057
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3299>
2023-10-06 13:48:53 +00:00
Robert Mader
d71c0a94a1 stage-view: Add API to query cursor overlay inhibition
It will be used in a later commit to check if the stage-view maybe have
a software cursor on it.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3302>
2023-10-03 15:41:05 +00:00
Carlos Garnacho
6fe1b3145f backends/native: Translate keycodes with xkb_key_state_get_one_sym()
There's two aspects from its documentation
(https://xkbcommon.org/doc/current/group__state.html#gae56031a8c1d48e7802da32f5f39f5738)
affecting us here:

1. "This function is similar to xkb_state_key_get_syms(), but intended for
    users which cannot or do not want to handle the case where multiple
    keysyms are returned (in which case this function is preferred)."

   We are indeed in that field, and have been for a long time.

2. "This function performs Capitalization Keysym Transformations."

   This is unlike the xkb_key_get_syms() function that we use, and
   convenient here for parity with X11 since it behaves exactly that
   way.

Fixes cases where the keysym for some keys is not properly capitalized
when caps lock is toggled, due to the output of capslock+key being
different from shift+key. An example of this is 'é' in french(azerty)
layout (bound to the '2' key). Even though shift+2 outputs '2',
capslock+é should output 'É'.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3058
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3306>
2023-09-29 13:51:36 +02:00
Jonas Dreßler
c4b9431bb2 screen-cast/stream: Pass redraw clip to stage watches instead of paint context
The virtual stream source with CURSOR_MODE_EMBEDDED uses
META_STAGE_WATCH_AFTER_PAINT as the callback for recording its frame. In
this stage of the paint though, there is no ClutterPaintContext anymore
(there only is a paint context during the paint, not afterwards).
The callback (actors_painted()) tries to get the redraw clip from the paint
context, and we end up with a NULL pointer crash.

We actually do still have a redraw clip at this point, so because everyone
uses the paint context to get the redraw clip anyway, just pass the redraw
clip to the stage watches directly.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3283>
2023-09-26 18:07:10 +00:00
Daniel van Vugt
7cf9997757 kms/crtc: Increase default deadline evasion to 800 microseconds
This seems to be enough to fix:
 * Constant stuttering on Apple Magic Trackpad 2 (90Hz)
 * Constant stuttering on Microsoft IntelliMouse Explorer 3.0 (125Hz)
 * Wake-from-idle frame skips on Microsoft Classic IntelliMouse (1000Hz)

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2974
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3212>
2023-09-25 09:48:07 +00:00
Pascal Nowack
483601844b backends/eis-client: Do not add device before adding EIS regions
When a device is added, libei does not allow adding additional regions
for that particular device, as it is already advertised to the EI
client.
As a result, mutter currently effectively only adds the first region to
a device, but not the others.
This makes input in multi monitor sessions only possible on one monitor,
as the EI client cannot look up the other regions, since they were not
advertised to it.

Fix this situation by not adding and resuming the device, when a shared
device is used.
Instead, for shared devices, always add all regions first, and then
after that, add and resume the device.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3273>
2023-09-16 22:13:05 +02:00
Pascal Nowack
4c5db8e3bd backends/eis-client: Fix type of index
libei uses as index size_t. To avoid a potential endless loop due to
overflow, fix that type accordingly.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3273>
2023-09-16 22:13:05 +02:00
Pascal Nowack
83454e944b screen-cast-stream: Also release mapping id when clearing stream
Use the previously added API to release acquired mapping ids, when the
corresponding stream is destroyed.
Otherwise, the remote desktop session would maintain a whole bunch of
unused mapping ids, as their corresponding streams are already
destroyed, but maybe not the session.
Such situation would be a remote multimonitor session, where the amount
of used virtual monitors changes multiple times during the session.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3273>
2023-09-16 22:13:05 +02:00
Pascal Nowack
3461e1e18c backends/remote-desktop-session: Add API to release mapping ids
The remote desktop session currently provides a mechanism to acquire
mapping ids.
However, when they are not used anymore, they currently cannot be
removed and thus just linger around.

So, add an API to release these acquired ids.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3273>
2023-09-16 22:13:05 +02:00
Carlos Garnacho
e056ce0ea3 backends/native: Pass ClutterSeat into virtual input device constructor
Avoid passing the MetaSeatImpl, since it may be potentially null at
MetaSeatNative construction time. An example of this triggering issues
are mousekeys, since those work on an emulated pointer device created
indirectly after a keyboard device is added (and the right settings are
enabled) at a time that the MetaSeatImpl is still being created, so the
MetaSeatNative cannot yet have a reference to it.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2869
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3278>
2023-09-16 10:29:21 +00:00
Carlos Garnacho
00bb4190b3 backends/native: Drop device_native->seat_impl field
Work our way to the MetaSeatImpl internally in MetaInputDeviceNative,
instead of keeping a pointer right to it.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3278>
2023-09-16 10:29:21 +00:00
Carlos Garnacho
4ce97fba6c backends/native: Avoid meta_input_device_native_get_seat_impl()
These objects already have a pointer to the ClutterSeat that has a
pointer to the MetaSeatImpl in its native implementation. This data
may be considered pretty much immutable (a pointer to the seat is
held, and the native implementation will shut down the implementation
thread within ClutterSeat finalization.

Avoids some awkward code, since the MetaInputDeviceNative needs to
be aware of the Clutter object implementation and the implementation
object.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3278>
2023-09-16 10:29:21 +00:00
Daniel van Vugt
48c9b638f3 kms/impl-device: Inhibit deadline timer on vc4 (Raspberry Pi)
vc4's implementation of `drmModeAtomicCommit` seems to require a few
milliseconds advanced notice or else it will miss the frame deadline.
That's too high for our deadline evasion threshold which is measured
in microseconds. Let's stop trying to use deadline timers on vc4 to
avoid this conflict without having to disable atomic KMS.

Suggested-by: Jonas Ådahl <jadahl@gmail.com>
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2953
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3279>
2023-09-15 13:30:52 +08:00
Daniel van Vugt
eab5e94862 kms/impl-device: Rename deadline_timer_failed to deadline_timer_inhibited
Because in the next commit we'll reuse the flag for conditional
inhibition on platforms where the deadline timer doesn't fail.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3279>
2023-09-15 13:25:20 +08:00
Jonas Ådahl
4ff54997b6 cursor-renderer/native: Create all view objects before realizing
Realizing a cursor will assume view related state objects are valid so
they can mark them as dirty. This assumption broke when there were a
scale changed that happened with multiple CRTCs, as we'd create view
object by view object as we realized the texture. Realizing the texture
would trigger a signal that had the handler assuming the validity of all
view objects, but if we only had gotten to the first, the second view
would not be there yet, thus we'd be doing a NULL pointer dereference.

Creating the view objects first, then handling the updating avoids this
problem by making the already done assumption valid on hotplugs.

The test case added tests exactly this series of events, and uses a
virtual monitor as a cheap trick to make the KMS CRTC based view the
first one, and an arbitrary view the second that previously had its view
object initialized too late.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3012
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3262>
2023-09-13 10:38:06 +00:00
Sebastian Wick
e3b659cfe8 monitor-manager: Add logging to enabling and disabling HDR mode
It's hard to tell why turning on HDR mode failed without these log
messages. It could be missing support in the sink (EDID/DisplayID) or
missing support in the driver/display hardware (connector properties) or
just a failure turning it on.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3251>
2023-09-13 08:19:23 +00:00
Sebastian Wick
c96341dcd5 output: Validate EDID information as UTF-8 only if it exists
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3021
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3268>
2023-09-12 20:48:18 +02:00
Sebastian Wick
4514d29c90 edid: Copy the Manufacturer Code char array to a NULL-term string
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3268>
2023-09-12 20:06:22 +02:00
Sebastian Wick
de4cf18bd0 edid: Move libdisplay-info and fallback code around
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3116>
2023-09-12 17:52:34 +02:00
Sebastian Wick
d382d55eae edid: Fix up libdisplay-info support
* The code did not compile before.
* Change the MetaEdidInfo struct to be more friendly to libdisplay-info
* Change to nit based luminance from encoded values

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2896
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3116>
2023-09-12 17:52:34 +02:00
Jonas Ådahl
4749c073eb monitor-manager/xrandr: Trap DPMS changes
Apparently DPMSForceLevel() can fail to force a valid level sometimes.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2857
Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6883
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3160>
2023-09-12 14:41:26 +00:00
Carlos Garnacho
4075847278 backends/native: Use correct constructor for CLUTTER_TOUCH_CANCEL events
We were using the generic constructor for BEGIN/UPDATE/END events, that
have more data than CLUTTER_TOUCH_CANCEL. Since that function checks for
the event type, we were awkwardly forwarding a NULL event here.

Related: https://gitlab.gnome.org/GNOME/mutter/-/issues/3016
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3261>
2023-09-12 13:38:16 +00:00
Daniel van Vugt
c7815f33a2 backends/x11: Trap errors from XIAllowTouchEvents
And report them as debug messages instead of crashing. We don't want them
to be visible usually because failures are expected in the autodeny
code path.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2808,
        https://launchpad.net/bugs/2029413

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3253>
2023-09-07 15:04:55 +08:00
Joan Torres
33eef7211a launcher: Fix unrefing seat_proxy
When using meta-laucher headlessly, there isn't a seat_proxy.
In that context, doing directly g_object_unref gives an error.
This commit fixes it.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3249>
2023-09-06 13:02:30 +00:00
Carlos Garnacho
6427b5b1f6 backends/x11: Prevent uneven error traps init/deinit on GInitable failure
GInitable initialization is failable, currently, it may fail before error
traps are initialized, but error traps would be invariably deinitialized on
finalize() of the failed object. This results in an assert hit, on top of the
original failure to initialize the backend.

The libX11 error handlers are a pure client-side construct, and not a server
request, they just need XInitThreads() called to set up the library-side locks
protecting access to the global variable. This is done beforehand already at
meta_backend_x11_init(), so initialize the error traps around that time too.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3242>
2023-09-06 10:03:21 +00:00
Bilal Elmoussaoui
81a12a7db4 cleanup: Replace cairo_matrix_t with graphene_matrix_t
Reduce cairo usage where graphene can do a much better job

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3243>
2023-09-05 18:25:49 +00:00
Jeremy Cline
379996a63e onscreen/native: Check frame_info for null in finish frame callback
While adjusting the monitor layout of my docked laptop, mutter got a
segfault while attempting to dereference the frame_info struct. This
happened on gnome-shell 44.4-1.fc38.

cogl_onscreen_peek_head_frame_info() just forwards the call to
g_queue_peek_head() which returns NULL in the event that the queue is
empty. If finish_frame_result_feedback() is expected to always be called
with a non-empty queue there's still a bug somewhere, but regardless
this API can legitimately return NULL so it should be checked for prior
to dereferencing.

Fixes: 61801a713a ("onscreen/native: Avoid freezing the frame clock on failed cursor commits")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3229>
2023-09-05 16:26:49 +00:00
Jonas Ådahl
fddcf8ca91 renderer/native: Don't drop disable-only mode set updates
If we are making an update that only disables CRTCs, we would not
actually post it, but just drop it then post nothing, as it wasn't ever
added to the mode set update hash table. This resulted in hotplugs where
we loose the all the connectors we had, where we want to disable all
CRTCs and enable nothing, to fail to disable said CRTCs.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3073>
2023-09-05 12:41:41 +00:00
Jonas Ådahl
15a3c47df5 eis: Rebuild absolute pointers when any viewport changes
This fixes remote desktop client side resize via changing virtual
monitor stream sizes.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3241>
2023-09-04 12:14:42 +02:00
Jonas Ådahl
1a1a16324b remote-desktop/session: Only add configured streams as viewports
This means they will have a valid size/position. This makes absolute
pointer events work on virtual monitor streams again.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3241>
2023-09-04 12:14:42 +02:00
Jonas Ådahl
264d29b435 screen-cast/session: Use add_stream() helper everywhere
It was introduced, but using it everywhere appropriate was forgotten.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3241>
2023-09-04 12:14:42 +02:00
Jonas Ådahl
242737c4dc screen-cast/stream: Add 'is-configured' property
When this is TRUE, it has a size, position etc. Only virtual streams do
this asynchronously, as they go via monitor configuration after being
created.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3241>
2023-09-04 12:14:42 +02:00
Jonas Ådahl
731c3e0ba3 screen-cast/stream: Keep track of object properties
This will make it possible to emit notify events without going via
strings.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3241>
2023-09-04 12:14:42 +02:00
Jonas Ådahl
7c2453cd8c screen-cast/stream-src: Fix min/max framerate typo
The min was set to the max, and the max was set to the min, making
virtual monitors refresh rate very very slow.

Fixes: 215b91a2e6 ("screen-cast/src: Consider preferred format for stream")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3239>
2023-09-03 22:19:23 +02:00
Jonas Dreßler
e303551745 backend: Ignore events without source_device for pointer visibility
There can be events which don't not have source devices set on them, because
they are not backed by real hardware and rather generated by us, for example
IM events coming from the shell's OSK.

So don't assume all events have a source device in
update_pointer_visibility_from_event() and rather ignore those without one,
as we are only interested in events coming from "real hardware" here.

This fixes an issue where the mouse pointer would appear on devices without
any input from actual mice/touchpads on OSK key presses.

Fixes: 6aa42d6dad
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3236>
2023-09-03 19:38:07 +00:00
Georges Basile Stavracas Neto
94a39087bc eis-client: Always set has_position variable
If meta_eis_viewport_get_position() returned FALSE, the variable
'has_position' would be initialized. This variable represents
exactly the return value of meta_eis_viewport_get_position(),
so just assign it to the variable directly.

Spotted by Coverity.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3237>
2023-09-02 19:05:13 +00:00
Pascal Nowack
38cdaaf1f8 backends/eis-client: Use scroll source 'wheel' instead of 'unknown'
CLUTTER_SCROLL_SOURCE_UNKNOWN only generates continuous scroll events
and no discrete scroll events.
As a result, scrolling only works in applications, that support high
resolution scroll wheels, like GTK4 applications.
GTK3 applications, on the other hand, don't support high resolution
scroll wheel events, and such scrolling does not work in these
applications.

Fix this issue by using the scroll source CLUTTER_SCROLL_SOURCE_WHEEL.
Since commit 92a90774a4 ([0]),
CLUTTER_SCROLL_SOURCE_WHEEL generates discrete events to ensure that
scrolling in legacy applications still works.

[0]: https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2664

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3235>
2023-09-02 11:58:35 +00:00
Jonas Ådahl
b20d7a5cc4 renderer/native: Don't queue mode set on hotplug power-save on
We need to trigger a mode set when power-save changes to 'on' if it's
purely about power saving, but when they arrive as part of a hotplug
event, we'll handle all that later, in the monitors-changed handling,
that contains the new configuration.

This avoids a crash that happens due to the mode set being queued on now
disabled connectors.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2985
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3233>
2023-09-02 11:07:39 +00:00
Jonas Ådahl
96d4ae5ac8 monitor-manager: Add 'reason' argument to 'power-save-changed' signal
We can change power save mode for two reasons: gsd-power told us to, or
we saw a hotplug event. Sometimes it's useful to be able to make the
distinction to why a power save mode changed, so add a reason to the
signal.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3233>
2023-09-02 11:07:38 +00:00
Daniel van Vugt
444e241ab4 kms/impl-device: Don't skip set_needs_flush during a page flip
If the deadline timer is disabled (like on nvidia-drm or when
`MUTTER_DEBUG_KMS_THREAD_TYPE=user`), then we need to call
`meta_kms_device_set_needs_flush` on every cursor movement. But some were
getting skipped if they coincided with page flips, which resulted in some
cursor movements failing to schedule the frame clock. This resulted in
unnecessary levels of frame skips when using lower frequency input devices
which are less likely to provide another event within the same frame period.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3002
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3210>
2023-09-02 10:30:58 +00:00
Carlos Garnacho
7224bb8a8d backends: Drop X11 ClutterBackend error traps
Replace these with Mtk error traps altogether, and avoid stacking
one API over the other here.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3230>
2023-09-02 09:52:54 +00:00