recipes-graphics/wayland/weston: Add tile orientation states 06/27906/3
authorMarius Vlad <marius.vlad@collabora.com>
Tue, 16 Aug 2022 10:50:41 +0000 (13:50 +0300)
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>
Thu, 1 Sep 2022 12:20:04 +0000 (12:20 +0000)
This was recently integrated into libweston 11 pre-release, and should
be removed once yocto updates its libweston version to at least 11.

For the time being we'll rely on these to have split type of windows.

Bug-AGL: SPEC-3906
Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
Change-Id: I7bc5caa6126d36d843d0f00cde56c020fa3f97dc
Reviewed-on: https://gerrit.automotivelinux.org/gerrit/c/AGL/meta-agl/+/27906
Reviewed-by: Jan-Simon Moeller <jsmoeller@linuxfoundation.org>
Tested-by: Jan-Simon Moeller <jsmoeller@linuxfoundation.org>
meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-desktop-xdg-shell-Add-tiled-orientation-st.patch [new file with mode: 0644]
meta-agl-core/recipes-graphics/wayland/weston_10.0_aglcore.inc

diff --git a/meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-desktop-xdg-shell-Add-tiled-orientation-st.patch b/meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-desktop-xdg-shell-Add-tiled-orientation-st.patch
new file mode 100644 (file)
index 0000000..e0b8a3b
--- /dev/null
@@ -0,0 +1,169 @@
+From 6ab4713d3eba589aa1f39eee2b48c81906d7ba87 Mon Sep 17 00:00:00 2001
+From: Marius Vlad <marius.vlad@collabora.com>
+Date: Tue, 16 Aug 2022 13:34:19 +0300
+Subject: [PATCH] libweston/desktop/xdg-shell: Add tiled orientation states
+
+With the help of a newly introduced function, weston_desktop_surface_set_orientation(),
+this patch adds missing tiled states from the xdg-shell protocol.
+The orientation state is passed on as a bitmask enumeration flag, which the
+shell can set, allowing multiple tiling states at once.
+
+These new states are incorporated the same way as the others, retaining
+the set state, but also avoiding sending new configure events if nothing
+changed since previously acked data.
+
+Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
+(cherry-picked from 37a3025d893def991dec59587d17672aa3bf967a)
+
+Note that this was actually ported because libweston-desktop is not
+embedded into libweston and the structure changed in upstream.
+---
+ include/libweston-desktop/libweston-desktop.h | 11 ++++++
+ libweston-desktop/internal.h                  |  2 +
+ libweston-desktop/surface.c                   | 10 +++++
+ libweston-desktop/xdg-shell.c                 | 38 +++++++++++++++++++
+ 4 files changed, 61 insertions(+)
+
+diff --git a/include/libweston-desktop/libweston-desktop.h b/include/libweston-desktop/libweston-desktop.h
+index 3e7ac73..c296d16 100644
+--- a/include/libweston-desktop/libweston-desktop.h
++++ b/include/libweston-desktop/libweston-desktop.h
+@@ -44,6 +44,14 @@ enum weston_desktop_surface_edge {
+       WESTON_DESKTOP_SURFACE_EDGE_BOTTOM_RIGHT = 10,
+ };
++enum weston_top_level_tiled_orientation {
++      WESTON_TOP_LEVEL_TILED_ORIENTATION_NONE         = 0 << 0,
++      WESTON_TOP_LEVEL_TILED_ORIENTATION_LEFT         = 1 << 1,
++      WESTON_TOP_LEVEL_TILED_ORIENTATION_RIGHT        = 1 << 2,
++      WESTON_TOP_LEVEL_TILED_ORIENTATION_TOP          = 1 << 3,
++      WESTON_TOP_LEVEL_TILED_ORIENTATION_BOTTOM       = 1 << 4,
++};
++
+ struct weston_desktop;
+ struct weston_desktop_client;
+ struct weston_desktop_surface;
+@@ -163,6 +171,9 @@ void
+ weston_desktop_surface_set_size(struct weston_desktop_surface *surface,
+                               int32_t width, int32_t height);
+ void
++weston_desktop_surface_set_orientation(struct weston_desktop_surface *surface,
++                                     enum weston_top_level_tiled_orientation tile_orientation);
++void
+ weston_desktop_surface_close(struct weston_desktop_surface *surface);
+ void
+ weston_desktop_surface_add_metadata_listener(struct weston_desktop_surface *surface,
+diff --git a/libweston-desktop/internal.h b/libweston-desktop/internal.h
+index 2606d27..8afdede 100644
+--- a/libweston-desktop/internal.h
++++ b/libweston-desktop/internal.h
+@@ -100,6 +100,8 @@ struct weston_desktop_surface_implementation {
+                            void *user_data, bool resizing);
+       void (*set_size)(struct weston_desktop_surface *surface,
+                        void *user_data, int32_t width, int32_t height);
++      void (*set_orientation)(struct weston_desktop_surface *surface,
++                              void *user_data, enum weston_top_level_tiled_orientation tiled_orientation);
+       void (*committed)(struct weston_desktop_surface *surface, void *user_data,
+                         int32_t sx, int32_t sy);
+       void (*update_position)(struct weston_desktop_surface *surface,
+diff --git a/libweston-desktop/surface.c b/libweston-desktop/surface.c
+index 433f08a..6b3f4ae 100644
+--- a/libweston-desktop/surface.c
++++ b/libweston-desktop/surface.c
+@@ -506,6 +506,16 @@ weston_desktop_surface_set_size(struct weston_desktop_surface *surface, int32_t
+                                                 width, height);
+ }
++WL_EXPORT void
++weston_desktop_surface_set_orientation(struct weston_desktop_surface *surface,
++                                     enum weston_top_level_tiled_orientation tile_orientation)
++{
++      if (surface->implementation->set_orientation != NULL)
++              surface->implementation->set_orientation(surface,
++                                                       surface->implementation_data,
++                                                       tile_orientation);
++}
++
+ WL_EXPORT void
+ weston_desktop_surface_close(struct weston_desktop_surface *surface)
+ {
+diff --git a/libweston-desktop/xdg-shell.c b/libweston-desktop/xdg-shell.c
+index ff76c39..1e49147 100644
+--- a/libweston-desktop/xdg-shell.c
++++ b/libweston-desktop/xdg-shell.c
+@@ -94,6 +94,7 @@ struct weston_desktop_xdg_toplevel_state {
+       bool fullscreen;
+       bool resizing;
+       bool activated;
++      uint32_t tiled_orientation;
+ };
+ struct weston_desktop_xdg_toplevel_configure {
+@@ -624,6 +625,29 @@ weston_desktop_xdg_toplevel_send_configure(struct weston_desktop_xdg_toplevel *t
+               s = wl_array_add(&states, sizeof(uint32_t));
+               *s = XDG_TOPLEVEL_STATE_ACTIVATED;
+       }
++      if (toplevel->pending.state.tiled_orientation &
++          WESTON_TOP_LEVEL_TILED_ORIENTATION_LEFT) {
++              s = wl_array_add(&states, sizeof(uint32_t));
++              *s = XDG_TOPLEVEL_STATE_TILED_LEFT;
++      }
++
++      if (toplevel->pending.state.tiled_orientation &
++          WESTON_TOP_LEVEL_TILED_ORIENTATION_RIGHT) {
++              s = wl_array_add(&states, sizeof(uint32_t));
++              *s = XDG_TOPLEVEL_STATE_TILED_RIGHT;
++      }
++
++      if (toplevel->pending.state.tiled_orientation &
++          WESTON_TOP_LEVEL_TILED_ORIENTATION_TOP) {
++              s = wl_array_add(&states, sizeof(uint32_t));
++              *s = XDG_TOPLEVEL_STATE_TILED_TOP;
++      }
++
++      if (toplevel->pending.state.tiled_orientation &
++          WESTON_TOP_LEVEL_TILED_ORIENTATION_BOTTOM) {
++              s = wl_array_add(&states, sizeof(uint32_t));
++              *s = XDG_TOPLEVEL_STATE_TILED_BOTTOM;
++      }
+       xdg_toplevel_send_configure(toplevel->resource,
+                                   toplevel->pending.size.width,
+@@ -686,6 +710,16 @@ weston_desktop_xdg_toplevel_set_size(struct weston_desktop_surface *dsurface,
+       weston_desktop_xdg_surface_schedule_configure(&toplevel->base);
+ }
++static void
++weston_desktop_xdg_toplevel_set_orientation(struct weston_desktop_surface *surface, void *user_data,
++                                          enum weston_top_level_tiled_orientation tiled_orientation)
++{
++      struct weston_desktop_xdg_toplevel *toplevel = user_data;
++
++      toplevel->pending.state.tiled_orientation = tiled_orientation;
++      weston_desktop_xdg_surface_schedule_configure(&toplevel->base);
++}
++
+ static void
+ weston_desktop_xdg_toplevel_committed(struct weston_desktop_xdg_toplevel *toplevel,
+                                     int32_t sx, int32_t sy)
+@@ -1096,6 +1130,9 @@ weston_desktop_xdg_toplevel_state_compare(struct weston_desktop_xdg_toplevel *to
+               return false;
+       if (toplevel->pending.state.resizing != configured.state.resizing)
+               return false;
++      if (toplevel->pending.state.tiled_orientation !=
++          configured.state.tiled_orientation)
++              return false;
+       if (toplevel->pending.size.width == configured.size.width &&
+           toplevel->pending.size.height == configured.size.height)
+@@ -1440,6 +1477,7 @@ static const struct weston_desktop_surface_implementation weston_desktop_xdg_sur
+       .set_resizing = weston_desktop_xdg_toplevel_set_resizing,
+       .set_activated = weston_desktop_xdg_toplevel_set_activated,
+       .set_size = weston_desktop_xdg_toplevel_set_size,
++      .set_orientation = weston_desktop_xdg_toplevel_set_orientation,
+       .get_maximized = weston_desktop_xdg_toplevel_get_maximized,
+       .get_fullscreen = weston_desktop_xdg_toplevel_get_fullscreen,
+-- 
+2.35.1
+
index 434df2a..6cd2ce1 100644 (file)
@@ -6,5 +6,6 @@ PACKAGECONFIG[headless] = "-Dbackend-headless=true"
 PACKAGECONFIG:append = "${@bb.utils.contains('DISTRO_FEATURES', 'weston-remoting', ' remoting', '', d)}"
 PACKAGECONFIG:append = "${@bb.utils.contains('AGL_FEATURES', 'waltham-remoting', ' remoting', '', d)}"
 
+SRC_URI:append = "file://0001-libweston-desktop-xdg-shell-Add-tiled-orientation-st.patch"
 # seat management is only for waltham-transmitter-plugin
 SRC_URI:append = "${@bb.utils.contains('AGL_FEATURES', 'waltham-remoting', ' file://0001-libweston-Migrate-weston_seat_init-release-to-public.patch', '', d)}"