Commit Graph

29894 Commits

Author SHA1 Message Date
Carlos Garnacho
2279f40e17 frames: Fix code typo
We are picking the wrong fallback frame title string in a
branch.

Fixes: 6df9eab88 ("frames: Handle _NET_WM_VISIBLE_NAME")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2875>
2023-02-28 18:13:23 +01:00
Robert Mader
4409dd24b6 surface-actor/wayland: Ensure screen-casted surfaces have a primary view
Surfaces belonging to a screen-casted window should always be considered
visible even if they are not visible on any stage view - be it because
they are on a different workspace, minimized or occluded.

Doing this in an optimal fashion is highly complex right now -
interdependent with (and somewhat similar to) ClutterClones. Thus treat
stream-casted surfaces similar to those with clones, with the small
difference that even a fully invisible surface still gets a primary view
- the fastest one. This ensures that clients never refresh too slow for a
screen-cast, at the cost of sometimes refreshing too fast.
The later only happens on certain multi-monitor setups and should thus be
acceptable.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2789>
2023-02-28 12:03:50 +01:00
Robert Mader
fe17dbc322 wayland/actor-surface: Always schedule stage updates on frame callbacks
There is an increasing number of cases where we want the frame callback
logic to run for a stage-view and the complexity needed to avoid these,
combined with the likelyhood of bugs, arguably does not justify the
benefit any more.

Thus unconditionally schedule updates for all stage-views when frame
callbacks are requested.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2789>
2023-02-28 12:01:17 +01:00
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
Matej Urbančič
751a0ee94c Update Slovenian translation 2023-02-27 20:31:33 +00:00
Carlos Garnacho
5bdc08099e compositor: Fix handling of keyboard-driven window resize
The introduction of the META_GRAB_OP_WINDOW_FLAG_UNCONSTRAINED
flag threw off some checks around keyboard-driven resize. This
was partly because there were some == checks that did not account
for that flag maybe being enabled, but also the handling
of META_GRAB_OP_KEYBOARD_RESIZING_UNKNOWN into a definite
resize direction was maybe unsetting that flag. Fix both things
at the same time.

Fixes: 2d8fa26c8e ("core: Pass "frame action" grab operations as an "unconstrained" grab op")
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2629
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2871>
2023-02-27 18:28:44 +00:00
Carlos Garnacho
022e20e87e frames: Handle WM_NAME
This is the most ancient form of "window titles", not guaranteed
to be UTF-8, take the usual precautions before using this string
and keep it as a last resort.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2872>
2023-02-27 15:38:25 +00:00
Carlos Garnacho
6df9eab880 frames: Handle _NET_WM_VISIBLE_NAME
This is occasionally set by Mutter, in order to hint about remote
X11 clients, etc.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2872>
2023-02-27 15:38:25 +00:00
Carlos Garnacho
6142765262 frames: Minor refactor
Move extraction of UTF8_STRING properties to a helper, as we'll
want to use it for several properties.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2872>
2023-02-27 15:38:25 +00:00
Carlos Garnacho
473f58cb5b frames: Rename function
There's different levels of "title" we'll want to poke, make
this function name a bit more specific.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2872>
2023-02-27 15:38:25 +00:00
Carlos Garnacho
e9fca3eba6 frames: Intern some Atoms in the MetaFrame struct
Start with the ones we handle through PropertyNotify events,
since we want to expand further on those.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2872>
2023-02-27 15:38:25 +00:00
Robert Mader
6b84f5bd00 wayland/pointer: Check for surface resource
Like we do in several other places since
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1880

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

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2869>
2023-02-25 19:18:43 +01:00
Fabio Tomat
1b52926031 Update Friulian translation 2023-02-25 07:56:24 +00:00
Adrian Vovk
a6217c720e tests: Add tests for monitor_calculate_mode_scale
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2653>
2023-02-24 22:42:19 +01: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
Carlos Garnacho
53126bf008 x11: Prevent use-after-free if a filter is removed during handling
Keep a pointer to the next element, to protect against filters removing
themselves.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2640
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2868>
2023-02-24 14:11:55 +00:00
Jonas Ådahl
bac7b3f4e6 window: Add missing newline
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2867>
2023-02-23 22:26:02 +01:00
Florian Müllner
e74573e165 window: Add raise_and_make_recent() method
After !2489, the active workspace's MRU list is now used to pick
the next focus window instead of the stack order.

