13115 Commits

Author SHA1 Message Date
Sebastian Wick
a91fd4a72c clutter/stage-view: Move offscreen creation from renderer to view
This allows us to destroy and create a new offscreen dynamically, when
the rotation or color state changes.

An idle gsource with priority higher than CLUTTER_PRIORITY_REDRAW is
used to ensure the an offscreen exists when required without having to
allocate in the redraw process.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3930>
2024-08-09 15:51:36 +00:00
Sebastian Wick
0ed160bc5a stage-view: Move transform from MetaRenderereView to ClutterStageView
This is possible because MonitorTransform is a Mtk type now. It will
allow us to create the offscreens in ClutterStageView.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3930>
2024-08-09 15:51:36 +00:00
Sebastian Wick
243140069c renderer-native: Get the color state for the view from the MetaColorDevice
The color state will eventually not be derivable just from the monitor
configuration alone but the color device will be able to track all of
this.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3930>
2024-08-09 15:51:36 +00:00
Sebastian Wick
ccede14a09 renderer: Pass through the monitor to the create_view vfunc
We will want to use the monitor in a later commit and going there from a
logical monitor or output is ambiguous.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3930>
2024-08-09 15:51:36 +00:00
Sebastian Wick
af83233be3 wayland/outputs: Return a monitor instead of a logical monitor
Going from the monitor to a logical monitor is possible but going from a
logical monitor to a monitor is ambiguous.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3930>
2024-08-09 15:51:36 +00:00
Sebastian Wick
dcaa57c2c8 mtk: Move meta_rectangle_transform to Mtk
Both MtkMonitorTransform and MtkRectangle are Mtk types, so we can push
this into Mtk and start using it in Clutter as well.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3930>
2024-08-09 15:51:36 +00:00
Sebastian Wick
89af55d8aa mtk: Move MetaMonitorTransform to Mtk
This makes it possible to use MtkMonitorTransform in Clutter which will
be used to track the transform in ClutterStageView.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3930>
2024-08-09 15:51:36 +00:00
Sebastian Wick
54b2abfe1b backends: Move monitor_transform_from_orientation to orientation manager
This removes the dependency on MetaOrientation from MetaMonitorTransform
which makes it possible to move MetaMonitorTransform to Mtk.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3930>
2024-08-09 15:51:36 +00:00
Sebastian Wick
adf28cad71 tests/x11: Get the right mutter pid and be more verbose
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3918>
2024-08-09 08:29:21 +00:00
Carlos Garnacho
ef3de1e58e wayland: Also cancel XDnD drops with no selected target
This is usually an indication of a failed drop operation if the
drop site didn't request any target. Check for this specifically
on XDnD button release, so that we can cancel the DnD operation
right away.

Inspired on a fix from Jonas Ådahl.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3821>
2024-08-08 12:38:24 +00:00
Carlos Garnacho
6f2f4c5767 wayland: Fix thinko checking for pointers with pressed buttons
These are bail out paths, so we should ignore pointers with no
buttons pressed. Spotted by Jonas Ådahl.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3821>
2024-08-08 12:38:24 +00:00
Carlos Garnacho
fd1d8c778b wayland: Redirect the focus explicitly to the Xdnd drag source
We were relying on the drag source surface to keep receiving events
thanks to it being implicitly grabbed by the button press. This
broke at some point, making the Xdnd drag source unable to keep
directing the DnD operation as it is expected by X11 clients.

To fix this, make the Xdnd MetaWaylandEventInterface stick itself
to the drag source surface keeping the focus of the device driving
the DnD operation, so that the X11 client can still handle events
from it.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3511
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3821>
2024-08-08 12:38:24 +00:00
Carlos Garnacho
a4ec154c8b wayland: Add getter for DnD origin surface
This private method will be used in later commits.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3821>
2024-08-08 12:38:24 +00:00
Sebastian Wick
4bf02746e2 tests/kvm: Use the anonymous git remote to check out the kernel
Otherwise this fails if one can't authenticate to gitlab.freedesktop.org
or is banned there for whatever reason.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3931>
2024-08-08 02:40:58 +02:00
Bilal Elmoussaoui
9c7eafc8c3 clutter/context: Track if accessibility enabled
Currently, we would only disable a11y if a certain flag is passed
but the function is always called with NONE flag. Instead
drop the flag, use a new environment variable for that

That value is then used by actors to short-circuit get_accessible
implementation and return NULL if the accessibility is not enabled

