src: Mark surfaces with the 'remote' role if configuration file says so 72/24672/1
authorMarius Vlad <marius.vlad@collabora.com>
Fri, 5 Jun 2020 14:16:30 +0000 (17:16 +0300)
committerMarius Vlad <marius.vlad@collabora.com>
Mon, 8 Jun 2020 20:23:51 +0000 (23:23 +0300)
As we don't have an explicit way to do it, like we have with the
agl-shell-desktop protocol, we try to determine if the surface was being
assigned to a remote output and use that when the surface is created.

Bug-AGL: SPEC-3280

Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
Change-Id: I97f628a5613bd36e96b7daeb48d6cd5311ab7b0f

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

index 3dc1ceb..4c0a668 100644 (file)
@@ -61,6 +61,7 @@ desktop_surface_added(struct weston_desktop_surface *dsurface, void *userdata)
        struct weston_desktop_client *dclient;
        struct wl_client *client;
        struct ivi_surface *surface;
+       struct ivi_output *remote_output = NULL;
        const char *app_id = NULL;
 
        dclient = weston_desktop_surface_get_client(dsurface);
@@ -95,6 +96,9 @@ desktop_surface_added(struct weston_desktop_surface *dsurface, void *userdata)
 
        app_id = weston_desktop_surface_get_app_id(dsurface);
 
+       if ((remote_output = ivi_layout_find_app_id(app_id, ivi)))
+               ivi_set_pending_desktop_surface_remote(remote_output, app_id);
+
        if (ivi->shell_client.ready) {
                ivi_check_pending_desktop_surface(surface);
                weston_log("Added surface %p, app_id %s, role %s\n", surface,
index 3b25915..a2f2745 100644 (file)
@@ -358,4 +358,11 @@ remove_black_surface(struct ivi_output *output);
 const char *
 ivi_layout_get_surface_role_name(struct ivi_surface *surf);
 
+void
+ivi_set_pending_desktop_surface_remote(struct ivi_output *ioutput,
+               const char *app_id);
+
+struct ivi_output *
+ivi_layout_find_app_id(const char *app_id, struct ivi_compositor *ivi);
+
 #endif
index 5a48e96..b749b76 100644 (file)
@@ -236,7 +236,7 @@ ivi_layout_activate_complete(struct ivi_output *output,
                        ivi_layout_get_surface_role_name(surf), output->name);
 }
 
-static struct ivi_output *
+struct ivi_output *
 ivi_layout_find_app_id(const char *app_id, struct ivi_compositor *ivi)
 {
        struct ivi_output *out;
index e0a9d79..99512d5 100644 (file)
@@ -102,6 +102,9 @@ ivi_output_configure_app_id(struct ivi_output *ivi_output)
                                                 &ivi_output->app_id,
                                                 NULL);
 
+               if (ivi_output->app_id == NULL)
+                       return;
+
                weston_log("Will place app_id %s on output %s\n",
                                ivi_output->app_id, ivi_output->name);
        }
index 3f522ba..ac41e1f 100644 (file)
@@ -186,7 +186,7 @@ ivi_set_pending_desktop_surface_split(struct ivi_output *ioutput,
        wl_list_insert(&ivi->split_pending_apps, &split->link);
 }
 
-static void
+void
 ivi_set_pending_desktop_surface_remote(struct ivi_output *ioutput,
                const char *app_id)
 {