This interface enables an id-agent to change the surface ids of an
ivi-layout-surface once.

Signed-off-by: Michael Teyfel <mtey...@de.adit-jv.com>
---
 ivi-shell/ivi-layout-export.h |  6 ++++++
 ivi-shell/ivi-layout.c        | 39 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 45 insertions(+)

diff --git a/ivi-shell/ivi-layout-export.h b/ivi-shell/ivi-layout-export.h
index 02bfb2c..a3ec645 100644
--- a/ivi-shell/ivi-layout-export.h
+++ b/ivi-shell/ivi-layout-export.h
@@ -315,6 +315,12 @@ struct ivi_layout_interface {
                                        uint32_t duration);
 
        /**
+        * \brief set id of ivi_layout_surface
+        */
+       int32_t (*surface_set_id)(struct ivi_layout_surface *ivisurf,
+                                 uint32_t id_surface);
+
+       /**
         * layer controller interface
         */
 
diff --git a/ivi-shell/ivi-layout.c b/ivi-shell/ivi-layout.c
index d9a0c2d..d40a260 100644
--- a/ivi-shell/ivi-layout.c
+++ b/ivi-shell/ivi-layout.c
@@ -1809,6 +1809,44 @@ ivi_layout_surface_set_transition_duration(struct 
ivi_layout_surface *ivisurf,
        return 0;
 }
 
+/*
+ * This interface enables e.g. an id agent to set the id of an ivi-layout
+ * surface, that has been created by a desktop application. This can only be
+ * done once as long as the initial surface id equals IVI_INVALID_ID. 
Afterwards
+ * two events are emitted, namely surface_created and surface_configured.
+ */
+static int32_t
+ivi_layout_surface_set_id(struct ivi_layout_surface *ivisurf,
+                         uint32_t id_surface)
+{
+       struct ivi_layout *layout = get_instance();
+       struct ivi_layout_surface *search_ivisurf = NULL;
+
+       if (!ivisurf) {
+               weston_log("%s: invalid argument\n", __func__);
+               return IVI_FAILED;
+       }
+
+       if (ivisurf->id_surface != IVI_INVALID_ID) {
+               weston_log("surface id can only be set once\n");
+               return IVI_FAILED;
+       }
+
+       search_ivisurf = get_surface(&layout->surface_list, id_surface);
+       if (search_ivisurf) {
+               weston_log("id_surface(%d) is already created\n", id_surface);
+               return IVI_FAILED;
+       }
+
+       ivisurf->id_surface = id_surface;
+
+       wl_signal_emit(&layout->surface_notification.created, ivisurf);
+       wl_signal_emit(&layout->surface_notification.configure_changed,
+                      ivisurf);
+
+       return IVI_SUCCEEDED;
+}
+
 static int32_t
 ivi_layout_surface_set_transition(struct ivi_layout_surface *ivisurf,
                                  enum ivi_layout_transition_type type,
@@ -1971,6 +2009,7 @@ static struct ivi_layout_interface ivi_layout_interface = 
{
        .surface_get_weston_surface             = 
ivi_layout_surface_get_weston_surface,
        .surface_set_transition                 = 
ivi_layout_surface_set_transition,
        .surface_set_transition_duration        = 
ivi_layout_surface_set_transition_duration,
+       .surface_set_id                         = ivi_layout_surface_set_id,
 
        /**
         * layer controller interfaces
-- 
2.7.4

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to