summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarius Vlad <marius.vlad@collabora.com>2022-05-31 14:44:49 +0300
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>2022-06-10 21:20:46 +0000
commit394b5da767661260043080dc025d0a71998851f8 (patch)
tree516996900f9c0cfc78fc9eb0fb175e0cb467d838
parentcac00851d454fcfe6b4e9f3353cfa4007f31c21e (diff)
shell: Extract some common functions
For instance this exports retreiving a ivi_seat from weston_seat, and they are useful in other parts as well. Bug-AGL: SPEC-4413 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: I838823570792761dfb5ac4beea635e843dd5cd22
-rw-r--r--src/input.c24
-rw-r--r--src/ivi-compositor.h9
-rw-r--r--src/shell.c12
3 files changed, 30 insertions, 15 deletions
diff --git a/src/input.c b/src/input.c
index b6b104a..1a143ce 100644
--- a/src/input.c
+++ b/src/input.c
@@ -32,7 +32,7 @@
#include "ivi-compositor.h"
#include "shared/helpers.h"
-static struct ivi_surface *
+struct ivi_surface *
get_ivi_shell_surface(struct weston_surface *surface)
{
struct weston_desktop_surface *desktop_surface =
@@ -59,19 +59,37 @@ ivi_shell_seat_handle_destroy(struct wl_listener *listener, void *data)
free(shseat);
}
-static struct ivi_shell_seat *
+struct ivi_shell_seat *
get_ivi_shell_seat(struct weston_seat *seat)
{
struct wl_listener *listener;
+ if (!seat)
+ return NULL;
+
+
listener = wl_signal_get(&seat->destroy_signal,
ivi_shell_seat_handle_destroy);
- assert(listener != NULL);
+ if (!listener)
+ return NULL;
return container_of(listener,
struct ivi_shell_seat, seat_destroy_listener);
}
+struct weston_seat *
+get_ivi_shell_weston_first_seat(struct ivi_compositor *ivi)
+{
+ struct wl_list *node;
+ struct weston_compositor *compositor = ivi->compositor;
+
+ if (wl_list_empty(&compositor->seat_list))
+ return NULL;
+
+ node = compositor->seat_list.next;
+ return container_of(node, struct weston_seat, link);
+}
+
static void
ivi_shell_seat_handle_pointer_focus(struct wl_listener *listener, void *data)
{
diff --git a/src/ivi-compositor.h b/src/ivi-compositor.h
index fdf2bcb..6dbab99 100644
--- a/src/ivi-compositor.h
+++ b/src/ivi-compositor.h
@@ -453,4 +453,13 @@ ivi_compositor_destroy_pending_surfaces(struct ivi_compositor *ivi);
void
ivi_shell_finalize(struct ivi_compositor *ivi);
+struct ivi_surface *
+get_ivi_shell_surface(struct weston_surface *surface);
+
+struct ivi_shell_seat *
+get_ivi_shell_seat(struct weston_seat *seat);
+
+struct weston_seat *
+get_ivi_shell_weston_first_seat(struct ivi_compositor *ivi);
+
#endif
diff --git a/src/shell.c b/src/shell.c
index c6cae10..09a9cb2 100644
--- a/src/shell.c
+++ b/src/shell.c
@@ -49,18 +49,6 @@
static void
create_black_surface_view(struct ivi_output *output);
-static struct ivi_surface *
-get_ivi_shell_surface(struct weston_surface *wsurface)
-{
- if (weston_surface_is_desktop_surface(wsurface)) {
- struct weston_desktop_surface *dsurface =
- weston_surface_get_desktop_surface(wsurface);
- return weston_desktop_surface_get_user_data(dsurface);
- }
-
- return NULL;
-}
-
void
agl_shell_desktop_advertise_application_id(struct ivi_compositor *ivi,
struct ivi_surface *surface)