diff options
author | Marius Vlad <marius.vlad@collabora.com> | 2020-03-26 23:24:48 +0200 |
---|---|---|
committer | Marius Vlad <marius.vlad@collabora.com> | 2020-04-14 13:00:56 +0300 |
commit | fcd71e034d378921e0408a69dedcd8d0f4836401 (patch) | |
tree | bd2cde9b4781ceac61624c503074c08332fa8088 | |
parent | 1ee1bff64338dede1f72981a6f3787718ce47335 (diff) |
layout: Mark activated surface by default
Necessary to avoid client surfaces that continuously update their
contents (i.e., a video) to effectively nullify a valid activate_app
request, causing a short flip for the new client surfaces, but resume
back once the first surface updated its contents.
Bug-AGL: SPEC-3297
Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
Change-Id: I450dc58d2fa0202f42b7ab58216db98a1bbbf178
-rw-r--r-- | src/desktop.c | 1 | ||||
-rw-r--r-- | src/ivi-compositor.h | 1 | ||||
-rw-r--r-- | src/layout.c | 9 |
3 files changed, 10 insertions, 1 deletions
diff --git a/src/desktop.c b/src/desktop.c index da28fc6..3e36415 100644 --- a/src/desktop.c +++ b/src/desktop.c @@ -80,6 +80,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; if (ivi->policy && ivi->policy->api.surface_create && !ivi->policy->api.surface_create(surface, ivi)) { diff --git a/src/ivi-compositor.h b/src/ivi-compositor.h index 4da12bc..dab9fa6 100644 --- a/src/ivi-compositor.h +++ b/src/ivi-compositor.h @@ -170,6 +170,7 @@ struct ivi_surface { int32_t x, y; int32_t width, height; } pending; + bool activated_by_default; enum ivi_surface_role role; union { diff --git a/src/layout.c b/src/layout.c index 94327c4..9537034 100644 --- a/src/layout.c +++ b/src/layout.c @@ -251,7 +251,12 @@ ivi_layout_desktop_committed(struct ivi_surface *surf) if (!surf->ivi->quirks.activate_apps_by_default) return; + skip_config_check: + /* we can only activate it again by using the protocol */ + if (surf->activated_by_default) + return; + ivi_bg_output = ivi_layout_find_bg_output(surf->ivi); /* use the output of the bg to activate the app on start-up by @@ -259,8 +264,10 @@ skip_config_check: if (surf->view && ivi_bg_output) { const char *app_id = weston_desktop_surface_get_app_id(dsurf); - if (app_id && ivi_bg_output) + if (app_id && ivi_bg_output) { ivi_layout_activate(ivi_bg_output, app_id); + surf->activated_by_default = true; + } } return; |