+ weston_desktop_surface_set_size(dsurface,
+ width, height);
+
+ /* resize the active surface first, output->area already contains
+ * correct area to resize to */
+ if (output->active)
+ ivi_layout_desktop_resize(output->active, output->area);
+
+ weston_view_set_output(view, woutput);
+ weston_view_set_position(view, x, y);
+ weston_layer_entry_insert(&ivi->normal.view_list, &view->layer_link);
+
+ weston_view_update_transform(view);
+ weston_view_damage_below(view);
+
+ wsurface->is_mapped = true;
+ surface->view->is_mapped = true;
+
+ shell_advertise_app_state(ivi, app_id,
+ NULL, AGL_SHELL_DESKTOP_APP_STATE_ACTIVATED);
+
+ weston_log("Activation completed for app_id %s, role %s, output %s\n",
+ app_id, ivi_layout_get_surface_role_name(surface), output->name);
+}
+
+void
+ivi_layout_popup_committed(struct ivi_surface *surface)
+{
+ struct ivi_compositor *ivi = surface->ivi;
+ struct ivi_policy *policy = ivi->policy;
+
+ struct weston_desktop_surface *dsurface = surface->dsurface;
+ struct weston_surface *wsurface =
+ weston_desktop_surface_get_surface(dsurface);
+ const char *app_id = weston_desktop_surface_get_app_id(dsurface);
+
+ struct ivi_output *output = surface->popup.output;
+ struct weston_output *woutput = output->output;
+
+ struct weston_view *view = surface->view;
+
+ if (policy && policy->api.surface_activate_by_default &&
+ !policy->api.surface_activate_by_default(surface, surface->ivi) &&
+ !surface->activated_by_default)
+ return;
+
+ if (surface->view->is_mapped)
+ return;
+
+ assert(surface->role == IVI_SURFACE_ROLE_POPUP);
+
+ weston_view_set_output(view, woutput);
+ weston_view_set_position(view, surface->popup.x, surface->popup.y);