ivi-shell: added libweston-desktop-api implementation

Signed-off-by: Michael Teyfel <mteyfel@de.adit-jv.com>
This commit is contained in:
Michael Teyfel 2019-02-05 15:25:56 +01:00 committed by Daniel Stone
parent c04188e546
commit 62d6d56a83
1 changed files with 155 additions and 0 deletions

View File

@ -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.
*/