+ else
+ {
+ xcb_map_window (conn, p_sys->window);
+
+ vout_display_place_t place;
+
+ vout_display_PlacePicture (&place, &vd->source, vd->cfg, false);
+ p_sys->width = place.width;
+ p_sys->height = place.height;
+
+ /* */
+ const uint32_t values[] = {
+ place.x, place.y, place.width, place.height };
+ xcb_configure_window (conn, p_sys->window,
+ XCB_CONFIG_WINDOW_X | XCB_CONFIG_WINDOW_Y |
+ XCB_CONFIG_WINDOW_WIDTH |
+ XCB_CONFIG_WINDOW_HEIGHT,
+ values);
+ }
+ p_sys->visible = false;
+
+ /* Create graphic context */
+ p_sys->gc = xcb_generate_id (conn);
+ xcb_create_gc (conn, p_sys->gc, p_sys->window, 0, NULL);
+ msg_Dbg (vd, "using X11 graphic context 0x%08"PRIx32, p_sys->gc);
+
+ /* Create cursor */
+ p_sys->cursor = CreateBlankCursor (conn, screen);
+
+ CheckSHM (obj, conn, &p_sys->shm);
+
+ /* */
+ vout_display_info_t info = vd->info;
+ info.has_pictures_invalid = false;
+ info.has_event_thread = true;
+
+ /* Setup vout_display_t once everything is fine */
+ vd->fmt = fmt;
+ vd->info = info;
+
+ vd->pool = Pool;
+ vd->prepare = NULL;
+ vd->display = Display;
+ vd->control = Control;
+ vd->manage = Manage;
+
+ /* */
+ bool is_fullscreen = vd->cfg->is_fullscreen;
+ if (is_fullscreen && vout_window_SetFullScreen (p_sys->embed, true))
+ is_fullscreen = false;
+ vout_display_SendEventFullscreen (vd, is_fullscreen);
+ unsigned width, height;
+ if (!GetWindowSize (p_sys->embed, conn, &width, &height))
+ vout_display_SendEventDisplaySize (vd, width, height, is_fullscreen);