Fix dialog titlebar and background rendering

- window.c: always call frame_paint for internal windows (title=NULL
  skipped wFrameWindowChangeTitle which was the only paint trigger)
- wview_wl.c: fill view backing with background color before expose
  (X11 server fills background automatically, Wayland needs explicit fill)
This commit is contained in:
Levi Neely 2026-05-13 21:34:07 +02:00
parent 4440476a35
commit bf9a0a9cf5
2 changed files with 20 additions and 0 deletions

View File

@ -219,6 +219,23 @@ static void wl_redisplay(void *vctx, W_View *view)
if (!view->flags.mapped)
return;
/* Fill background color */
pixman_image_t *backing = (pixman_image_t *)W_GetViewBacking(view->window);
if (backing && view->backColor) {
pixman_color_t bg;
bg.red = view->backColor->color.red;
bg.green = view->backColor->color.green;
bg.blue = view->backColor->color.blue;
bg.alpha = view->backColor->alpha ? view->backColor->alpha : 0xFFFF;
pixman_image_fill_rectangles(PIXMAN_OP_SRC, backing, &bg,
1, &(pixman_rectangle16_t){0, 0, view->size.width, view->size.height});
} else if (backing) {
/* Default: light grey background */
pixman_color_t bg = {0xAAAA, 0xAAAA, 0xAAAA, 0xFFFF};
pixman_image_fill_rectangles(PIXMAN_OP_SRC, backing, &bg,
1, &(pixman_rectangle16_t){0, 0, view->size.width, view->size.height});
}
memset(&ev, 0, sizeof(ev));
ev.type = WME_EXPOSE;
ev.window = (WNativeWindow)view->window;

View File

@ -1426,6 +1426,9 @@ WWindow *wManageInternalWindow(WScreen *scr, WNativeWindow window, WNativeWindow
wm_backend->stacking_lower(window);
wm_backend->window_map_subwindows(wwin->frame->core->window);
/* Ensure frame is painted (title may be NULL, skipping ChangeTitle) */
wm_backend->frame_paint(wwin->frame);
/* setup stacking descriptor */
if (wwin->transient_for != None && wwin->transient_for != scr->root_win) {
WWindow *tmp;