[PATCH weston 04/14] layout-interface: added interface to change surface id
Michael Teyfel
mteyfel at de.adit-jv.com
Tue Oct 17 09:53:47 UTC 2017
This interface enables an id-agent to change the surface ids of an
ivi-layout-surface once.
Signed-off-by: Michael Teyfel <mteyfel at 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 e1e897e..5b1f12f 100644
--- a/ivi-shell/ivi-layout-export.h
+++ b/ivi-shell/ivi-layout-export.h
@@ -321,6 +321,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 298e18e..fa8e75f 100644
--- a/ivi-shell/ivi-layout.c
+++ b/ivi-shell/ivi-layout.c
@@ -1901,6 +1901,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,
@@ -2058,6 +2096,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
More information about the wayland-devel
mailing list