Levi Neely
530e1a91f9
Phase 80o: clean X11 from superfluous.c
...
- DoKaboom: body replaced with vtable dispatch (do_kaboom slot);
X11 animation temporarily disabled in backend (cosmetic only)
- doAppBounce: XRaiseWindow -> stacking_raise, XMoveWindow -> window_move
- MakeGhostIcon: kept in superfluous.c (uses wrlib, not direct X11)
superfluous.o verified X11-free with nm.
2026-05-13 11:46:40 +02:00
Levi Neely
9cfe322573
Phase 80b: eliminate if(dpy) guards and replace X11 calls with vtable dispatch
...
- Remove all 20 'if (dpy &&' guards from policy files
- Replace XMapWindow, XUnmapWindow, XMoveWindow, XClearWindow,
XFreePixmap, XFlush, XSync, XResizeWindow, XSetWindowBackground,
XSetWindowBackgroundPixmap, XMoveResizeWindow, XSelectInput,
XMapRaised, XUngrabPointer, XUngrabKeyboard, XGrabKeyboard,
XGrabServer, XUngrabServer, XRestackWindows, XDestroyWindow,
XReparentWindow, XAddToSaveSet, XSetWindowBorderWidth
with vtable dispatch across all policy files
- Make wFrameWindowPaint mechanism code: X11 backend's frame_paint
now calls it; all policy call sites dispatch through vtable
- Replace dpy feature-gating in main.c/startup.c with is_wayland
Remaining: 278 dpy refs in policy files, mostly in rendering functions
(wIconPaint, wAppIconPaint, paintEntry, drawFrame, balloon, dock,
dialog, superfluous, event) that are X11 mechanism code reachable
only through the X11 backend path.
2026-05-13 10:21:00 +02:00
Levi Neely
553d2ca0ba
Phase 80: eliminate all 43 if(!dpy) return guards via vtable dispatch
...
Remove every 'if (!dpy) return' guard from policy files by moving
X11 mechanism code behind WMBackend vtable slots. Call sites now
dispatch through wm_backend->slot(), the X11 backend implements the
mechanism, and the Wayland backend provides no-ops or Wayland-native
implementations.
New vtable slots added to backend.h:
- Frame: frame_alloc_border_pixel, frame_update_texture, frame_paint_button
- NETWM: netwm_init, netwm_cleanup, netwm_update_desktop,
netwm_get_current_desktop, netwm_update_opacity, netwm_update_actions,
netwm_check_client_hints, netwm_check_initial_state, netwm_get_pid,
netwm_cleanup_frame_extents
- Properties: prop_get_protocols, prop_get_check_property,
prop_set_wmaker_protocols, prop_set_icon_tile, prop_cleanup
- Client: client_restore, client_set_state, client_send_protocol,
client_kill, client_get_colormap_windows
- Misc: eat_expose, move_window, slide_windows, get_text_selection,
get_shortcut_string, get_command_for_window
- Icon: icon_update_pixmap, icon_paint
- AppIcon: appicon_show, appicon_paint, appicon_bounce
- Shutdown: restore_desktop, wipe_desktop
- Resources: get_color_for_colormap, free_color, colormap_install
- Protocol: xdnd_init, motif_get_hints
- Startup: manage_all_windows
- Event: event_handle_signal_exit
Structural changes:
- MWMHints moved from motif.c local typedef to motif.h
- WProtocols given struct tag for forward declaration
- Static functions made non-static: wGetTextSelection, wGetCommandForWindow,
wGetMWMHints, wWipeDesktop, wManageAllWindows, wNETWMUpdateWindowOpacity
Verification: grep -rn 'if (!dpy)' src/*.c returns zero results.
nm wl_backend.o confirms no new X11 symbols in Wayland path.
2026-05-13 10:01:57 +02:00
Levi Neely
5c85016a9b
wayland: Phase 12 — guard bounce animation against NULL dpy in Wayland mode
...
doAppBounce calls XMoveWindow which crashes when dpy is NULL. Add
early return so urgent-window bounce animations are silently skipped
in Wayland mode (no X11 icon window to move).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-28 20:54:44 +01:00
Levi Neely
a486329b52
Wayland backend abstraction: WMBackend vtable (Phases 0–30)
...
Introduce a display-system-agnostic WMBackend vtable that routes all
display operations through function pointers, making the WM policy
layer independent of X11. The X11 implementation is preserved in
src/backend/x11/ and behaviour is unchanged.
Key structural changes
──────────────────────
• src/backend/backend_types.h — backend-neutral type definitions:
WNativeWindow, WKeyCode, WContextKey, WBackendScreen,
WBackendEvent (+typed fields), WNormalHints, WWMHints,
WNETWindowType, WHeadGeometry, WClientAttributes, WClientVisual,
WSegment, WPoint, WM_KEY_* keysym constants, WA_* atom IDs,
WKB_GROUP*_INDEX, WCUR_NONE
• src/backend/backend.h — WMBackend vtable (~100 function-pointer
slots) covering: frame/context lifecycle, stacking, focus, grabs,
pointer, keyboard, overlays, properties, ICCCM, EWMH/NETWM,
monitors, screen setup, cursors, extensions, error handlers.
No <X11/> headers remain in this file after Phase 30.
• src/backend/x11/ — X11 backend implementation:
x11_backend.c full vtable; all display calls confined here
x11_props.c WM_NORMAL_HINTS / WM_HINTS translation
x11_event.c XEvent → WBackendEvent translation
x11_monitor.c Xinerama / RandR monitor query
Policy files cleaned
────────────────────
All 47 files in WM_POLICY_CLEAN_FILES pass check-no-x11-policy
(no direct #include <X11/> anywhere). X11 types that still appear
in policy structs (Visual*, Colormap, Window, Atom …) arrive only
transitively via WINGs.h; the vtable boundary itself is X11-free.
Tests
─────
• tests/smoke-test.sh — full Xvfb lifecycle test (PASS)
• tests/test_geom.c — geometry / constraint unit tests
• tests/test_x11_event.c — WBackendEvent field extraction tests
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 19:20:00 +01:00
Levi Neely
fcee811b99
WindowMaker 0.96.0 upstream source
2026-03-26 15:38:49 +01:00