layout: Do not attempt to activate surfaces that doesn't have a valid app_id
[src/agl-compositor.git] / src / shell.c
index 87d8ce9..5a8cc42 100644 (file)
@@ -54,6 +54,7 @@ agl_shell_desktop_advertise_application_id(struct ivi_compositor *ivi,
                                           struct ivi_surface *surface)
 {
        struct desktop_client *dclient;
+       static bool display_adv = false;
 
        if (surface->advertised_on_launch)
                return;
@@ -63,7 +64,10 @@ agl_shell_desktop_advertise_application_id(struct ivi_compositor *ivi,
                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");
+                       if (!display_adv) {
+                               weston_log("WARNING app_is is null, unable to advertise\n");
+                               display_adv = true;
+                       }
                        return;
                }
                agl_shell_desktop_send_application(dclient->resource, app_id);
@@ -107,6 +111,21 @@ ivi_set_desktop_surface_fullscreen(struct ivi_surface *surface)
        agl_shell_desktop_advertise_application_id(ivi, surface);
 }
 
+#ifdef HAVE_WALTHAM
+void
+ivi_destroy_waltham_destroy(struct ivi_surface *surface)
+{
+       struct ivi_compositor *ivi = surface->ivi;
+       const struct weston_transmitter_api *api =
+               ivi->waltham_transmitter_api;
+
+       if (!api)
+               return;
+
+       if (surface->waltham_surface.transmitter_surface)
+               api->surface_destroy(surface->waltham_surface.transmitter_surface);
+}
+
 static void
 ivi_output_notify_waltham_plugin(struct ivi_surface *surface)
 {
@@ -159,8 +178,20 @@ ivi_output_notify_waltham_plugin(struct ivi_surface *surface)
         * wthp_ivi_app_id_surface_create() and is responsible for setting-up
         * the gstreamer pipeline as well.
         */
-       api->surface_push_to_remote(weston_surface, app_id, trans_remote, NULL);
+       surface->waltham_surface.transmitter_surface =
+           api->surface_push_to_remote(weston_surface, app_id, trans_remote, NULL);
+}
+
+#else
+void
+ivi_destroy_waltham_destroy(struct ivi_surface *surface)
+{
 }
+static void
+ivi_output_notify_waltham_plugin(struct ivi_surface *surface)
+{
+}
+#endif
 
 static void
 ivi_set_desktop_surface_remote(struct ivi_surface *surface)
@@ -731,7 +762,9 @@ shell_ready(struct wl_client *client, struct wl_resource *shell_res)
 
        wl_list_for_each_safe(surface, tmp, &ivi->pending_surfaces, link) {
                wl_list_remove(&surface->link);
+               wl_list_init(&surface->link);
                ivi_check_pending_desktop_surface(surface);
+               surface->checked_pending = true;
        }
 }
 
@@ -771,6 +804,7 @@ shell_set_background(struct wl_client *client,
                return;
        }
 
+       surface->checked_pending = true;
        surface->role = IVI_SURFACE_ROLE_BACKGROUND;
        surface->bg.output = output;
        wl_list_remove(&surface->link);
@@ -843,6 +877,7 @@ shell_set_panel(struct wl_client *client,
                return;
        }
 
+       surface->checked_pending = true;
        surface->role = IVI_SURFACE_ROLE_PANEL;
        surface->panel.output = output;
        surface->panel.edge = edge;