WINGs/wframe: remove X11 GC/region clipping from paintFrame

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.
This commit is contained in:
Levi Neely 2026-05-14 16:44:29 +02:00
parent 685eb42ecc
commit 4f462357e1
1 changed files with 7 additions and 47 deletions

View File

@ -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 */