Commit Graph

2730 Commits

Author SHA1 Message Date
Robert Mader
2d5dd06a50 screen-cast/window: Add API to check if stream-cast is active
Screen-casted windows need to be considered visible in various situations
but existing APIs such as `clutter_actor_is_effectively_on_stage_view()`
don't do so. Add new API that allows checking if a surface belongs to a
screen-casted window for the respective cases.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2789>
2023-02-28 12:01:17 +01:00
Jonas Ådahl
e18ba5dcc6 backend: Always include D-Bus session watcher header
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2651
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2874>
2023-02-28 09:50:57 +00:00
Adrian Vovk
2f1dd049bf monitor-manager: Rework default scale factor selection
From the scale factors available to it, Mutter will now try to select
the scale factor that makes the UI's size as close as possible to the
size it would be, w/o scaling, on a display at 135 PPI (for mobile
displays) or at 110 PPI (for stationary displays)

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2653>
2023-02-24 21:36:03 +00:00
Jonas Ådahl
849766652a dbus-session: Make some properties part of the interface
The pointer to the manager, the peer name and the ID are things that are
always metadata related to a session, so make them properties on the
interface instead of duplicating them. The implementations still need to
keep track of them, but their existance is shared.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2713>
2023-02-23 17:52:08 +00:00
Jonas Ådahl
5731268087 Port screen cast and remote desktop to MetaDbusSessionManager
This eliminates some code duplication related to managing D-Bus session
objects.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2713>
2023-02-23 17:52:08 +00:00
Jonas Ådahl
122fea2dc4 backends: Add generic D-Bus session manager helper class
This class is intended to be used as a base class for D-bus interface
implementations that deal with "session" objects, i.e. a D-Bus object
representing a certain session of some kind, e.g. a screen cast session.

It handles things such as hooking up to the D-Bus client watcher,
generates IDs, handles shutdown procedures.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2713>
2023-02-23 17:52:08 +00:00
Jonas Ådahl
10043c7c11 dbus-session: Add get_id() vfunc
It's currently not set by anything, and will only be used by
non-abstract implementations of a future D-Bus interface session
manager. When interface implementations gets ported to this new type,
their MetaDbusSession implementations will set this vfunc.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2713>
2023-02-23 17:52:08 +00:00
Jonas Ådahl
7874bea068 dbus-session: Rename client_vanished() to close()
This means the MetaDbusSession interface takes a more active role
instead of being something that more or less sends signals to the
interface implementor. This will allow better control when using
MetaDbusSession to manage these sessions, instead of their non-abstract
variants.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2713>
2023-02-23 17:52:08 +00:00
Sebastian Wick
abdd8c54f3 backends/native: Handle gamma sizes independent of the KMS LUT
Allows for creating LUTs at some fixed size which maintains enough
precision for concatenating or otherwise manipulating the LUT without
having to care about the precision of the hardware.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2861>
2023-02-23 17:20:36 +00:00
Sebastian Wick
4eb581ffc1 backends/native: Read CRTC Gamma state from legacy and property APIs
If the device supports the atomic API the property based API is used to
write gamma updates and the legacy API is used in the non-atomic case.
The current state is read from the legacy API always though which can be
different from the property API. This commit always uses the correct API
to update the state.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2861>
2023-02-23 17:20:36 +00:00
Sebastian Wick
e9786452c6 backends/native: Replace MetaKmsCrtcGamma with MetaGammaLut
They are the same type now so there is no reason to keep both of them
around.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2861>
2023-02-23 17:20:36 +00:00
Sebastian Wick
8ccbc21d23 backends/native: Use MetaKmsCrtcGamma for the KMS gamma color update
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2861>
2023-02-23 17:20:36 +00:00
Sebastian Wick
0180ffdaa1 backends/native: Introduce MetaKmsCrtcColorUpdate
To store gamma updates. In the future this will grow other CRTC level
color pipeline properties.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2861>
2023-02-23 17:20:36 +00:00
Sebastian Wick
37639295db backends/native: Rename crtc_gamma to crtc_color_updates
We need to update more CRTC color pipeline properties in the future.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2861>
2023-02-23 17:20:36 +00:00
Sebastian Wick
4cf73fcfed backends/native: Remove unused meta_kms_crtc_has_gamma
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2861>
2023-02-23 17:20:36 +00:00
Sebastian Wick
36aada2164 backends/native: Store supported variants for KMS enum/bitmasks
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2861>
2023-02-23 17:20:36 +00:00
Sebastian Wick
80dd26428b backends/native: Store min/max value for KMS signed range properties
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2861>
2023-02-23 17:20:36 +00:00
Jonas Ådahl
45bda2d969 renderer/native: Detach old onscreens when rebuilding views
With detach meaning having the onscreen stop listening on configuration
changes on the corresponding backing mode setting objects. We need to do
this as there is a time between rebuilding the views, and that the new
mode sets are called, where the old onscreen is kept alive, but the
stage view is gone. At this point in time, if privacy screen or gamma
configuration changes, e.g. by the night light temperature changing, the
onscreen would attempt to schedule an update on the now gone stage view.

