Skip to content

Commit 7e578fd

Browse files
City-buszjadahl
andauthored
wayland/xdg-shell: Implement support for xdg_toplevel.wm_capabilities (#780)
Nothing dynamic yet, we don't have API for this, but we need it to implement the next version. Sending "all" should be equivalent to v4 anyhow, so this is harmless. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3019> Co-authored-by: Jonas Ådahl <[email protected]>
1 parent 9f0655e commit 7e578fd

2 files changed

Lines changed: 29 additions & 1 deletion

File tree

src/wayland/meta-wayland-versions.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
/* Global/master objects (version exported by wl_registry and negotiated through bind) */
3838
#define META_WL_COMPOSITOR_VERSION 5
3939
#define META_WL_DATA_DEVICE_MANAGER_VERSION 3
40-
#define META_XDG_WM_BASE_VERSION 4
40+
#define META_XDG_WM_BASE_VERSION 5
4141
#define META_WL_SEAT_VERSION 5
4242
#define META_WL_OUTPUT_VERSION 4
4343
#define META_XSERVER_VERSION 1

src/wayland/meta-wayland-xdg-shell.c

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -693,11 +693,20 @@ fill_states (MetaWaylandXdgToplevel *xdg_toplevel,
693693
}
694694
}
695695

696+
static void
697+
add_wm_capability_value (struct wl_array *states,
698+
enum xdg_toplevel_wm_capabilities wm_capability)
699+
{
700+
*((uint32_t *) wl_array_add (states, sizeof (uint32_t))) = wm_capability;
701+
}
702+
696703
static void
697704
meta_wayland_xdg_toplevel_send_configure (MetaWaylandXdgToplevel *xdg_toplevel,
698705
MetaWaylandWindowConfiguration *configuration)
699706
{
700707
MetaWaylandXdgSurface *xdg_surface = META_WAYLAND_XDG_SURFACE (xdg_toplevel);
708+
MetaWaylandXdgSurfacePrivate *xdg_surface_priv =
709+
meta_wayland_xdg_surface_get_instance_private (xdg_surface);
701710
struct wl_array states;
702711

703712
wl_array_init (&states);
@@ -715,6 +724,25 @@ meta_wayland_xdg_toplevel_send_configure (MetaWaylandXdgToplevel *xdg_to
715724
configuration->scale));
716725
}
717726

727+
if (!xdg_surface_priv->configure_sent &&
728+
wl_resource_get_version (xdg_toplevel->resource) >=
729+
XDG_TOPLEVEL_WM_CAPABILITIES_SINCE_VERSION)
730+
{
731+
struct wl_array wm_capabilities;
732+
733+
wl_array_init (&wm_capabilities);
734+
add_wm_capability_value (&wm_capabilities,
735+
XDG_TOPLEVEL_WM_CAPABILITIES_WINDOW_MENU);
736+
add_wm_capability_value (&wm_capabilities,
737+
XDG_TOPLEVEL_WM_CAPABILITIES_MAXIMIZE);
738+
add_wm_capability_value (&wm_capabilities,
739+
XDG_TOPLEVEL_WM_CAPABILITIES_FULLSCREEN);
740+
add_wm_capability_value (&wm_capabilities,
741+
XDG_TOPLEVEL_WM_CAPABILITIES_MINIMIZE);
742+
xdg_toplevel_send_wm_capabilities (xdg_toplevel->resource, &wm_capabilities);
743+
wl_array_release (&wm_capabilities);
744+
}
745+
718746
xdg_toplevel_send_configure (xdg_toplevel->resource,
719747
configuration->width / configuration->scale,
720748
configuration->height / configuration->scale,

0 commit comments

Comments
 (0)