Commit 5e67e38e authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

XCB: use dummy color map so selecting a non-default visual works

parent d6f88abd
...@@ -77,8 +77,9 @@ struct vout_sys_t ...@@ -77,8 +77,9 @@ struct vout_sys_t
xcb_screen_t *screen; xcb_screen_t *screen;
vout_window_t *embed; /* VLC window (when windowed) */ vout_window_t *embed; /* VLC window (when windowed) */
xcb_visualid_t vid; xcb_visualid_t vid; /* selected visual */
xcb_window_t parent; /* parent X window */ xcb_window_t parent; /* parent X window */
xcb_colormap_t cmap; /* colormap for selected visual */
xcb_window_t window; /* drawable X window */ xcb_window_t window; /* drawable X window */
xcb_gcontext_t gc; /* context to put images */ xcb_gcontext_t gc; /* context to put images */
bool shm; /* whether to use MIT-SHM */ bool shm; /* whether to use MIT-SHM */
...@@ -202,6 +203,11 @@ static int Open (vlc_object_t *obj) ...@@ -202,6 +203,11 @@ static int Open (vlc_object_t *obj)
} }
vout->fmt_out.i_chroma = vout->output.i_chroma; vout->fmt_out.i_chroma = vout->output.i_chroma;
/* Create colormap (needed to select non-default visual) */
p_sys->cmap = xcb_generate_id (p_sys->conn);
xcb_create_colormap (p_sys->conn, XCB_COLORMAP_ALLOC_NONE,
p_sys->cmap, scr->root, p_sys->vid);
/* Check shared memory support */ /* Check shared memory support */
p_sys->shm = var_CreateGetBool (vout, "x11-shm") > 0; p_sys->shm = var_CreateGetBool (vout, "x11-shm") > 0;
if (p_sys->shm) if (p_sys->shm)
...@@ -241,6 +247,7 @@ static void Close (vlc_object_t *obj) ...@@ -241,6 +247,7 @@ static void Close (vlc_object_t *obj)
vout_sys_t *p_sys = vout->p_sys; vout_sys_t *p_sys = vout->p_sys;
assert (p_sys->embed == NULL); assert (p_sys->embed == NULL);
/* colormap is garbage-ollected by X (?) */
if (p_sys->conn) if (p_sys->conn)
xcb_disconnect (p_sys->conn); xcb_disconnect (p_sys->conn);
free (p_sys); free (p_sys);
...@@ -429,13 +436,16 @@ static int Init (vout_thread_t *vout) ...@@ -429,13 +436,16 @@ static int Init (vout_thread_t *vout)
width * VOUT_ASPECT_FACTOR / height; width * VOUT_ASPECT_FACTOR / height;
/* Create window */ /* Create window */
const uint32_t mask = XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK; const uint32_t mask = XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK
uint32_t values[2] = { | XCB_CW_COLORMAP;
uint32_t values[] = {
/* XCB_CW_BACK_PIXEL */ /* XCB_CW_BACK_PIXEL */
screen->black_pixel, screen->black_pixel,
/* XCB_CW_EVENT_MASK */ /* XCB_CW_EVENT_MASK */
XCB_EVENT_MASK_BUTTON_PRESS | XCB_EVENT_MASK_BUTTON_RELEASE | XCB_EVENT_MASK_BUTTON_PRESS | XCB_EVENT_MASK_BUTTON_RELEASE |
XCB_EVENT_MASK_POINTER_MOTION, XCB_EVENT_MASK_POINTER_MOTION,
/* XCB_CW_COLORMAP */
p_sys->cmap,
}; };
xcb_void_cookie_t c; xcb_void_cookie_t c;
xcb_window_t window = xcb_generate_id (p_sys->conn); xcb_window_t window = xcb_generate_id (p_sys->conn);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment