[PATCH weston v2 09/15] ivi-shell: added libweston-desktop-api implementation
Michael Teyfel
mteyfel at de.adit-jv.com
Mon Nov 6 13:52:43 UTC 2017
Signed-off-by: Michael Teyfel <mteyfel at de.adit-jv.com>
---
ivi-shell/ivi-shell.c | 156 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 156 insertions(+)
diff --git a/ivi-shell/ivi-shell.c b/ivi-shell/ivi-shell.c
index 84db2c97..e797e4f9 100644
--- a/ivi-shell/ivi-shell.c
+++ b/ivi-shell/ivi-shell.c
@@ -489,6 +489,162 @@ shell_add_bindings(struct weston_compositor *compositor,
shell);
}
+/*
+ * libweston-desktop
+ */
+
+static void
+desktop_surface_ping_timeout(struct weston_desktop_client *client,
+ void *user_data)
+{
+ weston_log("ivi-shell: desktop_surface_ping_timeout is not supported\n");
+}
+
+static void
+desktop_surface_pong(struct weston_desktop_client *client,
+ void *user_data)
+{
+ weston_log("ivi-shell: desktop_surface_pong is not supported\n");
+}
+
+static void
+desktop_surface_added(struct weston_desktop_surface *surface,
+ void *user_data)
+{
+ struct ivi_shell *shell = (struct ivi_shell *) user_data;
+ struct ivi_layout_surface *layout_surface;
+ struct ivi_shell_surface *ivisurf;
+ struct weston_surface *weston_surf =
+ weston_desktop_surface_get_surface(surface);
+
+ layout_surface = ivi_layout_desktop_surface_create(weston_surf,
+ IVI_INVALID_ID);
+ if (!layout_surface) {
+ return;
+ }
+
+ layout_surface->weston_desktop_surface = surface;
+
+ ivisurf = zalloc(sizeof *ivisurf);
+ if (!ivisurf) {
+ return;
+ }
+
+ ivisurf->shell = shell;
+ ivisurf->id_surface = IVI_INVALID_ID;
+
+ ivisurf->width = 0;
+ ivisurf->height = 0;
+ ivisurf->layout_surface = layout_surface;
+ ivisurf->surface = weston_surf;
+
+ weston_desktop_surface_set_user_data(surface, ivisurf);
+}
+
+static void
+desktop_surface_removed(struct weston_desktop_surface *surface,
+ void *user_data)
+{
+ struct ivi_shell_surface *ivisurf = (struct ivi_shell_surface *)
+ weston_desktop_surface_get_user_data(surface);
+
+ assert(ivisurf != NULL);
+
+ if (ivisurf->layout_surface)
+ layout_surface_cleanup(ivisurf);
+}
+
+static void
+desktop_surface_committed(struct weston_desktop_surface *surface,
+ int32_t sx, int32_t sy, void *user_data)
+{
+ struct ivi_shell_surface *ivisurf = (struct ivi_shell_surface *)
+ weston_desktop_surface_get_user_data(surface);
+ struct weston_surface *weston_surf =
+ weston_desktop_surface_get_surface(surface);
+
+ if(!ivisurf)
+ return;
+
+ if (weston_surf->width == 0 || weston_surf->height == 0)
+ return;
+
+ if (ivisurf->width != weston_surf->width ||
+ ivisurf->height != weston_surf->height) {
+ ivisurf->width = weston_surf->width;
+ ivisurf->height = weston_surf->height;
+
+ ivi_layout_desktop_surface_configure(ivisurf->layout_surface,
+ weston_surf->width,
+ weston_surf->height);
+ }
+}
+
+static void
+desktop_surface_move(struct weston_desktop_surface *surface,
+ struct weston_seat *seat, uint32_t serial, void *user_data)
+{
+ weston_log("ivi-shell: desktop_surface_move is not supported\n");
+}
+
+static void
+desktop_surface_resize(struct weston_desktop_surface *surface,
+ struct weston_seat *seat, uint32_t serial,
+ enum weston_desktop_surface_edge edges, void *user_data)
+{
+ weston_log("ivi-shell: desktop_surface_resize is not supported\n");
+}
+
+static void
+desktop_surface_fullscreen_requested(struct weston_desktop_surface *surface,
+ bool fullscreen,
+ struct weston_output *output,
+ void *user_data)
+{
+ weston_log("ivi-shell: desktop_surface_fullscreen_requested is not supported\n");
+}
+
+static void
+desktop_surface_maximized_requested(struct weston_desktop_surface *surface,
+ bool maximized, void *user_data)
+{
+ weston_log("ivi-shell: desktop_surface_maximized_requested is not supported\n");
+}
+
+static void
+desktop_surface_minimized_requested(struct weston_desktop_surface *surface,
+ void *user_data)
+{
+ weston_log("ivi-shell: desktop_surface_minimized_requested is not supported\n");
+}
+
+static void
+desktop_surface_set_xwayland_position(struct weston_desktop_surface *surface,
+ int32_t x, int32_t y, void *user_data)
+{
+ weston_log("ivi-shell: desktop_surface_set_xwayland_position is not supported\n");
+}
+
+static const struct weston_desktop_api shell_desktop_api = {
+ .struct_size = sizeof(struct weston_desktop_api),
+ .ping_timeout = desktop_surface_ping_timeout,
+ .pong = desktop_surface_pong,
+ .surface_added = desktop_surface_added,
+ .surface_removed = desktop_surface_removed,
+ .committed = desktop_surface_committed,
+
+ .move = desktop_surface_move,
+ .resize = desktop_surface_resize,
+ .fullscreen_requested = desktop_surface_fullscreen_requested,
+ .maximized_requested = desktop_surface_maximized_requested,
+ .minimized_requested = desktop_surface_minimized_requested,
+ .set_xwayland_position = desktop_surface_set_xwayland_position,
+};
+
+/*
+ * end of libweston-desktop
+ */
+
/*
* Initialization of ivi-shell.
*/
--
2.15.0
More information about the wayland-devel
mailing list