wayland: Phase 60 — guard wsmap X11/rcontext paths; icon name from XDG title
wWorkspaceMapUpdate calls XGetImage(dpy) and RCreateImageFromXImage (scr->rcontext) directly; both are NULL in the Wayland path. Add early-return guards so enabling the workspace pager in Wayland mode does not crash. set_workspace_map_background_image calls RConvertImageMask(scr->rcontext) for pixmap textures; guard that path with the same rcontext check. wl_window_get_icon_name was a stub returning False. Implement it to return the XDG toplevel title so window icon labels are populated on the Wayland path (Wayland has no separate WM_ICON_NAME concept). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
e82bb279ab
commit
3c428e25d9
|
|
@ -901,7 +901,21 @@ wl_window_fetch_name(WNativeWindow win, char **name_out)
|
|||
|
||||
static Bool
|
||||
wl_window_get_icon_name(WNativeWindow win, char **name_out)
|
||||
{ (void)win; *name_out = NULL; return False; }
|
||||
{
|
||||
/* Phase 60: Wayland has no separate icon-name concept; return the
|
||||
* XDG toplevel title (same as window_fetch_name) so the WM always
|
||||
* has something to display in icon labels. */
|
||||
struct wl_toplevel_view *v = wl_find_view_by_id(win);
|
||||
const char *title = (v && v->xdg_surface && v->xdg_surface->toplevel &&
|
||||
v->xdg_surface->toplevel->title)
|
||||
? v->xdg_surface->toplevel->title : NULL;
|
||||
if (title) {
|
||||
*name_out = strdup(title);
|
||||
return True;
|
||||
}
|
||||
*name_out = NULL;
|
||||
return False;
|
||||
}
|
||||
|
||||
static int
|
||||
wl_prop_get_wmaker_menu(WNativeWindow win,
|
||||
|
|
|
|||
|
|
@ -66,6 +66,9 @@ void wWorkspaceMapUpdate(WScreen *scr)
|
|||
{
|
||||
XImage *pimg;
|
||||
|
||||
if (!dpy || !scr->rcontext)
|
||||
return; /* Wayland: no X11 root image to capture */
|
||||
|
||||
pimg = XGetImage(dpy, scr->root_win, 0, 0,
|
||||
scr->scr_width, scr->scr_height,
|
||||
AllPlanes, ZPixmap);
|
||||
|
|
@ -152,6 +155,9 @@ static void set_workspace_map_background_image(WWorkspaceMap *wsmap)
|
|||
{
|
||||
Pixmap pixmap, mask;
|
||||
|
||||
if (!wsmap->scr->rcontext)
|
||||
return; /* Wayland: no X11 rendering context */
|
||||
|
||||
if (wPreferences.wsmbackTexture->any.type == WTEX_PIXMAP) {
|
||||
RImage *tmp = wTextureRenderImage(wPreferences.wsmbackTexture, wsmap->wswidth, wsmap->wsheight, WREL_FLAT);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue