X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Fdesktop.c;h=255b182f3bbb20dbf3fff19fbad2268069a3a6c5;hb=13ac8bab43fffd00;hp=ac68b784c15b1bf011b8241a71a572574cb90f28;hpb=52df92d73985dba862a157c5ca3003cbe465e295;p=src%2Fagl-compositor.git diff --git a/src/desktop.c b/src/desktop.c index ac68b78..255b182 100644 --- a/src/desktop.c +++ b/src/desktop.c @@ -103,6 +103,36 @@ get_focused_output(struct weston_compositor *compositor) return output; } +static void +desktop_surface_added_configure(struct ivi_surface *surface, + struct ivi_output *ivi_output) +{ + enum ivi_surface_role role = IVI_SURFACE_ROLE_NONE; + struct weston_desktop_surface *dsurface = surface->dsurface; + + ivi_check_pending_surface_desktop(surface, &role); + if ((role != IVI_SURFACE_ROLE_DESKTOP && + role != IVI_SURFACE_ROLE_FULLSCREEN) || + role == IVI_SURFACE_ROLE_NONE) + return; + + if (role == IVI_SURFACE_ROLE_FULLSCREEN) { + struct ivi_output *bg_output = + ivi_layout_find_bg_output(surface->ivi); + assert(bg_output); + weston_desktop_surface_set_fullscreen(dsurface, true); + weston_desktop_surface_set_size(dsurface, + bg_output->output->width, + bg_output->output->height); + return; + } + + weston_desktop_surface_set_maximized(dsurface, true); + weston_desktop_surface_set_size(dsurface, + ivi_output->area.width, + ivi_output->area.height); +} + static void desktop_surface_added(struct weston_desktop_surface *dsurface, void *userdata) @@ -134,7 +164,7 @@ desktop_surface_added(struct weston_desktop_surface *dsurface, void *userdata) surface->ivi = ivi; surface->dsurface = dsurface; surface->role = IVI_SURFACE_ROLE_NONE; - surface->activated_by_default = false; + surface->mapped = false; surface->advertised_on_launch = false; surface->checked_pending = false; wl_list_init(&surface->link); @@ -168,16 +198,7 @@ desktop_surface_added(struct weston_desktop_surface *dsurface, void *userdata) if (output && ivi->shell_client.ready) { struct ivi_output *ivi_output = to_ivi_output(output); - - /* verify if by any chance this surfaces hasn't been assigned a - * different role before sending the maximized state */ - if (!ivi_check_pending_surface(surface)) { - weston_log("Setting surface to initial size of surface to %dx%d\n", - ivi_output->area.width, ivi_output->area.height); - weston_desktop_surface_set_maximized(dsurface, true); - weston_desktop_surface_set_size(dsurface, - ivi_output->area.width, ivi_output->area.height); - } + desktop_surface_added_configure(surface, ivi_output); } /* * We delay creating "normal" desktop surfaces until later, to @@ -436,6 +457,17 @@ static const struct weston_desktop_api desktop_api = { .set_xwayland_position = desktop_set_xwayland_position, }; +static void +ivi_shell_destroy(struct wl_listener *listener, void *data) +{ + struct ivi_compositor *ivi = container_of(listener, + struct ivi_compositor, destroy_listener); + + weston_desktop_destroy(ivi->desktop); + ivi_compositor_destroy_pending_surfaces(ivi); + wl_list_remove(&listener->link); +} + int ivi_desktop_init(struct ivi_compositor *ivi) { @@ -445,5 +477,10 @@ ivi_desktop_init(struct ivi_compositor *ivi) return -1; } + if (!weston_compositor_add_destroy_listener_once(ivi->compositor, + &ivi->destroy_listener, ivi_shell_destroy)) { + return -1; + } + return 0; }