xwayland: Look up 32 depth rgba render format as well
authorKristian Høgsberg <krh@bitplanet.net>
Mon, 16 Jul 2012 15:57:08 +0000 (11:57 -0400)
committerKristian Høgsberg <krh@bitplanet.net>
Mon, 16 Jul 2012 17:35:27 +0000 (13:35 -0400)
src/xwayland/window-manager.c
src/xwayland/xwayland.h

index 1ec6a8b..e65e5da 100644 (file)
@@ -528,7 +528,7 @@ weston_wm_handle_map_request(struct weston_wm *wm, xcb_generic_event_t *event)
                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);
@@ -1065,10 +1065,19 @@ wxs_wm_get_resources(struct weston_wm *wm)
                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);
 }
index 438b7be..fb68671 100644 (file)
@@ -58,7 +58,7 @@ struct weston_wm {
        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;