Barnabás Pőcze
9c3b130f67
display: Fix destruction order
...
MetaCompositorX11 might need the MetaDisplay's x11_display
during shutdown (meta_sync_ring_destroy -> meta_sync_free),
and `meta_display_shutdown_x11()` needs the MetaStack as
it calls `meta_stack_{freeze,thaw}()`. So fix the order
of destruction so that dependencies are destroyed
after dependants.
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2852
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3202 >
2023-09-03 23:31:37 +02:00
Barnabás Pőcze
d6b3679bd3
core: Subscribe to stack changes in the stack-tracker
...
This removes the implicit dependency on `display->stack_tracker`
existing and being valid in `on_stack_changed()` because
now it is the stack-tracker's responsibility to subscribe
to the "changed" signal of the stack and handle the changes.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3202 >
2023-09-03 23:31:37 +02:00
Carlos Garnacho
7224bb8a8d
backends: Drop X11 ClutterBackend error traps
...
Replace these with Mtk error traps altogether, and avoid stacking
one API over the other here.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3230 >
2023-09-02 09:52:54 +00:00
Carlos Garnacho
630f13db78
x11: Handle ConfigureRequest events in frames
...
Under strange timings, the GTK frames client may implicitly queue
relayouts that end up disagreeing with the latest frame size as
given by Mutter, this results in GTK calling XResizeWindow, and
Mutter plain out ignoring the resulting XConfigureRequestEvent
received.
This however makes GTK think there's pending resize operations,
so at the next resize it will freeze the window, until enough
resizes happened to thaw it again. This is seen as temporary
loss of frame-sync ness (e.g. frozen frame, and other weird
behavior).
In order to make GTK happy and balanced, reply to this
XConfigureRequest, even if just to ignore it in a more polite
way (we simply re-apply the size Mutter thinks the frame should
have, not GTK), this results in the right amount of
ConfigureNotify received on the frames client side, and the
surface to be thawed more timely, while enforcing the size as
managed by Mutter.
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2837
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3189 >
2023-08-31 20:53:04 +00:00
Bilal Elmoussaoui
1abef24154
mtk: Move Rectangle.from_graphene_rect from Meta
...
And drop the clutter helper
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3128 >
2023-08-30 16:46:14 +02:00
Bilal Elmoussaoui
a93471eb90
mtk: Move Rectangle.to_graphene_rect from Meta
...
Also drops the clutter equivalent
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3128 >
2023-08-30 16:46:14 +02:00
Bilal Elmoussaoui
3d693e8309
mutter: Completely replace MetaRectangle with MtkRectangle
...
There are still various helpers that might be worth to move to mtk as
well
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3128 >
2023-08-30 16:46:14 +02:00
Bilal Elmoussaoui
aec8e50df8
mtk: Move Rectangle.[contains|could_fit]_rect from Meta
...
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3128 >
2023-08-30 16:46:14 +02:00
Bilal Elmoussaoui
eafe07de31
mtk: Move Rectangle.overlap_* from Meta
...
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3128 >
2023-08-30 16:46:14 +02:00
Bilal Elmoussaoui
db77759938
mtk: Move Rectangle.area from Meta
...
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3128 >
2023-08-30 16:46:14 +02:00
Bilal Elmoussaoui
af7c7befd8
mtk: Move Rectangle constructors from Meta
...
Also rename the rect constructor from mtk_rect to mtk_rectangle_new so
it is detected as a proper constructor instead of a random function by
g-ir-scanner
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3128 >
2023-08-30 16:46:14 +02:00
Bilal Elmoussaoui
565acaed9c
mtk: Move Rectangle.intersect from Meta
...
Also replaces it usage everywhere & remove the Clutter helper. Note the
tests were not moved yet to mtk.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3128 >
2023-08-30 16:46:14 +02:00
Bilal Elmoussaoui
6f66dd9944
mtk: Move Rectangle.union from Meta
...
Similar to Rectangle.equal. The clutter helper was not used.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3128 >
2023-08-30 16:46:13 +02:00
Bilal Elmoussaoui
9b2cba4e86
mtk: Move Rectangle.equal from Meta
...
Moves equal the equal function and removes the clutter equivalent. The
tests were not moved until all the remaining helper functions are moved.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3128 >
2023-08-30 16:46:13 +02:00
Bilal Elmoussaoui
918ae0f4d4
mutter: Replace cairo_rectangle_int_t with MtkRectangle
...
Note: the various helpers in boxes.c were not ported yet, see the next
commit. This was intentionally done to simplify the porting process
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3128 >
2023-08-30 16:46:13 +02:00
Sandro Bonazzola
ff4d87727b
Update license access method
...
Dropped obsolete Free Software Foundation address pointing
to the FSF website instead as suggested by
https://www.gnu.org/licenses/gpl-howto.html
keeping intact the important part of the historical notice
as requested by the license.
Resolving rpmlint reported issue E: incorrect-fsf-address.
Signed-off-by: Sandro Bonazzola <sbonazzo@redhat.com>
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3155 >
2023-08-30 08:48:23 +02:00
Bilal Elmoussaoui
b004d1c577
cleanup: Drop empty vfuncs overrides
...
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3209 >
2023-08-29 23:38:32 +00:00
Jonas Ådahl
1e25cb746a
window: Don't update suspend state after unmanaging
...
The actor will try to update the suspend state when it goes away, which
can in the case of unmap animations be after the window was unmanaged.
In this case, don't try to update any suspend state.
Fixes: 9a2c8b2592
("window: Add suspend state")
Related: https://gitlab.gnome.org/GNOME/mutter/-/issues/2984
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3213 >
2023-08-25 15:48:19 +02:00
Jonas Ådahl
b743cc3528
tests/test-runner: Add 'sleep suspend_timeout' command
...
It's a tweak to the 'sleep' command to allow well known sleep lengths.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3213 >
2023-08-25 15:47:05 +02:00
Jonas Ådahl
9a2c8b2592
window: Add suspend state
...
The 'suspend state' is meant to track whether a window is likely to be
visible any time soon. The hueristics for this are as follows:
* If a window is hidden, it will enter the 'hidden' state.
* If a window is visible, and unobscured, it will enter the 'active'
state.
* If a window is visible, but obscured by another window, it will enter
the 'hidden' state.
* If there is a mapped clone of a window, it will enter the 'active'
state.
* If the window has been in the 'hidden' state for 3 seconds, it will
enter the 'suspended' state.
This will eventually be communicated to Wayland clients so that they can
change their behaviour to e.g. save power.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3019 >
2023-08-24 19:57:58 +00:00
Sebastian Keller
133931e3a3
core: Don't unmap XWayland windows without buffers on visibility update
...
18be74ed
was changing meta_window_should_be_showing_on_workspace() to
only show XWayland windows when they have buffers to prevent starting
transitions with a seemingly black window.
This however did not just delay the transition, but when called in
meta_window_update_visibility() could result in the X11 window getting
unmapped again if the call happens before there is a buffer. Then,
depending on the client, the window would either remain hidden or if the
client tries to map the window again, this would repeat the process,
triggering the closing transition every time.
This commit instead just hides the XWayland window from the compositor
but keeps the corresponding X11 window mapped while it does not have a
buffer yet.
Related: https://gitlab.gnome.org/GNOME/mutter/-/issues/2611
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2965
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2820
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2867
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3194 >
2023-08-21 18:32:41 +00:00
Sebastian Keller
73bc074917
core: Destroy the correct opaque region when destroying a frame
...
Freeing the window opaque region rather than the frame one when was
leaking the frame opaque region and wrongly setting the window opaque
region to NULL.
Fixes: 82b2b7688
("core: Add infrastructure to keep window frames' opaque regions")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3188 >
2023-08-17 00:00:55 +02:00
Sebastian Keller
03ba3a825e
context: Fix a small leak in meta_context_main_get_x11_display_policy()
...
The caller of sd_pid_get_user_unit() is supposed to free the unit name
string.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3188 >
2023-08-16 21:24:28 +02:00
Carlos Garnacho
90a00dae99
compositor: Handle grab state through ClutterStage::is-grabbed handler
...
This is something the compositor could now track by itself, instead of
being pushed through events. It also makes more sense to do this directly
when the grabbing conditions change, as opposed to the next event.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3185 >
2023-08-16 15:34:46 +00:00
Jonas Ådahl
05eeb684d1
window: Postpone focusing until grab ended if uninteractable
...
When GNOME Shell is in the overview, we don't want windows to steal
focus left and right, but once we leave the overview, we do want
whatever was mapped with "take_focus" to get focus. Do that, but after
the last grab was dismissed.
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2690
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3185 >
2023-08-16 15:34:46 +00:00
Jonas Ådahl
92051d59a6
constraint: Use WxH format for size in debug logs
...
Whether W,H or +W,H means "size" or "position" is rather unclear; fix
that by formating size as WxH instead of +W,H.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3124 >
2023-08-12 21:11:15 +00:00
Bilal Elmoussaoui
cd27cb5c85
cleanup: Fix various typos
...
Using the typos cli app
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3169 >
2023-08-12 20:13:37 +00:00
Michel Dänzer
16e8bb34de
Remove unused meta_stack_get_bottom
...
Unused since 1b3a58c951
("...").
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3154 >
2023-08-12 19:53:46 +00:00
Michel Dänzer
65add94bfd
Remove unused meta_rectangle_edge_to_string
...
Unused since 52bc675fcb
("introspection: remove --allow-unprefixed")
(if ever used at all).
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3154 >
2023-08-12 19:53:46 +00:00
Michel Dänzer
bdad097af1
Remove unused *_menu_for_rect functions
...
Unused since 84785951fd
("x11: Remove MetaX11WindowControl").
v2:
* Leave struct _MetaPluginClass::show_window_menu_for_rect, still used
by gnome-shell.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3154 >
2023-08-12 19:53:46 +00:00
Michel Dänzer
63a7313a1b
compositor: Fold meta_compositor_do_manage into meta_compositor_manage
...
meta_compositor_manage hasn't been public API since 4b3cab2cca
("compositor: Don't make internal API public").
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3154 >
2023-08-12 19:53:46 +00:00
Michel Dänzer
b0c6864b28
Remove unused meta_stack_get/set_positions
...
Unused since 9e51d98f4a
("Remove tabpopup and friends").
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3154 >
2023-08-12 19:53:46 +00:00
Carlos Garnacho
17191d5a6c
core: Use ClutterEvent getter methods
...
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3153 >
2023-08-08 04:11:11 +02:00
Carlos Garnacho
85b13ebd18
core: Pass ClutterStage explicitly to MetaGestureTracker
...
Pass a ClutterStage argument explicitly, instead of fetching it
from the event.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3153 >
2023-08-08 04:02:54 +02:00
Carlos Garnacho
a08eea7f10
backends: Do not use clutter_event_[set|is]_pointer_emulated()
...
Add a new ClutterEventFlag to propagate this information, affecting
a few selected events on each backend.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3153 >
2023-08-08 03:58:42 +02:00
Bilal Elmoussaoui
ead9a3024c
cleanup: Switch to pragma once
...
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3157 >
2023-08-07 22:24:36 +00:00
Carlos Garnacho
cd39ba8baf
core: Get per-direction pad feature labels for rings/strips
...
Let the caller specify the directions, so that the pad OSD UI may
assign distinct labels to each direction, instead of showing an
unified one on both directions.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3005 >
2023-08-07 18:25:01 +00:00
Carlos Garnacho
3e3660ae5f
core: Drop META_PAD_DIRECTION_NONE
...
Avoid this strange value, and stick with the ones suitable
for rings/strips.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3005 >
2023-08-07 18:25:01 +00:00
Carlos Garnacho
3e6f7a9463
core: Drop META_PAD_FEATURE_BUTTON value
...
This is now handled externally through separate API calls.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3005 >
2023-08-07 18:25:01 +00:00
Carlos Garnacho
2da9b67673
core: Separate pad button labels in high-level MetaDisplay API
...
These "features" are somewhat less featured, it's becoming too ugly
to handle all of them with a single API call. The clear outlier are
buttons, so move them to a separate function.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3005 >
2023-08-07 18:25:01 +00:00
Carlos Garnacho
b6a6e9f187
core: Separate MetaPadActionMapper pad button labeling
...
This will be handled separately in future commits.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3005 >
2023-08-07 18:25:00 +00:00
Carlos Garnacho
85ac3a2d1a
wayland: Separate pad button labeling from other pad features
...
This will be fully split in future commits.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3005 >
2023-08-07 18:25:00 +00:00
Carlos Garnacho
233e612ef8
core: Rename MetaPadActionType to MetaPadFeatureType
...
We want to separate pad buttons from strips and rings for
purposes of labeling. Start by renaming the enum "features"
to use a less englobing word.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3005 >
2023-08-07 18:25:00 +00:00
Sebastian Keller
7faf4a308e
constraints: Delay initial maximization until after reparenting is done
...
For SSD windows the decoration window from the frames client might have
a different maximization state than the client window and would end up
restoring it once shown. Avoid this issue by waiting until all
reparenting is done before applying the initial maximization (and
minimization).
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2579
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3035 >
2023-07-21 11:38:17 +00:00
Bilal Elmoussaoui
b852bbba47
cleanup: Stop translating nick/blurb for pspecs
...
As those strings are intended to be used by some UI but nothing uses
that in reality except GStreamer.
So drop them similar to what GTK did at
https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/4717
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3101 >
2023-07-19 11:33:59 +00:00
Jonas Ådahl
a7954f4a75
onscreen/native: Move out timeval to timestamp helper
...
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2777 >
2023-07-17 21:19:34 +02:00
Peter Hutterer
a6d406d7bf
backends/eis: Hook eis into the debug system
...
To be enabled with MUTTER_DEBUG=eis
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2628 >
2023-07-14 22:23:45 +00:00
Jonas Ådahl
2fb3bdf774
input-capture: Hook up capturing of events to active session
...
This adds the actual input capturing rerouting that takes events and
first hands them to the input capture session, would it be active.
Events are right now not actually processed in any way, but will
eventually be passed to a libei client using libeis.
A key binding for allowing cancelling the capture session is added
(defaults to <Super><Shift>Escape) to avoid getting stuck in case the client
doesn't even terminate the session.
The added test case makes sure that the pointer moves again after
pressing the keybinding.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2628 >
2023-07-14 22:23:45 +00:00
Jonas Ådahl
f9b18d90c6
keybindings: Make event handlers take a const ClutterEvent
...
This avoids discarding the const qualifier.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2628 >
2023-07-14 22:23:45 +00:00
Brendan William
23b98db004
core: Never automatically switch focus in strict focus mode
...
With window_is_terminal gone, "strict" and "smart" focus mode have no
behavioural difference. Let's broaden the scope of strict focus mode,
such that windows never automatically focus unless they are an ancestor
to the transient.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3063 >
2023-06-30 22:40:20 -07:00