This commit also renames the "keep onscreen alive" to "detached
onscreens" to more clearly communicate that it's detached onscreens from
their corresponding mode setting objects.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2621
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2863>
2023-02-22 15:25:25 +00:00
Jonas Ådahl
9434b01998 renderer/native: Don't leak onscreen in error path
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2863>
2023-02-22 15:25:25 +00:00
Jonas Ådahl
b2579750a7 cogl: Remove legacy OpenGL driver support
This means the two Cogl drivers left are OpenGL >= 3.1 and GLES >= 2.0.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2672>
2023-02-21 18:09:28 +00:00
Jonas Dreßler
d6062baef3 backends/native/seat-impl: Translate touch coords before storing
For the coordinates of pointers or stylii, we translate the ones we store
using the viewport matrix already. For touch events otoh, we store coords
untranslated and translate them later only for event emission.

Let's be consistent here and store the coordinates of touch events
translated, just like we do for pointer events.

This fixes touch window dragging on rotated monitors. MetaWindowDrag calls
clutter_seat_query_state(), which uses those stored coordinates. So in case
of a touch sequence the coords returned by query_state() would be
untranslated.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2859>
2023-02-20 18:00:06 +00:00
Robert Mader
943fcc7c1a stage-impl: Transform damage region before queuing
In order to queue the right values for transformed `MetaRendererView`s.

While on it ensure we query the framebuffers width/height only once,
saving some cpu cycles.

Closes https://gitlab.gnome.org/GNOME/mutter/-/issues/2557

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2860>
2023-02-20 10:43:31 +00:00
Robert Mader
7171a41796 screen-cast/src: Do not close streams on error
Streams are generally recoverable by the client and errors may happen
e.g. on negotiation failures. Right now we close the stream and
corresponding session, which is neither necessary nor expected by
clients.

Just disable the stream instead and let clients handle things as they
seem fit. This allows clients to e.g. try several Gstreamer pipelines
with limited caps on a single stream.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2850>
2023-02-20 10:14:59 +00:00
Jonas Ådahl
c6b454d00f kms: Prepare shutdown on 'prepare-shutdown' signal
Doing it in dispose means the backend is actively tearing down itself,
meaning various components might or might not be there, depending on how
the tearing down is implemented. Make things a bit more robust by doing
any work that might rely on the backend being there before shutdown is
done in response to the 'prepare-shutdown' signal being emitted by the
backend.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2853>
2023-02-18 10:53:27 +00:00
Jonas Ådahl
5f34d1eae2 kms: Add _in_impl() suffix to some functions
These functions always run in the impl context; make that clearer by
adding a _in_impl() suffix as done elsewhere.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2853>
2023-02-18 10:53:27 +00:00
Jonas Ådahl
d1506fbb78 tests/kms/update: Add test for page flip feedbacks
Only tests the expected success path, i.e. when we receive a page flip
event.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2853>
2023-02-18 10:53:27 +00:00
Jonas Ådahl
e65c6f18b3 tests/kms: Don't leak MetaKmsFeedback
Also start warning if we don't handle the
meta_kms_device_process_update_sync() return value.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2853>
2023-02-18 10:53:27 +00:00
Jonas Ådahl
0b325d64f4 kms/impl-device/atomic: Don't leak drm commit request on error
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2853>
2023-02-18 10:53:27 +00:00
adarshgm
8e914f6772 edid: Remove all unnecessary EDID parameters parsing
This commit retains only necessary EDID parameters while
eliminating redundant EDID parsing in mutter

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2597
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2825>
2023-02-16 08:42:37 +00:00
Sebastian Wick
63522de4d0 tests/stacking: Change primary monitor handling
The first monitor in stacking tests is the primary monitor but that
doesn't have to stay this way forever. Instead of special casing the
name "primary" to refer to whatever monitor happens to be the primary
monitor, we add an `assert_primary_monitor` command to verify that the
monitor that should be the primary monitor actually is.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2748>
2023-02-07 17:52:19 +01:00
Sebastian Wick
ec58e74cc5 window: Keep proportional position in meta_window_move_between_rects
The previous logic tried to keep the position of the top left corner of
the window relative to the top left corner of the monitor. This allowed
the window to move out of the target monitor. This change keeps the
proportions of the distance between the window and the monitor borders
instead if possible. Otherwise it keeps the relative position of the
center of the window clamped to [0,1] to make sure the window lands on
the right output.

