From 09441380b5e07d2a990040c3dfd8c3ec435e3b23 Mon Sep 17 00:00:00 2001 From: IoIxD Date: Sun, 22 Mar 2026 16:15:50 -0700 Subject: [PATCH] wayland: fallback if selected_cairo is null --- include/Mw/LowLevel/Wayland.h | 1 + src/backend/wayland.c | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/include/Mw/LowLevel/Wayland.h b/include/Mw/LowLevel/Wayland.h index 053d0ff..9659ac5 100644 --- a/include/Mw/LowLevel/Wayland.h +++ b/include/Mw/LowLevel/Wayland.h @@ -235,6 +235,7 @@ struct _MwLLWayland { cairo_surface_t* back_cs; cairo_t* front_cairo; cairo_t* back_cairo; + /* The cairo to actually use for draw operations. Typically is front_cairo, but MwLLBeginDraw can change this to the back_cairo so it can be used to draw window decorations. */ cairo_t* selected_cairo; }; diff --git a/src/backend/wayland.c b/src/backend/wayland.c index 06fdbb0..6688922 100644 --- a/src/backend/wayland.c +++ b/src/backend/wayland.c @@ -1960,6 +1960,7 @@ static void MwLLDestroyPixmapImpl(MwLLPixmap pixmap) { static void MwLLDrawPixmapImpl(MwLL handle, MwRect* rect, MwLLPixmap pixmap) { cairo_t* c; cairo_surface_t* cs; + cairo_t * selected_cairo = handle->wayland.selected_cairo ? handle->wayland.selected_cairo : handle->wayland.front_cairo; cs = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, rect->width, rect->height); c = cairo_create(cs); @@ -1973,8 +1974,8 @@ static void MwLLDrawPixmapImpl(MwLL handle, MwRect* rect, MwLLPixmap pixmap) { cairo_paint(c); - cairo_set_source_surface(handle->wayland.selected_cairo, cs, rect->x, rect->y); - cairo_paint(handle->wayland.selected_cairo); + cairo_set_source_surface(selected_cairo, cs, rect->x, rect->y); + cairo_paint(selected_cairo); cairo_destroy(c); cairo_surface_destroy(cs);