Skip to content

PABotBase2: hold message handlers and the rumble callback in MoveOnlyFunction - #90

Draft
dayfine wants to merge 4 commits into
common/move-only-sessions-detectorsfrom
common/move-only-pabotbase2-handlers
Draft

dayfine wants to merge 4 commits into
common/move-only-sessions-detectorsfrom
common/move-only-pabotbase2-handlers

Conversation

@dayfine

@dayfine dayfine commented Oct 31, 2026

Copy link
Copy Markdown
Owner

Depends on #89 (base common/move-only-sessions-detectors; the diff shows only this change).

PABotBase2 message handlers and the OEM controller's rumble callback now use MoveOnlyFunction.

  • DeviceHandle::add_message_handler() moves each handler into its map, and the OEM controller keeps the rumble callback it was given. Neither is copied.
  • The Pro Controller and Joy-Con constructors pass lambdas and are unchanged.

Testing

  • Built on fork CI on the top of the stack: Mac, Windows clang and Ubuntu. Not run against a real controller; the change only replaces the callback's type.

🤖 Generated with Claude Code

https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E

…Function

DeviceHandle owns each message handler and the OEM controller owns its
rumble callback; neither is copied.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
dayfine added a commit that referenced this pull request Oct 31, 2026
…95)

Changing a parameter's type (std::function to MoveOnlyFunction in #90) changed
the function's key, so an existing 133-line constructor was held to the new
limit of 50 instead of its base length. Functions now match on their qualified
name without parameters; messages still show the full signature.


Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
dayfine added a commit that referenced this pull request Nov 1, 2026
* Code health: skip nested and detail classes in the single-method interface check (#82)

A class nested in another class, or in a detail or anonymous namespace, is an
implementation detail such as a type-erasure base, not an interface others
implement. MoveOnlyFunction's private Callable base was flagged.


Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* Code health: lexical C++ style checks on added lines (#94)

* Code health: skip nested and detail classes in the single-method interface check

A class nested in another class, or in a detail or anonymous namespace, is an
implementation detail such as a type-erasure base, not an interface others
implement. MoveOnlyFunction's private Callable base was flagged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E

* Code health: lexical C++ style checks on added lines

Check the lines a change adds for the upstream bans (std::filesystem,
std::thread, std::mutex, std::async), control-flow brace formatting, and
the Abseil tips adopted in the fork's C++ style notes: mutable globals
(#103), new/delete (#126), std::bind (#108), return std::move(local)
(#120), top-level const by-value header parameters (#109), bool
parameters (#94), header using-directives (#153) and forward
declarations. A comment that describes a neighbouring function is an
advisory.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* code_health: match functions to their base by name, not by signature (#95)

Changing a parameter's type (std::function to MoveOnlyFunction in #90) changed
the function's key, so an existing 133-line constructor was held to the new
limit of 50 instead of its base length. Functions now match on their qualified
name without parameters; messages still show the full signature.


Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* Settings: default audio display and collapsed console settings

Two global settings for people who run many programs on one lab machine:
"Default Audio Display" (Audio Pipeline group) is what a program's console
shows for its audio until that console's own setting is saved, so a new
panel no longer opens with the frequency bars; and "Start with console
settings collapsed" folds each program's "Console N Settings" box at
creation, so the video is at the top. Both default to today's behavior.

AudioOption takes its initial display type from the global setting
instead of a fixed FREQ_BARS; a panel's saved value still wins.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
(cherry picked from commit 92d1ed3c6f6fa0468827ab15c51ec3cc71f01d32)

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
dayfine added a commit that referenced this pull request Nov 1, 2026
…104)

* Code health: skip nested and detail classes in the single-method interface check (#82)

A class nested in another class, or in a detail or anonymous namespace, is an
implementation detail such as a type-erasure base, not an interface others
implement. MoveOnlyFunction's private Callable base was flagged.

Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E



* Code health: lexical C++ style checks on added lines (#94)

* Code health: skip nested and detail classes in the single-method interface check

A class nested in another class, or in a detail or anonymous namespace, is an
implementation detail such as a type-erasure base, not an interface others
implement. MoveOnlyFunction's private Callable base was flagged.


Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E

* Code health: lexical C++ style checks on added lines

Check the lines a change adds for the upstream bans (std::filesystem,
std::thread, std::mutex, std::async), control-flow brace formatting, and
the Abseil tips adopted in the fork's C++ style notes: mutable globals
(#103), new/delete (#126), std::bind (#108), return std::move(local)
(#120), top-level const by-value header parameters (#109), bool
parameters (#94), header using-directives (#153) and forward
declarations. A comment that describes a neighbouring function is an
advisory.


Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E

---------



* code_health: match functions to their base by name, not by signature (#95)

Changing a parameter's type (std::function to MoveOnlyFunction in #90) changed
the function's key, so an existing 133-line constructor was held to the new
limit of 50 instead of its base length. Functions now match on their qualified
name without parameters; messages still show the full signature.

Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E



* Settings: default audio display and collapsed console settings

Two global settings for people who run many programs on one lab machine:
"Default Audio Display" (Audio Pipeline group) is what a program's console
shows for its audio until that console's own setting is saved, so a new
panel no longer opens with the frequency bars; and "Start with console
settings collapsed" folds each program's "Console N Settings" box at
creation, so the video is at the top. Both default to today's behavior.

AudioOption takes its initial display type from the global setting
instead of a fixed FREQ_BARS; a panel's saved value still wins.


Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
(cherry picked from commit 92d1ed3c6f6fa0468827ab15c51ec3cc71f01d32)

---------


(cherry picked from commit 0e737fb)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
@dayfine dayfine added game:shared Shared or game-neutral code refactor No behavior change labels Nov 1, 2026
dayfine and others added 3 commits November 2, 2026 15:18
…y-pabotbase2-handlers

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
…y-pabotbase2-handlers

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
…y-pabotbase2-handlers

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

game:shared Shared or game-neutral code refactor No behavior change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant