dnd: work around cairo-gl brokenness

If cairo-gl is used, display_create_surface() will create an
wl_egl_window for each surface and this will result in errors if this
surface is used as a source. Also, one can't get a wl_buffer for such
a surface wich led to crashes when trying to do so for the drag icon.

This patch works around both problems by forcing the item and drag icon
surfaces to use shm.
This commit is contained in:
Ander Conselvan de Oliveira 2012-05-25 16:03:06 +03:00 committed by Kristian Høgsberg
parent dc8c8fce72
commit 210eb9d2ba
3 changed files with 6 additions and 3 deletions

View File

@ -106,7 +106,8 @@ item_create(struct display *display, int x, int y, int seed)
rect.width = item_width;
rect.height = item_height;
item->surface = display_create_surface(display, NULL, &rect, 0);
item->surface =
display_create_surface(display, NULL, &rect, SURFACE_SHM);
item->x = x;
item->y = y;
@ -322,7 +323,8 @@ create_drag_cursor(struct dnd_drag *dnd_drag,
rectangle.width = item_width + 2 * pointer->width;
rectangle.height = item_height + 2 * pointer->height;
surface = display_create_surface(dnd->display, NULL, &rectangle, 0);
surface = display_create_surface(dnd->display, NULL, &rectangle,
SURFACE_SHM);
cr = cairo_create(surface);
cairo_translate(cr, pointer->width, pointer->height);

View File

@ -618,7 +618,7 @@ display_create_surface(struct display *display,
if (check_size(rectangle) < 0)
return NULL;
#ifdef HAVE_CAIRO_EGL
if (display->dpy)
if (display->dpy && !(flags & SURFACE_SHM))
return display_create_egl_window_surface(display,
surface,
flags,

View File

@ -112,6 +112,7 @@ display_get_image_for_egl_image_surface(struct display *display,
#endif
#define SURFACE_OPAQUE 0x01
#define SURFACE_SHM 0x02
cairo_surface_t *
display_create_surface(struct display *display,