diff options
author | Marius Vlad <marius.vlad@collabora.com> | 2021-03-08 18:02:32 +0200 |
---|---|---|
committer | Marius Vlad <marius.vlad@collabora.com> | 2021-11-02 19:29:50 +0200 |
commit | d98c7e86fb75bfa12ace99cfe25048f49851a90b (patch) | |
tree | 9a8396afcc75ee5a05703ab85257cb2fc35c2cf4 /kiosk-shell | |
parent | d6ccc8b025c94bb379c86290a146b17e0879fed4 (diff) | |
download | weston-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.c | 1 | ||||
-rw-r--r-- | kiosk-shell/meson.build | 1 | ||||
-rw-r--r-- | kiosk-shell/util.c | 98 | ||||
-rw-r--r-- | kiosk-shell/util.h | 12 |
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(®ion, 0, 0, - surface->width, - surface->height); - - wl_list_for_each(subsurface, &surface->subsurface_list, parent_link) { - pixman_region32_union_rect(®ion, ®ion, - subsurface->position.x, - subsurface->position.y, - subsurface->surface->width, - subsurface->surface->height); - } - - box = pixman_region32_extents(®ion); - 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(®ion); -} - -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, |