[gtk3] Support tiled windows from xdg-shell.

This makes wayland windows tileable in non-mutter compositors.
This commit is contained in:
Emilio Cobos Álvarez 2023-11-29 03:36:27 +01:00
parent a074f1fe72
commit b54b154dc0
No known key found for this signature in database
GPG Key ID: E1152D0994E4BF8A
3 changed files with 33 additions and 1 deletions

View File

@ -410,6 +410,7 @@ gdk_registry_handle_global (void *data,
else if (strcmp (interface, "xdg_wm_base") == 0)
{
display_wayland->xdg_wm_base_id = id;
display_wayland->xdg_wm_base_version = version;
}
else if (strcmp (interface, "zxdg_shell_v6") == 0)
{
@ -651,7 +652,8 @@ _gdk_wayland_display_open (const gchar *display_name)
display_wayland->xdg_wm_base =
wl_registry_bind (display_wayland->wl_registry,
display_wayland->xdg_wm_base_id,
&xdg_wm_base_interface, 1);
&xdg_wm_base_interface,
MIN (display_wayland->xdg_wm_base_version, 6));
xdg_wm_base_add_listener (display_wayland->xdg_wm_base,
&xdg_wm_base_listener,
display_wayland);

View File

@ -77,6 +77,7 @@ struct _GdkWaylandDisplay
guint32 serial;
uint32_t xdg_wm_base_id;
int xdg_wm_base_version;
uint32_t zxdg_shell_v6_id;
GdkWaylandShellVariant shell_variant;

View File

@ -1874,6 +1874,18 @@ xdg_toplevel_configure (void *data,
break;
case XDG_TOPLEVEL_STATE_RESIZING:
break;
case XDG_TOPLEVEL_STATE_TILED_TOP:
pending_state |= (GDK_WINDOW_STATE_TILED | GDK_WINDOW_STATE_TOP_TILED);
break;
case XDG_TOPLEVEL_STATE_TILED_RIGHT:
pending_state |= (GDK_WINDOW_STATE_TILED | GDK_WINDOW_STATE_RIGHT_TILED);
break;
case XDG_TOPLEVEL_STATE_TILED_BOTTOM:
pending_state |= (GDK_WINDOW_STATE_TILED | GDK_WINDOW_STATE_BOTTOM_TILED);
break;
case XDG_TOPLEVEL_STATE_TILED_LEFT:
pending_state |= (GDK_WINDOW_STATE_TILED | GDK_WINDOW_STATE_LEFT_TILED);
break;
default:
/* Unknown state */
break;
@ -1893,9 +1905,26 @@ xdg_toplevel_close (void *data,
gdk_wayland_window_handle_close (window);
}
static void
xdg_toplevel_configure_bounds (void *data,
struct xdg_toplevel *xdg_toplevel,
int32_t width,
int32_t height)
{
}
static void
xdg_toplevel_wm_capabilities (void *data,
struct xdg_toplevel *xdg_toplevel,
struct wl_array *capabilities)
{
}
static const struct xdg_toplevel_listener xdg_toplevel_listener = {
xdg_toplevel_configure,
xdg_toplevel_close,
xdg_toplevel_configure_bounds,
xdg_toplevel_wm_capabilities,
};
static void