cairo_xcb_surface_create_with_xrender_format(wm->conn,
wm->screen,
window->frame_id,
- &wm->render_format,
+ &wm->format_rgb,
width, height);
hash_table_insert(wm->window_hash, window->frame_id, window);
return;
formats = xcb_render_query_pict_formats_formats(formats_reply);
- for (i = 0; i < formats_reply->num_formats; i++)
+ for (i = 0; i < formats_reply->num_formats; i++) {
+ if (formats[i].direct.red_mask != 0xff &&
+ formats[i].direct.red_shift != 16)
+ continue;
if (formats[i].type == XCB_RENDER_PICT_TYPE_DIRECT &&
formats[i].depth == 24)
- wm->render_format = formats[i];
+ wm->format_rgb = formats[i];
+ if (formats[i].type == XCB_RENDER_PICT_TYPE_DIRECT &&
+ formats[i].depth == 32 &&
+ formats[i].direct.alpha_mask == 0xff &&
+ formats[i].direct.alpha_shift == 24)
+ wm->format_rgba = formats[i];
+ }
free(formats_reply);
}
xcb_window_t wm_window;
struct weston_wm_window *focus_window;
struct theme *theme;
- xcb_render_pictforminfo_t render_format;
+ xcb_render_pictforminfo_t format_rgb, format_rgba;
struct wl_listener activate_listener;
xcb_window_t selection_window;