Commit Graph

8007 Commits

Author SHA1 Message Date
1c8ec31162 Sync drag cursors with GTK4
Use the same cursors during dnd as we do in GTK 4.
2024-04-04 10:31:39 +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
6754765a5a Revert 7237f5d0eb
This commit was identified as the cause for a GLArea transparency
regression. Bring the required code back.

Fixes: #6359
2024-03-28 07:58:37 +01: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
7e9676d658 Fix Cocoa pasteboard constants for gtk.
Corresponds to gdkselection-quartz changes in f30ed5ddc.
Fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/6480
2024-02-27 12:31:16 -08: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
ba58b3a23d Fix for #6342 2024-01-19 23:01:22 +01:00
6880ac90a0 don't free monitor->name twice (fixes #6345) 2024-01-19 19:15:52 +01:00
a487deb189 Merge branch 'fix/monitor-name' into 'gtk-3-24'
Use xorg 'monitor' the right way.

See merge request GNOME/gtk!6680
2024-01-16 16:36:05 +00:00
adce74bc28 Free monitor name on finalize 2024-01-15 08:25:58 +01: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
345bfb494a Use consistent coordinates in get_toplevel_from_ns_event.
[NSView frame] returns a rectangle in the superview's coordinates, and the
superview of an NSWindow's content view (which is the only NSView that
GdkQuartz instantiates) is an undocumented NSThemeFrame. While it happens
to have the same origin as the content view and the same size as the
window's frame this isn't documented and so could change without notice.
Convert the window frame coordinates to the view's coordinate system to
ensure consistency.

Use the view's bounds instead of its frame: The bounds rectangle is in the
view's coordinate system. Use the parent NSWindow's frame instead of the
private NSThemeFrame's. This ensures that all coordinate comparisons have
the same reference.

Finally, the macOS coordinate systems origin is at the bottom left, so the
title bar is between the content view's height and the window's height,
not in negative y in the view's coordinates. Adjust the y comparisons
accordingly.

Fixes #6297
2023-12-25 11:10:12 -08:00
19b515dcd8 Rework after first review 2023-12-21 13:51:45 +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
57acc7142f Rework to get rid of get_monitor_by_output 2023-12-20 14:31:01 +01:00
d4ca79bb96 Use xorg 'monitor' the right way. See #2013 2023-12-20 07:17:33 +01: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
99a816c361 gdkkeys-win32c: change registry key not found g_warning to g_debug
On Windows with certain keyboard layout combinations you can get a
benign terminal warning like this:
Could not open registry key 'SYSTEM\CurrentControlSet\Control\Keyboard
Layouts\D0010413'
When using a lot of plug-ins, like GIMP does, this warning can show up
a lot of times.
The code after this warning, still has another last check, that, when it
fails, will show a warning.

We change the first g_warning to a g_debug statement, to reduce the
amount of warning messages.

Closes #5109
2023-12-18 11:35:43 -05: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
e1d664da63 GtkMenu: Fix positioning when attached to offscreen windows
In order to do that, we have to make gdk_window_is_impl_offscreen ()
accessible from GTK via GdkPrivateVTable.
2023-12-13 12:34:41 +01:00
6982415c9f gdk_display_get_monitor_at_window: Check for offscreen windows
And get the embedder before continuing, as the backend-specific
get_monitor_at_window () only knows about its own windows.

In order to check for offscreen windows, we introduce a new function
gdk_window_is_impl_offscreen (). Unlike gdk_window_is_offscreen (),
it doesn't rely on the window_type field, but actually checks whether
GDK_WINDOW_IMPL_GET_CLASS (window->impl) is GdkOffscreenWindow.

See previous commit for informations.
2023-12-13 12:27:32 +01:00
0c72ce94ea GdkWindow: check for same impl class in set_transient_for ()
Checking for offscreen windows with gdk_window_is_offscreen ()
is not enough in this case. What we want here is that the impl
classes match, as backends are meant to know only about their
windows. Instead gdk_window_is_offscreen () checks whether the
GdkWindow.window_type field is GDK_WINDOW_OFFSCREEN.

In the case of child windows in offscreen windows, the window
type is GDK_WINDOW_CHILD, even though their impl is still
GdkOffscreenWindow.

So actually check whether GDK_WINDOW_IMPL_GET_CLASS (window)
matches GDK_WINDOW_IMPL_GET_CLASS (parent).

We may also consider getting the toplevels from child windows,
as transient-for relationships are really about toplevels, but
child windows doesn't seem to cause problems in practice.
2023-12-13 12:23:43 +01: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
65b0c289b0 Fix the build 2023-11-19 21:10:05 -05:00
a0277a46d3 Merge branch 'unavailable-gl-functions' into 'gtk-3-24'
gl: Limit glGetTexLevelParameteriv use to supported platforms

See merge request GNOME/gtk!6554
2023-11-19 17:18:06 +00:00
673bd65090 gl: Limit glGetTexLevelParameteriv use to supported platforms 2023-11-19 17:18:05 +00:00
88217f2e44 Add missing parentheses
This problem was introduced in f5bf4aeaa6.
2023-11-19 12:17:37 -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
89137211a9 Merge branch 'gtk-3-24' into 'gtk-3-24'
GtkTooltip: prevent tooltips from appearing offscreen in edge cases (fixes #2784)

See merge request GNOME/gtk!2649
2023-09-30 15:04:30 +00:00
261780ac51 OpenGL/ES: Fix 'R' and 'B' bits inverted on all platforms
The color channels are swapped on Linux too, not only on Windows. It can be
reproduced by running the "OpenGL Area" example from gtk3-demo with
GDK_GL=gles, or play a video in totem with GDK_GL=gles.

Fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/3032
2023-09-28 18:49:51 +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
4560664fff [gdk-quartz] Set POPUP_MENU type hint for GDK_WINDOW_TEMP.
GDK_WINDOW_TEMP is set only for GTK_WINDOW_POPUP. If the type_hint
is left at the default GDK_WINDOW_TYPE_HINT_NORMAL the Quartz WM
will fullscreen it, which isn't desirable for popup menus or other
popups.

Fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/5716
2023-08-28 20:23:13 -07:00
3e3266dce4 GdkWindow: Check for offscreen windows in set_transient_for ()
Fixes https://gitlab.gnome.org/GNOME/gimp/-/issues/6711
2023-07-13 16:24:42 +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
1e1e1a1b8b make gdkquartz-cocoa-access.h usable again
There is no need to include gdkquartz.h there,
which was making it impossible to include this header file
without also adding gdk/ as an include directory when compiling.
This patch moves the include to the only location where it is actually needed.
2023-07-03 15:19:39 -07:00