[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