13394 Commits

Author SHA1 Message Date
Jonas Ådahl
4a3eb2f992 build: Include a private copy if the session management protocol
This is still being discussed upstream, so will be included as a private
protocol.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3825>
2024-09-14 13:47:21 +00:00
Jonas Ådahl
6fa3a91325 wayland: Add MetaWaylandXdgSessionState
This object is a windowing-specific implementation of MetaSessionState,
allowing to save window state for toplevel surfaces of a Wayland client
using the xdg_session_management_v1 protocol.

This object is detached from windowing logic itself, and will be
integrated in later commits.

Changes from Carlos Garnacho: Integrate state serialization with
MetaSessionState and MetaSessionManager.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3825>
2024-09-14 13:47:21 +00:00
Carlos Garnacho
920de400f5 core: Make MetaContext manage the MetaSessionManager singleton
Make this core object own the MetaSessionManager, for the window management
code to access.

At this level, we will be able to integrate with systemd notification
system, and use systemd fdstore to keep the mapped memory warm for
us for the case of soft reboot. This is at the moment not implemented
here.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3825>
2024-09-14 13:47:21 +00:00
Carlos Garnacho
fa9c70a1d4 core: Add MetaSessionManager
This core object will be the manager of "client sessions", allowing
the windowing-specific paths to generate MetaSessionState objects to
track their clients.

This object is unused at the moment, and will be integrated in later
commits.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3825>
2024-09-14 13:47:21 +00:00
Carlos Garnacho
c6acf3aef5 core: Add MetaSessionState
This is an abstract base class to implement a "client session",
carrying the accounting of the windows, and allowing to serialize/read
their state into a Gvdb table.

Since different windowing backends may require slightly different
data to be saved for each window, this is meant to have windowing-specific
implementations.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3825>
2024-09-14 13:47:21 +00:00
Sebastian Wick
777c89f10d Add debug topic "session-management"
This is used to print debug information for session management.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3825>
2024-09-14 13:47:21 +00:00
Carlos Garnacho
837b37170a build: Add gvdb dependency
This library is not shipped standalone and is meant to be used
through subprojects. Add a Meson wrap file for it.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3825>
2024-09-14 13:47:21 +00:00
Jonas Ådahl
8caa2db139 tests/wayland-test-client-utils: Add custom test state field to display
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3825>
2024-09-14 13:47:21 +00:00
Jonas Ådahl
c41a8d539f tests/wayland-test-client: Add 'configure' signal to surface
Useful for tests that want to act on receiving xdg_surface.configure.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3825>
2024-09-14 13:47:21 +00:00
Jonas Ådahl
e76b4503cf tests/test-driver: Add tile and move_to requests
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3825>
2024-09-14 13:47:21 +00:00
Jonas Ådahl
5ed0245c5c surface: Add API to check whether initial commit has been done
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3825>
2024-09-14 13:47:21 +00:00
Jonas Ådahl
c3cfd5266a context: Add 'nick' property
A nick property is a bit similar to the nick of a GObject property, in
that it's a shorter version of the name. It's intended to be used to
store state on the file system, where the state depends on the desktop
environment being used. E.g. gnome-shell sets the name "GNOME Shell",
which is, if no nick is explicitly set, transformed into the nick
"gnome-shell", which will be used for file paths.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3825>
2024-09-14 13:47:21 +00:00
Jonas Ådahl
af250506fb kms/impl-device: Queue result when discarding submitted update
The result will allow adequate state tracking to take place where the
update was posted.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3999>
2024-09-12 14:23:34 +00:00
Michel Dänzer
0d9fd1ead7 kms/impl-device: Destroy submitted update in disarm_all_deadline_timers
And rename it to disarm_all_frame_sources.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3999>
2024-09-12 14:23:34 +00:00
Michel Dänzer
42290730e8 kms/impl-device: Merge in submitted update in process_mode_set_update
This has to be done for all CRTCs of the device, not only those with a
modeset, which requires merging in the pending updates for all CRTCs as
well.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3999>
2024-09-12 14:23:34 +00:00
Michel Dänzer
b2761819e4 kms/impl-device/atomic: Leave implicit sync enabled for modeset updates
Preparation for next commit, which may merge multiple KMS updates with
sync_fds for modesets. Waiting for all sync_fds to signal before
processing the merged KMS update would be rather involved, for now just
leave implicit sync enabled for it. We're still relying on implicit sync
for modesets in general anyway.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3999>
2024-09-12 14:23:34 +00:00
Peter Hutterer
756992c841 input-settings/native: Use the libinput matrix if we don't have one ourselves
If our calibration matrix (the "area") is the default, use libinput's
default matrix instead. Worst case this is the unity matrix anyway, best
case it uses the matrix set in e.g. the LIBINPUT_CALIBRATION_MATRIX
property.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2939
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3846>
2024-09-11 11:50:08 +00:00
Simon McVittie
b5d5169c5e tests: Remove duplicate vx239-calibrated.icc
Now that we copy this into a temporary XDG_DATA_HOME, we don't need
to have it duplicated in the source tree as well.

