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
803666fd5e
WIP: Pure Wayland WINGs screen init (no X11 in WM path)
...
- WMCreateScreenWithRContext: add Wayland path that skips all X11 calls
(no GCs, no atoms, no XListProperties, no XCreateGC)
- screen.c: skip RCreateContext in Wayland mode (pass NULL rcontext)
- Wayland path initializes: font/event/render backends, colors, fonts
Current issue: W_RealizeView tries to create X11 windows for WINGs
widgets. Need to make view realization work without X11 (views should
be pixman buffers in Wayland mode, not X windows).
The grey background + cursor render correctly. Startup reaches
WINGs init but crashes when widgets try to realize without a display.
2026-05-13 07:38:38 +02:00
Levi Neely
9b2448dd7f
WIP: Wayland backend - fix atoms, OR surface compositing, frame/window ops
...
Key changes in wl_backend.c:
- wl_atom_intern: call XInternAtom on XWayland display (was returning 0)
- Add wl_or_view struct to track override_redirect XWayland surfaces
- handle_xwayland_new_surface: composite OR surfaces via scene graph
- frame_create_toplevel/child: create real X11 windows on XWayland
- frame_destroy/configure: delegate to Xlib
- window_map/unmap/move/resize: fall through to Xlib for frame windows
- stacking_raise/lower: update scene graph + Xlib fallback
- event_flush/sync: call XFlush/XSync on XWayland display
- window_set_border/border_width/clear: delegate to Xlib
- window_get_rect: query XWayland geometry for non-toplevel windows
Note: frame creation via XWayland is a temporary bridge. The correct
architectural approach is native scene-buffer rendering with pixman.
2026-05-13 07:05:22 +02:00
Levi Neely
b671f385ac
gitignore: stop tracking all generated build outputs
...
Untrack and ignore all autotools-generated files (Makefile.in, configure,
config.h.in, compile, config.guess, config.sub, depcomp, install-sh,
missing, ltmain.sh, m4/libtool.m4, INSTALL), generated Makefiles,
compiled binaries, object files, libtool artifacts, generated headers,
man pages, and Wayland protocol headers.
Run `autoreconf -i && ./configure` to regenerate before building.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 13:36:58 +02: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