Skip to content

Shared input edges and observation resume — 2026-10-12 ​

Accepted scope: a real retained-widget/cursor bug is repaired in IFInputPresentation.60current source/exact Development-package reports pass on5.6.1/5.7.4/5.8.3. These are software event/notification tests; physical controller testing remains explicitly deferred.

Reproduced problem and fix ​

When a developer temporarily disabled observation without removing the root, engine CommonInput could change families while retained Blueprint screens kept their old presentation. Set Observation Enabled(true) assigned the service's new value without publishing it, so the Blueprint screen behind a modal stayed Gamepad and the cursor stayed hidden. Re-enabling an unchanged MouseAndKeyboard family also reset Keyboard to Pointer unnecessarily. Both actual normal/enlarged ResumeBaseline runs failed these checks; logs and the negative-control rejection remain preserved.

Re-enabling now retains Pointer/Keyboard within the same engine family, reacquires only InterfaceForge's named input lock under its reentrancy guard, reads the effective family, updates the last non-gamepad mode and publishes a changed presentation. Existing Blueprint events and top-screen cursor/focus policy respond without creating a new root or widget class. External engine locks/filters remain authoritative. Input while disabled cannot be retroactively classified; a newly observed MouseAndKeyboard family starts Pointer until fresh keyboard intent.

Only two candidate paths changed from SettingsAudio: core IFInputPresentation.cpp and sample ForgeCustomizationReview.cpp. No asset, material, animation, settings, audio, reference design or gameplay change.153candidate files/53own packages/63core files. Before-InputEdges snapshots/progress preserve originals. Public Blueprint workflow.

Actual software interactions ​

The saved developer-created Survey/Entry/Source/Root example operates behind a real modal. Actual Slate events prove0.15analog drift remains Keyboard,0.7crossing becomes Gamepad, a held0.8axis cannot reclaim control after meaningful pointer travel, and release/new crossing restores Gamepad. Injected mapper delegate notifications for another device and another platform user leave the local player unchanged; its active device's notification restores the last non-controller presentation. No hardware state is registered, disconnected or probed.

Repeated controller key events cannot count as fresh intent. Synthetic touch start/end updates the custom Blueprint event behind the modal and hides the cursor; fresh keyboard restores navigation. Observation disable/change/resume updates retained widgets/cursor; same-family resume preserves Keyboard. Ignore Next Pointer Move suppresses one caller-owned warp, then later meaningful movement restores Pointer. Existing jitter rejection, modal Back/focus, theme/entry/data/action/root lifetime checks remain required.

Current complete RTS/RPG main→settings-preview/loading→HUD→pause/resume→return/dialog regressions pass. Native/custom HUD prompt tests retain actual CommonInput glyphs/applied remap, modal/pointer/keyboard/focus and cleanup behavior. Thus the core fix is checked beyond its targeted callback. Default1280×720 and800×600/150%UI+text; no new resolution/mobile claim.

Builds and exact packages ​

Installed Build.bat ForgeExamplesEditor Win64 Development -Project=<own project> -WaitMutex -NoHotReloadFromIDE; complete30-class CompileAllBlueprints allowlist with NullRHI/unattended/nosplash/InstalledNoZenLocalFallback and unique logs. Fresh153-file UE57/58-InputEdges copies change only copied EngineAssociation.

Actual engineStrict independent core tool wallEditor buildBlueprint compilation
5.6.1 CL4439499661.12s3.09s30classes/0errors/0warnings/0failed loads
5.7.4 CL5149498261.92s40.48ssame
5.8.3 CL5821070953.30s46.41ssame

Tools/verify_engine_matrix.ps1 -Milestone InputEdges passes strict Win64 Editor Development/Game Development/Shipping and isolated loading without examples/MassForge/inventory.23native types/16unique packages;5.7registry17includes generated controller class. All63newcore files match each host; no strict native compiler warning/error lines. The full5.8sample still has20existing C4305 colors/2CS0618 include-order warnings; do not call that build warning-free.

60runtime reports:10source+10exact cooked per engine. Source56 custom prefix InputEdges-ResumeFixSource, menu InputEdges-FlowSource, prompt InputEdges-PromptSource. Newer/cooked prefixes InputEdges57/58 or56/57/58-{Custom,Flow,Prompt}{Source,Cooked}. Tools receive actual EngineVersion/isolated ProjectPath or exact inner PackagedExecutable. All final processes and strict verifiers pass. Exact arguments/results/receipts (local verification record).

Serialized RunUAT BuildCookRun uses own project, noP4/platformWin64/clientconfigDevelopment/build/cook/stage/pak/archive, both maps, NoHotReloadFromIDE and InstalledNoZenLocalFallback. Exact engine Log.txt/FinalCopyWin64_UFSFiles.txt preserved before another UAT run; fixtures use each archive's inner Windows/ForgeExamples/Binaries/Win64/ForgeExamples.exe.

ArchiveBuild/cook/stage/archiveCookCooked + platform skippedStaging targets
InputEdgesUE5622.08s8.89s486+7=4932663
InputEdgesUE5752.81s15.89s488+7=4952678
InputEdgesUE58109.73s35.49s559+7=5662341

Exact boundaries153source/53own packages/5546reference hashes pass each manifest. All153canonical and152copied files per newer engine match after verification; only copied association differs. No final cook/Blueprint/material/shader warning/error lines. Two actual source/cooked enlarged custom-screen renders reviewed/copied: text/actions/progress remain usable after modal/input changes and external-model completion. Visuals alone do not establish device switching; runtime callback/focus/glyph evidence supplies that proof.

Preservation and limits ​

Failed ResumeBaseline and narrower initial edge successes are retained, not counted as final acceptance. Current verifier rejects the actual failed logs. InputEdges-References.json confirms all discovery HEAD/prior changed-file hashes/5546UIpackage hashes match; Sakura status unchanged. GameMaster/MassForge have separately observed external code changes and their full statuses are not unchanged. No reset/rebaseline/native/reference app operation/commit/publication. All own milestone handles terminal.

Win64 DX11 RenderOffscreen with synthetic Slate key/analog/pointer/touch and injected mapper notifications only. This establishes software drift/disconnect/touch/resume semantics, not physical native timing, hardware drift/disconnect/touchscreen/mobile or multiplayer/split-screen certification. Controller hardware explicitly deferred by the user. No new brand glyph pack or full platform certification. Performance/localization/accessibility/custom exit/final visual polish and remaining full-goal gates stay active. Inventory remains outside scope; Game Master design exclusive; Sakura tint unchanged.

UIForge v0.1.0 · Blueprint and C++ development documentation.

Enlarged documentation image

Enlarged documentation image