1
0
Fork 0
Commit graph

31952 commits

Author SHA1 Message Date
Carlos Garnacho
3bb02538b9 wayland: Bypass popup grab focus if other handlers are in effect
If other handlers (e.g. DnD) are on top of the popup grab focus, we
may want it to move outside same-client surfaces as the popup grab
specifies.

Check that it is the current handler before making same-client checks,
so that these handlers on top have an opportunity to find other
surfaces, e.g. during DnD from a popup.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/1681
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3937>
(cherry picked from commit c179bebb70)
2024-09-14 21:09:59 +02:00
Carlos Garnacho
99808a3365 wayland: Track pressed mouse buttons for popup grabs through modifiers
Move away from tracking presses/releases directly, since there might be
other event handlers on top that might prevent the popup event handler
to fully track all events. The replacement is using event state modifiers,
which will use information set from the backend, and is enough to determine
there's no more pressed buttons without tracking prior event history.

This makes the popup event handler able to interact with other event
handlers that might be on top, and consume button release events for
themselves (e.g. DnD), no longer resulting in a stuck popup grab.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3937>
(cherry picked from commit 22362378ea)
2024-09-14 21:09:47 +02:00
Marco Trevisan (Treviño)
081b918bac screen-cast-stream-src: Do not try to create a 0-sized texture when scaled
When the screen is scaled and we are recording/sharing the screen we may
end up crash as per trying to create a 0-sized texture due to missing
ceiling of the texture size.

This is similar to what was fixed in commit 4d4e8e5862 and the same
fix was included in commit 422ee4515, but hidden under a compilation fix

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3978>
2024-08-28 09:45:10 +00:00
Daniel van Vugt
0d60d07204 backends/native: Avoid duplicating or losing KMS property sets
When triple buffering, `meta_onscreen_native_prepare_frame` for the next
frame is called before `notify_view_crtc_presented` for the previous frame.
So our booleans were unfortunately still TRUE in the second prepare_frame,
resulting in two frames with the same property updates.

When double buffering, having roughly one frame interval between
`meta_onscreen_native_prepare_frame` and `notify_view_crtc_presented`
meant that property updates signalled between the swap and presentation
wouldn't get attached to a KMS update, and would be forgotten when
`notify_view_crtc_presented` resets the flags to FALSE.

To solve these we now keep a separate flag and counter per property,
tracking invalidation and pending updates respectively. The latter is a
counter rather than a boolean in support of triple buffering where two
updates may be pending concurrently (next and posted).

Origin: https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3912

(cherry picked from commit a04d90d9e7)
2024-08-26 09:03:55 +00:00
Carlos Garnacho
bac0282124 wayland: Also cancel XDnD drops with no selected target
This is usually an indication of a failed drop operation if the
drop site didn't request any target. Check for this specifically
on XDnD button release, so that we can cancel the DnD operation
right away.

Inspired on a fix from Jonas Ådahl.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3821>
(cherry picked from commit ef3de1e58e)
2024-08-22 20:30:44 +00:00
Carlos Garnacho
b9693fe333 wayland: Fix thinko checking for pointers with pressed buttons
These are bail out paths, so we should ignore pointers with no
buttons pressed. Spotted by Jonas Ådahl.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3821>
(cherry picked from commit 6f2f4c5767)
2024-08-22 20:30:44 +00:00
Carlos Garnacho
7d0d0edda7 wayland: Redirect the focus explicitly to the Xdnd drag source
We were relying on the drag source surface to keep receiving events
thanks to it being implicitly grabbed by the button press. This
broke at some point, making the Xdnd drag source unable to keep
directing the DnD operation as it is expected by X11 clients.

