wayland: Phase 48 — guard NETWM init/update/cleanup functions against NULL dpy
Add if (!dpy) return guards to wNETWMInitStuff, wNETWMCleanup, wNETWMUpdateDesktop, wNETWMGetCurrentDesktopFromHint, wNETWMUpdateActions, and updateWindowOpacity so the Wayland backend path does not crash calling XChangeProperty/XDeleteProperty/ XGetWindowProperty on a NULL display. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
2d3d6d4716
commit
b0728c7048
12
src/wmspec.c
12
src/wmspec.c
|
|
@ -362,6 +362,8 @@ void wNETWMUpdateDesktop(WScreen *scr)
|
||||||
long *views, sizes[2];
|
long *views, sizes[2];
|
||||||
int count, i;
|
int count, i;
|
||||||
|
|
||||||
|
if (!dpy) return; /* Wayland: no X11 root-window properties */
|
||||||
|
|
||||||
if (scr->workspace_count == 0)
|
if (scr->workspace_count == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
@ -389,6 +391,8 @@ int wNETWMGetCurrentDesktopFromHint(WScreen *scr)
|
||||||
int count;
|
int count;
|
||||||
unsigned char *prop;
|
unsigned char *prop;
|
||||||
|
|
||||||
|
if (!dpy) return -1; /* Wayland: no X11 _NET_CURRENT_DESKTOP hint */
|
||||||
|
|
||||||
prop = PropGetCheckProperty(scr->root_win, net_current_desktop, WA_CARDINAL, 0, 1, &count);
|
prop = PropGetCheckProperty(scr->root_win, net_current_desktop, WA_CARDINAL, 0, 1, &count);
|
||||||
if (prop) {
|
if (prop) {
|
||||||
int desktop = *(long *)prop;
|
int desktop = *(long *)prop;
|
||||||
|
|
@ -576,6 +580,8 @@ static void updateWindowOpacity(WWindow *wwin)
|
||||||
unsigned long items, rest;
|
unsigned long items, rest;
|
||||||
unsigned long *property;
|
unsigned long *property;
|
||||||
|
|
||||||
|
if (!dpy) return; /* Wayland: no X11 _NET_WM_WINDOW_OPACITY */
|
||||||
|
|
||||||
if (!wwin->frame)
|
if (!wwin->frame)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
@ -651,6 +657,8 @@ void wNETWMInitStuff(WScreen *scr)
|
||||||
NetData *data;
|
NetData *data;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
if (!dpy) return; /* Wayland: no X11 NETWM atoms or root-window hints */
|
||||||
|
|
||||||
#ifdef DEBUG_WMSPEC
|
#ifdef DEBUG_WMSPEC
|
||||||
wmessage("wNETWMInitStuff");
|
wmessage("wNETWMInitStuff");
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -708,6 +716,8 @@ void wNETWMCleanup(WScreen *scr)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
if (!dpy) return; /* Wayland: no X11 root-window atoms to clean up */
|
||||||
|
|
||||||
for (i = 0; i < wlengthof(atomNames); i++)
|
for (i = 0; i < wlengthof(atomNames); i++)
|
||||||
XDeleteProperty(dpy, scr->root_win, *atomNames[i].atom);
|
XDeleteProperty(dpy, scr->root_win, *atomNames[i].atom);
|
||||||
}
|
}
|
||||||
|
|
@ -717,6 +727,8 @@ void wNETWMUpdateActions(WWindow *wwin, Bool del)
|
||||||
Atom action[10]; /* nr of actions atoms defined */
|
Atom action[10]; /* nr of actions atoms defined */
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
|
if (!dpy) return; /* Wayland: no X11 _NET_WM_ALLOWED_ACTIONS property */
|
||||||
|
|
||||||
if (del) {
|
if (del) {
|
||||||
XDeleteProperty(dpy, wwin->client_win, net_wm_allowed_actions);
|
XDeleteProperty(dpy, wwin->client_win, net_wm_allowed_actions);
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue