Commit Graph

1116 Commits

Author SHA1 Message Date
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
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
74bdb8d8a5 Revert "Make wayland load cursors on demand"
This reverts commit 66a199806c.
2022-12-13 18:52:29 -05:00
89583c456d Revert "wayland: Look for cursor themes in $HOME"
This reverts commit 3f1536632f.
2022-12-13 18:51:16 -05:00
3b9531d3d3 Merge branch 'ebassi/no-more-autotools-redux' into 'gtk-3-24'
Drop the Autotools build

See merge request GNOME/gtk!5299
2022-12-13 12:10:34 +00:00
c6321e52df Merge branch 'backport-mr-5088-to-gtk-3-24' into 'gtk-3-24'
Treat XKB_MOD_NAME_LOGO as super key

See merge request GNOME/gtk!5304
2022-12-08 12:14:55 +00:00
2b0a605c5d build: Remove the Autotools build
CI and downstream packagers have been using the Meson build for a while
now, and we checked that it's idempotent to the Autotools build.

Having two build systems in tree doesn't make maintaining and releasing
GTK any easier, even if it's the stable/frozen branch.
2022-12-08 11:57:39 +00:00
3a871c9184 Treat XKB_MOD_NAME_LOGO as super key
Based on !5088. See also #4913.
2022-12-07 17:34:17 +01:00
eca445672a gdk/wayland: Convert selection mimetypes back to atoms, if needed
Commit 0c1ea92219 took care of converting STRING/UTF8_STRING to mimetype
strings when letting selection targets known to the outer world through
wl_data_source/zwp_primary_selection_source_v1, but it missed the conversion
of those mimetypes back to the old atom strings, depending on the
application, the mimetype counterparts might not be known or handled, so
requests to paste from this app could go ignored.

Fixes: 0c1ea92219 - wayland: Translate STRING/UTF8_STRING selection atoms to mimetypes

Closes: https://gitlab.gnome.org/GNOME/gtk/-/issues/5397
2022-12-07 00:49:18 +01:00
7b02682b1d wayland: Fix argument's constness
The compiler was pointing out we were dropping the const modifier.
2022-12-06 21:50:30 +00:00
ca1dfc7092 build: Replace deprecated get_pkgconfig_variable()
Use get_variable(pkgconfig:...) instead.
2022-12-06 20:45:58 +00:00
3f1536632f wayland: Look for cursor themes in $HOME
We should look in the same places that libXcursor does,
so add $XDG_DATA_HOME/icons and $HOME/.icons to the list.

Fixes: #4080
2022-11-25 15:18:39 +01:00
b2ad8d2aba Dist gdk/wayland/cursor/meson.build
This file was missing from the 3.24.35 tarball.
Oops.
2022-11-23 06:24:40 -05:00
f8d26e2acc Merge branch 'libwayland-cursor-in-tree-gtk-3-24' into 'gtk-3-24'
Make wayland load cursors on demand

See merge request GNOME/gtk!5192
2022-11-18 03:55:52 +00:00
2fcc114870 Merge branch 'gtk-3-gles' into 'gtk-3-24'
gdk_wayland_display_init_gl: use GLES API if required

See merge request GNOME/gtk!5062
2022-11-10 13:44:34 +00:00
66a199806c Make wayland load cursors on demand
Add and use a modified libwayland-cursor in-tree,
just as done in the main branch for GTK4
2022-11-04 15:16:06 +01:00
4432a03742 Revert "wayland/cursor: Sanity check cursor image size"
This reverts commit da4066774b.
2022-11-04 10:58:37 +01:00
22c95cd1e9 gdk/wayland: Enable xdg-activation only if wayland-protocols >= 1.21
This way we can keep the same wayland-protocols requirement, so the latest GTK3
still builds on distributions shipping older versions of wayland-protocols,
such as Debian Bullseye.

Should fix CI builds as well.
2022-10-25 23:52:47 +02:00
3b25f9a662 gdk/wayland: Check the GdkSurface wl_surface before using it for activation
Double check the GdkSurface has a wl_surface before using it as the activation
token source, since we cannot use NULL surfaces here.

Fixes: https://gitlab.gnome.org/GNOME/gnome-control-center/-/issues/1862
Backport-of: 4b41d4f78ce71b60f0d51837cd1b6a1b346d679d
Signed-off-by: Joan Bruguera <joanbrugueram@gmail.com>
2022-10-25 15:54:05 +02:00
7fa87abf8a gdk/wayland: Dispatch GdkAppLaunchContext activation token in its own queue
Use a separate queue to dispatch the token object exclusively, just like we
do on the GdkSurface activation paths.

Backport-of: fb68600d88d4d334f7da7d079b106a1ef14503a6
Signed-off-by: Joan Bruguera <joanbrugueram@gmail.com>
2022-10-25 15:53:57 +02:00
45f0b5d052 wayland: Use xdg-activation for non-startup initiated focus requests
Currently, we have all the plumbing in place so that GTK consumes the
startup notification ID when focusing a window through the xdg-activation
protocol.

This however misses the case that a window might be requested to be
focused with no startup ID (i.e. via interaction with the application,
not through GApplication or other application launching logic).

In this case, we let the application create a token that will be
consumed by itself. The serial used is that from the last
interaction, so the compositor will still be able to do focus prevention
logic if it applies.

Since we already do have a last serial at hand, prefer xdg-activation
all the way over the now stale gtk-shell focusing support. The timestamp
argument becomes unused, but that is a weak argument to prefer the
private protocol over the standard one. The gtk-shell protocol support
is so far left for interaction with older Mutter.

Backport-of: 4dcacff3120d5c1cef888061dbc42f5fbe093a58
Signed-off-by: Joan Bruguera <joanbrugueram@gmail.com>
2022-10-25 15:53:49 +02:00
e80251e751 wayland: Keep startup_notification_id around long enough
When using xdg_activation we need to keep the id around until we send
the first activate to signal succesful startup.

Backport-of: 999509be619bfa0f50a549489b5ab5c890b574fa
Signed-off-by: Joan Bruguera <joanbrugueram@gmail.com>
2022-10-25 15:53:36 +02:00
54348c5270 wayland: xdg-activation: Don't assume there's a focus surface
Tools like gtk4-launch can't set surface on the activation token so
don't require it. If the compositor requires it we can't do anything
about it anyway. This avoids a critical:

   (gtk4-launch:23497): Gdk-CRITICAL **: 17:07:24.704: gdk_wayland_surface_get_wl_surface: assertion 'GDK_IS_WAYLAND_SURFACE (surface)' failed

Fixes: be4216e051 ("gdk/wayland: Support the xdg-activation wayland protocol")

Signed-off-by: Guido Günther <agx@sigxcpu.org>
Backport-of: 4d741bac98f906796d61eebfb4f74f5b1cecb2b6
Signed-off-by: Joan Bruguera <joanbrugueram@gmail.com>
2022-10-25 15:53:26 +02:00
a79d6972e0 gdk/wayland: Support the xdg-activation wayland protocol
This protocol implements the IPC necessary to focus application
windows across launcher/launchee. Add support for it.
2022-10-25 15:50:02 +02:00