windowmaker-wl/src
Levi Neely b576025f9b wayland: Phase 78 — keyboard event dispatch and WM shortcut handler
Add wWaylandKeyPress(keycode, modifiers) to event.c/h: scans
wKeyBindings and dispatches a subset of WM shortcuts (miniaturize,
hide, maximize, raise/lower, close, focus-next/prev, workspace switch)
using raw XKB keycode + modifier values instead of an XEvent.

In wl_backend.c, wire handle_keyboard_key and handle_keyboard_modifiers
listeners on the headless keyboard device so that:
- key events are checked against WM shortcuts first
- non-shortcut keys are forwarded to the focused client via
  wlr_seat_keyboard_notify_key
- modifier changes are always notified via wlr_seat_keyboard_notify_modifiers

The headless backend doesn't generate real key events so the listener
is a no-op in the smoke test, but the infrastructure is ready for a
real DRM+libinput backend.

Smoke test: check for "keyboard key+modifiers listeners wired" log.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-28 20:36:32 +01:00
..
backend wayland: Phase 78 — keyboard event dispatch and WM shortcut handler 2026-03-28 20:36:32 +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 71b — additional frame NULL guards in actions.c 2026-03-28 09:51:50 +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: Phase 75 — frame NULL guards in cycling.c 2026-03-28 10:00:02 +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: Phase 77 — XKB keymap + keysym_to_keycode + modifier masks 2026-03-28 20:32:07 +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 78 — keyboard event dispatch and WM shortcut handler 2026-03-28 20:36:32 +01:00
event.h wayland: Phase 78 — keyboard event dispatch and WM shortcut handler 2026-03-28 20:36:32 +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: Phase 72 — frame NULL guards in event.c and moveres.c 2026-03-28 09:55:05 +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 70 — apply WIN_WORKSPACE macro to all frame->workspace reads 2026-03-28 09:46:35 +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: Phase 77 — XKB keymap + keysym_to_keycode + modifier masks 2026-03-28 20:32:07 +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: Phase 76 — frame NULL guard in switchpanel.c title display 2026-03-28 10:01:45 +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: Phase 77 — XKB keymap + keysym_to_keycode + modifier masks 2026-03-28 20:32:07 +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 74 — frame NULL guards in window.c 2026-03-28 09:58:43 +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: Phase 73 — frame NULL guards in wmspec.c and winmenu.c 2026-03-28 09:56:44 +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 73 — frame NULL guards in wmspec.c and winmenu.c 2026-03-28 09:56:44 +01:00
wmspec.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
workspace.c wayland: Phase 70 — apply WIN_WORKSPACE macro to all frame->workspace reads 2026-03-28 09:46:35 +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: Phase 77 — XKB keymap + keysym_to_keycode + modifier masks 2026-03-28 20:32:07 +01:00
xmodifier.h wayland: Phase 77 — XKB keymap + keysym_to_keycode + modifier masks 2026-03-28 20:32:07 +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