Commit Graph

31192 Commits

Author SHA1 Message Date
Sebastian Wick
ac33792db4 tests/stacking: Add a test for sloppy focus
Tests that
* the window under the cursor has focus
* focus_default_window won't move the focus away from a previously
  focused window even if the cursor is somewhere else

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3258>
2023-11-13 14:22:44 +00:00
Sebastian Wick
de2daf65b4 wayland-pointer: Call meta_window_handle_enter when focusing desktop
When the desktop is focused instead of a window we want to tell the core
about this to handle focus-mode mouse. This is handled by looking for
CLUTTER_LEAVE events where the newly focused window is NULL.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3258>
2023-11-13 14:22:44 +00:00
Sebastian Wick
49d1af2023 display: Deal with destroying windows in pointer rest callback
Take a reference to the window to make sure the MetaFocusData->window
pointer is not pointing to a freed object.

Also make sure that the window that we want to focus is not currently
unmanaging.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3258>
2023-11-13 14:22:44 +00:00
Sebastian Wick
44fcf33156 display: Handle entering NULL windows (desktop)
On X meta_window_handle_enter was called when the desktop window was
entered. On wayland the "desktop" is no window anymore. We still want to
inform the core that the desktop is focused, so it can unfocus windows
if focus-mode is mouse.

This commit prepares the core for handling a NULL windows to mean the
desktop.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3258>
2023-11-13 14:22:44 +00:00
Sebastian Wick
5a33b0075a core: Move window enter/leave to display
The following commits will make it possible to pass a NULL window to
display_handle_window_enter/leave to represent the cursor entering the
desktop. This means it can't be a method of the window class anymore.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3258>
2023-11-13 14:22:44 +00:00
Sebastian Wick
c73e178a2d workspace: Refactor focus_default_window
The existing nested if-else statements are hard to follow. Handle cases
and return as early as possible.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3258>
2023-11-13 14:22:44 +00:00
Sebastian Wick
8a1388c930 workspace: Focus on existing focused window if possible
If we have an existing focused window that may have focus, default focus
will leave the focus there. An unmanaging window for example must not
have focus and default focus will continue to select another window in
this case.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3258>
2023-11-13 14:22:44 +00:00
Sebastian Wick
87907674f5 tests/test-client: Use draw_surface for subsurface corner case tests
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3388>
2023-11-12 12:49:22 +01:00
Ngọc Quân Trần
b59fb7c08c Update Vietnamese translation
(cherry picked from commit 54798a0141162506fcd6864bd1f98889a9f67b58)
2023-11-11 07:06:39 +00:00
Carlos Garnacho
91d70ad7a2 core: Query pad devices on MetaPadActionMapper initialization
This object might miss pad devices being made available too early
during seat construction at Mutter initialization, and not initialize
its own backing data properly for these.

Fixes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3143
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3370>
2023-11-10 21:05:44 +00:00
Carlos Garnacho
2dec4dd088 core: Manage MetaPadActionMapper devices through events
Use the CLUTTER_DEVICE_ADDED/REMOVED set of events instead of the
ClutterSeat signals to track device availability.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3370>
2023-11-10 21:05:44 +00:00
Florian Müllner
b611569b26 clutter/bin-layout: Remove custom alignment properties
The layout manager takes the generic ClutterActor expand/align
properties into account. Everyone should already use those instead
of the custom layout/child properties, so removing them should have
little fallout, while making for a nice cleanup.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3382>
2023-11-10 00:24:26 +01:00
Zander Brown
84c3a3fbef clutter/script-parser: Drop support for child properties
Which means ClutterContainer is no longer special cased, removing one of
it's final users.