To fix this, make the Xdnd MetaWaylandEventInterface stick itself
to the drag source surface keeping the focus of the device driving
the DnD operation, so that the X11 client can still handle events
from it.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3511
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3821>
(cherry picked from commit fd1d8c778b)
2024-08-22 20:30:44 +00:00
Carlos Garnacho
2a07a0ce9e wayland: Add getter for DnD origin surface
This private method will be used in later commits.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3821>
(cherry picked from commit a4ec154c8b)
2024-08-22 20:30:44 +00:00
Sebastian Wick
1a09f44c60 cogl/gles: Revert to unsized GL_BGRA as internalformat for BGRA_8888
Using GL_BGRA8_EXT as internalformat for TexSubImage2D was not allowed
in the EXT_texture_format_BGRA8888 extension. This changed recently:

https://registry.khronos.org/OpenGL/extensions/EXT/EXT_texture_format_BGRA8888.txt

  1.4, 23/06/2024 Erik Faye-Lund: Add GL_BGRA8_EXT for ES 2.0 and later.

Mesa already supports this which is why 7f943613a8 ("cogl: Use sized
internal renderable formats") worked as intended. Technically spec
compliant and our CI had an up-to-date driver.

So while this is no bug, it's still not great because older drivers will
generate GL errors. This commit changes this specific format back to an
unsized internal format which means we could, in theory, get less than
8bpc framebuffers.

We can try to revert this commit when newer driver versions have
propagated far enough.

Fixes: 7f943613a8 ("cogl: Use sized internal renderable formats")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3954>

(cherry picked from commit 45dcfeb0cc)
2024-08-18 18:28:54 +00:00
Sebastian Wick
d9d3199127 cogl/gles: Explain GLES2 requirement of matching internalformat & format
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3914>

(cherry picked from commit ce5f97fde1)
2024-08-18 18:28:54 +00:00
Sebastian Wick
7ab98f961c cogl/gles: Use the GL_BGRA8_EXT internalformat instead of the format
There is one define for the format (GL_BGRA_EXT) and one for the
internal format (GL_BGRA8_EXT). Use them appropriately.

This also adds defines to consistenly not use the _EXT postfix.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3914>

(cherry picked from commit c3eb01e547)
2024-08-18 18:28:54 +00:00
Sebastian Wick
66156236e2 cogl/gles: Use a premul required format for opaque fp16 Cogl formats
The opaque fp16 Cogl format variants need a required format that is
already premultiplied whereas the fp16 formats with an alpha channel can
be either straight or premult.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3914>

(cherry picked from commit d820fe030a)
2024-08-18 18:28:54 +00:00
Sebastian Wick
eecec5a699 cogl/gl: Use internal formats without alpha for non-alpha Cogl formats
The formats COGL_PIXEL_FORMAT_RGB_888 and COGL_PIXEL_FORMAT_BGR_888 for
the gl driver were using internal formats with an alpha channel.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3914>

(cherry picked from commit 41700d3cc7)
2024-08-18 18:28:54 +00:00
Daniel van Vugt
6e12b423c7 cogl/tests: Avoid floats when converting between int formats
All we need is an intermediate int format with twice as many bits and
to put division at the end to avoid any loss of precision.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3903>

(cherry picked from commit 3eb32cf750)
2024-08-18 18:28:54 +00:00
Daniel van Vugt
35c0c245ee cogl/tests: Avoid rounding/truncation ambiguity in 8/16bpc conversion
The OpenGL specs say rounding is preferred, but not required. Let's
avoid that uncertainty by choosing a test value that rounds and truncates
to the same integer either way. Only green needs fixing since our red,
blue and alpha values already follow this rule.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3903>

(cherry picked from commit 7df6b5c4ed)
2024-08-18 18:28:54 +00:00
Daniel van Vugt
d6a4ffc843 cogl/tests: Avoid converting 16bpc -> float -> 16bpc
Instead just assign 16bpc -> 16bpc

This avoids variations in CPU and GL driver behaviour when using
floats as intermediate values.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3582
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3903>

(cherry picked from commit 5360c58fe5)
2024-08-18 18:28:54 +00:00
Vasil Pupkin
c2c694464c Update Belarusian translation 2024-08-17 00:00:09 +00:00
Michel Dänzer
a60ba34264 cogl: Update latest sync fd also from cogl_gl_framebuffer_flush/finish
This ensures that any drawing for screen casting is reflected in the
sync fd.

Fixes: 99209958b9 ("cogl: Store latest GPU work completed sync fd")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3946>


(cherry picked from commit 61ae9eedb6)
2024-08-13 10:15:55 +00:00
Daniel Șerbănescu
dec5ffdadf Update Romanian translation 2024-08-11 11:28:42 +00:00
Daniel van Vugt
05f9b58965 backends/native: Only warn about cursor sizes once
Because if the current theme has exceeded the dimensions of
`DRM_CAP_CURSOR_WIDTH/HEIGHT` then the warning is just going to repeat
every time the cursor changes. We still fall back to software cursors
just fine so it's not important to repeat the warning.

Also the theme cursor size is not "Invalid" so we change the message to
match that of 47 main.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3597
2024-08-07 14:16:57 +08:00
Florian Müllner
04995f5664
Bump version to 46.4
Update NEWS.
2024-08-04 17:36:56 +02:00
Jonas Ådahl
4fb2a62c1f display: Rename mandatory X11 initialization function
Simply to make it clear that the renamed function is specific to a
particular X11 initialization mode (mandatory Xwayland), put that in the
name, so that it's easier to understand when this function is relevant.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3329>
2024-08-04 15:03:58 +00:00
Jonas Ådahl
56cfac14fb tests/x11: Fix replace test to catch the second instance failing
The test never noticed that the second instance never actually managed
to load; it was looping a multi second retry session trying to redirect
windows, meaning it failed to catch https://gitlab.gnome.org/GNOME/mutter/-/issues/3089.

Fix the test so that it always waits for mutter to finish loading
successfully, just like it waits fro the first.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3329>
2024-08-04 15:03:58 +00:00
Jonas Ådahl
827adc898e display: Move X11 initial focus handling to MetaX11Display
It's X11 specific, so put it in the X11 display manager object.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3329>
2024-08-04 15:03:58 +00:00
Jonas Ådahl
de31822ecc x11-display: Make subwindow redirection call mode specific
This means that for X11 sessions we'll do it before any windows are
mapped, and before any plugin implementation is started. Doing it before
a plugin is started is important, because things that the plugin does
during startup can have consequences on how compositing on Xorg works.

For the Xwayland case, we'll do it relatively in the setup phase. It
appears to have been harmless to do it later in the post-opened signal,
but there is no harm in doing it as one of the earlier steps.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3089
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3329>
2024-08-04 15:03:58 +00:00
Robert Mader
1ccf2cfb56 multi-texture-format: Fix limited range quantization
And stop pre-computing values, making errors like this harder to spot.

The values 0.0625 (16/256) and 0.5 (128/256) were slightly off,
resulting e.g. in "black" not being #000000 but #010001 RGB instead.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3906>

(cherry picked from commit dfa5238bf9)
2024-07-29 17:06:29 +02:00
Chao-Hsiung Liao
bb9a2f1ede Update Chinese (Taiwan) translation 2024-07-27 07:38:16 +00:00
Carlos Garnacho
7e0e428016 clutter: Specify that input-only grabs are started inactive in API
Add the _inactive suffix, so that the state of these objects is clear.

(cherry-picked from commit 01444e803f)

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3874>
2024-07-09 12:33:23 +02:00
Carlos Garnacho
827c4fea4b clutter: Add API to create inactive ClutterGrabs, and activate them explicitly
This gives greater control to the callers on the place where a grab is being
activated, this may make a difference in the handling of crossing events
triggered through it, e.g. by having callers rely on having already obtained
a ClutterGrab prior to handling the resulting effects.

The "input only" grab has also been turned inactive by default, in order to
to have the ClutterGrab pointer available for checks at the MetaWaylandEventHandler
focus changing methods triggered through grab activation.

(cherry-picked from commit 8e5f3a1f83)

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3874>
2024-07-09 12:33:23 +02:00
Jürgen Benvenuti
0ffc27ad5c Update German translation 2024-07-07 16:15:03 +00:00
Florian Müllner
c1ffc17331
Bump version to 46.3.1
Update NEWS.
2024-07-04 00:10:40 +02:00
Michel Dänzer
b09c1d3bfa wayland/actor-surface: Don't bail for Xwayland surfaces
Thawing Xwayland surfaces don't hit meta_window_actor_wayland_set_frozen,
so we need to sync actor state for them here.

v2:
* Guard META_IS_XWAYLAND_SURFACE by HAVE_XWAYLAND, fixes Wayland-only
  build.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3557
Fixes: ec5444f541 ("wayland/actor-surface: Don't sync actor state for frozen actors")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3862>

(cherry picked from commit 041a404ba0)
2024-07-03 18:12:29 +02:00
Marco Trevisan (Treviño)
7515316395 clutter/clone: Do not use global transformation for scaling clones
When cloning an actor we were applying a global scale to it, based on
the size of the clone itself and of the cloned actor.

This implied that the transformed size of the clone was not the one that
was set, but it was taking taking in account the actor scaling too.
So in practice we were scaling it twice.

While this had no visual implications it indeed was causing troubles
when a ClutterClone was reactive because in such case only the scaled
area of the scaled clone was considered reactive.

Assume you had an actor of 100x100 pixels, scaling it to a clone of
50x50 pixels:
 - The scale applied to the clone was 0.5
 - The transformed size of the clone was: 25x25 pixels
 - The clone was reactive only in that sub-area

To avoid this, never touch the clone transformation matrix, but only
transform it at paint time.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2959>

(cherry picked from commit 44c0c311ba)
2024-07-03 10:38:15 +02:00
Florian Müllner
3998f8a422
Bump version to 46.3
Update NEWS.
2024-06-29 21:32:23 +02:00
Corentin Noël
24f2e76576 meta/plugin: Annotate dialog creation virtuals as return full
The two dialog creation virtual functions returned by these functions have to
be unreferenced by the caller (and are actually unreferenced in other places in
the code).

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3790>
(cherry picked from commit 4134d12789)
2024-06-29 21:12:29 +02:00
Jeffrey Knockel
18c17aaa5a constraints: Allow resize of windows moved above screen
If the titlebar of a window has been moved above the screen by a user
via an unconstrained move, then any constrained user resize following
this move will cause the window to jump below the top of the screen or
cause other glitchy behavior.

This commit removes the constraint that the titlebar of a window must be
below the top of the screen for any resize that is both (1) triggered by
a user and (2) is a resize that affects only the left, right, or bottom
edges of the window.  This allows users to move a window partially above
the screen and then resize the window to be wider or resize the bottom
edge of the window to make it taller or shorter.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/1206
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3764>
(cherry picked from commit 5ba364a947)
2024-06-28 23:22:22 +02:00
Shiki Okasaka
a0dd01c95f clutter: Use character offsets for specifying the surrounding text
clutter_input_focus_set_surrounding() expects cursor and anchor positions
to be provided in character offsets.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3440
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3719>
(cherry picked from commit 4b1411696e)
2024-06-28 23:22:14 +02:00
Orko Garai
7f344053f8 Use byte offset for cursor_end/anchor value sent in preedit_string.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3845>
(cherry picked from commit f214eb5134)
2024-06-28 23:22:06 +02:00
Michel Dänzer
8978f74c1e wayland/surface: Can't send scale events with NULL surface->resource
The committed state can't have any children sub-surfaces either, so
just bail.

Fixes: ae403f2e94 ("wayland: Use new highest scale monitor tracking for fractional_scale_v1")
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3552

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3849>
(cherry picked from commit 94f3bbd94b)
2024-06-28 21:18:01 +02:00
Sebastian Wick
7e4f6faaaa wayland/surface: Send unmapped signal when the surface goes away
This was the intention anwyway but it didn't work properly because
GObject::dispose removes all signal handlers and we unmap surfaces in
WaylandShellSurface::finalize. Move all the unmanaging and unmapping to
the dispose vfunc where we can still run all the signal handlers.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3501
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3783>
(cherry picked from commit 4eacf97678)
2024-06-28 21:18:01 +02:00
Sebastian Wick
e8cc52044d wayland: Handle unmapping surfaces
Right now the unmapped signal doesn't always fire which means we didn't
see a surface that's being unmapped in these code paths before. In
particular the resource, window and role can be gone. Handle those
cases.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3783>
(cherry picked from commit 3e7b1d9cbd)
2024-06-28 21:18:01 +02:00
Pascal Nowack
30f73d554f backends/screen-cast-stream-src: Always initially set buffer stride
When mutter creates a dma-buf buffer for screencasting, the buffers
stride will, among other attributes, also be defined.
However, mutter currently only sets the buffer stride, when actually
recording a frame, but not when adding it.
This behaviour disallows screencast consumers (clients) to already
import the respective buffer (i.e. for Vulkan creating a VkImage for the
dma-buf image), as the stride is not yet communicated to the client.

Since the stride won't change after adding the respective buffer,
directly set the buffer stride, when adding the PipeWire buffer. This
allows screencast consumers (clients) to do optimizations in their
encoding paths.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3827>
(cherry picked from commit 0dd4080509)
2024-06-28 21:18:01 +02:00
Daniel van Vugt
1d7c2c7b61 x11: Add another fallback to legacy X11 cursor names
For X11 apps that don't specify their own.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3403
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3718>
(cherry picked from commit 807c99fca6)
2024-06-28 21:18:01 +02:00
Daniel van Vugt
d2d98a850c backends: Restore support for loading X11 cursor themes missing "default"
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3184
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3718>
(cherry picked from commit d2c6b77059)
2024-06-28 21:18:01 +02:00
Daniel van Vugt
f744efe347 backends: Add meta_cursor_get_legacy_name()
To aid loading of legacy cursor themes.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3718>
(cherry picked from commit 4a4ab8c533)
2024-06-28 21:18:01 +02:00
Daniel van Vugt
234013961e backends: Fix parameter alignment check-code-style complains about
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3718>
(cherry picked from commit 13b2803a03)
2024-06-28 21:18:01 +02:00
Daniel van Vugt
c1f03eba73 backends/x11: Avoid defining (and freeing!) nonexistent cursors
Such as "default" for legacy X11 themes.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3454
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3718>
(cherry picked from commit 847f015017)
2024-06-28 21:18:01 +02:00
Jonas Ådahl
df93ce4524 tests: Mark some tests as skippable
Wayland tests also get kvm and tty test variants, but running tty tests
on your main session makes them fail. The intention for tty tests is to
skip when not run from a tty, so fix that.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3811>
(cherry picked from commit 6d8c93ba66)
2024-06-28 21:18:01 +02:00
José Expósito
88f5fb3447 backends/eis-client: Release buttons on device remove
Due to a copy and paste error, buttons were not released when the device
was removed.

Found by Coverity.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3809>
(cherry picked from commit 4ae305f19e)
2024-06-28 21:18:01 +02:00
Jonas Ådahl
a193da6d97 kms: Don't use kernel thread when headless
We're not doing anything significant in the KMS thread anyway, so don't
make it a kernel thread, and don't ask to be real time scheduled (which
we wouldn't be anyway, but for clarity).

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3805>
(cherry picked from commit 5bca761148)
2024-06-28 21:18:01 +02:00