Also clean the other accessibility functions

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3917>
2024-08-07 22:46:16 +00:00
Bilal Elmoussaoui
ec028553d3 accessibility: Set various accessible names
For actors that are created by libmutter itself.
Although, not sure if such names should be translatable?

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3917>
2024-08-07 22:46:16 +00:00
Bilal Elmoussaoui
43f24b03e5 cally: Merge inside Clutter
Only do the build system bits, we would have to rename
the types and expose at least CallyActor as ClutterActorAccessible

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3917>
2024-08-07 22:46:16 +00:00
Bilal Elmoussaoui
7571ae6f05 clutter/stage: Track is_active
Instead of doing that in both MetaStage & CallyStage.
This allows ClutterStage to also emits the relavant acessibility
bits directly without having a roundtrip through Cally

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3917>
2024-08-07 22:46:16 +00:00
Sebastian Wick
e3afa1a1d1 color-device: Apply HDR and colorspace calibration
The color device now updates the white point via a LUT and sets the
colorspace and HDR metadata properties on monitors to get into the
required configuration.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3904>
2024-08-07 16:45:26 +02:00
Sebastian Wick
dc6632f19b color-device: Derive color space from monitor calibration
This ignores the white point calibration for now because our color state
isn't expressive enough, yet.

Co-authored-by: Joan Torres <joan.torres@suse.com>
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3904>
2024-08-07 16:45:10 +02:00
Sebastian Wick
357e5c92f2 backends: Let the color manager know about monitor changes earlier
This makes it possible to set monitor/output properties before the stage
views get re-created.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3904>
2024-08-07 16:40:56 +02:00
Sebastian Wick
a539071548 output: Fix minor coding style issue
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3904>
2024-08-07 16:40:56 +02:00
Sebastian Wick
6dc9cab14b backends: Move MetaOutputHdrMetadata from KmsConnector to Output
This makes it independent of the native backend and allows us to use it
in more places.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3904>
2024-08-07 16:40:56 +02:00
Sebastian Wick
fefcc6edec color-device: Track the ClutterColorState of the device
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3904>
2024-08-07 16:40:56 +02:00
Sebastian Wick
c123178f1c color-device: Rename signal "updated" to "calibration-changed"
The generic term updated can mean anything. This is specifically about
calibration related updates like changing the sink colorimetry
(Colorspace, HDR metadata) and changes to the white point for night
light etc.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3904>
2024-08-07 16:40:56 +02:00
Sebastian Wick
f5ce2ddf3c color-manager: Create color devices also for virtual monitors
We will need color devices on all monitors soon.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3904>
2024-08-07 16:40:56 +02:00
Sebastian Wick
431c4d12b9 color-device: Make it possible to outlive the active monitors
Previously the color device was destroyed when it was attached to a
monitor that was going away. However, the MetaMonitor objects are
ref-counted and can stay around for longer, even if the underlying
resources went away. We need color devices for as long as the
MetaMonitors are alive.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3904>
2024-08-07 16:40:48 +02:00
Sebastian Wick
a10b56e946 color-manager: Dispose instead of finalize
Otherwise we'll keep references to color devices for too long.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3904>
2024-08-07 16:30:04 +02:00
Sebastian Wick
a50e0a76b6 color-device: Create devices without a ready color manager
Every monitor should eventually have a corresponding color device. To
make sure this can work, we must handle situations where the color
manager didn't connect to colord yet, and thus isn't ready.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3904>
2024-08-07 15:53:39 +02:00
Sebastian Wick
25e5c59202 color-device: Avoid roundtrip through manager when assining a profile
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3904>
2024-08-07 15:53:39 +02:00
Sebastian Wick
6452c21b85 color-device: Let the device check if it should skip updating
Not everything will require the device to be "ready" (i.e. have a ICC
profile assigned).

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3904>
2024-08-07 15:53:39 +02:00
Sebastian Wick
8eeec32c90 color-device: Get temperature from the manager
Instead of passing it to the update function. This decouples the
updating from being specifically about the temperature/white point.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3904>
2024-08-07 15:53:39 +02:00
Sebastian Wick
682ce3222c color-manager: Rename function to avoid the term gamma
It currently changes the white point using a LUT and will do more things
in the future.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3904>
2024-08-07 15:53:38 +02:00
sid
9e24fa52c6 core: Include the pkgconfig-specified gdesktop-enums.h
Follow up to commit 7658e07be

Refer https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1370

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3916>
2024-08-07 09:34:52 +00:00
Daniel van Vugt
a04d90d9e7 backends/native: Avoid duplicating or losing KMS property sets
When triple buffering, `meta_onscreen_native_prepare_frame` for the next
frame is called before `notify_view_crtc_presented` for the previous frame.
So our booleans were unfortunately still TRUE in the second prepare_frame,
resulting in two frames with the same property updates.

