summaryrefslogtreecommitdiffstats
path: root/meta-agl-profile-graphical/recipes-graphics/wayland/weston/0012-hmi-controller-register-for-desktop_surface_configured.patch
blob: 447cff4f8eff36196c22697f19d89ab61ddf0c73 (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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
diff --git a/ivi-shell/hmi-controller.c b/ivi-shell/hmi-controller.c
index a0e49ba0..340d1915 100644
--- a/ivi-shell/hmi-controller.c
+++ b/ivi-shell/hmi-controller.c
@@ -129,9 +129,9 @@ struct hmi_controller {
 	struct weston_compositor           *compositor;
 	struct wl_listener                  destroy_listener;
 
-	struct wl_listener                  surface_created;
 	struct wl_listener                  surface_removed;
 	struct wl_listener                  surface_configured;
+	struct wl_listener                  desktop_surface_configured;
 
 	struct wl_client                   *user_interface;
 	struct ui_setting                   ui_setting;
@@ -576,28 +576,6 @@ create_layer(struct weston_output *output,
 /**
  * Internal set notification
  */
-static void
-set_notification_create_surface(struct wl_listener *listener, void *data)
-{
-	struct hmi_controller *hmi_ctrl =
-			wl_container_of(listener, hmi_ctrl,
-					surface_created);
-	struct ivi_layout_surface *ivisurf = data;
-	struct hmi_controller_layer *layer_link =
-					wl_container_of(hmi_ctrl->application_layer_list.prev,
-							layer_link,
-							link);
-	struct ivi_layout_layer *application_layer = layer_link->ivilayer;
-	int32_t ret = 0;
-
-	/* skip ui widgets */
-	if (is_surf_in_ui_widget(hmi_ctrl, ivisurf))
-		return;
-
-	ret = hmi_ctrl->interface->layer_add_surface(application_layer, ivisurf);
-	assert(!ret);
-}
-
 static void
 set_notification_remove_surface(struct wl_listener *listener, void *data)
 {
@@ -665,6 +643,42 @@ set_notification_configure_surface(struct wl_listener *listener, void *data)
 	switch_mode(hmi_ctrl, hmi_ctrl->layout_mode);
 }
 
+static void
+set_notification_configure_desktop_surface(struct wl_listener *listener, void *data)
+{
+	struct hmi_controller *hmi_ctrl =
+			wl_container_of(listener, hmi_ctrl,
+					desktop_surface_configured);
+	struct ivi_layout_surface *ivisurf = data;
+	struct hmi_controller_layer *layer_link =
+					wl_container_of(hmi_ctrl->application_layer_list.prev,
+							layer_link,
+							link);
+	struct ivi_layout_layer *application_layer = layer_link->ivilayer;
+	struct weston_surface *surface;
+	int32_t ret = 0;
+
+	/* skip ui widgets */
+	if (is_surf_in_ui_widget(hmi_ctrl, ivisurf))
+		return;
+
+	ret = hmi_ctrl->interface->layer_add_surface(application_layer, ivisurf);
+	assert(!ret);
+
+	/*
+	 * if application changes size of wl_buffer. The source rectangle shall be
+	 * fit to the size.
+	 */
+	surface = hmi_ctrl->interface->surface_get_weston_surface(ivisurf);
+	if (surface) {
+		hmi_ctrl->interface->surface_set_source_rectangle(ivisurf, 0,
+				0, surface->width, surface->height);
+	}
+
+	hmi_ctrl->interface->commit_changes();
+	switch_mode(hmi_ctrl, hmi_ctrl->layout_mode);
+}
+
 /**
  * A hmi_controller used 4 ivi_layers to manage ivi_surfaces. The IDs of
  * corresponding ivi_layer are defined in weston.ini. Default scene graph
@@ -868,6 +882,9 @@ hmi_controller_create(struct weston_compositor *ec)
 	hmi_ctrl->surface_configured.notify = set_notification_configure_surface;
 	hmi_ctrl->interface->add_listener_configure_surface(&hmi_ctrl->surface_configured);
 
+	hmi_ctrl->desktop_surface_configured.notify = set_notification_configure_desktop_surface;
+	hmi_ctrl->interface->add_listener_configure_desktop_surface(&hmi_ctrl->desktop_surface_configured);
+
 	hmi_ctrl->destroy_listener.notify = hmi_controller_destroy;
 	wl_signal_add(&hmi_ctrl->compositor->destroy_signal,
 		      &hmi_ctrl->destroy_listener);
@@ -1289,12 +1306,6 @@ ivi_hmi_controller_UI_ready(struct wl_client *client,
 
 	ivi_hmi_controller_add_launchers(hmi_ctrl, 256);
 
-	/* Add surface_created listener after the initialization of launchers.
-	 * Otherwise, surfaces of the launchers will be added to application
-	 * layer too.*/
-	hmi_ctrl->surface_created.notify = set_notification_create_surface;
-	hmi_ctrl->interface->add_listener_create_surface(&hmi_ctrl->surface_created);
-
 	hmi_ctrl->is_initialized = 1;
 }
 
diff --git a/ivi-shell/ivi-layout.c b/ivi-shell/ivi-layout.c
index b06bf309..ef354d49 100644
--- a/ivi-shell/ivi-layout.c
+++ b/ivi-shell/ivi-layout.c
@@ -715,9 +715,15 @@ commit_surface_list(struct ivi_layout *layout)
 			ivisurf->pending.prop.transition_type = IVI_LAYOUT_TRANSITION_NONE;
 
 			if (configured && !is_surface_transition(ivisurf)) {
-				shell_surface_send_configure(ivisurf->surface,
-							     ivisurf->prop.dest_width,
-							     ivisurf->prop.dest_height);
+				if (ivisurf->weston_desktop_surface) {
+					weston_desktop_surface_set_size(ivisurf->weston_desktop_surface,
+									ivisurf->prop.dest_width,
+									ivisurf->prop.dest_height);
+				} else {
+					shell_surface_send_configure(ivisurf->surface,
+								     ivisurf->prop.dest_width,
+								     ivisurf->prop.dest_height);
+				}
 			}
 		} else {
 			configured = 0;