Commit Graph

11911 Commits

Author SHA1 Message Date
Carlos Garnacho
ae102ee301 x11: Refactor ClutterStage key focus management
Integrate it into the code, instead of depending on MetaDisplay
notify::focus-window for it. Now, instead of focusing explicitly the
stage window, we focus a NULL window, and let the MetaX11Display
determine whether focus should go to the stage window if there's
a focused actor, or the no_focus_window if nothing has focus.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3269>
2023-12-18 17:55:27 +00:00
Carlos Garnacho
a36616f81d core: Drop focus_frame argument from meta_display_set_input_focus()
Sort that out in the X11 display, where it matters, without the need
of this argument in generic API.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3269>
2023-12-18 17:55:27 +00:00
Carlos Garnacho
4179679239 x11: Adopt code to focus stage window on Clutter key focus
We currently offer the mechanism for GNOME Shell to implement, and
while this is not exercised often (our entries are typically surrounded
by a ClutterGrab ensuring key events, so this is reserved to grab-less
entries, probably there are some in extensions), this is arguably
something Mutter should cover by itself without GNOME Shell guidance.

This is only necessary on the X11 backend, although it is conceptually
more tied to the MetaX11Display connection, so perform the focus
tracking there only if not running as a Wayland compositor (i.e. --x11).

This avoids the only case where the low-level
meta_x11_display_set_input_focus_xwindow() function is used, or rather
makes it completely a MetaX11Display implementation detail, leaving
only the MetaDisplay API as the high-level entry points to handle
window key focus.

The public API that allowed GNOME Shell to implement these mechanisms
is also gone in this commit.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3269>
2023-12-18 17:55:27 +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
f7043ca3d6 tests/kms: Use test helper for finding planes
A set of primary planes can be usable with a set of CRTCs, meaning we
can't have general purpose functions that gets a plane for a CRTC, as
there is no such one to one relationship.

For tests we still want to have helpers that makes writing tests easier,
so to prepare for those functions going away, make the tests do the
equivalent themselves.

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
Florian Müllner
d16ddc42ce x11: Remove icon cache
We stopped reading window icons, so there's nothing to cache
anymore.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3452>
2023-12-15 14:14:33 +00:00
Florian Müllner
5fc6ff19fa wayland/xwayland: Include x11-display-private
The include is currently satisfied by

window-x11-private → iconcache → x11-display-private

The icon cache is about to be removed, so add the missing include
directly.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3452>
2023-12-15 14:14:33 +00:00
Florian Müllner
25d6e4524c window: Remove window icon properties
Window icons are X11 specific, and gnome-shell stopped using them
even as fallback.

Time for some cleanup …

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3452>
2023-12-15 14:14:33 +00:00
Sebastian Wick
7458907360 shaped-texture: Reset pipelines when texture format changes
Changing the MultiTexture may require a different set of pipelines when
the texture format is different. We keep track of the attached
MultiTextureFormat just like we do for the width and height.

This fixes misrendering when a client attaches buffers with different
MultiTextureFormats to the same surface.

Fixes: 3dd9f15eb ("shaped-texture: Start using MetaMultiTexture")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3456>
2023-12-15 11:48:32 +01: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
580d62b9b6 clutter: Remove unused Path related types
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3437>
2023-12-13 11:20:04 +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
Sebastian Wick
c8191920e8 tests/wayland: Create native backends for KVM/tty tests
Run the wayland tests also in the KVM and tty tests suits. Change some
of the tests to also use a native backend via VKMS.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3350>
2023-12-13 10:43:31 +00:00
Sebastian Wick
13bbc4bc43 tests/wayland: Move virtual output to lowest VKMS resolution
We want to run those tests in VKMS later with the same reference image.
To make the tests as close to each other as possible we use the same
resolution for the VKMS and the virtual output which is 640x480.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3350>
2023-12-13 10:43:31 +00:00
Sebastian Wick
8f687ed98d tests/wayland/buffer-transform: Draw the buffer with the right size
This test currently only works because the monitor has the same width
and height. Generalize it to arbitrary monitor sizes by taking into
account that width and hight are swapped for some rotations.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3350>
2023-12-13 10:43:31 +00:00
Sebastian Wick
d4b9e72440 tests/wayland/dma-buf-scanout: Use WaylandBuffer
WaylandBuffer supports dma-bufs now, even ones which can be scanned out.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3350>
2023-12-13 10:43:31 +00:00
Sebastian Wick
6f4da83b36 tests/wayland-test-clients: Remove unused create_shm_buffer
We moved the last user of `create_shm_buffer` and can now get rid of it.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3350>
2023-12-13 10:43:31 +00:00
Sebastian Wick
2c23a94be0 tests/wayland-test-clients: Use WaylandBuffer in draw_surcace
Most tests use the draw_surface function to draw a solid color to a
surface. This moves it from the shm-only path to WaylandBuffer which
makes all of those tests usable via dma-buf.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3350>
2023-12-13 10:43:31 +00:00
Sebastian Wick
d842fe601d tests/wayland/buffer-transform: Use WaylandBuffer
The custom drawing requires adjusting the test. Instead of poking at
memory directly, we can just draw a color at certain coordinates which
makes it independent of the pixel format used.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3350>
2023-12-13 10:43:31 +00:00
Sebastian Wick
145649538a tests/wayland-test-clients: Add a WaylandBuffer for shm and dma-buf
It abstracts away the kind of buffer so clients can be tested with both
shm and dma-buf paths. We'll make use of it in the future by adding the
wayland tests to the TTY and KVM test suits.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3350>
2023-12-13 10:43:31 +00:00
Sebastian Wick
63f84fedd9 tests/wayland-test-clients: Keep track of advertised modifiers
We will need to check against them for figuring out if we can import a
specific dma-buf.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3350>
2023-12-13 10:43:31 +00:00
Sebastian Wick
24ef34f680 tests/wayland-test-clients: Add gbm_device to WaylandDisplay
We'll use this later to allocate dma-bufs from.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3350>
2023-12-13 10:43:31 +00:00
Sebastian Wick
8e7600322b tests/wayland-test-clients: Make WaylandSurface a GObject
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3350>
2023-12-13 10:43:31 +00:00
Sebastian Wick
cceccc0f68 tests/wayland-test-clients: Add missing WAYLAND_TYPE_DISPLAY define
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3350>
2023-12-13 10:43:31 +00:00
Sebastian Wick
2993462700 tests/ref-test: Inhibit direct scanout for ref-tests
When capturing the view we have to make sure the stage is actually
updated. In direct scanout mode the stage is unmodified and we can't
find the content we want to test.

Currently the ref-tests are all running on non-native setups where
direct scanout is impossible but we will change that soon!

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3350>
2023-12-13 10:43:31 +00:00
Sebastian Wick
e42c5dbd79 tests/ref-test: Go directly from Crtc to Backend
This avoids going through the GPU which can be NULL in some cases.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3350>
2023-12-13 10:43:31 +00:00
Sebastian Wick
1069085612 tests/test-utils: Allow calling set_custom_monitor_config outside tests
by using g_test_build_filename instead of g_test_get_filename.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3350>
2023-12-13 10:43:31 +00:00
Sebastian Wick
289e511c1a cogl/tests: Add fp16 offscreen texture format store/paint tests
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3441>
2023-12-06 23:01:02 +01: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
77413ed9a0 clutter/frame-clock: Store output name
Will be used in a subsequent commit for including the output name in
COGL_TRACE plot names.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3417>
2023-12-06 16:12:58 +00:00
Ivan Molodetskikh
521668202d meta/later: Remove extra word from trace span description
This used to be the span name. Now that it's the description, repeating
the word Later is not needed.

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
ff1ee92aa7 events: Add event name to trace description
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