aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--types/output/cursor.c20
1 files changed, 12 insertions, 8 deletions
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;
}