[mutter] wayland/xdg-shell: Add toplevel tile state support
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] wayland/xdg-shell: Add toplevel tile state support
- Date: Thu, 8 Nov 2018 13:32:10 +0000 (UTC)
commit 4673eeaf5fe59f2ba4c1af945924347bcaac782e
Author: Jonas Ådahl <jadahl gmail com>
Date: Wed Oct 24 14:45:11 2018 +0200
wayland/xdg-shell: Add toplevel tile state support
The second version of xdg_wm_base added toplevel tile states (top,
right, bottom, left), so lets communicate that.
src/wayland/meta-wayland-versions.h | 2 +-
src/wayland/meta-wayland-xdg-shell.c | 29 ++++++++++++++++++++++-------
2 files changed, 23 insertions(+), 8 deletions(-)
---
diff --git a/src/wayland/meta-wayland-versions.h b/src/wayland/meta-wayland-versions.h
index 63ca9b0d6..9e1139a91 100644
--- a/src/wayland/meta-wayland-versions.h
+++ b/src/wayland/meta-wayland-versions.h
@@ -37,7 +37,7 @@
/* Global/master objects (version exported by wl_registry and negotiated through bind) */
#define META_WL_COMPOSITOR_VERSION 4
#define META_WL_DATA_DEVICE_MANAGER_VERSION 3
-#define META_XDG_WM_BASE_VERSION 1
+#define META_XDG_WM_BASE_VERSION 2
#define META_ZXDG_SHELL_V6_VERSION 1
#define META_WL_SHELL_VERSION 1
#define META_WL_SEAT_VERSION 5
diff --git a/src/wayland/meta-wayland-xdg-shell.c b/src/wayland/meta-wayland-xdg-shell.c
index 3e5a18e57..9e1d86bd5 100644
--- a/src/wayland/meta-wayland-xdg-shell.c
+++ b/src/wayland/meta-wayland-xdg-shell.c
@@ -583,9 +583,15 @@ add_state_value (struct wl_array *states,
}
static void
-fill_states (struct wl_array *states,
- MetaWindow *window)
+fill_states (MetaWaylandXdgToplevel *xdg_toplevel,
+ struct wl_array *states)
{
+ MetaWaylandSurfaceRole *surface_role =
+ META_WAYLAND_SURFACE_ROLE (xdg_toplevel);
+ MetaWaylandSurface *surface =
+ meta_wayland_surface_role_get_surface (surface_role);
+ MetaWindow *window = surface->window;
+
if (META_WINDOW_MAXIMIZED (window))
add_state_value (states, XDG_TOPLEVEL_STATE_MAXIMIZED);
if (meta_window_is_fullscreen (window))
@@ -594,6 +600,19 @@ fill_states (struct wl_array *states,
add_state_value (states, XDG_TOPLEVEL_STATE_RESIZING);
if (meta_window_appears_focused (window))
add_state_value (states, XDG_TOPLEVEL_STATE_ACTIVATED);
+
+ if (wl_resource_get_version (xdg_toplevel->resource) >=
+ XDG_TOPLEVEL_STATE_TILED_LEFT_SINCE_VERSION)
+ {
+ if (window->edge_constraints.top != META_EDGE_CONSTRAINT_NONE)
+ add_state_value (states, XDG_TOPLEVEL_STATE_TILED_TOP);
+ if (window->edge_constraints.right != META_EDGE_CONSTRAINT_NONE)
+ add_state_value (states, XDG_TOPLEVEL_STATE_TILED_RIGHT);
+ if (window->edge_constraints.bottom != META_EDGE_CONSTRAINT_NONE)
+ add_state_value (states, XDG_TOPLEVEL_STATE_TILED_BOTTOM);
+ if (window->edge_constraints.left != META_EDGE_CONSTRAINT_NONE)
+ add_state_value (states, XDG_TOPLEVEL_STATE_TILED_LEFT);
+ }
}
static void
@@ -603,15 +622,11 @@ meta_wayland_xdg_toplevel_send_configure (MetaWaylandXdgToplevel *xdg_toplevel,
MetaWaylandSerial *sent_serial)
{
MetaWaylandXdgSurface *xdg_surface = META_WAYLAND_XDG_SURFACE (xdg_toplevel);
- MetaWaylandSurfaceRole *surface_role =
- META_WAYLAND_SURFACE_ROLE (xdg_toplevel);
- MetaWaylandSurface *surface =
- meta_wayland_surface_role_get_surface (surface_role);
struct wl_array states;
uint32_t serial;
wl_array_init (&states);
- fill_states (&states, surface->window);
+ fill_states (xdg_toplevel, &states);
xdg_toplevel_send_configure (xdg_toplevel->resource,
new_width, new_height,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]