diff --git a/types/output/cursor.c b/types/output/cursor.c index bd6f757e..85973ce9 100644 --- a/types/output/cursor.c +++ b/types/output/cursor.c @@ -376,15 +376,19 @@ static bool output_cursor_attempt_hardware(struct wlr_output_cursor *cursor) { bool wlr_output_cursor_set_image(struct wlr_output_cursor *cursor, const uint8_t *pixels, int32_t stride, uint32_t width, uint32_t height, int32_t hotspot_x, int32_t hotspot_y) { - struct wlr_readonly_data_buffer *buffer = - readonly_data_buffer_create(DRM_FORMAT_ARGB8888, stride, width, height, - pixels); - if (buffer == NULL) { - return false; + struct wlr_buffer *buffer = NULL; + + if (pixels) { + struct wlr_readonly_data_buffer *ro_buffer = readonly_data_buffer_create( + DRM_FORMAT_ARGB8888, stride, width, height, pixels); + if (ro_buffer == NULL) { + return false; + } + buffer = &ro_buffer->base; } - bool ok = wlr_output_cursor_set_buffer(cursor, &buffer->base, - hotspot_x, hotspot_y); - wlr_buffer_drop(&buffer->base); + bool ok = wlr_output_cursor_set_buffer(cursor, buffer, hotspot_x, hotspot_y); + + wlr_buffer_drop(buffer); return ok; }