1 diff --git a/ivi-shell/hmi-controller.c b/ivi-shell/hmi-controller.c
2 index a0e49ba0..340d1915 100644
3 --- a/ivi-shell/hmi-controller.c
4 +++ b/ivi-shell/hmi-controller.c
5 @@ -129,9 +129,9 @@ struct hmi_controller {
6 struct weston_compositor *compositor;
7 struct wl_listener destroy_listener;
9 - struct wl_listener surface_created;
10 struct wl_listener surface_removed;
11 struct wl_listener surface_configured;
12 + struct wl_listener desktop_surface_configured;
14 struct wl_client *user_interface;
15 struct ui_setting ui_setting;
16 @@ -576,28 +576,6 @@ create_layer(struct weston_output *output,
18 * Internal set notification
21 -set_notification_create_surface(struct wl_listener *listener, void *data)
23 - struct hmi_controller *hmi_ctrl =
24 - wl_container_of(listener, hmi_ctrl,
26 - struct ivi_layout_surface *ivisurf = data;
27 - struct hmi_controller_layer *layer_link =
28 - wl_container_of(hmi_ctrl->application_layer_list.prev,
31 - struct ivi_layout_layer *application_layer = layer_link->ivilayer;
34 - /* skip ui widgets */
35 - if (is_surf_in_ui_widget(hmi_ctrl, ivisurf))
38 - ret = hmi_ctrl->interface->layer_add_surface(application_layer, ivisurf);
43 set_notification_remove_surface(struct wl_listener *listener, void *data)
45 @@ -665,6 +643,42 @@ set_notification_configure_surface(struct wl_listener *listener, void *data)
46 switch_mode(hmi_ctrl, hmi_ctrl->layout_mode);
50 +set_notification_configure_desktop_surface(struct wl_listener *listener, void *data)
52 + struct hmi_controller *hmi_ctrl =
53 + wl_container_of(listener, hmi_ctrl,
54 + desktop_surface_configured);
55 + struct ivi_layout_surface *ivisurf = data;
56 + struct hmi_controller_layer *layer_link =
57 + wl_container_of(hmi_ctrl->application_layer_list.prev,
60 + struct ivi_layout_layer *application_layer = layer_link->ivilayer;
61 + struct weston_surface *surface;
64 + /* skip ui widgets */
65 + if (is_surf_in_ui_widget(hmi_ctrl, ivisurf))
68 + ret = hmi_ctrl->interface->layer_add_surface(application_layer, ivisurf);
72 + * if application changes size of wl_buffer. The source rectangle shall be
75 + surface = hmi_ctrl->interface->surface_get_weston_surface(ivisurf);
77 + hmi_ctrl->interface->surface_set_source_rectangle(ivisurf, 0,
78 + 0, surface->width, surface->height);
81 + hmi_ctrl->interface->commit_changes();
82 + switch_mode(hmi_ctrl, hmi_ctrl->layout_mode);
86 * A hmi_controller used 4 ivi_layers to manage ivi_surfaces. The IDs of
87 * corresponding ivi_layer are defined in weston.ini. Default scene graph
88 @@ -868,6 +882,9 @@ hmi_controller_create(struct weston_compositor *ec)
89 hmi_ctrl->surface_configured.notify = set_notification_configure_surface;
90 hmi_ctrl->interface->add_listener_configure_surface(&hmi_ctrl->surface_configured);
92 + hmi_ctrl->desktop_surface_configured.notify = set_notification_configure_desktop_surface;
93 + hmi_ctrl->interface->add_listener_configure_desktop_surface(&hmi_ctrl->desktop_surface_configured);
95 hmi_ctrl->destroy_listener.notify = hmi_controller_destroy;
96 wl_signal_add(&hmi_ctrl->compositor->destroy_signal,
97 &hmi_ctrl->destroy_listener);
98 @@ -1289,12 +1306,6 @@ ivi_hmi_controller_UI_ready(struct wl_client *client,
100 ivi_hmi_controller_add_launchers(hmi_ctrl, 256);
102 - /* Add surface_created listener after the initialization of launchers.
103 - * Otherwise, surfaces of the launchers will be added to application
105 - hmi_ctrl->surface_created.notify = set_notification_create_surface;
106 - hmi_ctrl->interface->add_listener_create_surface(&hmi_ctrl->surface_created);
108 hmi_ctrl->is_initialized = 1;
111 diff --git a/ivi-shell/ivi-layout.c b/ivi-shell/ivi-layout.c
112 index b06bf309..ef354d49 100644
113 --- a/ivi-shell/ivi-layout.c
114 +++ b/ivi-shell/ivi-layout.c
115 @@ -715,9 +715,15 @@ commit_surface_list(struct ivi_layout *layout)
116 ivisurf->pending.prop.transition_type = IVI_LAYOUT_TRANSITION_NONE;
118 if (configured && !is_surface_transition(ivisurf)) {
119 - shell_surface_send_configure(ivisurf->surface,
120 - ivisurf->prop.dest_width,
121 - ivisurf->prop.dest_height);
122 + if (ivisurf->weston_desktop_surface) {
123 + weston_desktop_surface_set_size(ivisurf->weston_desktop_surface,
124 + ivisurf->prop.dest_width,
125 + ivisurf->prop.dest_height);
127 + shell_surface_send_configure(ivisurf->surface,
128 + ivisurf->prop.dest_width,
129 + ivisurf->prop.dest_height);