This list is currently only updated on focus, which can lead to
surprising behavior when closing a window after activating its
ShellApp in the shell.

That is because raising a window (as part of shell_app_activate())
will only change the stacking order, so when closing the active
app window, the focus will switch to whatever had focus before the
app was activated, not the app's next window.

In order to allow gnome-shell to address this, add a new
raise_and_make_recent() method that also adjust the MRU order.

https://gitlab.gnome.org/GNOME/mutter/-/issues/2540

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2866>
2023-02-23 20:40:58 +00:00
Florian Müllner
79f5059df7 window: Fix compiler warning
Commit b5d873a8ac changed the flag parameter type in the
function definition, but not in the declaration.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2865>
2023-02-23 20:33:49 +01: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
Carlos Garnacho
e0634a4060 x11: Make some unnecessarily public API private again
There's a few functions that GNOME Shell shouldn't ever need,
stop exporting them as public API.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2779>
2023-02-23 17:19:22 +01:00
Carlos Garnacho
22c6374374 x11: Drop unused methods
These are not used anywhere in Mutter or GNOME Shell, it seems
we can drop them.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2779>
2023-02-23 17:19:22 +01:00
Carlos Garnacho
a799ac8ff0 x11: Add public API to handle X11 events
This API will be used by GNOME Shell to handle X11 events
in the relevant places, as a substitute to gdk_window_add_filter().

It is ATM still a bit ironic, since the Mutter X11 event handler
is itself a GdkFilterFunc, but it may move away from that eventually.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2779>
2023-02-23 17:19:22 +01: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 Ådahl
e5195c08a4 clutter: Remove some unused macros
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2672>
2023-02-21 18:09:28 +00:00
Daniel
5b5b1165dd Updated Spanish translation 2023-02-21 11:37:30 +01:00
Sebastian Wick
8ab2cbedd7 tests/kvm: Properly capture the test status code
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2862>
2023-02-21 08:54:03 +00:00
Carlos Garnacho
a41c83be4f check-style: Allow deciding on individual suggestions with --rewrite
Currently, when the rewrite option is passed, the script does not give
much choice on whether changes should be applied or not, it just does
"git comit -a --amend". However, uncrustify is not always entirely
right about the proposed style changes, or it might suggest changes
in distant/unrelated bits in the changed functions. Thus the developer
needs to be given some option.

Change the approach of the --rewrite option, so that it first does
"git add -p", so that individual changes may be decided upon, and
after all the chunks were gone through, uses "git commit --squash"
so that the changes may be reviewed before manually doing
"git rebase --autosquash" to merge the changes.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2829>
2023-02-20 22:21:01 +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
Jonas Dreßler
65b93e1d45 window-drag: Check whether window is set when hiding tile preview
In the case where we early-out from meta_window_drag_begin(), the
effective_drag_window might not be set yet. In this case, we might finalize
the object before effective_drag_window is set, leading to a NULL pointer
when accessing window->display in hide_tile_preview().

To avoid that crash, add a check whether the window is set already. If no
window is set, we can just skip hiding the preview anyway.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2858>
2023-02-20 17:16:56 +00:00
msizanoen1
36ae716e4d window/xwayland: Relayout when fullscreen client update emulated RandR mode
This fixes an issue when GLFW tries to change the display resolution
while fullscreen where the application window size doesn't get updated
according to the emulated resolution.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2725>
2023-02-20 16:55:36 +00:00
msizanoen1
899af9d58c window/x11: Make process_property_notify a virtual method
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2725>
2023-02-20 16:55:36 +00:00
msizanoen1
dbf3584a9b window/xwayland: Handle _NET_WM_FULLSCREEN_MONITORS for XRandR emulation
Handle a specific case of _NET_WM_FULLSCREEN_MONITORS used by GLFW to
make XRandR emulation work with it.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2725>
2023-02-20 16:55:36 +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