In practice ClutterScript is unused anyway.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3377>
2023-11-09 18:11:00 +00:00
Zander Brown
7ae7beaa94 tests: Stop using ClutterContainer
clutter_container_{add,remove}_{,actor} have been deprecated for a
decade, using them rather than ClutterActor's API in tests is a tad
silly

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3377>
2023-11-09 18:11:00 +00:00
Bilal Elmoussaoui
3184986897 clutter/text: Remove deprecated prop/signal
Shell doesn't use them and they have been deprecated for very long time

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3379>
2023-11-09 16:42:24 +00:00
Bilal Elmoussaoui
2b871765f0 clutter/actor: Remove depreceated macros
Nothing uses them outside of mutter, so hurry up and remove them!

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3379>
2023-11-09 16:42:24 +00:00
Bilal Elmoussaoui
8c4d3d0516 clutter/cleanup: Remove unnused ClutterShader type
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3379>
2023-11-09 16:42:24 +00:00
Bilal Elmoussaoui
81c75b3157 clutter/swipe-action: Remove deprecated swept signal/vfunc
Also update the test to use swipe signal instead. Nothing seems to
use the signal from GNOME Shell side though

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3379>
2023-11-09 16:42:24 +00:00
Bilal Elmoussaoui
d311ff4a67 clutter/docs: Remove no longer existing vfuncs docs
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3379>
2023-11-09 16:42:24 +00:00
Bilal Elmoussaoui
5fe3d13db5 cogl/pango: Drop no longer useful file
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3374>
2023-11-09 15:16:16 +00:00
Bilal Elmoussaoui
bb3de27621 cogl/cleanup: Drop unnused private structs
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3374>
2023-11-09 15:16:16 +00:00
Bilal Elmoussaoui
1bb2f5f7b9 clutter: Drop Timeline.new constructor
Nothing uses it nowadays except GNOME Shell for tests but goes through g_object_new so it is fine

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3181>
2023-11-09 15:07:30 +00:00
Bilal Elmoussaoui
6032be04a0 clutter: Drop Event.get_source
It was marked as deprecated for ~5 years and nothing uses it nowadays
so drop it

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3181>
2023-11-09 15:07:30 +00:00
Bilal Elmoussaoui
9374f259a4 clutter: Drop GestureAction.get_threshold_trigger_egde
People should use get_threshold_trigger_edge instead.
Nothing seems to use it so it is safe to drop

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3181>
2023-11-09 15:07:30 +00:00
Zander Brown
9018432b0d clutter/actor: Correct color space accessor annotations
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3375>
2023-11-09 14:45:50 +00:00
Zander Brown
9610665ab8 mtk: Use an arc box for region
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3363>
2023-11-09 10:09:23 +00:00
Michel Dänzer
8ec26dfd27 test/wayland: Add subsurface-corner-cases unit test
It tests various sub-surface corner cases. It would fail without the
previous fixes.

v2:
* Fix draw_descendant parameter formatting
* Make toplevel window fullscreen (Robert Mader)

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3364>
2023-11-08 09:47:57 +00:00
Michel Dänzer
35d92e0fac wayland/subsurface: Drop unapplied subsurface state on unmap
To prevent it from getting spuriously applied if a wl_subsurface is
later created again for the same wl_surface.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3364>
2023-11-08 09:47:57 +00:00
Michel Dänzer
cdfc8cf967 wayland/subsurface: Reset position to (0, 0) in permanent unmap helper
To make sure a new wl_subsurface created for the same wl_surface won't
inherit the position from the wl_subsurface being destroyed.

v2:
* Move into permanently_unmap_subsurface

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3364>
2023-11-08 09:47:57 +00:00
Michel Dänzer
9dc5d98607 wayland/subsurface: Use unmap helper in destructor & parent_destroyed
Instead of duplicating the code in both.

v2:
* Rename helper to make it clear(er) that it permanently unmaps the
  sub-surface
* Move transaction allocation & commit into the helper

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3364>
2023-11-08 09:47:57 +00:00
Michel Dänzer
9f4eee33a2 wayland/subsurface: Remove redundant g_node_unlink call
If the sub-surface has no parent, the node was already unlinked by
get_subsurface_placement_op.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3364>
2023-11-08 09:47:57 +00:00
Michel Dänzer
a2863fc1ea wayland/subsurface: Hook up sub-surface placement ops in callers
wl_subsurface_place_above/below need to hook it up to the parent
surface's pending state, so that it gets picked up next time the parent
is committed.

v2:
* Adapt to wl_subsurface_destructor not resetting sub-surface position

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3364>
2023-11-08 09:47:57 +00:00
Michel Dänzer
6718e267fb wayland/transaction: Call add_placement_surfaces from commit
This is simpler, and makes sure it's called only once for each surface
in the transaction as committed.

v2:
* Use array for surface states with placement ops (Jonas Ådahl)
v3:
* Use GPtrArray instead of GArray (Robert Mader)

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3364>
2023-11-08 09:47:57 +00:00
Michel Dänzer
66408f907f wayland/subsurface: Fix actor hiding in sync_actor_subsurface_state
Unmapped sub-surfaces need to be hidden instead of just ignored.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3364>
2023-11-08 09:47:57 +00:00
Michel Dänzer
6fd77ce515 wayland/transaction: Call sync_actor_state for unmapped sub-surfaces
This is necessary to make sure the unmapped sub-surface is no longer
visible.

v2:
* Use META_IS_WAYLAND_SUBSURFACE (Jonas Ådahl)
* Use same sequence of assignments in both cases

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3364>
2023-11-08 09:47:57 +00:00
Michel Dänzer
0bd40968ab wayland/transaction: Handle NULL from->state in entry_merge_into
This never happened so far, but it will with following commits.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3364>
2023-11-08 09:47:57 +00:00
Sebastian Keller
0807579cdd window: Add IS_ALIVE to get_property
This was causing looking glass to wrongly claim that is_alive = false
for all windows.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3367>
2023-11-08 09:02:32 +00:00
Sebastian Keller
d978ab1890 delete: Don't wrongly set window as not alive when pings are disabled
meta_display_ping_window() does nothing when check-alive-timeout is set
to 0, but meta_window_check_alive_on_event() was relying on it to reset
the events_during_ping. Without this events_during_ping was just
counting up until the threshold was reached and the window was marked as
not alive, preventing further pointer events from being sent to the
window.

