Signed-off-by: Michael Teyfel <mtey...@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 173bc91..5c011d9 100644
--- a/ivi-shell/ivi-shell.c
+++ b/ivi-shell/ivi-shell.c
@@ -463,6 +463,162 @@ 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;
+       }
+
+       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.
  */
 WL_EXPORT int
-- 
2.7.4

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to