Commit Graph

1138 Commits

Author SHA1 Message Date
67438caa3d gdk: fix crash on Wayland with already destroyed surface.
See crash reliably reproduced on GIMP when a popup is destroyed on a
drag-begin callback and Wayland data listener callbacks calls the
enter() callback with a NULL surface.

Cf. https://gitlab.gnome.org/GNOME/gimp/-/issues/10515
2025-01-17 11:16:38 +00:00
d50e6742e6 Merge branch 'clear-settings-portal-gtk-3-24' into 'gtk-3-24'
wayland: Clear settings_portal when going to fallback with no portal settings

See merge request GNOME/gtk!7757
2024-09-29 13:25:24 +00:00
5b5a32d445 wayland: Use the same default cursor size as gsettings schema
Fixes: #7043
2024-09-28 16:50:45 +04:00
eed43d6468 wayland: Clear settings_portal when going to fallback with no portal settings
All other code paths with goto fallback clear it, this makes the behavior consistent with them
2024-09-28 16:42:31 +04:00
e82f5ac4d2 wayland: Improve font setting fallback for real
dfea8c31d9 added a check for portal settings array length but what it really checks is the amount of dbus out arguments.

This commit makes it do what gtk4 does: really check array length.

Fixes: #3838
2024-09-27 15:19:07 +04:00
1cf0520454 Try to fix monitor geometry on sway
The Wayland protocols around outputs are truly a disaster.

This is a backport of 854e40c60c0d32 from main in the hope
of getting monitor geometry to work across compositors.

Fixes: #6939
2024-08-17 21:48:37 -04:00
1d93015e1f Merge branch 'fix-virtual-memory-leak' into 'gtk-3-24'
Ensure the staging_cairo_surface is destroyed before re-assigning it

See merge request GNOME/gtk!7206
2024-08-07 13:21:13 +00:00
b8435aab39 wayland: Add support for v2 of xdg_foreign protocol 2024-07-11 18:31:37 +02:00
b237989bb3 Ensure the staging_cairo_surface is destroyed before re-assigning it
Without doing so, memory regions allocated may not be freed in some cases.

Closes 6675.
2024-04-30 09:15:09 +08:00
bdddc3857c wayland: Always commit soon after xdg_surface.ack_configure
It's mandatory to reply to a xdg_surface.configure with a
xdg_surface.ack_configure, as well as a wl_surface.commit to have the
ack_configure to have any effect. We failed to do that if the new
configuration didn't cause any actual anything to change, meaning we'd
just ack_configure, but potentially never commit.

Fix this by requesting a 'after-paint' frame clock phase, while setting
the pending commit state to true. If we were already to paint, the new
requested phase would happen anyway, but to avoid double
wl_surface.commit when also using eglSwapBuffers*(), also avoid
performing the commit if we know the swap buffers will happen.
2024-04-14 21:24:19 +02:00
0844a88558 wayland: Guarantee dnd-move as a cursor name
We need to go back to using this, since move is widely abused
and thus can't change its image to one thats appropriate for dnd.
2024-04-04 10:31:08 +02:00
e29cd37ae6 Merge branch 'standard-cursor-names-3-24' into 'gtk-3-24'
wayland: Keep cursor types limping along

See merge request GNOME/gtk!7033
2024-03-15 02:19:28 +00:00
f1690a9a37 wayland: Keep cursor types limping along
Cursor themes have recently started to reduce their coverage of
'legacy' cursor names, and reduced to the standard names. Support
this for the few cursor types that are still used in GTK.
2024-03-14 21:45:19 -04:00
9020a6f71e [gtk3/wayland] Infer resizable edges for tiled windows if possible.
This fixes https://bugzilla.mozilla.org/show_bug.cgi?id=1871627

All GTK3/4 apps on non-GNOME desktops aren't resizable if they are
tiled.

This patch makes the non-tiled edges resizable if we have per-edge
tiling, but not per-edge resizing information.

We might want to make all edges resizable, but that might not be fine
for tiling compositors.
2024-02-27 15:18:41 +01:00
47601f5413 gdk/wayland: Clear current_tablet on pad leave
Fixes crash when handling tablet pad removal event after the
current_tablet has already been freed.
2024-02-11 15:03:04 +00:00
51b04c5007 wayland: Small fixup to monitor size handling
The first time this function is called, has_xdg_output() returns
true, but haven't yet received all the xdg-output events, so wait
for that to be done. Otherwise, the logical size is 0, and nothing
useful comes from that.
2024-01-31 14:12:40 +01:00
09373bf7ee [gtk3/wayland] Fix GdkMonitor sizes on Mutter without fractional scaling.
This is the gtk3 version of !6722.

This fixes a problem that is apparent in
https://bugzilla.mozilla.org/show_bug.cgi?id=1869724, but that also
reproduces on any GTK application as described in
https://bugzilla.mozilla.org/show_bug.cgi?id=1869724#c16.

xdg_output sizes might be physical if the compositor doesn't scale them,
it seems. So to report the correct logical geometry in GDK pixels, we
need to detect this case. We do this by checking whether the wl_output
size matches the xdg_output size.
2024-01-31 14:12:40 +01:00
5de743572e fix gtk-shell protocol handling 2024-01-24 01:08:43 +00:00
a58ae95c87 gdkdisplay-wayland: Init selection before roundtrips
Some of the listeners connected during the initial roundtrip assume a
non-NULL selection, when they finally invoke functions such as
gdk_wayland_selection_ensure_offer(),
gdk_wayland_selection_ensure_primary_offer() or
gdk_wayland_selection_set_offer(). The GdkWaylandSelection should
therefore be initialized before the second series of roundtrips, as the
compositor may have already sent a selection by then.
2024-01-06 23:30:34 +01:00
ab860da1b9 Merge branch 'gtk3-wayland-suspended' into 'gtk-3-24'
[gtk3/wayland] Expose XDG-shell suspended state via the visibility state

See merge request GNOME/gtk!6630
2023-12-21 12:24:36 +00:00
432ed07105 Merge branch 'work/zzag/avoid-scaling-cairo-surface-twic3' into 'gtk-3-24'
wayland: Fix wl_buffer size for custom cursors

See merge request GNOME/gtk!6637
2023-12-19 01:11:15 +00:00
58039edf69 [gtk3/wayland] Expose XDG-shell suspended state via visibility events.
This allows Wayland compositors to tell GTK applications whether a
window is effectively invisible.
2023-12-18 12:15:16 +01:00
1f0f7820cb [gtk3/wayland] Only request v2 of xdg_wm_base.
This fixes potential runtime crashes in some somewhat unlikely
configurations, like a modern compositor but gtk built against an old
wayland protocols version.

We only need v2 for the tiling fixes, so request that.
2023-12-18 12:13:22 +01:00
c5d24e3d94 wayland: Fix wl_buffer size for custom cursors
cairo_image_surface_get_width() and cairo_image_surface_get_height()
return the image size that's in the device pixels.

On the other hand, _gdk_wayland_display_create_shm_surface() takes a
surface size in the logical pixels.

Given that _gdk_wayland_display_get_cursor_for_surface() provides the
desired surface size in device pixels, a much bigger shm surface is
created, which then breaks damage tracking code in
gdk_wayland_device_update_window_cursor().

Fixes #6242
2023-12-14 11:13:14 +02:00
44f7cb1c55 wayland: Avoid more legacy cursor names
Set the cursor from a standard name instead of relying on the X11
cursor font derived enum values.
2023-12-08 14:09:48 +04:00
262be35f43 Fall back to the 'default' cursor
The Adwaita cursor theme is moving to shipping just standard cursor
names, so we should fall back to 'default' instead of 'left_ptr' if
a named cursor can't be found.

Fixes: #6259
2023-12-08 12:56:29 +04:00
459a13e837 Merge branch 'gtk3-wayland-tiled' into 'gtk-3-24'
[gtk3] Support tiled windows from xdg-shell.

See merge request GNOME/gtk!6629
2023-11-29 12:50:31 +00:00
3020890e86 Merge branch 'cursor-size-tweak' into 'gtk-3-24'
[gtk3] Don't fall back directly to 1 for mismatched cursor sizes.

See merge request GNOME/gtk!5481
2023-11-29 12:44:17 +00:00
b54b154dc0 [gtk3] Support tiled windows from xdg-shell.
This makes wayland windows tileable in non-mutter compositors.
2023-11-29 05:03:41 +01:00
2b5a6963e4 wayland: Be more careful when loading cursors
Make sure we don't access the cursor_images array out of bounds.

Related: #6234
2023-11-27 14:53:51 -05:00
be74e8a12a Merge branch 'wayland-entries-for-keyval' into 'gtk-3-24'
wayland: Don't return True if we fail to convert a keyval

See merge request GNOME/gtk!6492
2023-10-17 16:44:48 +00:00
8143aa1b94 wayland: Don't return True if we fail to convert a keyval
gdk_keymap_get_entries_for_keyval is supposed to return FALSE when no
keys were found. Do so to prevent careless clients (that don't check
n_keys too) from crashing.
2023-10-17 18:22:47 +02:00
0bf7d9ce39 gdk/wayland: Don't notify of settings changes on startup.
I was profiling Firefox startup on Wayland, and I realized that we were
doing too much work because we get extra settings changed events, posted
from here:

    #0  gdk_event_copy (event=0x7ffe9c4a7fd0) at ../gtk/gdk/gdkevents.c:659
    #1  0x00007f8b8a5060c6 in gdk_display_put_event (event=0x7ffe9c4a7fd0, display=0x7f8b8d551a00) at ../gtk/gdk/gdkdisplay.c:503
    #2  gdk_display_put_event (display=0x7f8b8d551a00, event=0x7ffe9c4a7fd0) at ../gtk/gdk/gdkdisplay.c:497
    #3  0x00007f8b8a5456e6 in notify_setting (setting=0x7f8b8a59b6d6 "gtk-xft-dpi", screen=0x7f8b8d517700) at ../gtk/gdk/wayland/gdkscreen-wayland.c:237
    #4  update_xft_settings (screen=0x7f8b8d517700) at ../gtk/gdk/wayland/gdkscreen-wayland.c:513
    #5  0x00007f8b8a53ef6d in init_settings (screen=0x7f8b8d517700) at ../gtk/gdk/wayland/gdkscreen-wayland.c:842
    #6  _gdk_wayland_screen_new (display=0x7f8b8d551a00) at ../gtk/gdk/wayland/gdkscreen-wayland.c:1367
    #7  _gdk_wayland_display_open (display_name=<optimized out>) at ../gtk/gdk/wayland/gdkdisplay-wayland.c:618
    #8  0x00007f8b8a507bc7 in gdk_display_manager_open_display (manager=<optimized out>, name=0x0) at ../gtk/gdk/gdkdisplaymanager.c:462
    #9  0x00007f8b82bda2f8 in XREMain::XRE_mainStartup(bool*) (this=this@entry=0x7ffe9c4a8398, aExitFlag=aExitFlag@entry=0x7ffe9c4a830f) at /home/emilio/src/moz/gecko-6/toolkit/xre/nsAppRunner.cpp:4760
    #10 0x00007f8b82be1742 in XREMain::XRE_main(int, char**, mozilla::BootstrapConfig const&) (this=this@entry=0x7ffe9c4a8398, argc=argc@entry=4, argv=argv@entry=0x7ffe9c4a9698, aConfig=...) at /home/emilio/src/moz/gecko-6/toolkit/xre/nsAppRunner.cpp:5874
    #11 0x00007f8b82be1c2c in XRE_main(int, char**, mozilla::BootstrapConfig const&) (argc=4, argv=0x7ffe9c4a9698, aConfig=...) at /home/emilio/src/moz/gecko-6/toolkit/xre/nsAppRunner.cpp:5942
    #12 0x000055631ef3b3e9 in do_main(int, char**, char**) (argc=4, argv=0x7ffe9c4a9698, envp=<optimized out>) at /home/emilio/src/moz/gecko-6/browser/app/nsBrowserApp.cpp:227
    #13 main(int, char**, char**) (argc=<optimized out>, argv=<optimized out>, envp=<optimized out>) at /home/emilio/src/moz/gecko-6/browser/app/nsBrowserApp.cpp:445

We shouldn't post events for a screen we're just creating, because it
can make apps do too much work during startup. X11 had code for this.
2023-09-04 17:40:13 +02:00
ee21154413 gdk/wayland: Use g_warning_once for cursor scale mismatches. 2023-09-04 15:17:50 +02:00
c06c7bdc6a gdk/wayland: Don't fall back directly to 1 for mismatched cursor sizes.
Try to find a lower scale that still works. In most cases this will end
up with a 2-scaled cursor rather than 3-scaled cursor.

Fixes #5567
2023-09-04 15:17:50 +02:00
e205bdaa89 gdk/wayland: Switch behavior of BTN_STYLUS/STYLUS2 as middle/right click
This mapping of stylus evdev input event codes into GDK button numbers
makes gdk/wayland inconsistent with gdk/x11, so depending on the backend
the same button middle-click pastes or right-click pops up menus.

Make the wayland backend consistent with X11, so that a GNOME wayland
session gets these buttons consistently mapped across all kinds of
clients.

