summaryrefslogtreecommitdiffstats
path: root/meta-agl/recipes-graphics/wayland/weston/0004-layout-interface-added-interface-to-change-surface-id.patch
blob: 6401c5b816a385d79c630f082bb158307195b054 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
index e1e897ed..5b1f12f0 100644
--- a/ivi-shell/ivi-layout-export.h
+++ b/ivi-shell/ivi-layout-export.h
@@ -320,6 +320,12 @@ struct ivi_layout_interface {
 					struct ivi_layout_surface *ivisurf,
 					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 298e18ea..fa8e75f6 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