windowmaker-wl/src
Levi Neely 36aa1c5725 wayland: Phase 69 — WIN_WORKSPACE macro; safe workspace reads without frame
Add WIN_WORKSPACE(w) macro to window.h that returns frame->workspace
when the window has a frame (X11 path) or wwin->workspace when it does
not (Wayland path, set in Phase 67).

Replace all unsafe frame->workspace reads with WIN_WORKSPACE() in:
  - window.c:   wWindowObscuresWindow (workspace comparison + geometry),
                wWindowFocusPrev/Next (same-workspace filter),
                wWindowSaveState (state serialization)
  - session.c:  session save (workspace name lookup)
  - switchmenu.c: all five switch-menu workspace comparisons/lookups

Also guard wWindowObscuresWindow's frame->core width/height reads with
a ternary that falls back to client.{width,height} for frameless windows.

This eliminates the last class of NULL frame->workspace dereferences
reachable from workspace-switch, focus-cycle, session-save, and
switch-menu code paths.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-28 09:43:09 +01:00
..
backend wayland: Phase 66 — XDG popup initial configure for context menus 2026-03-28 09:33:22 +01:00
GNUstep.h Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
Makefile.am wayland: Phase 31 — Wayland backend skeleton (complete stub vtable) 2026-03-27 22:12:41 +01:00
Makefile.in Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
WindowMaker.h Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
actions.c wayland: Phase 40 — wire toplevel unmap to wUnmanageWindow 2026-03-28 06:34:15 +01:00
actions.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
appicon.c Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
appicon.h Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
application.c Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
application.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
appmenu.c Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
appmenu.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
balloon.c Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
balloon.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
client.c wayland: Phase 63 — DELETE_WINDOW=1 for Wayland; wClientSendProtocol dispatches client_close 2026-03-28 09:24:22 +01:00
client.h Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
colormap.c wayland: Phase 39 — wire toplevel map to wManageWindow 2026-03-28 06:23:23 +01:00
colormap.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
cycling.c Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
cycling.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
def_pixmaps.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
defaults.c Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
defaults.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
dialog.c Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
dialog.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
dock.c Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
dock.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
dockedapp.c Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
dockedapp.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
event.c wayland: Phase 33 — event_loop_run/atom_intern vtable; wmaker starts and exits cleanly under Wayland 2026-03-27 23:02:26 +01:00
event.h Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
extend_pixmaps.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
framewin.c Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
framewin.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
geom.c Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
geom.h Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
geomview.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
geomview.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
icon.c Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
icon.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
keybind.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
main.c wayland: Phase 59 — guard SetupEnvironment rcontext NULL deref 2026-03-28 07:46:06 +01:00
main.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
menu.c Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
menu.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
misc.c wayland: Phase 57 — icccm_set/get/free_command store WM_COMMAND in view 2026-03-28 07:34:12 +01:00
misc.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
monitor.c Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
monitor.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
motif.c wayland: Phase 39 — wire toplevel map to wManageWindow 2026-03-28 06:23:23 +01:00
motif.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
moveres.c Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
osdep.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
osdep_bsd.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
osdep_darwin.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
osdep_linux.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
osdep_stub.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
pixmap.c Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
pixmap.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
placement.c wayland: Phase 68 — placement.c: safe overlap calculation without frame 2026-03-28 09:40:44 +01:00
placement.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
properties.c wayland: Phase 63 — DELETE_WINDOW=1 for Wayland; wClientSendProtocol dispatches client_close 2026-03-28 09:24:22 +01:00
properties.h Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
resources.c Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
resources.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
rootmenu.c Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
rootmenu.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
screen.c wayland: Phase 62 — mapped flag, focus lifecycle, and keyboard clear-focus 2026-03-28 09:11:56 +01:00
screen.h Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
session.c wayland: Phase 69 — WIN_WORKSPACE macro; safe workspace reads without frame 2026-03-28 09:43:09 +01:00
session.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
shutdown.c wayland: Phase 33 — event_loop_run/atom_intern vtable; wmaker starts and exits cleanly under Wayland 2026-03-27 23:02:26 +01:00
shutdown.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
stacking.c Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
stacking.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
startup.c wayland: Phase 33 — event_loop_run/atom_intern vtable; wmaker starts and exits cleanly under Wayland 2026-03-27 23:02:26 +01:00
startup.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
superfluous.c Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
superfluous.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
switchmenu.c wayland: Phase 69 — WIN_WORKSPACE macro; safe workspace reads without frame 2026-03-28 09:43:09 +01:00
switchmenu.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
switchpanel.c Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
switchpanel.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
texture.c Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
texture.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
usermenu.c Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
usermenu.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wconfig.h Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
wconfig.h.in Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
wcore.c Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
wcore.h Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
wdefaults.c Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
wdefaults.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
window.c wayland: Phase 69 — WIN_WORKSPACE macro; safe workspace reads without frame 2026-03-28 09:43:09 +01:00
window.h wayland: Phase 69 — WIN_WORKSPACE macro; safe workspace reads without frame 2026-03-28 09:43:09 +01:00
winmenu.c Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
winmenu.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
winspector.c Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
winspector.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wmspec.c wayland: Phase 48 — guard NETWM init/update/cleanup functions against NULL dpy 2026-03-28 06:54:35 +01:00
wmspec.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
workspace.c wayland: Phase 67 — WWindow.workspace; safe workspace switching without frame 2026-03-28 09:38:07 +01:00
workspace.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wsmap.c wayland: Phase 60 — guard wsmap X11/rcontext paths; icon name from XDG title 2026-03-28 08:52:35 +01:00
wsmap.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
xdg-shell-protocol.h wayland: Phase 35 — advertise core Wayland protocol globals 2026-03-27 23:09:39 +01:00
xdnd.c wayland: Phase 33 — event_loop_run/atom_intern vtable; wmaker starts and exits cleanly under Wayland 2026-03-27 23:02:26 +01:00
xdnd.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
xinerama.c Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
xinerama.h Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
xmodifier.c Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
xmodifier.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
xutil.c Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
xutil.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00