Signed-off-by: Simon McVittie <smcv@debian.org>
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4012>
2024-09-10 15:29:26 +00:00
Simon McVittie
0024592541 tests/color-management: Use the inherited temporary XDG_DATA_HOME
Previously these tests tried to write to /usr when run as an
installed-test, which happens to work on Gitlab-CI because we're running
as root inside a container, but will not work when running in a more
realistic scenario as an unprivileged user (which is how Debian's
autopkgtest framework runs this test suite).

This also avoids leaving non-package-manager-managed detritus in /usr.

In color-management-tests, we can just delete the code that sets
XDG_DATA_HOME.

In color-management-profile-conflict-test, we also need to copy
the conflicting vx239-calibrated.icc into the temporary XDG_DATA_HOME
to get onto the code path that this test is intended to exercise.

Resolves: https://gitlab.gnome.org/GNOME/mutter/-/issues/3658
Signed-off-by: Simon McVittie <smcv@debian.org>
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4012>
2024-09-10 15:29:26 +00:00
Simon McVittie
19f8948164 tests: Create a temporary XDG_CACHE_HOME
For completeness.

Signed-off-by: Simon McVittie <smcv@debian.org>
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4012>
2024-09-10 15:29:26 +00:00
Simon McVittie
24f4db3432 tests: Create a temporary XDG_CONFIG_HOME
XDG_CONFIG_DIR is not part of the basedirs spec. Use XDG_CONFIG_HOME
instead, which is probably what was intended.

Signed-off-by: Simon McVittie <smcv@debian.org>
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4012>
2024-09-10 15:29:26 +00:00
Simon McVittie
642b672b70 tests: Create a temporary XDG_DATA_HOME to run each test
This will avoid some tests needing to write to /usr when run as
installed-tests.

Helps: https://gitlab.gnome.org/GNOME/mutter/-/issues/3658
Signed-off-by: Simon McVittie <smcv@debian.org>
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4012>
2024-09-10 15:29:26 +00:00
nibon7
148ab84b83 Fix build when libwacom is disabled
Fixes: da828c2fc ("x11/input-device: Stop using deprecated libwacom API")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3996>
2024-09-06 21:37:07 +08:00
Jonas Ådahl
e994fbf02c wayland/pointer-constraints: Warp pointer before destroying resource
We're retrieving the context from the constraint instance, and the
wl_resource_destroy() call indirectly destroys the instance, so warp
earlier to still have a valid instance while warping.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3649
Fixes: 6a694d64f4 ("wayland/seat: Keep a back pointer to the ClutterSeat")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4003>
2024-09-04 08:58:05 +00:00
José Expósito
cf5508bdeb onscreen/native: Return the correct number of EGL modifiers
g_array_sized_new() creates a new GArray with a preallocated size, but,
after creation, the array length is still zero [1].

Store the modifiers in a EGLuint64KHR array and use g_array_new_take()
to create a new GArray with the correct size.

Because no modifiers were returned, gbm_surface_create() was used
instead gbm_surface_create_with_modifiers() on multi-GPU setups.

[1] https://docs.gtk.org/glib/type_func.Array.sized_new.html

