X11 inherits properties from the parent window by default. XVideo does
not (typically) like ARGB visuals. To create plain RGB window on an ARGB
window, we need to force the color map, background and border parameters
to non-ARGB values.
There is one remaining problem to enable ARGB support in Qt4: the Qt4
video widget has a transparent background by default. This is inadequate
in fullscreen mode.
}
p_sys->window = xcb_generate_id (conn);
}
p_sys->window = xcb_generate_id (conn);
+ xcb_pixmap_t pixmap = xcb_generate_id (conn);
/* Cache adaptors infos */
xcb_xv_query_adaptors_reply_t *adaptors =
/* Cache adaptors infos */
xcb_xv_query_adaptors_reply_t *adaptors =
xcb_xv_format_t *f = xcb_xv_adaptor_info_formats (a);
for (uint_fast16_t i = a->num_formats; i > 0; i--, f++)
{
xcb_xv_format_t *f = xcb_xv_adaptor_info_formats (a);
for (uint_fast16_t i = a->num_formats; i > 0; i--, f++)
{
+ if (f->depth != screen->root_depth)
continue; /* this would fail anyway */
continue; /* this would fail anyway */
+ uint32_t mask =
+ XCB_CW_BACK_PIXMAP |
+ XCB_CW_BACK_PIXEL |
+ XCB_CW_BORDER_PIXMAP |
+ XCB_CW_BORDER_PIXEL |
+ XCB_CW_EVENT_MASK |
+ XCB_CW_COLORMAP;
+ const uint32_t list[] = {
+ /* XCB_CW_BACK_PIXMAP */
+ pixmap,
+ /* XCB_CW_BACK_PIXEL */
+ screen->black_pixel,
+ /* XCB_CW_BORDER_PIXMAP */
+ pixmap,
+ /* XCB_CW_BORDER_PIXEL */
+ screen->black_pixel,
- XCB_EVENT_MASK_VISIBILITY_CHANGE;
+ XCB_EVENT_MASK_VISIBILITY_CHANGE,
+ /* XCB_CW_COLORMAP */
+ screen->default_colormap,
+ };
+
+ xcb_create_pixmap (conn, f->depth, pixmap, screen->root, 1, 1);
c = xcb_create_window_checked (conn, f->depth, p_sys->window,
p_sys->embed->handle.xid, 0, 0, 1, 1, 0,
c = xcb_create_window_checked (conn, f->depth, p_sys->window,
p_sys->embed->handle.xid, 0, 0, 1, 1, 0,
- XCB_WINDOW_CLASS_INPUT_OUTPUT, f->visual,
- XCB_CW_EVENT_MASK, &mask);
+ XCB_WINDOW_CLASS_INPUT_OUTPUT, f->visual, mask, list);
if (!CheckError (vd, conn, "cannot create X11 window", c))
{
if (!CheckError (vd, conn, "cannot create X11 window", c))
{