X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;ds=inline;f=src%2Fdesktop.c;h=01e4539dbf4103ca9e5013a564e7b5ef572d41f2;hb=5274f6ea9da2f119fb67cf6b531e2db20139b5c8;hp=f3763dedeeb95bff94677e44ee0dd86c4ed97228;hpb=e4226be8727e4f8e19292b6d1d19a9ba2bcdd58d;p=src%2Fagl-compositor.git diff --git a/src/desktop.c b/src/desktop.c index f3763de..01e4539 100644 --- a/src/desktop.c +++ b/src/desktop.c @@ -33,18 +33,6 @@ #include "agl-shell-desktop-server-protocol.h" -#if 0 -static struct weston_output * -get_default_output(struct weston_compositor *compositor) -{ - if (wl_list_empty(&compositor->output_list)) - return NULL; - - return wl_container_of(compositor->output_list.next, - struct weston_output, link); -} -#endif - static void desktop_advertise_app(struct wl_listener *listener, void *data) { @@ -103,6 +91,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 +152,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 +186,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 @@ -442,8 +451,10 @@ 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_shell_finalize(ivi); ivi_compositor_destroy_pending_surfaces(ivi); + + weston_desktop_destroy(ivi->desktop); wl_list_remove(&listener->link); }