WPrefs.app: zero X11 deps, zero #ifdef USE_X11_BACKEND
Complete architectural separation: all WPrefs.app panel code is now
backend-neutral. No X11 calls, no X11 types, no X11 includes, no
backend-specific #ifdef guards in shared sources.
New W_EventBackend vtable methods (implemented in X11, stubbed in WL):
- grab_keyboard / ungrab_keyboard / allow_events
- grab_pointer / ungrab_pointer / query_pointer
- get_window_geometry / move_window / translate_coordinates
- get_root_window / query_tree
- get_pointer_control / set_pointer_control
- modifier_from_key / get_modifier_keysyms
- keysym_to_string / keysym_to_keycode / keycode_to_keysym
- keysym_convert_case
- send_wm_command
- set_window_hints / set_window_property_string / set_window_property_data
- recolor_cursor
- set_error_handler / restore_error_handler
Panel changes:
- xmodifier.c: thin wrapper calling eventBackend->modifier_from_key()
- main.c: X11 locale init removed (belongs in backend screen_init)
- WPrefs.c: eventBackend->send_wm_command("Reconfigure")
- MouseSettings.c: vtable for pointer control + modifier keysyms
- KeyboardShortcuts.c: vtable for grab/keysym/modifier ops
- Menu.c: RImage crosshair icon, vtable keyboard grab
- editmenu.c: vtable for all window/pointer/property ops
Verified: nm audit shows zero X11 symbol refs in WPrefs .o files.
grep shows zero #ifdef USE_X11_BACKEND in WPrefs.app/.