Fixes: aec85281ba ("native/renderer: Retrieve the right modifiers set for each GPU")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3998>
2024-09-03 16:38:09 +00:00
Sebastian Wick
b20e0370aa wayland/color-management: Handle inert feedback surfaces
When a surface is destroyed, the existing feedback surfaces are marked
as inert by setting the wl_resource user_data to NULL. This wasn't
handled in the feedback surface destructor.

Fixes: 2341346c90 ("wayland: Implement the color management protocol v4")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4000>
2024-09-02 21:56:19 +00:00
Peter Hutterer
e4004a7c4f wayland: Use the tool's current_tablet device instead of caching it
The tablet tool is initialized with a device but if that device is later
removed we never update tool->device. This eventually causes a crash
when we're passing that device into
meta_wayland_input_invalidate_focus().

The tool keeps track of the current tablet anyway so instead of caching
this pointer in the tool, use the current tablet's device.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3642
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3959>
2024-09-02 21:12:56 +00:00
Jonas Ådahl
2d64965a55 window/xwayland: Handle arithmetics close to the int limits
`(int) (1.0f * (float) INT_MAX)` doesn't necessarily result in INT_MAX
due to how floating point arithmetics. Handle this better by setting
INT_MIN/MAX explicitly, when the floating point value post scaling
exceeds the corresponding limit.

This fixes resizing of electron windows.

Fixes: 6e8c7c5f84 ("Add experimental mode to use native scaling of Xwayland clients")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3997>
2024-09-02 19:50:20 +00:00
Florian Müllner
b0e90c6523 build: Don't override prefix
Meson variables don't have a scope, so using `prefix` in a loop
for D-Bus interface prefixes actually overshadows the global
variable that holds the build prefix.

As far as I can tell, the only place where the "wrong" value is
read is the build summary, but let's not tempt fate and fix it.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3995>
2024-09-02 01:07:39 +02:00
Sebastian Keller
898d802c5e xwayland: Fix XRROutputInfo leak when setting primary output
The call to XRRFreeOutputInfo() seems to have been accidentally dropped.

Fixes: 1333d92fa ("xwayland: Set primary monitor using connector name")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3994>
2024-09-01 11:33:32 +02:00
Sebastian Keller
d1a1b7bfdd window-actor/x11: Fix region leak when updating frame bounds
The value returned by meta_frame_get_frame_bounds() is owned by the
caller so we can assign it directly without copying to avoid a leak and
a bit of unnecessary work. Also it can't ever return NULL, so there is
no need to check for that.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3994>
2024-09-01 11:29:12 +02:00
Jonas Ådahl
cddd3a7df0 x11-display: Use X11 UI scaling factor for cursor theme size
As with Xsettings, we want to use the X11 UI scaling factor to set the
cursor size, so that clients use a larger theme, both when using
`native-xwayland-scaling` and a physical layout mode.

Fixes: 6e8c7c5f84 ("Add experimental mode to use native scaling of Xwayland clients")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3992>
2024-08-31 23:28:27 +00:00
Jonas Ådahl
babafe01fc x11-display: Use the X11 UI scaling factor for Xsettings
This makes Xsettings tell clients to be HiDPI again, when using the
physical layout mode.

Fixes: 6e8c7c5f84 ("Add experimental mode to use native scaling of Xwayland clients")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3992>
2024-08-31 23:28:27 +00:00
Jonas Ådahl
9d83d67fde xwayland: Add helper to get X11 UI scaling factor
This is different from MetaSetting's UI scaling factor, and different
from the effective Xwayland scale.

The MetaSetting's UI scaling factor is the scaling factor used by
gnome-shell chrome itself.

The effective Xwayland scale is, with `native-xwayland-scaling` enabled,
the scale everything X11 is scaled with.

