From 4f462357e15cfdfe45deb73daeda348e52943d23 Mon Sep 17 00:00:00 2001 From: Levi Neely <141506390+lneely@users.noreply.github.com> Date: Thu, 14 May 2026 16:44:29 +0200 Subject: [PATCH] WINGs/wframe: remove X11 GC/region clipping from paintFrame MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace XClearWindow with render backend fill_rect. Remove X11 region-based clip masking around relief drawing — the title is drawn on top afterward, making the clip unnecessary. Eliminates WMColorGC/XCreateGC crash in Wayland mode. --- WINGs/wframe.c | 54 +++++++------------------------------------------- 1 file changed, 7 insertions(+), 47 deletions(-) diff --git a/WINGs/wframe.c b/WINGs/wframe.c index fdd2884..30b9eb6 100644 --- a/WINGs/wframe.c +++ b/WINGs/wframe.c @@ -60,8 +60,11 @@ static void repaintFrame(Frame * fPtr) { W_View *view = fPtr->view; W_Screen *scrPtr = view->screen; + const W_RenderBackend *R = scrPtr->renderBackend; + void *rctx = scrPtr->renderBackendCtx; - XClearWindow(scrPtr->display, view->window); + R->fill_rect(rctx, (WMDrawable)view->window, view->backColor, + 0, 0, view->size.width, view->size.height); paintFrame(fPtr); } @@ -70,7 +73,6 @@ static void paintFrame(Frame * fPtr) W_View *view = fPtr->view; W_Screen *scrPtr = view->screen; WMFont *font = scrPtr->normalFont; - Display *display = scrPtr->display; int tx, ty, tw, th, tlen; int fy, fh; Bool drawTitle; @@ -137,51 +139,9 @@ static void paintFrame(Frame * fPtr) drawTitle = False; } - { - XRectangle rect; - Region region, tmp; - GC gc[4]; - int i; - - region = XCreateRegion(); - - rect.x = 0; - rect.y = 0; - rect.width = view->size.width; - rect.height = view->size.height; - XUnionRectWithRegion(&rect, region, region); - if (drawTitle) { - tmp = XCreateRegion(); - rect.x = tx; - rect.y = ty; - rect.width = tw; - rect.height = th; - XUnionRectWithRegion(&rect, tmp, tmp); - XSubtractRegion(region, tmp, region); - XDestroyRegion(tmp); - } - gc[0] = WMColorGC(scrPtr->black); - gc[1] = WMColorGC(scrPtr->darkGray); - gc[2] = WMColorGC(scrPtr->gray); - gc[3] = WMColorGC(scrPtr->white); - - if (drawTitle) { - for (i = 0; i < 4; i++) { - XSetRegion(display, gc[i], region); - } - } - XDestroyRegion(region); - - W_DrawReliefWithGC(scrPtr, (WMDrawable)view->window, 0, fy, view->size.width, fh, - fPtr->flags.relief, scrPtr->black, scrPtr->darkGray, - scrPtr->gray, scrPtr->white); - - if (drawTitle) { - for (i = 0; i < 4; i++) { - XSetClipMask(display, gc[i], None); - } - } - } + W_DrawReliefWithGC(scrPtr, (WMDrawable)view->window, 0, fy, view->size.width, fh, + fPtr->flags.relief, scrPtr->black, scrPtr->darkGray, + scrPtr->gray, scrPtr->white); if (drawTitle) { /* can't draw AA text over and over again because it gets messed */