From fcd71e034d378921e0408a69dedcd8d0f4836401 Mon Sep 17 00:00:00 2001 From: Marius Vlad Date: Thu, 26 Mar 2020 23:24:48 +0200 Subject: [PATCH] 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 Change-Id: I450dc58d2fa0202f42b7ab58216db98a1bbbf178 --- src/desktop.c | 1 + src/ivi-compositor.h | 1 + src/layout.c | 9 ++++++++- 3 files changed, 10 insertions(+), 1 deletion(-) 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; -- 2.16.6