diff --git a/ivi-shell/ivi-shell.c b/ivi-shell/ivi-shell.c index 30190d4e..902fb923 100644 --- a/ivi-shell/ivi-shell.c +++ b/ivi-shell/ivi-shell.c @@ -454,6 +454,161 @@ shell_add_bindings(struct weston_compositor *compositor, shell); } +/* + * libweston-desktop + */ + +static void +desktop_surface_ping_timeout(struct weston_desktop_client *client, + void *user_data) +{ + /* Not supported */ +} + +static void +desktop_surface_pong(struct weston_desktop_client *client, + void *user_data) +{ + /* Not supported */ +} + +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); + 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) +{ + /* Not supported */ +} + +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) +{ + /* Not supported */ +} + +static void +desktop_surface_fullscreen_requested(struct weston_desktop_surface *surface, + bool fullscreen, + struct weston_output *output, + void *user_data) +{ + /* Not supported */ +} + +static void +desktop_surface_maximized_requested(struct weston_desktop_surface *surface, + bool maximized, void *user_data) +{ + /* Not supported */ +} + +static void +desktop_surface_minimized_requested(struct weston_desktop_surface *surface, + void *user_data) +{ + /* Not supported */ +} + +static void +desktop_surface_set_xwayland_position(struct weston_desktop_surface *surface, + int32_t x, int32_t y, void *user_data) +{ + /* Not supported */ +} + +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. */