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:
parent
dc8c8fce72
commit
210eb9d2ba
@ -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);
|
||||
|
@ -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,
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user