Commit Graph

31482 Commits

Author SHA1 Message Date
8d3696f39a monitor-manager/x11: Ignore errors when creating tiled monitors
The error is most likely a race where the tiled outputs disappeared
before we had the chance to turn them into a whole monitor. Ignoring the
error should be harmless, as we should be receive another RANDR event
where we'd eventually fix things up.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/7120
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3335>
2023-11-18 10:33:23 +00:00
5780c10002 clutter: Check source device mode to figure out logical device in events
We look in various ways for the logical device on pointing events, in order
to assign tablet events their own device, detached from the ClutterSeat
pointer.

While this pans out on the native backend, it does not quite match with
X11 behavior where these events do drive the Virtual Core Pointer, this
results in a variety of buglets deriving from this mismatch.

Use the ClutterInputMode instead, to figure out whether the device is
physical and attached to the VCP (The default on X11), or the device is
floating thus should emit events on its own (The new stock behavior on
native backend since the previous commit), and behave accordingly
to what was specified by backend code.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/7144
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3114
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3122
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3156
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3393>
2023-11-17 20:49:18 +00:00
571acf57d1 backends/native: Make tablet devices "floating"
With the existing ClutterInputMode terminology (inherited from XI2),
hardware devices may be "physical" (i.e. attached to a logical device),
or "floating" (i.e. detached from all logical devices).

In the native backend, tablet devices are closer to "floating" than
"physical", since they do not emit events relative to the ClutterSeat
pointer logical device, nor drive the MetaCursorTracker sprite. This
is in contrast to X11 where all tablet devices drive the Virtual
Core Pointer by default, along with every other pointing device.

Change this mode in the Wayland backend to be more coherent. The
existing checks on the ClutterInputMode along Mutter seem appropriate
for handling these as floating devices, since they mainly care about
logical vs non-logical.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3393>
2023-11-17 20:49:18 +00:00
819d62cde2 clutter: Centralize repick handling due to transform changes
Since we just queue up repicks, we can improve the mechanism
added at commit 4d76a21029 this so it's less ad-hoc.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3385>
2023-11-17 20:24:41 +00:00
9f00572762 clutter: Defer repick on transform changes
Avoid an immediate repick, and queue it instead so it happens
for all devices on the next frame clock step.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3385>
2023-11-17 20:24:41 +00:00
c1feb2dc40 screen-cast/window-stream: Mark as configured
This is needed for the pointer to be exposed to an existing libei session.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3403>
2023-11-17 19:43:48 +00:00
63c6fe11fb window-actor/wayland: Keep track of when the geometry needs to be synced
The window actor can be mapped every frame, e.g. when it is dragged in
the overview. This commit keeps track when the geometry changed and we
didn't managed to sync the geometry yet and need to sync it at a later
time.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3404>
2023-11-17 16:08:36 +00:00
9e036bfd23 window-actor/wayland: Map the window before trying to sync geometry
We need to chain up to the parent class to make sure the
WindowActorWayland is actually mapped which is required for the
sync_geometry_internal function to succeed.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3404>
2023-11-17 16:08:36 +00:00
2dbfc1c23d window-actor/wayland: Move map method to a more appropriate place
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3404>
2023-11-17 16:08:36 +00:00
ee7f13fd84 window-actor/wayland: Return success status from syncing geometry
We do this by  moving it to a helper function. We will use this to keep
track of when syncing the geometry is actually needed in a later commit.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3404>
2023-11-17 16:08:36 +00:00
90d27e7b2e window-actor: Adjust sync_geometry
At the end of the sync_actor_geometry function the window buffer_rect
and the WindowActor position and size are the same and consistent.

Call the virtual method at the end and let the implementations look at
either the buffer_rect or the actor position/size itself.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3404>
2023-11-17 16:08:36 +00:00
1ce1745384 cogl: Remove duplicated build options check
Meson already has a check for ensuring that either GL or GLES 2 is
enabled
at build time

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3405>
2023-11-17 11:24:23 +00:00
c632e29ec0 cogl: Don't use a separate file for egl defines
The file doesn't do anything special to require a special header

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3405>
2023-11-17 11:24:23 +00:00
a8f77750fd cogl: Stop auto generating gl/egl headers
They contain nothing that requires generating those headers
automatically
so simplify the whole thing

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3405>
2023-11-17 11:24:23 +00:00
f081d4b595 cogl: Remove unused files
Fallout of https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3368

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3405>
2023-11-17 11:24:23 +00:00
976bcef3d5 window-actor/wayland: Sync geometry only when window is mapped
In some cases the window is not mapped when the geometry changes.
Without the mapped window the surfaces are not mapped either and don't
have a sensible allocation.