This also slightly changes what monitor is considered to be on: the
monitor which contains the center of the window and, if the center is on
no monitor, the monitor wich overlaps the most with the window.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2591>
2023-02-01 22:58:34 +00:00
Daniel van Vugt
733aa0e3b7 onscreen/native: Only hold on to scanout buffers in next_fb and current_fb
So we can remove the additional `next_fb` and `current_fb` pointers from
`MetaOnscreenNativeSecondaryGpuState`.

Some non-scanout buffers also need to be held in the case of GL blitting
which completes in the background. Those are referenced from the scanout
buffers themselves to ensure the source buffers live just as long.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2087>
2023-02-01 16:56:34 +00:00
Niels De Graef
6ff7f43fcf backends: Don't leak GSettingsSchema
`g_settings_schema_source_lookup()` is marked with `(transfer full)` so
make sure we actually free the struct at the end of the function.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2817>
2023-02-01 13:16:29 +00:00
Jonas Ådahl
a811a93102 onscreen/native: Remove extra semicolon
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2814>
2023-02-01 08:40:53 +01:00
Jonas Ådahl
0662ed51f9 monitor-manager: Remove extra semicolon
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2814>
2023-02-01 08:40:53 +01:00
Jonas Ådahl
e97c7851d3 onscreen/native: Also track privacy screen KMS state here
As with GAMMA_LUT, track whether privacy screen state has been pushed to
KMS in the onscreen. This leaves MetaOutput and MetaCrtc to be about
configuration, and not application.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2814>
2023-02-01 08:40:53 +01:00
Jonas Ådahl
24bdafa220 onscreen/native: Track GAMMA_LUT invalidations here
We only know if changing the GAMMA_LUT has happened if we sent away a
KMS update that succeeded. Concentrate this state tracking to the
onscreen.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2814>
2023-02-01 08:40:53 +01:00
Jonas Ådahl
beb6903397 output/kms: Make set privacy screen caller handle the update
As with CRTC GAMMA_LUT, we're moving towards making the entity managing
KMS updates aware if there are any changes to be made, and whether KMS
updates are actually needed or not, and for privacy screen changes, this
means we need to communicate whether the privacy screen state is valid
or not. This allows the caller to create any needed MetaKmsUpdate.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2814>
2023-02-01 08:40:53 +01:00
Jonas Ådahl
589c833e5f crtc/kms: Make set gamma caller handle the update
We're moving towards making the entity managing KMS updates aware if
there are any changes to be made, and whether KMS updates are actually
needed or not, and for GAMMA_LUT changes, this means we need to
communicate whether the GAMMA_LUT state is valid or not. This allows the
caller to create any needed MetaKmsUpdate.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2814>
2023-02-01 08:40:53 +01:00
Jonas Ådahl
ee91655f7d output/native: Set privacy screen KMS state in prepare-frame
This makes it behave the same as the gamma look up table of CRTCs.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2814>
2023-02-01 08:40:53 +01:00
Jonas Ådahl
8e7ada70a5 renderer/native: Make onscreen handle setting gamma
It's state that is part of the onscreen/CRTC, so move it there.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2814>
2023-02-01 08:40:53 +01:00
Jonas Ådahl
2f39f759c2 kms/update: Remove API to remove result listener
Its use have been replaced with creating and adding state to an update
only when it's expected to be posted.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2814>
2023-02-01 08:40:53 +01:00
Evan Goode
0742170062 Support selecting an acceleration profile for touchpad devices
Signed-off-by: Evan Goode <mail@evangoo.de>
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2426>
2023-02-01 03:03:47 +00:00
Robert Mader
51735c218b screen-cast/window/src: Fix on_prepare_frame signature
To unbreak window screen-casts.

Fixes 08b0e563

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2816>
2023-01-31 02:22:49 +01:00
Jonas Ådahl
49b0a8921c Use g_clear_fd() instead of open coding the same behavior
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2806>
2023-01-30 15:11:26 +00:00
Jonas Ådahl
e2ddf2055c screen-cast/src: Log the type of frame recorded
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2807>
2023-01-30 13:17:19 +00:00
Jonas Ådahl
0f4e0cfd52 stage-view: Fix header include guard
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2807>
2023-01-30 13:17:19 +00:00
Jonas Ådahl
8137c47cc6 color-store: Forward cancelled error if connect failed
Otherwise the task will remain unfinished despite we cancelling it.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2807>
2023-01-30 13:17:19 +00:00
Anders Jonsson
0d6b0fc165 settings: Fix spelling of endianness
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2813>
2023-01-29 17:37:43 +01:00
Jonas Ådahl
8b92a00dd1 Use the same prefix for all generated D-Bus boiler plate
A somewhat painful rename, but it'll open up for simplifying the build
script a bit, while at the same time bringing consistency to chaos.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2811>
2023-01-28 12:35:54 +01:00