Skip to content

Key input follows the client's walks; stock login takes typing - #1027

Merged
samwhosung merged 8 commits into
mainfrom
sess/gluelogin
Oct 12, 2026
Merged

samwhosung merged 8 commits into
mainfrom
sess/gluelogin

Conversation

@samwhosung

Copy link
Copy Markdown
Owner

Key input follows the client's walks: key-down (0x765f10), char (0x765df0), key-up to the recorded consumer (0x765fd0) and repeat (0x766070).

  • EditBoxes are in the walk from creation (0x779ced), so the stock login's boxes take typing; only a focused box consumes. A box declines PRINTSCREEN and unaltered arrows on an ignoreArrows box, so stack-split steps under a focused chat box. A binding's press records the world frame.
  • Repeats follow the pressed-key list, so a held key resumes after alt-tab. Chords reach a box only through the walk. Keys the client can't name walk nowhere.
  • The stock login reads the agreements before its first screen. Cinematics returns to login (no movie player; Deviation). The Realmlist box has its middle border.
  • Alt+F4 closes the window on Windows and Linux (Deviation: the reference relies on the OS).

Fixes #179
Fixes #1003
Fixes #1004
Fixes #1005
Fixes #1019

🤖 Generated with Claude Code

🤖 Generated with Claude Code

samwhosung and others added 8 commits October 12, 2026 17:52
The EditBox ctor enables char and key input (0x779ced, 0x779cf8) and the
WorldFrame's key input (0x481b09); benilla created every frame inert, so a
keyboard frame such as AccountLogin took each key before the focused box.
Boxes are now frames in both walks at their own strata and level: the
focused one consumes, an unfocused one declines, and with none focused the
first autoFocus box in walk order takes the focus and the key (0x77a917).

Fixes #179

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The reference reads the four agreement CVars (0x46a400 at 0x402b36)
before SET_GLUE_SCREEN (0x402b65). benilla set the login screen first, on
default flags, and seeded them a frame later, so a returning player saw the
EULA again. The glue VM and the manager now take them from the CVar
registry as the VM is built, and the install waits for the CVar load.

Fixes #1003

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MovieFrame_OnShow raised on the unbuilt movie verbs, leaving a black
screen. Build GetMovieSubtitles (0x46dbc0), GetMovieResolution (0x46cf10),
HideCursor and ShowCursor (0x46db70, 0x46db60), the MovieFrame methods
StartMovie, StopMovie and EnableSubtitles (0x78d770, 0x78d870, 0x78d940)
and its three OnMovie* scripts (0x78c2e0).

Deviation: no movie plays (#968), so StartMovie answers nil and the stock
Lua hides the frame and returns to login.

The key-up dispatcher (0x765fd0) runs OnKeyUp on the frame that consumed
the key's last down (recorded at 0x765fa2); the host now feeds releases.

Fixes #1004

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The stock GlueDialogEditBox draws two 75-pixel caps that meet at its own
130 pixels; the dialog widens it to 300, which left the middle empty. The
widened box now takes the chat box's stretched middle piece
(ChatFrame.xml:41-55) between the caps, hidden again when the stock box
returns.

Fixes #1005

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A box declines PRINTSCREEN and, in alt-arrow mode without ALT, the four
arrows before it looks at focus (0x77b17f, 0x77b18e-0x77b1c4), so the walk
goes on below it: a split dialog or colour picker under the chat box takes
the arrow, and a declined key grants no focus. The host now feeds one
walk per press (0x765f10) and acts on the box it reached, not the focused
one; a frame that took a key keeps its paste, copy and editing from the box.

The key-up goes only to a linked consumer (0x76bba7); a press a binding ran
makes the world frame its consumer (0x483b70); an auto-repeat goes to the
consumer's +0x58 (0x766070), a stub on a frame and the key-down on a box
(0x77b770). Modifiers walk as SHIFT, CTRL and ALT, unnamed keys as UNKNOWN
(0x76b7d0). PRINTSCREEN's binding runs while typing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The XML walker enables the char bucket for OnChar (0x769f6b) and the key
bucket for OnKeyDown and OnKeyUp (0x769fa4), each alone; benilla set both.

The walk's tie order was the draw list's link order. A bucket entry is
inserted after its equals (0x764aa0) when the frame links, when a level or
strata change takes it out and in again (0x76a470, 0x76a4f0), and when
EnableKeyboard sets a bit on a linked frame (0x76af00). Each bucket now
stamps those, so a frame enabled later walks after the ones already there.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The reference hands Alt+F4 to DefWindowProc (0x42d261-0x42d276), whose
SC_CLOSE becomes the kind-5 quit event (0x42d287) and quits at once
(0x423a21 -> 0x423ca0 -> 0x41f5d0 -> 0x422030). A tiling window manager
binds nothing to it, so benilla reads F4 with Alt held before the loading
cover swallows input and writes the primary window's close request, which
the shutdown tail serves.

Deviation: the reference relies on the OS for this. Not on macOS (Cmd+Q).

Fixes #1019

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A held movement key no longer stalls after an alt-tab: the feed decides
repeat from a pressed-key list with the bindings' reconcile (0x424790,
0x4248b3), not winit's flag, so the first repeat is a fresh press. The
repeat dispatcher (0x766070) reports consumed whenever a consumer is on
record and a box grants autoFocus before its key-down may decline
(0x77b799).

Keys the client drops before any walk (Command, fn, Windows, Menu, media
keys; 0x42da39, Mac table 0x5bf320) no longer walk as UNKNOWN or grant a
box focus; only 0x210/0x211 are UNKNOWN. A box that took a key eats its
binding (0x77b1db -> 0x77b35e); the char walk gates none.

In the world the key-up is sent from the bindings pass in event order with
the press that made the world frame the consumer. PRINTSCREEN's up with no
consumer runs the key-down walk and, undeclined, its binding
(0x76603c-0x76604d), as Windows sends that key as an up alone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@samwhosung
samwhosung merged commit 781bf36 into main Oct 12, 2026
1 check passed
@samwhosung
samwhosung deleted the sess/gluelogin branch October 12, 2026 11:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment