void *userdata)
{
struct hmi_controller *hmi_ctrl = userdata;
+ struct ivi_layout_layer *application_layer =
+ hmi_ctrl->application_layer.ivilayer;
+ struct weston_surface *surface;
+ struct ivi_layout_surface **ivisurfs;
+ int32_t length = 0;
+ int32_t i;
+
+ /* return if the surface is not application content */
+ if (is_surf_in_ui_widget(hmi_ctrl, ivisurf)) {
+ return;
+ }
+
+ /*
+ * if application changes size of wl_buffer. The source rectangle shall be
+ * fit to the size.
+ */
+ surface = ivi_controller_interface->surface_get_weston_surface(ivisurf);
+ if (surface) {
+ ivi_controller_interface->surface_set_source_rectangle(
+ ivisurf, 0, 0, surface->width,
+ surface->height);
+ }
+
+ /*
+ * search if the surface is already added to layer.
+ * If not yet, it is newly invoded application to go to switch_mode.
+ */
+ ivi_controller_interface->get_surfaces_on_layer(application_layer,
+ &length, &ivisurfs);
+ for (i = 0; i < length; i++) {
+ if (ivisurf == ivisurfs[i]) {
+ /*
+ * if it is non new invoked application, just call
+ * commit_changes to apply source_rectangle.
+ */
+ ivi_controller_interface->commit_changes();
+ return;
+ }
+ }
switch_mode(hmi_ctrl, hmi_ctrl->layout_mode);
}