[PATCH weston 8/14] ivi-shell: added libweston-desktop-api implementation

Michael Teyfel mteyfel at de.adit-jv.com
Tue Oct 17 09:59:06 UTC 2017


Signed-off-by: Michael Teyfel <mteyfel at de.adit-jv.com>
---
 ivi-shell/ivi-shell.c | 172 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 172 insertions(+)

diff --git a/ivi-shell/ivi-shell.c b/ivi-shell/ivi-shell.c
index 84db2c9..049aa43 100644
--- a/ivi-shell/ivi-shell.c
+++ b/ivi-shell/ivi-shell.c
@@ -490,6 +490,178 @@ shell_add_bindings(struct weston_compositor *compositor,
 }
 
 /*
+ * 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;
+	}
+
+	wl_list_init(&ivisurf->link);
+	wl_list_insert(&shell->ivi_surface_list, &ivisurf->link);
+
+	ivisurf->shell = shell;
+	ivisurf->id_surface = IVI_INVALID_ID;
+
+	ivisurf->width = 0;
+	ivisurf->height = 0;
+	ivisurf->layout_surface = layout_surface;
+	ivisurf->surface = weston_surf;
+}
+
+static void
+desktop_surface_removed(struct weston_desktop_surface *surface,
+			void *user_data)
+{
+	struct ivi_shell *shell = (struct ivi_shell *) user_data;
+	struct ivi_shell_surface *ivisurf = NULL;
+
+	wl_list_for_each(ivisurf, &shell->ivi_surface_list, link) {
+		if(ivisurf->layout_surface->weston_desktop_surface == surface)
+		{
+			assert(ivisurf != NULL);
+
+			if (ivisurf->layout_surface)
+				layout_surface_cleanup(ivisurf);
+
+			break;
+		}
+	}
+}
+
+static void
+desktop_surface_committed(struct weston_desktop_surface *surface,
+			  int32_t sx, int32_t sy, void *user_data)
+{
+	struct ivi_shell_surface *ivisurf = NULL;
+	struct ivi_shell *shell = user_data;
+	struct weston_surface *weston_surf =
+			weston_desktop_surface_get_surface(surface);
+	int found = 0;
+
+	wl_list_for_each(ivisurf, &shell->ivi_surface_list, link) {
+		if (ivisurf->surface == weston_surf) {
+			found = 1;
+			break;
+		}
+	}
+
+	if(!found)
+		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.
  */
 WL_EXPORT int
-- 
2.7.4



More information about the wayland-devel mailing list