layout: Mark activated surface by default 82/24282/2
authorMarius Vlad <marius.vlad@collabora.com>
Thu, 26 Mar 2020 21:24:48 +0000 (23:24 +0200)
committerMarius Vlad <marius.vlad@collabora.com>
Tue, 14 Apr 2020 10:00:56 +0000 (13:00 +0300)
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

src/desktop.c
src/ivi-compositor.h
src/layout.c

index da28fc6..3e36415 100644 (file)
@@ -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)) {
index 4da12bc..dab9fa6 100644 (file)
@@ -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 {
index 94327c4..9537034 100644 (file)
@@ -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;