summaryrefslogtreecommitdiffstats
path: root/meta-agl-core/recipes-graphics/wayland/weston
diff options
context:
space:
mode:
Diffstat (limited to 'meta-agl-core/recipes-graphics/wayland/weston')
-rw-r--r--meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-desktop-xdg-shell-Add-tiled-orientation-st.patch169
1 files changed, 169 insertions, 0 deletions
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
index 000000000..e0b8a3ba3
--- /dev/null
+++ b/meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-desktop-xdg-shell-Add-tiled-orientation-st.patch
@@ -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
+