The X11 UI scaling factor is intended to be the scaling factor X11
clients are told to use, and how to derive that differs depending on the
layout mode and the effective Xwayland scale.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3992>
2024-08-31 23:28:27 +00:00
Bilal Elmoussaoui
0c03a6b676 clutter/seat: Keep a pointer to the context
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3989>
2024-09-01 00:13:28 +02:00
Bilal Elmoussaoui
6a694d64f4 wayland/seat: Keep a back pointer to the ClutterSeat
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3989>
2024-09-01 00:13:28 +02:00
Bilal Elmoussaoui
ea902ac928 compositor: Require a context when creating a texture mipmap
avoids going through globals

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3989>
2024-09-01 00:13:28 +02:00
Bilal Elmoussaoui
0c7019a092 x11/shadow-factory: Get CoglContext from the window actor
As the shadow factory is now private

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3989>
2024-09-01 00:13:28 +02:00
Bilal Elmoussaoui
770fbb71f3 compositor: Pass CoglContext to create_texture helper
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3989>
2024-09-01 00:13:28 +02:00
Bilal Elmoussaoui
b83385e911 x11/cursor-sprite: Get ClutterBackend from MetaBackend
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3989>
2024-09-01 00:13:28 +02:00
Bilal Elmoussaoui
0c226e046c compositor/shaped-texture: Get ClutterBackend from Context
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3989>
2024-09-01 00:13:28 +02:00
Bilal Elmoussaoui
a80360ad38 clutter/stage: Remove unused title property
It was used for the titlebar title, which is no longer relavant
in current Clutter

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3989>
2024-09-01 00:13:28 +02:00
Sebastian Keller
2eddf35625 cogl/trace: Fix build without profiler
When !3952 introduced the new tracing macros, they were only defined in
the HAVE_PROFILER case, causing builds without profiler support to fail.

Also it introduced an unconditional call to cogl_is_tracing_enabled()
which is not available without HAVE_PROFILER.

Fixes: 777c63507 ("cogl/trace: Allow defining and setting sysprof trace counters")
Fixes: 322ac42a6 ("stage-impl: Trace the damage region")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3991>
2024-08-31 18:47:32 +02:00
Jonas Ådahl
7c7e147fd2 display-config: Add HasExternalMonitor property
This aims to replace gnome-setting-daemon manually trying to figure this
state out, currently via libgnome-rr.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3861>
2024-08-31 01:19:16 +02:00
Jonas Ådahl
cc0ec14712 monitor-manager: Add new backlight D-Bus API
It is intended to replace using GetResources() and ChangeBacklight().

It moves from a normalized 1-100 numbers, to directly exposing the
hardware. This more closely maps to how gsd-backlight.c in
gnome-settings-daemon normally works, and simplifies the API a bit to
not have to deal with rounding issues.

There is still no KMS uAPI for this, so it still only hooks up to
XRANDR. Being private API, it doesn't try very hard to predict how the
KMS uAPI will look. When that day comes, it will likely need some
adaptations.

Part of the motivation here is to get something for gsd-backlight.c to
use where it can work more similarly to how the current common case
(sysefs) works, while attempting to migrate away from libgnome-rr.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3861>
2024-08-31 01:19:16 +02:00
Jonas Ådahl
332c4a1bf0 tests: Add backlight sanity test
It currently sanity checks the MetaOutput and MetaMonitor APIs.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3861>
2024-08-31 01:06:33 +02:00
Jonas Ådahl
c22816393c monitor: Add backlight abstraction
This allows higher levels to deal with backlight on a monitor bases,
instead of having to deal with the fact that some monitors might have
multiple outputs.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3861>
2024-08-31 01:06:33 +02:00
Jonas Ådahl
68dd168e33 monitor-manager: Move backlight API to MetaOutput
It's now a signal emitted when `meta_output_set_backlight()` is called.
It is also no longer normalized between 1 and 100; that is now handled
done via the D-Bus API layer.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3861>
2024-08-31 01:06:33 +02:00
Jonas Ådahl
c4f1396570 monitor-manager: Use explicit method invocation return value
Using G_DBUSMETHOD_INVOCATION_HANDLED is clearer than TRUE in what it
means.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3861>
2024-08-31 01:06:33 +02:00
Sebastian Wick
a212f823e7 stage-impl: Use a trace counter for the damaged redraw area
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3952>
2024-08-30 22:09:55 +00:00