From ed74c2179101fd256611c1354a06363532b498f8 Mon Sep 17 00:00:00 2001 From: Marius Vlad Date: Tue, 16 Aug 2022 13:50:41 +0300 Subject: recipes-graphics/wayland/weston: Add tile orientation states 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 Change-Id: I7bc5caa6126d36d843d0f00cde56c020fa3f97dc Reviewed-on: https://gerrit.automotivelinux.org/gerrit/c/AGL/meta-agl/+/27906 Reviewed-by: Jan-Simon Moeller Tested-by: Jan-Simon Moeller --- ...esktop-xdg-shell-Add-tiled-orientation-st.patch | 169 +++++++++++++++++++++ .../wayland/weston_10.0_aglcore.inc | 1 + 2 files changed, 170 insertions(+) create mode 100644 meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-desktop-xdg-shell-Add-tiled-orientation-st.patch 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 +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 +(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 + diff --git a/meta-agl-core/recipes-graphics/wayland/weston_10.0_aglcore.inc b/meta-agl-core/recipes-graphics/wayland/weston_10.0_aglcore.inc index 434df2ab9..6cd2ce17a 100644 --- a/meta-agl-core/recipes-graphics/wayland/weston_10.0_aglcore.inc +++ b/meta-agl-core/recipes-graphics/wayland/weston_10.0_aglcore.inc @@ -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)}" -- cgit 1.2.3-korg