(cherry-picked from commit e28ff79bec53ecd56885390ba4a66019cde598c6)
2023-07-06 12:39:09 +02:00
a9d7198d63 gdk/wayland: Return pad devices querying for all devices
These devices unfortunately didn't ever get a capability flag in
3.24 (fixed in GTK4). We are very far off into maintenance grounds that
it is not ideal to add new flag values, but we could however return
these devices if GDK_SEAT_CAPABILITY_ALL is being asked.

Do that, so it is possible to deal with pad devices, even if it's
not possible to query them specifically.
2023-06-14 00:33:12 +02:00
81029b824b gdk/wayland: Ensure device-added/removed emission in GdkSeat
We've used to emit these in the GdkDeviceManager, but missed to do
this signal emission at the GdkSeat object level. In order to avoid
the double emission, trigger one from the other.
2023-06-14 00:33:12 +02:00
6070f10922 gdk/wayland: Create pad devices on enter
We were creating the pad device on wp_tablet_pad.done, but
at that time we do not know what tablet it is associated with,
thus we cannot get appropriate vid/pid/name properties for it.

To get that, we need to wait for the pad to enter a surface,
at that time we do know what tablet it is associated with, so
we can get better information about the device.

There are pads that may plausibly "change" tablet between
one .enter event and the next (e.g. Wacom Express Key Remote),
but this situation is highly unlikely. The pad devices created
are thus persistent until that situation happens.
2023-06-14 00:33:12 +02:00
d8190aae3f wayland: Don't crash without xdg_activation_v1
This backports 3cdb6392102079d85ea38fa24d58c1824fe4dd37 to GTK 3.

See: #5701
2023-03-28 19:42:53 -05:00
ff892684c8 wayland: Don't crash on cursor size 0
The cursor-theme-size setting is documented as
'0 means the default size'. Make it so by using
size 24 if we see a 0. Its better than crashing.

Fixes: #5700
(cherry picked from commit 7adbbe6f35347b19319d9e4ce8c92fb0e861524b)
2023-03-28 18:38:34 +02:00
a40126e1f9 gdkscreen-wayland: Notify initial setting change from org.gtk.Settings 2023-03-27 22:08:59 +02:00
384d9a75cd Revert "Revert "wayland: Add support for gtk_surface1_titlebar_gesture()""
This reverts commit 5aaa373b70
2023-01-28 09:41:34 +00:00
b24e43a1f7 Merge branch 'revert-titlebar-gestures' into 'gtk-3-24'
Revert "wayland: Add support for gtk_surface1_titlebar_gesture()"

See merge request GNOME/gtk!5451
2023-01-28 03:03:51 +00:00
5aaa373b70 Revert "wayland: Add support for gtk_surface1_titlebar_gesture()"
This reverts commit 45ba6e9329.

This caused regressions in libhandy-using applications.

Fixes: #5389
2023-01-27 21:34:44 -05:00
41827d9f72 gdk/wayland: set requesting surface to xdg-activation
The argument to xdg_activation_token_v1_set_surface is documented to be the
surface requesting the activation, not the surface to be activated, which is
given later when calling xdg_activation_v1_activate.
(c.f. 36cee4bdbc)

Use the same logic as in gdk_wayland_app_launch_context_get_startup_notify_id,
i.e. if we have a surface with focus, set that, otherwise set NULL.

This fixes requesting urgent/focus on wlroots (compositors like Sway, etc.),
which was blocked as the surface requesting the activation didn't have focus.

Backport of: 43c1a433aa0839826451f71029965d8e359a9178

Signed-off-by: Joan Bruguera <joanbrugueram@gmail.com>
2023-01-27 14:53:41 +00:00
f5a5480fe2 gdk/wayland: Perform xdg_activation on gdk_window_set_startup_id
This call has everything to perform activation as specified by the
xdg_activation protocol, notably a surface to activate as opposed to
gdk_notify_startup_complete().

Make activation happen here, so that the surface gets activated when
its gets a startup ID assigned.

(cherry-picked from commit 5aeabdb3d404579b5cab4fff1642ed116f745a8b)
2023-01-25 11:22:40 +01:00
0f55e9552f Treat XKB_MOD_NAME_LOGO as super key
Loosely based on !5304, which fixes #4913 for GTK3.
2023-01-03 17:09:04 +01:00
feb38ce112 Revert "Treat XKB_MOD_NAME_LOGO as super key"
This reverts commit 3a871c9184.

This broke one of our tests.
2022-12-22 09:00:37 -05:00
f39dea3d57 Revert "Revert "wayland/cursor: Sanity check cursor image size""
This reverts commit 4432a03742.
2022-12-13 18:52:34 -05:00