summaryrefslogtreecommitdiff
path: root/kiosk-shell
diff options
context:
space:
mode:
authorMarius Vlad <marius.vlad@collabora.com>2021-03-08 18:02:32 +0200
committerMarius Vlad <marius.vlad@collabora.com>2021-11-02 19:29:50 +0200
commitd98c7e86fb75bfa12ace99cfe25048f49851a90b (patch)
tree9a8396afcc75ee5a05703ab85257cb2fc35c2cf4 /kiosk-shell
parentd6ccc8b025c94bb379c86290a146b17e0879fed4 (diff)
downloadweston-d98c7e86fb75bfa12ace99cfe25048f49851a90b.tar.gz
shared/shell-utils: Create common helpers functions for shells
Group common functions found in both kiosk-shell and deskop-shell to a shared utils file. Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
Diffstat (limited to 'kiosk-shell')
-rw-r--r--kiosk-shell/kiosk-shell.c1
-rw-r--r--kiosk-shell/meson.build1
-rw-r--r--kiosk-shell/util.c98
-rw-r--r--kiosk-shell/util.h12
4 files changed, 2 insertions, 110 deletions
diff --git a/kiosk-shell/kiosk-shell.c b/kiosk-shell/kiosk-shell.c
index cfa0a95f..0648ed58 100644
--- a/kiosk-shell/kiosk-shell.c
+++ b/kiosk-shell/kiosk-shell.c
@@ -33,6 +33,7 @@
#include "kiosk-shell-grab.h"
#include "compositor/weston.h"
#include "shared/helpers.h"
+#include "shared/shell-utils.h"
#include "util.h"
#include <libweston/xwayland-api.h>
diff --git a/kiosk-shell/meson.build b/kiosk-shell/meson.build
index e838614e..f9468687 100644
--- a/kiosk-shell/meson.build
+++ b/kiosk-shell/meson.build
@@ -3,6 +3,7 @@ if get_option('shell-kiosk')
'kiosk-shell.c',
'kiosk-shell-grab.c',
'util.c',
+ '../shared/shell-utils.c',
weston_desktop_shell_server_protocol_h,
weston_desktop_shell_protocol_c,
input_method_unstable_v1_server_protocol_h,
diff --git a/kiosk-shell/util.c b/kiosk-shell/util.c
index ad3e0d9b..b411b504 100644
--- a/kiosk-shell/util.c
+++ b/kiosk-shell/util.c
@@ -25,108 +25,10 @@
/* Helper functions for kiosk-shell */
-/* TODO: These functions are useful to many shells, and, in fact,
- * much of content in this file was copied from desktop-shell. We should
- * create a shared shell utility collection to deduplicate this code. */
-
#include "util.h"
#include "shared/helpers.h"
#include <libweston/libweston.h>
-struct weston_output *
-get_default_output(struct weston_compositor *compositor)
-{
- if (wl_list_empty(&compositor->output_list))
- return NULL;
-
- return container_of(compositor->output_list.next,
- struct weston_output, link);
-}
-
-struct weston_output *
-get_focused_output(struct weston_compositor *compositor)
-{
- struct weston_seat *seat;
- struct weston_output *output = NULL;
-
- wl_list_for_each(seat, &compositor->seat_list, link) {
- struct weston_touch *touch = weston_seat_get_touch(seat);
- struct weston_pointer *pointer = weston_seat_get_pointer(seat);
- struct weston_keyboard *keyboard =
- weston_seat_get_keyboard(seat);
-
- /* Priority has touch focus, then pointer and
- * then keyboard focus. We should probably have
- * three for loops and check first for touch,
- * then for pointer, etc. but unless somebody has some
- * objections, I think this is sufficient. */
- if (touch && touch->focus)
- output = touch->focus->output;
- else if (pointer && pointer->focus)
- output = pointer->focus->output;
- else if (keyboard && keyboard->focus)
- output = keyboard->focus->output;
-
- if (output)
- break;
- }
-
- return output;
-}
-
-/* This is a copy of the same function from desktop-shell.
- * TODO: Fix this function to take into account nested subsurfaces. */
-static void
-surface_subsurfaces_boundingbox(struct weston_surface *surface, int32_t *x,
- int32_t *y, int32_t *w, int32_t *h) {
- pixman_region32_t region;
- pixman_box32_t *box;
- struct weston_subsurface *subsurface;
-
- pixman_region32_init_rect(&region, 0, 0,
- surface->width,
- surface->height);
-
- wl_list_for_each(subsurface, &surface->subsurface_list, parent_link) {
- pixman_region32_union_rect(&region, &region,
- subsurface->position.x,
- subsurface->position.y,
- subsurface->surface->width,
- subsurface->surface->height);
- }
-
- box = pixman_region32_extents(&region);
- if (x)
- *x = box->x1;
- if (y)
- *y = box->y1;
- if (w)
- *w = box->x2 - box->x1;
- if (h)
- *h = box->y2 - box->y1;
-
- pixman_region32_fini(&region);
-}
-
-void
-center_on_output(struct weston_view *view, struct weston_output *output)
-{
- int32_t surf_x, surf_y, width, height;
- float x, y;
-
- if (!output) {
- weston_view_set_position(view, 0, 0);
- return;
- }
-
- surface_subsurfaces_boundingbox(view->surface, &surf_x, &surf_y, &width, &height);
-
- x = output->x + (output->width - width) / 2 - surf_x / 2;
- y = output->y + (output->height - height) / 2 - surf_y / 2;
-
- weston_view_set_position(view, x, y);
-}
-
static void
colored_surface_committed(struct weston_surface *es, int32_t sx, int32_t sy)
{
diff --git a/kiosk-shell/util.h b/kiosk-shell/util.h
index e60aa3b5..a6647be6 100644
--- a/kiosk-shell/util.h
+++ b/kiosk-shell/util.h
@@ -28,19 +28,7 @@
#include <stdint.h>
struct weston_compositor;
-struct weston_layer;
-struct weston_output;
struct weston_surface;
-struct weston_view;
-
-struct weston_output *
-get_default_output(struct weston_compositor *compositor);
-
-struct weston_output *
-get_focused_output(struct weston_compositor *compositor);
-
-void
-center_on_output(struct weston_view *view, struct weston_output *output);
struct weston_view *
create_colored_surface(struct weston_compositor *compositor,