+ p_popup->bb.x = bx;
+ p_popup->bb.y = by;
+ p_popup->bb.width = width;
+ p_popup->bb.height = height;
+}
+
+static struct pending_fullscreen *
+ivi_ensure_fullscreen(struct ivi_output *ioutput, const char *app_id)
+{
+ struct pending_fullscreen *p_fullscreen = zalloc(sizeof(*p_fullscreen));
+ size_t len_app_id = strlen(app_id);
+
+ if (!p_fullscreen)
+ return NULL;
+ p_fullscreen->app_id = zalloc(sizeof(char) * (len_app_id + 1));
+ if (!p_fullscreen->app_id) {
+ free(p_fullscreen);
+ return NULL;
+ }
+ memcpy(p_fullscreen->app_id, app_id, len_app_id);
+
+ p_fullscreen->ioutput = ioutput;
+ return p_fullscreen;
+}
+
+static void
+ivi_update_fullscreen(struct ivi_output *ioutput, const char *app_id,
+ struct pending_fullscreen *p_fullscreen)
+{
+ size_t len_app_id = strlen(app_id);
+
+ wl_list_remove(&p_fullscreen->link);
+ wl_list_init(&p_fullscreen->link);
+
+ memset(p_fullscreen->app_id, 0, strlen(app_id) + 1);
+ free(p_fullscreen->app_id);
+
+ p_fullscreen->app_id = zalloc(sizeof(char) * (len_app_id + 1));
+ if (!p_fullscreen->app_id)
+ return;
+ memcpy(p_fullscreen->app_id, app_id, len_app_id);
+
+ p_fullscreen->ioutput = ioutput;
+}
+
+static struct pending_remote *
+ivi_ensure_remote(struct ivi_output *ioutput, const char *app_id)
+{
+ struct pending_remote *p_remote = zalloc(sizeof(*p_remote));
+ size_t len_app_id = strlen(app_id);
+
+ if (!p_remote)
+ return NULL;
+ p_remote->app_id = zalloc(sizeof(char) * (len_app_id + 1));
+ if (!p_remote->app_id) {
+ free(p_remote);
+ return NULL;
+ }
+ memcpy(p_remote->app_id, app_id, len_app_id);
+
+ p_remote->ioutput = ioutput;
+ return p_remote;
+}
+
+static void
+ivi_update_remote(struct ivi_output *ioutput, const char *app_id,
+ struct pending_remote *p_remote)
+{
+ size_t len_app_id = strlen(app_id);
+
+ wl_list_remove(&p_remote->link);
+ wl_list_init(&p_remote->link);
+
+ memset(p_remote->app_id, 0, strlen(app_id) + 1);
+ free(p_remote->app_id);
+
+ p_remote->app_id = zalloc(sizeof(char) * (len_app_id + 1));
+ if (!p_remote->app_id)
+ return;
+ memcpy(p_remote->app_id, app_id, len_app_id);
+
+ p_remote->ioutput = ioutput;
+}
+
+static void
+ivi_set_pending_desktop_surface_popup(struct ivi_output *ioutput, int x, int y, int bx,
+ int by, int width, int height, const char *app_id)
+{
+ struct ivi_compositor *ivi = ioutput->ivi;
+ struct pending_popup *p_popup = NULL;
+ struct pending_popup *popup;
+
+ wl_list_for_each(popup, &ivi->popup_pending_apps, link)
+ if (!strcmp(app_id, popup->app_id))
+ p_popup = popup;
+
+ if (!p_popup)
+ p_popup = ivi_ensure_popup(ioutput, x, y, bx, by, width, height, app_id);
+ else
+ ivi_update_popup(ioutput, x, y, bx, by, width, height, app_id, p_popup);
+ if (!p_popup)
+ return;
+