Fix this by not doing anything in meta_window_check_alive_on_event() if
check-alive-timeout is 0, similar to meta_display_ping_window().

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3142
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3367>
2023-11-08 09:02:32 +00:00
Carlos Garnacho
8cae7ff0f6 core: Ignore locked modifiers in keycombo machinery
Locked modifiers should probably not have an effect on keybindings
while toggled. this is most relevant for modifiers that can be
either/both pressed or locked (e.g. Caps Lock key), if used in
keybindings.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3369>
2023-11-08 08:07:41 +00:00
Carlos Garnacho
38228da550 clutter: Add ClutterModifierSet argument to key event constructor
This struct contains the pressed/latched/locked set of modifiers applying
to the event, and may be filled in by backends generating those events.
Other places where we forward modified key events, state may be normally
obtained from the original event.

Since this constructor is used in a variety of places, this commit
updates them all in one go.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3369>
2023-11-08 08:07:41 +00:00
Carlos Garnacho
2e897fccd5 clutter: Add clutter_event_get_key_state() getter
This function may be used on key events to obtain the fully
detailed pressed/latched/locked modifiers that apply when the
event is received. No events have this detailed information
yet.

This API call may be compared to the clutter_event_get_state_full()
that existed in the past, although this getter has a stronger
predilection to it applying exclusively to key events.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3369>
2023-11-08 08:07:41 +00:00
Sebastian Keller
61de313198 cogl: Unconditionally free pipeline shader/program state cache struct
destroy_shader_state()/destroy_program_state() are called when the qdata
pointer to the state cache structure gets overwritten, but were only
conditionally destroying it. This lead to leaks when called with a
shader/program state ref count > 1.

Fixes: 9b9e12edb ("cogl: Port Node/Pipeline/PipelineLayer away from CoglObject")
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3141
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3366>
2023-11-07 10:15:57 +00:00
Sebastian Keller
145cac3a37 surface-actor: Fix leak when setting non-empty clip region
When 655b4a9c75 ported this to MtkRegion, it removed the unref of the
copied region after setting it in the shaped texture.

Fixes: 655b4a9c7 ("Port to MtkRegion")
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3140
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3365>
2023-11-06 20:30:37 +01:00
Corentin Noël
a772c709aa wayland/surface: Make MetaWaylandSurface public
Only expose the method to get the associated MetaWindow.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3340>
2023-11-04 01:12:11 +00:00
Sebastian Wick
5dbb6c31e9 cogl: Rename COGL_PIXEL_FORMAT_G_16 with COGL_PIXEL_FORMAT_R_16
Mechanical rename. The format already describes the first two (rg/xy)
components.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3276>
2023-11-04 00:11:52 +00:00
Sebastian Wick
764d5dd67b cogl: Rename COGL_PIXEL_FORMAT_G_8 with COGL_PIXEL_FORMAT_R_8
Mechanical rename. The format already describes the first (r/x)
component.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3276>
2023-11-04 00:11:52 +00:00
Robert Mader
59c77da838 ci: Sync GS build options
Copy over build options from the GS CI config.
Notably build with --werror to avoid breaking the GS CI.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3362>
2023-11-03 23:44:45 +00:00
Robert Mader
b17246458a clutter/paint-context: Stop copying NULL-regions
Unlike `cairo_region_copy`, `mtk_region_copy()` does not accept NULL
pointers.

Fixes: 655b4a9c75 (Port to MtkRegion)
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3361>
2023-11-03 18:09:14 +01:00
Sebastian Wick
4e088cac0e core/window: Propagate focus appearance to all ancestors
The loop in meta_window_propagate_focus_appearance breaks if any
ancestor has attached_focus_window == focus_window but further ancestors
might still have a different attached_focus_window.

Continue the loop until the root ancestor instead.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2913
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3356>
2023-11-03 14:20:39 +00:00
Sebastian Wick
6f6f16c2b1 tests/wayland-test-client-utils: Sync event serial in same dispatch
If multiple sync events are send in the same dispatch, a further call to
wait_for_sync_event will get stuck. Fix this by keeping track of the
latest sync event serial in the display and always compare against that.

This also means sync event sequences must start at 0 and increase by 1.
The wayland-x11 interop test is the only one where that wasn't already
the case.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3358>
2023-11-03 12:02:29 +00:00