This patch makes sure we abort syncing the geometry if the window is not
mapped and also make sure we sync geometry when the actor eventually
does get mapped.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3152
Fixes: 8f4ab53bd ("window-actor/wayland: Ensure to use allocation for black background check")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3401>
2023-11-15 17:03:45 +01:00
47814fab71 Remove COGL_TRACE_BEGIN in favor of BEGIN_SCOPED
Scoped traces are less error prone, and they can still be ended
prematurely if needed (this commit makes that work). The only case this
doesn't support is starting a trace inside a scope but ending outside,
but this is pretty unusual, plus we have anchored traces for a limited
variation of that.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3396>
2023-11-15 13:57:43 +00:00
371d28a766 cleanup: Stop allowing deprecated Cogl API usage
Allow only specific files to use those deprecated APIs making
it easier to find where deprecated APIs are still in use
and avoid introducing new usages without being noticed

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3400>
2023-11-15 13:13:00 +01:00
da2771e293 tests/cleanup: Stop allowing deprecated GLib API usage
We only use one deprecated API, so allow only that file to contain
deprecated APIs

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3400>
2023-11-15 13:12:13 +01:00
7de0707dfa clutter/cleanup: Stop disabling deprecated API usage warnings
As we have stopped using the deprecated APIs all over clutter, so let us
enforce that newly introduced code doesn't use code that gets depreccated
in the future

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3400>
2023-11-15 13:12:13 +01:00
f5dac3a5d9 build: One config file to rule them all
Group all the three config files from clutter/cogl/meta into one
and also remove unnused configurations and replace duplicated ones

This also fixes Cogl usage of HAS_X11/HAS_XLIB to match the expected
build options

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3368>
2023-11-15 12:00:19 +00:00
ebba651c81 cogl/trace: Add check for failed sysprof context creation
This can fail for example when passing an invalid filename to
mutter --profile, which leads to assertion failures down the line.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3397>
2023-11-15 11:46:19 +00:00
ca5bf847ee wayland/surface: Rename output/protocol_state to applied/committed_state
This is more consistent with Wayland protocol spec language.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3395>
2023-11-15 10:55:21 +00:00
31c5525382 wayland/dma-buf: Name readiness source
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3398>
2023-11-15 10:24:41 +00:00
a1b2725238 thread: Name callback source
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3398>
2023-11-15 10:24:41 +00:00
6c2383d625 thread: Name wrapper source
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3398>
2023-11-15 10:24:41 +00:00
a6e23dc9e2 thread/impl: Correct task source name
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3398>
2023-11-15 10:24:41 +00:00
be81296fb2 eis: Name event source
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3398>
2023-11-15 10:24:41 +00:00
dc8de3bfd5 clutter/keyval: Fix keyval_name() transfer annotation
clutter_keyval_name() returns a pointer to a static array, not
newly allocated memory. Add a transfer annotation to indicate
that callers must not free the returned memory.

While add it, make the return value const to stress further that
callers shouldn't touch the returned memory.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3386>
2023-11-14 16:28:09 +00:00
03235773be clutter/cleanup: Drop PaintNodes serialization
Currently, nothing uses the dumped json of the paint nodes tree. So
let us drop them in a separate commit so it can easily be reverted
if someone ends up wanting to build a tool to consume and inspect
the JSON.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3354>
2023-11-14 16:52:37 +01:00
306ff81004 clutter: Drop ClutterUnits
As nothing uses it now that ClutterScript was dropped

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3354>
2023-11-14 16:13:19 +01:00
8a3181f741 clutter: Make json-glib a debug only dependency
Currently, json-glib is used for two things:
- For loading scripts, nothing seems to use that in real life other
than some tests
- For debugging paint nodes

For now, the PR drops the first use case and only require json-glib
if it is a debug build

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3354>
2023-11-14 16:13:18 +01:00
4bc73ba9f4 clutter/layout-meta: Become one with ClutterChildMeta
Now ClutterContainer is gone there is no reason for this split to exist,
simply merge the two types together

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3384>
2023-11-14 10:27:51 +00:00
db4bbf6899 clutter/container: Drop ClutterContainer
Finally drop the type itself

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3384>
2023-11-14 10:02:21 +00:00
c42fa34b01 clutter/actor: Rename ::actor-{added,removed} to ::child-{added,removed}
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3384>
2023-11-14 09:59:52 +00:00
7113ecd86c clutter/actor: Take responsibility for ::actor-{added,removed}
These signals have de facto been ClutterActor signals for some time now,
simply move them in from ClutterActor

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3384>
2023-11-14 09:57:39 +00:00
e1cdeb0319 clutter/layout-manager: Consume Actors not Containers
We don't actually need the host to be a container, so simply work on
actors saving us a few casts.

This'll simplify dropping ClutterContainer entirely later, and
StViewport/ShellWindowPreviewLayout will also need to be updated for the
new signatures

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3384>
2023-11-14 09:57:39 +00:00
d0ebfa792d clutter/bin-layout: We don't need to store the container
We never do anything with it, just let it pass straight to the parent
implementation

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3384>
2023-11-14 09:57:39 +00:00
9399c984cc backends/native: Avoid redundant changes to sticky keys state mask
Sticky keys configuration changes reset the pressed modifier state mask,
even though the XKB state might already match with the expected new
state. In those cases we can avoid the XKB state mask update completely.

This also fixes a crash at initialization with sticky keys toggled on,
since configuring the device a11y settings will trigger a XKB state
mask merely reassuring the initial state with no modifiers pressed,
while the connection between the ClutterSeat and the impl object has
not been set up yet. This crash was introduced by commit 00bb4190b
("backends/native: Drop device_native->seat_impl field").

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3392>
2023-11-13 16:47:21 +00:00
ad7ce7c7ca tests/stacking: Add pointer rest and auto raise tests
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3258>
2023-11-13 14:22:44 +00:00
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
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
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
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
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
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
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
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
b59fb7c08c Update Vietnamese translation
(cherry picked from commit 54798a0141162506fcd6864bd1f98889a9f67b58)
2023-11-11 07:06:39 +00:00
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