diff options
-rw-r--r-- | src/desktop.c | 14 | ||||
-rw-r--r-- | src/ivi-compositor.h | 4 | ||||
-rw-r--r-- | src/shell.c | 47 |
3 files changed, 60 insertions, 5 deletions
diff --git a/src/desktop.c b/src/desktop.c index 9c1dfae..ac68b78 100644 --- a/src/desktop.c +++ b/src/desktop.c @@ -169,11 +169,15 @@ 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); - 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); + /* 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); + } } /* * We delay creating "normal" desktop surfaces until later, to diff --git a/src/ivi-compositor.h b/src/ivi-compositor.h index b2342eb..cdea455 100644 --- a/src/ivi-compositor.h +++ b/src/ivi-compositor.h @@ -419,4 +419,8 @@ agl_shell_desktop_advertise_application_id(struct ivi_compositor *ivi, struct ivi_surface *surface); void ivi_destroy_waltham_destroy(struct ivi_surface *surface); + +bool +ivi_check_pending_surface(struct ivi_surface *surface); + #endif diff --git a/src/shell.c b/src/shell.c index 9e7693e..301110a 100644 --- a/src/shell.c +++ b/src/shell.c @@ -458,6 +458,53 @@ ivi_check_pending_desktop_surface_remote(struct ivi_surface *surface) return false; } +bool +ivi_check_pending_surface(struct ivi_surface *surface) +{ + struct ivi_compositor *ivi = surface->ivi; + struct wl_list *role_pending_list; + struct pending_popup *p_popup; + struct pending_split *p_split; + struct pending_fullscreen *p_fullscreen; + struct pending_remote *p_remote; + const char *app_id = + weston_desktop_surface_get_app_id(surface->dsurface); + + if (!app_id) + return false; + + role_pending_list = &ivi->popup_pending_apps; + wl_list_for_each(p_popup, role_pending_list, link) { + if (!strcmp(app_id, p_popup->app_id)) { + return true; + } + } + + role_pending_list = &ivi->split_pending_apps; + wl_list_for_each(p_split, role_pending_list, link) { + if (!strcmp(app_id, p_split->app_id)) { + return true; + } + } + + role_pending_list = &ivi->fullscreen_pending_apps; + wl_list_for_each(p_fullscreen, role_pending_list, link) { + if (!strcmp(app_id, p_fullscreen->app_id)) { + return true; + } + } + + role_pending_list = &ivi->remote_pending_apps; + wl_list_for_each(p_remote, role_pending_list, link) { + if (!strcmp(app_id, p_remote->app_id)) { + return true; + } + } + + /* else, we are a regular desktop surface */ + return false; +} + void ivi_check_pending_desktop_surface(struct ivi_surface *surface) |