shell: Avoid advertising applications without app_id set 56/25356/3
authorWalter Lozano <walter.lozano@collabora.com>
Thu, 8 Oct 2020 17:07:55 +0000 (14:07 -0300)
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>
Thu, 15 Oct 2020 09:33:47 +0000 (09:33 +0000)
When using GTK-3 to create apps, the framework issues set_parent_id
which forces a surface to be added even before the app_id is set.
This causes the compositor to try to advertise an invalid app_id.

This patch avoids advertising an app which has no app_id set.

Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
Change-Id: Iadcea106e6464b41171a2aa92aa0eed3a8e2ff2d

src/shell.c

index c884f16..94fdb66 100644 (file)
@@ -55,6 +55,10 @@ agl_shell_desktop_advertise_application_id(struct ivi_compositor *ivi,
        wl_list_for_each(dclient, &ivi->desktop_clients, link) {
                const char *app_id =
                        weston_desktop_surface_get_app_id(surface->dsurface);
+               if (app_id == NULL) {
+                       weston_log("WARNING app_is is null, unable to advertise\n");
+                       return;
+               }
                agl_shell_desktop_send_application(dclient->resource, app_id);
        }
 }
@@ -442,6 +446,10 @@ ivi_shell_advertise_xdg_surfaces(struct ivi_compositor *ivi, struct wl_resource
        wl_list_for_each(surface, &ivi->surfaces, link) {
                const char *app_id =
                        weston_desktop_surface_get_app_id(surface->dsurface);
+               if (app_id == NULL) {
+                       weston_log("WARNING app_is is null, unable to advertise\n");
+                       return;
+               }
                agl_shell_desktop_send_application(resource, app_id);
        }
 }
@@ -807,6 +815,9 @@ shell_advertise_app_state(struct ivi_compositor *ivi, const char *app_id,
        if (!surf)
                return;
 
+       if (!app_id)
+               return;
+
        if (policy && policy->api.surface_advertise_state_change &&
            !policy->api.surface_advertise_state_change(surf, surf->ivi)) {
                return;