weston/0001-simple-touch-Add-maximized-fullscreen: Add maximized/fullscreen for simpl... 14/28314/4
authorMarius Vlad <marius.vlad@collabora.com>
Tue, 27 Dec 2022 16:38:02 +0000 (18:38 +0200)
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>
Fri, 20 Jan 2023 12:05:03 +0000 (12:05 +0000)
simple-touch wasn't able to resize itself to max/fullscreen to this
patch adds support for that. It is quite useful to have this client
test out touch support, so we can re-use it whenever, for instance in
the virtio aarch64 machine to test if we have indeed or not a
touchscreen device.

Upstream-Status: Submitted
See: https://gitlab.freedesktop.org/wayland/weston/-/merge_requests/1095

Bug-AGL: SPEC-4656
Change-Id: I974b4c5ea8a85f1b3efe4a114f345de948441300
Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
Reviewed-on: https://gerrit.automotivelinux.org/gerrit/c/AGL/meta-agl/+/28314
Tested-by: Jenkins Job builder account
Reviewed-by: Jan-Simon Moeller <jsmoeller@linuxfoundation.org>
meta-agl-core/recipes-graphics/wayland/weston/0001-simple-touch-Add-maximized-fullscreen-states.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-simple-touch-Add-maximized-fullscreen-states.patch b/meta-agl-core/recipes-graphics/wayland/weston/0001-simple-touch-Add-maximized-fullscreen-states.patch
new file mode 100644 (file)
index 0000000..5634e81
--- /dev/null
@@ -0,0 +1,136 @@
+From 666300564093838c7d6a723fbce7e3b1a719e873 Mon Sep 17 00:00:00 2001
+From: Marius Vlad <marius.vlad@collabora.com>
+Date: Thu, 22 Dec 2022 18:27:14 +0200
+Subject: [PATCH 1/3] simple-touch: Add maximized/fullscreen states
+
+Helpful to have other states like maximized or fullscreen for
+the simple-touch client.
+
+Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
+---
+ clients/simple-touch.c | 55 ++++++++++++++++++++++++++++++++++++------
+ 1 file changed, 48 insertions(+), 7 deletions(-)
+
+diff --git a/clients/simple-touch.c b/clients/simple-touch.c
+index 6559aa24d..e32013161 100644
+--- a/clients/simple-touch.c
++++ b/clients/simple-touch.c
+@@ -64,9 +64,13 @@ struct touch {
+       struct xdg_toplevel *xdg_toplevel;
+       struct buffer *buffer;
+       int width, height;
++      int init_width, init_height;
+       bool running;
+       bool wait_for_configure;
++      bool needs_buffer_update;
+       bool has_argb;
++      bool maximized;
++      bool fullscreen;
+ };
+ static struct buffer *
+@@ -111,7 +115,7 @@ create_shm_buffer(struct touch *touch)
+ }
+ static void
+-initial_redraw(void *data)
++redraw(void *data)
+ {
+       struct touch *touch = data;
+       struct buffer *buffer = NULL;
+@@ -119,6 +123,9 @@ initial_redraw(void *data)
+       buffer = create_shm_buffer(touch);
+       assert(buffer);
++      if (touch->buffer)
++              free(touch->buffer);
++
+       touch->buffer = buffer;
+       /* paint the "work-area" */
+@@ -283,9 +290,10 @@ handle_xdg_surface_configure(void *data, struct xdg_surface *surface,
+       xdg_surface_ack_configure(surface, serial);
+-      if (touch->wait_for_configure) {
+-              initial_redraw(touch);
++      if (touch->wait_for_configure || touch->needs_buffer_update) {
++              redraw(touch);
+               touch->wait_for_configure = false;
++              touch->needs_buffer_update = false;
+       }
+ }
+@@ -340,9 +348,40 @@ static const struct wl_registry_listener registry_listener = {
+ static void
+ handle_toplevel_configure(void *data, struct xdg_toplevel *xdg_toplevel,
+-                            int32_t width, int32_t height,
+-                            struct wl_array *state)
++                        int32_t width, int32_t height, struct wl_array *states)
+ {
++      struct touch *touch = data;
++      uint32_t *p;
++
++      touch->fullscreen = false;
++      touch->maximized = false;
++
++      wl_array_for_each(p, states) {
++              uint32_t state = *p;
++              switch (state) {
++              case XDG_TOPLEVEL_STATE_FULLSCREEN:
++                      touch->fullscreen = true;
++                      break;
++              case XDG_TOPLEVEL_STATE_MAXIMIZED:
++                      touch->maximized = true;
++                      break;
++              }
++      }
++
++      if (width > 0 && height > 0) {
++              if (!touch->fullscreen && !touch->maximized) {
++                      touch->init_width = width;
++                      touch->init_width = height;
++              }
++              touch->width = width;
++              touch->height = height;
++      } else if (!touch->fullscreen && !touch->maximized) {
++              touch->width = touch->init_width;
++              touch->height = touch->init_height;
++
++      }
++
++      touch->needs_buffer_update = true;
+ }
+ static void
+@@ -371,6 +410,7 @@ touch_create(int width, int height)
+       assert(touch->display);
+       touch->has_argb = false;
++      touch->buffer = NULL;
+       touch->registry = wl_display_get_registry(touch->display);
+       wl_registry_add_listener(touch->registry, &registry_listener, touch);
+       wl_display_dispatch(touch->display);
+@@ -386,8 +426,8 @@ touch_create(int width, int height)
+               exit(1);
+       }
+-      touch->width = width;
+-      touch->height = height;
++      touch->init_width = width;
++      touch->init_height = height;
+       touch->surface = wl_compositor_create_surface(touch->compositor);
+       touch->xdg_surface =
+@@ -403,6 +443,7 @@ touch_create(int width, int height)
+       xdg_toplevel_set_title(touch->xdg_toplevel, "simple-touch");
+       xdg_toplevel_set_app_id(touch->xdg_toplevel, "simple-touch");
+       touch->wait_for_configure = true;
++      touch->needs_buffer_update = false;
+       wl_surface_commit(touch->surface);
+       touch->running = true;
+-- 
+2.35.1
+
index 0e09ca5..a776007 100644 (file)
@@ -7,7 +7,8 @@ PACKAGECONFIG:append = "${@bb.utils.contains('DISTRO_FEATURES', 'weston-remoting
 PACKAGECONFIG:append = "${@bb.utils.contains('AGL_FEATURES', 'waltham-remoting', ' remoting', '', d)}"
 
 SRC_URI:append = "file://0001-libweston-Send-name-description-update-wl_output-to-.patch \
-                 file://0001-libweston-desktop-xdg-shell-Add-tiled-orientation-st.patch"
+                 file://0001-libweston-desktop-xdg-shell-Add-tiled-orientation-st.patch \
+                 file://0001-simple-touch-Add-maximized-fullscreen-states.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)}"