When double buffering, having roughly one frame interval between
`meta_onscreen_native_prepare_frame` and `notify_view_crtc_presented`
meant that property updates signalled between the swap and presentation
wouldn't get attached to a KMS update, and would be forgotten when
`notify_view_crtc_presented` resets the flags to FALSE.

To solve these we now keep a separate flag and counter per property,
tracking invalidation and pending updates respectively. The latter is a
counter rather than a boolean in support of triple buffering where two
updates may be pending concurrently (next and posted).

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3912>
2024-08-07 04:01:17 +00:00
Georges Basile Stavracas Neto
cdbe0a27a2 service-channel: Add client type for filechooser portal
Add a new service client type for a filechooser portal client, and
expose the x11_interop protocol to it.

This will be used to make Nautilus a file chooser portal implementation.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3694>
2024-08-06 16:07:48 +00:00
Daniel van Vugt
7937f78c7e backends/native: Only warn about cursor sizes once
Because if the current theme has exceeded the dimensions of
`DRM_CAP_CURSOR_WIDTH/HEIGHT` then the warning is just going to repeat
every time the cursor changes. We still fall back to software cursors
just fine so it's not important to repeat the warning.

In Mutter 46 the warning was "Invalid theme cursor size". Same problem.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3597
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3924>
2024-08-06 09:58:44 +00:00
Jonas Ådahl
3c070604dd backend/x11/clutter-backend: Group glib header include correctly
glib.h is not a bundled header, so move it accordingly.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3923>
2024-08-05 21:32:38 +02:00
Jonas Ådahl
de76e007b5 cogl: Fix some whitespace issues
The removal of the onscreen template left some function definitions and
declarations incorrectly indented.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3923>
2024-08-05 21:31:43 +02:00
Bilal Elmoussaoui
b684dc0382 clutter/backend: Provide a default get_display implementation
As there is no on screen template checks done on the x11 backend implementation
so simplify that.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3915>
2024-08-05 15:47:29 +00:00
Bilal Elmoussaoui
5277e33d37 cogl: Remove no longer used OnscreenTemplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3915>
2024-08-05 15:47:29 +00:00
Bilal Elmoussaoui
3b386ba5d7 cogl: Remove no longer used FramebufferConfig
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3915>
2024-08-05 15:47:29 +00:00
Bilal Elmoussaoui
41ec1aa0ca cogl: Remove use_stereo_stage config
Nothing sets it from the X11 backend API, so just get rid of it

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3915>
2024-08-05 15:47:29 +00:00
Daniel van Vugt
e389178180 onscreen/native: Return GErrors from secondary GPU updates
And return early from `swap_buffers_with_damage` if the error would have
led to flipping a NULL buffer.

This is also the perfect time to remove the `egl_context_changed` parameter
and move `_cogl_winsys_egl_ensure_current` closer to the code that actually
needs it.

Related: https://bugs.launchpad.net/bugs/2069565
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3817>
2024-08-02 10:27:54 +00:00
Daniel van Vugt
45a97a5e3f onscreen/native: Set frame result to IDLE on swap failure
So that swap failure messages are not also followed by:

meta_stage_native_redraw_view: runtime check failed: (!META_IS_CRTC_KMS (crtc))

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3817>
2024-08-02 10:27:54 +00:00
Daniel van Vugt
0de83166db onscreen/native: Unify the failure paths of swap_buffers_with_damage
They're both the same and a third one will be added soon.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3817>
2024-08-02 10:27:54 +00:00
Bilal Elmoussaoui
a05caa6338 cogl/texture2d: Rename from_egl_image constructor
Similar to the from_egl_image_external one, to give it the correct
namespace

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3910>
2024-08-01 11:06:33 +00:00
Bilal Elmoussaoui
a9ec604eba cogl/renderer: Expose handle_event
As it was originally the function to be used before
making it private and providing safer wrappers around it for x11/win32.

Nowadays, it is only used in x11 and only internally in mutter, exposing
a 'safer' variant costs us exposing more of x11 renderer APIs without
much benefits.

With this change, the only internal xlib renderer we need from meta is
set_foreign_display which can't be easily worked around

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3910>
2024-08-01 11:06:33 +00:00
Bilal Elmoussaoui
b07c772fc8 cogl: Rename Shader/Program constructors
Otherwise they end up as global functions instead of constructors
of their corresponding types. Helps with better docs

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3910>
2024-08-01 11:06:33 +00:00
Bilal Elmoussaoui
6c1739ea1c cogl: Move get_graphics_status to Context
That is where it belongs & avoids a global function in the docs
when it shouldn't be one

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3910>
2024-08-01 11:06:33 +00:00