Skip to content

0.28.6.4#1396

Merged
Valkirie merged 690 commits into
mainfrom
0.28.6.4
Apr 8, 2026
Merged

0.28.6.4#1396
Valkirie merged 690 commits into
mainfrom
0.28.6.4

Conversation

@Valkirie

@Valkirie Valkirie commented Apr 8, 2026

Copy link
Copy Markdown
Owner

Summary by CodeRabbit

Release Notes

  • New Features

    • Added virtual joystick (vJoy) controller emulation support for enhanced compatibility
    • Introduced DInput controller mode option
    • Implemented library view modes (grid, list, and wide layouts) with persistent preferences
    • Added logo artwork support for game profiles
    • Expanded Quick Device page with display resolution/frequency controls and system feature toggles
  • Improvements

    • Enhanced device sensor calibration for multiple handheld devices
    • Added process suspend/resume functionality for better game management
    • Improved library filtering and search across all view modes
  • Bug Fixes

    • Fixed display settings application logic and frequency enumeration
    • Corrected gyroscope and accelerometer axis mappings for specific devices

Valkirie and others added 27 commits March 14, 2026 09:05
- PreserveNewest for all 3D model files: Avoids copying hundreds of unchanged files every build.
- TieredCompilationQuickJitForLoops set to True for faster startup.
- GarbageCollectionAdaptationMode set to 0 to avoid GC scale-up stall when the app goes from idle to active.
* Early WIP

* More work

* More work on FindAvailableDeviceId

* More work

* more work

* Implemented: MountDevice and DismountDevice

* Add missing enums

* Code cleanup

* tentative: add rumble support

* Fixed an issue causing UI freeze when SDL controller GameType couldn't be pulled

* UI: Implement UI navigation debouncing

* code cleanup

* UI: Add a few quick buttons to ProfilesPage

* build 0.28.6.0 (vJoy)

Fixed an issue with vJoy SDL mapping

* UI: Improved Library artwork refresh logic

* build 0.28.6.1
* UI: Attempting to make it faster

* More work

* UI: Misc tweaks

* UI: Fixed WindowState logic

* UI: Misc tweaks

* More work on smaller optimizations

* UI: Reduce overhead when creating hotkeys

* UI: Migrate Hotkey settings to a dedicated page

* UIGamepad: Improve history logic

* UI: Improve caching logic for Library

* UI: Improve navigation focus and button/text logic

* Library: SDL3-CS (3.4.2)

* Update MainWindow.xaml.cs

* UI: Improve gamepad navigation

When the focused control lives inside a scrollViewer, controls sharing that same scrollViewer ancestor are considered first.

* UI: Fixed an issue with Hotkey chord listening ToggleButton

* UI: UI: Fixed an issue with Hotkey chord listening ToggleButton (proper)

* UI: Improved UIGamepad IsEnabled, IsVisible check logic

* UI: Fixed an issue causing a crash when Library index is OutOfRange

* UI: Improve Library ContentDialog ViewModel logic

* build 0.28.6.2

* Memory leak: Fixed LibreHardwarePlatform

* UI: Improve profiles page(s) behavior

* Misc optimizations

* Misc work

* Update ProfileViewModel.cs

* Fix binding error

* UI: Asynchronously display games

* UI: Add play button on mouse hover

* Add new ViewMode: All Wide

* UI: Toggle Play/Stop button on mouse hover

* build 0.28.6.3

* Add GameControllerDB download during post-install setup (#514)

* Installer: download gamecontrollerdb.txt to install dir

Adds a CurStepChanged(ssPostInstall) handler that fetches the latest
gamecontrollerdb.txt from SDL_GameControllerDB master branch and places
it at the root of the install folder ({app}\gamecontrollerdb.txt).

https://claude.ai/code/session_014L6Fi571YpvKtvBhExibhZ

* Remove bundled gamecontrollerdb.txt, now fetched by installer

The installer downloads the latest gamecontrollerdb.txt from
SDL_GameControllerDB at install time, so the file no longer needs
to be shipped in the repo or copied via the build output.

https://claude.ai/code/session_014L6Fi571YpvKtvBhExibhZ

---------

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

* Fixed an issue with SDL controller glyph pulling

* Show descriptive message while downloading gamecontrollerdb

* build 0.28.6.4

---------

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

coderabbitai Bot commented Apr 8, 2026

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 9a0cb329-5721-42f8-845a-c1cbb8d0a05a

📥 Commits

Reviewing files that changed from the base of the PR and between 51759a7 and 098b0c5.

⛔ Files ignored due to path filters (10)
  • HandheldCompanion/IGCL_Wrapper.dll is excluded by !**/*.dll
  • HandheldCompanion/PresentationCore.dll is excluded by !**/*.dll
  • HandheldCompanion/Resources/MissingArtwork.png is excluded by !**/*.png
  • HandheldCompanion/Resources/MissingCover.png is excluded by !**/*.png
  • HandheldCompanion/SDL3.dll is excluded by !**/*.dll
  • HandheldCompanion/vJoyInterface.dll is excluded by !**/*.dll
  • HandheldCompanion/vJoyInterfaceWrap.dll is excluded by !**/*.dll
  • HandheldCompanion/vcruntime140_1d.dll is excluded by !**/*.dll
  • HandheldCompanion/vcruntime140d.dll is excluded by !**/*.dll
  • redist/vJoySetup_v2.2.2.0_Win10_Win11.exe is excluded by !**/*.exe
📒 Files selected for processing (134)
  • .github/workflows/publish-hc.yml
  • HandheldCompanion.iss
  • HandheldCompanion.sln
  • HandheldCompanion/Actions/AxisActions.cs
  • HandheldCompanion/Actions/ButtonActions.cs
  • HandheldCompanion/Actions/GyroActions.cs
  • HandheldCompanion/Actions/IActions.cs
  • HandheldCompanion/Actions/InheritActions.cs
  • HandheldCompanion/Actions/KeyboardActions.cs
  • HandheldCompanion/Actions/MouseActions.cs
  • HandheldCompanion/Actions/ShiftActions.cs
  • HandheldCompanion/Actions/TriggerActions.cs
  • HandheldCompanion/App.config
  • HandheldCompanion/App.xaml
  • HandheldCompanion/App.xaml.cs
  • HandheldCompanion/Commands/Functions/HC/HIDModeCommands.cs
  • HandheldCompanion/Controllers/Asus/XboxAdaptiveController.cs
  • HandheldCompanion/Controllers/Lenovo/LegionController.cs
  • HandheldCompanion/Controllers/SDLController.cs
  • HandheldCompanion/Controls/JustifiedWrapPanel.cs
  • HandheldCompanion/Converters/HasArtworkConverter.cs
  • HandheldCompanion/Converters/WidthToAspectHeightConverter.cs
  • HandheldCompanion/Devices/ASUS/ROGAlly.cs
  • HandheldCompanion/Devices/ASUS/XboxROGAlly.cs
  • HandheldCompanion/Devices/ASUS/XboxROGAllyX.cs
  • HandheldCompanion/Devices/GPD/GPDWinMax2-2024-HX370.cs
  • HandheldCompanion/Devices/GPD/GPDWinMax2.cs
  • HandheldCompanion/Devices/GPD/GPDWinMax2Intel.cs
  • HandheldCompanion/Devices/GPD/GPDWinMini-8840U.cs
  • HandheldCompanion/Devices/GPD/GPDWinMini-HX370.cs
  • HandheldCompanion/HandheldCompanion.csproj
  • HandheldCompanion/Helpers/UIHelper.cs
  • HandheldCompanion/Inputs/GyroState.cs
  • HandheldCompanion/Libraries/SteamGridEntry.cs
  • HandheldCompanion/Managers/ControllerManager.cs
  • HandheldCompanion/Managers/DeviceManager.cs
  • HandheldCompanion/Managers/GPUManager.cs
  • HandheldCompanion/Managers/LayoutManager.cs
  • HandheldCompanion/Managers/LibraryManager.cs
  • HandheldCompanion/Managers/MotionManager.cs
  • HandheldCompanion/Managers/MultimediaManager.cs
  • HandheldCompanion/Managers/PerformanceManager.cs
  • HandheldCompanion/Managers/PlatformManager.cs
  • HandheldCompanion/Managers/PowerProfileManager.cs
  • HandheldCompanion/Managers/ProcessManager.cs
  • HandheldCompanion/Managers/ProfileManager.cs
  • HandheldCompanion/Managers/VirtualManager.cs
  • HandheldCompanion/Misc/DisplayDevice.cs
  • HandheldCompanion/Misc/Inclination.cs
  • HandheldCompanion/Misc/NightLight.cs
  • HandheldCompanion/Misc/PowerProfile.cs
  • HandheldCompanion/Misc/ProcessEx.cs
  • HandheldCompanion/Misc/Profile.cs
  • HandheldCompanion/Platforms/Misc/LibreHardwarePlatform.cs
  • HandheldCompanion/Properties/Resources.Designer.cs
  • HandheldCompanion/Properties/Resources.de-DE.resx
  • HandheldCompanion/Properties/Resources.es-ES.resx
  • HandheldCompanion/Properties/Resources.fr-FR.resx
  • HandheldCompanion/Properties/Resources.it-IT.resx
  • HandheldCompanion/Properties/Resources.ja-JP.resx
  • HandheldCompanion/Properties/Resources.ko-KR.resx
  • HandheldCompanion/Properties/Resources.pt-BR.resx
  • HandheldCompanion/Properties/Resources.resx
  • HandheldCompanion/Properties/Resources.ru-RU.resx
  • HandheldCompanion/Properties/Resources.zh-Hans.resx
  • HandheldCompanion/Properties/Resources.zh-Hant.resx
  • HandheldCompanion/Properties/Settings.Designer.cs
  • HandheldCompanion/Properties/Settings.settings
  • HandheldCompanion/Selectors/LibraryItemTemplateSelector.cs
  • HandheldCompanion/Targets/VJoyTarget.cs
  • HandheldCompanion/Targets/ViGEmTarget.cs
  • HandheldCompanion/UI/UIGamepad.cs
  • HandheldCompanion/Utils/HIDUtils.cs
  • HandheldCompanion/Utils/WPFUtils.cs
  • HandheldCompanion/ViewModels/BaseViewModel.cs
  • HandheldCompanion/ViewModels/HotkeyViewModel.cs
  • HandheldCompanion/ViewModels/Layout/Mappings/AxisStackViewModel.cs
  • HandheldCompanion/ViewModels/Layout/Mappings/ButtonStackViewModel.cs
  • HandheldCompanion/ViewModels/Layout/Mappings/GyroMappingViewModel.cs
  • HandheldCompanion/ViewModels/Layout/Mappings/GyroStackViewModel.cs
  • HandheldCompanion/ViewModels/Layout/Mappings/MappingViewModel.cs
  • HandheldCompanion/ViewModels/Layout/Mappings/TriggerStackViewModel.cs
  • HandheldCompanion/ViewModels/Misc/LibraryEntryViewModel.cs
  • HandheldCompanion/ViewModels/Misc/ScreenDividerViewModel.cs
  • HandheldCompanion/ViewModels/Misc/ScreenFramelimitViewModel.cs
  • HandheldCompanion/ViewModels/Misc/ScreenFrequencyViewModel.cs
  • HandheldCompanion/ViewModels/Pages/ControllerPageViewModel.cs
  • HandheldCompanion/ViewModels/Pages/HotkeyPageViewModel.cs
  • HandheldCompanion/ViewModels/Pages/LayoutPageViewModel.cs
  • HandheldCompanion/ViewModels/Pages/LibraryPageViewModel.cs
  • HandheldCompanion/ViewModels/Pages/NotificationPageViewModel.cs
  • HandheldCompanion/ViewModels/Pages/PerformancePageViewModel.cs
  • HandheldCompanion/ViewModels/Pages/ProfilesPageViewModel.cs
  • HandheldCompanion/ViewModels/Pages/QuickApplicationPageViewModel.cs
  • HandheldCompanion/ViewModels/Pages/QuickDevicePageViewModel.cs
  • HandheldCompanion/ViewModels/Pages/QuickHomePageViewModel.cs
  • HandheldCompanion/ViewModels/Pages/QuickProfilesPageViewModel.cs
  • HandheldCompanion/ViewModels/Pages/SettingsMode0ViewModel.cs
  • HandheldCompanion/ViewModels/ProcessExViewModel.cs
  • HandheldCompanion/ViewModels/ProfileViewModel.cs
  • HandheldCompanion/ViewModels/Windows/MainWindowViewModel.cs
  • HandheldCompanion/Views/Classes/GamepadWindow.cs
  • HandheldCompanion/Views/Pages/ControllerPage.xaml
  • HandheldCompanion/Views/Pages/ControllerPage.xaml.cs
  • HandheldCompanion/Views/Pages/DevicePage.xaml.cs
  • HandheldCompanion/Views/Pages/HotkeySettingsPage.xaml
  • HandheldCompanion/Views/Pages/HotkeySettingsPage.xaml.cs
  • HandheldCompanion/Views/Pages/HotkeysPage.xaml.cs
  • HandheldCompanion/Views/Pages/LayoutItemPage.xaml
  • HandheldCompanion/Views/Pages/LayoutPage.xaml.cs
  • HandheldCompanion/Views/Pages/LibraryPage.xaml
  • HandheldCompanion/Views/Pages/LibraryPage.xaml.cs
  • HandheldCompanion/Views/Pages/OverlayPage.xaml
  • HandheldCompanion/Views/Pages/Profiles/SettingsMode0.xaml.cs
  • HandheldCompanion/Views/Pages/Profiles/SettingsMode1.xaml.cs
  • HandheldCompanion/Views/Pages/ProfilesPage.xaml
  • HandheldCompanion/Views/Pages/ProfilesPage.xaml.cs
  • HandheldCompanion/Views/Pages/SettingsPage.xaml.cs
  • HandheldCompanion/Views/QuickPages/QuickDevicePage.xaml
  • HandheldCompanion/Views/QuickPages/QuickDevicePage.xaml.cs
  • HandheldCompanion/Views/QuickPages/QuickHomePage.xaml.cs
  • HandheldCompanion/Views/QuickPages/QuickProfilesPage.xaml
  • HandheldCompanion/Views/QuickPages/QuickProfilesPage.xaml.cs
  • HandheldCompanion/Views/TemplatesDictionary.xaml
  • HandheldCompanion/Views/Windows/MainWindow.xaml
  • HandheldCompanion/Views/Windows/MainWindow.xaml.cs
  • HandheldCompanion/Views/Windows/OverlayModel.xaml.cs
  • HandheldCompanion/Views/Windows/OverlayQuickTools.xaml
  • HandheldCompanion/Views/Windows/OverlayQuickTools.xaml.cs
  • HandheldCompanion/XInputPlus/XInputPlus.cs
  • HandheldCompanion/gamecontrollerdb.txt
  • utils/ApiUtils.iss
  • utils/UpdateUninstallWizard.iss
  • utils/Utils.iss

📝 Walkthrough

Walkthrough

This large-scope pull request introduces vJoy virtual controller support with DInput mode, implements gyro velocity-based scaling, redesigns the library UI with view modes and artwork handling, refactors multiple manager classes for improved synchronization and lifecycle management, and updates device-specific sensor configurations. Substantial changes span installers, core actions, device support, managers, converters, UI components, ViewModels, and localization resources.

Changes

Cohort / File(s) Summary
Installer Configuration
.github/workflows/publish-hc.yml, HandheldCompanion.iss, HandheldCompanion.sln
Removed workflow input parameter; bumped app version to 0.28.6.4; added SDL GameControllerDB download support; updated Windows minimum version to 10.0.19041; added Core Isolation detection/disabling logic; refactored RTSS process termination to pre-install phase; simplified uninstall cleanup; updated Visual Studio metadata.
Action System Refactoring
HandheldCompanion/Actions/AxisActions.cs, ButtonActions.cs, GyroActions.cs, IActions.cs, InheritActions.cs, KeyboardActions.cs, MouseActions.cs, ShiftActions.cs, TriggerActions.cs
Added aggressive inlining attributes for performance; renamed internal state fields to camelCase; refactored ButtonActions haptic semantics; introduced GyroVelocityMode enum and velocity-scaling configuration; refactored IActions.Execute via new private helpers (ProcessStartDelay, ProcessPressType, etc.); reworked MouseActions with ComputeStickDelta and axis dispatch logic; updated KeyboardActions modifier handling.
Device & Controller Configuration
HandheldCompanion/Devices/ASUS/ROGAlly.cs, XboxROGAlly.cs, XboxROGAllyX.cs, GPD/GPDWinMax2*.cs, GPD/GPDWinMini*.cs, HandheldCompanion/Controllers/Asus/XboxAdaptiveController.cs, Lenovo/LegionController.cs, SDLController.cs
Added OEM5 button support for ROGAlly with "LIB" chord and custom glyph; configured gyroscope and accelerometer axis swapping for multiple device models; updated accelerometer Y-axis calibration; enhanced SDL controller with cached device properties, supported buttons/axes sets, and glyph overrides; refactored LegionController tap detection with movement thresholding.
Virtual Controller (vJoy) Implementation
HandheldCompanion/Targets/VJoyTarget.cs, ViGEmTarget.cs
New VJoyTarget class implementing vJoy device management with force-feedback support, SDL mapping generation, and device mount/dismount via vJoyConfig; detects available device IDs and writes SDL controller mappings; added protected event-raising helpers to base ViGEmTarget.
Manager Refactoring: Layout, Motion, Library
HandheldCompanion/Managers/LayoutManager.cs, MotionManager.cs, LibraryManager.cs
LayoutManager: refactored into four-pass pipeline with hot-path caching; reworked layout switching via debounce timer; made updateLock/outputState readonly. MotionManager: extended UpdateReport with delta parameter; added velocity-based gyro scaling with accumulator decay; reworked LocalSpace calculation. LibraryManager: added MissingArtwork resource; implemented image caching; switched SteamGridDB queries; added nullable return types; refactored profile art updates by ID.
Manager Refactoring: Controller, Device, GPU, Display
HandheldCompanion/Managers/ControllerManager.cs, DeviceManager.cs, GPUManager.cs, MultimediaManager.cs
ControllerManager: refactored toast routing, added DInputController support, reworked slot/watchdog logic, changed target-clearing semantics with atomic checks. DeviceManager: added virtual-device detection via IsVirtual(), implemented removal/arrival synchronization with placeholder tasks. GPUManager: replaced async polling with coalesced reconciliation mechanism. MultimediaManager: refactored field naming to private, updated display enumeration logic, simplified brightness/WMI management.
Manager Refactoring: Performance, Platform, Power, Profile, Virtual
HandheldCompanion/Managers/PerformanceManager.cs, PlatformManager.cs, PowerProfileManager.cs, ProfileManager.cs, VirtualManager.cs
PerformanceManager: fixed TDP validation with local variable comparisons; added bounds checks for profile TDP values. PlatformManager: added manager initialization check before platform matching. PowerProfileManager: added GetProfileName method with collision detection; changed serialization with rename safety. ProfileManager: moved default power profile assignment; added power profile GUID clearing logic; refactored XInputPlus unregistration. VirtualManager: added SDL mapping initialization; implemented DInputController routing.
UI Helper & Input Infrastructure
HandheldCompanion/Helpers/UIHelper.cs, Inputs/GyroState.cs, Misc/DisplayDevice.cs, Misc/Inclination.cs, Misc/NightLight.cs, Misc/PowerProfile.cs, Misc/ProcessEx.cs, Misc/Profile.cs
UIHelper: changed return type to bool, updated default priority to Background, added exception handling and new async method. GyroState: added aggressive inlining to sensor accessors. Profile: implemented INotifyPropertyChanged, made LibraryEntry nullable, added Icon and Launch members, updated UpdateSource flags. PowerProfile/NightLight: refactored filename sanitization and registry handling. Enhanced ProcessEx and DisplayDevice with nullable event and new constant.
Converters & WPF Controls
HandheldCompanion/Converters/HasArtworkConverter.cs, WidthToAspectHeightConverter.cs, Controls/JustifiedWrapPanel.cs
New HasArtworkConverter filters BitmapImage visibility by checking for missing artwork markers. New WidthToAspectHeightConverter computes height from width using configurable aspect ratio (default 21:9). New JustifiedWrapPanel custom panel with row-based layout, item spanning, justification, and configurable spacing.
Settings & Resources
HandheldCompanion/App.config, App.xaml, Properties/Settings.*, App.xaml.cs, Utils/HIDUtils.cs
Added LibraryViewMode application setting; extended App.xaml resource converters; updated App.xaml.cs with top-level exception handling and unobserved task exception subscription; added DInputController = 2 HID mode (shifting NoController to 3).
XAML Localization Resources
HandheldCompanion/Properties/Resources.*
Updated English resources with new entries (ProfilesPage_ProcessControl, MainWindow_Close/Open, Enum_HIDmode_vJoyController); changed MainWindow_MainWindow from "Main Window" to "Handheld Companion"; removed colon from PowerProfileManualName. Removed corresponding entries from de-DE, es-ES, fr-FR, it-IT, ja-JP, ko-KR, pt-BR, ru-RU, zh-Hans, zh-Hant resource files.
ViewModel Layer: Collection Synchronization & New Classes
HandheldCompanion/ViewModels/BaseViewModel.cs, Layout/Mappings/*.cs, Pages/ControllerPageViewModel.cs, Pages/HotkeyPageViewModel.cs, Pages/LayoutPageViewModel.cs, Pages/NotificationPageViewModel.cs, Pages/PerformancePageViewModel.cs, Pages/QuickApplicationPageViewModel.cs, Pages/SettingsMode0ViewModel.cs, Misc/*.cs
Standardized WPF collection synchronization across ViewModels using shared _collectionLock object instead of anonymous instances. Added new ViewModel classes: ScreenDividerViewModel, ScreenFramelimitViewModel, ScreenFrequencyViewModel. Updated HotkeyViewModel with shared function data caching; modified ProcessExViewModel constructor signature; refactored ProcessManager event handling.
Library & Profile Page ViewModels
HandheldCompanion/ViewModels/Pages/LibraryPageViewModel.cs, QuickDevicePageViewModel.cs, ProfileViewModel.cs
LibraryPageViewModel: removed FavoritesView; added view modes (grid/list/wide) with toggle command; implemented search filtering; refactored sorting with favorites-first + secondary criteria. QuickDevicePageViewModel: new class managing display/device/radio state, resolution/frequency selection, dynamic lighting/night light, WiFi/Bluetooth, AYANEO Flip DS, and fan override. ProfileViewModel: added ToggleProcessCommand, made images backing-field-backed with property notifications, changed navigation/icon logic.
XAML Pages: Library & Profiles
HandheldCompanion/Views/Pages/LibraryPage.xaml, LibraryPage.xaml.cs, ProfilesPage.xaml, ProfilesPage.xaml.cs
LibraryPage: replaced sort ComboBox with icon button; unified favorites/library into single filtered ItemsControl with template selector; added progress ring overlay. ProfilesPage: converted from event-driven to MVVM bindings; added artwork banner with fade-in; restructured profile details with process control dropdown; replaced many ValueChanged handlers with two-way bindings; added logo/artwork preview sections.
XAML Pages: Controller & Hotkey Settings
HandheldCompanion/Views/Pages/ControllerPage.xaml*, HotkeySettingsPage.xaml*, HotkeysPage.xaml.cs
Added DInput controller ComboBox item; changed slot-fix button to text "Adjust order"; updated vibration slider granularity. New HotkeySettingsPage with comprehensive hotkey editing UI. Updated HotkeysPage with static settings page reference.
XAML Pages: Device & Quick Pages
HandheldCompanion/Views/Pages/DevicePage.xaml.cs, OverlayPage.xaml, LayoutPage.xaml.cs, QuickPages/QuickDevicePage.*, QuickPages/QuickProfilesPage.*, QuickPages/QuickHomePage.xaml.cs, SettingsPage.xaml.cs
Moved synchronous USB reads to background tasks; added WPF collection synchronization updates. QuickDevicePage refactored to use ViewModel instead of direct manager subscriptions. QuickProfilesPage refactored to use ProfilesPageViewModel (removed QuickProfilesPageViewModel). Updated dispatcher priorities and UI marshaling patterns.
Profiles Subpages & UI Gamepad
HandheldCompanion/Views/Pages/Profiles/SettingsMode*.xaml.cs, UI/UIGamepad.cs
Replaced UpdateProfile calls with SubmitProfile in sliders and handlers. UIGamepad: added navigation history, flyout support, profile focus restoration, and context-aware control-element gathering; refactored back/exit behavior and dialog handling.
Utility & Helper Classes
HandheldCompanion/Utils/WPFUtils.cs, Selectors/LibraryItemTemplateSelector.cs, Views/Classes/GamepadWindow.cs, Platforms/Misc/LibreHardwarePlatform.cs, Commands/Functions/HC/HIDModeCommands.cs, ProcessManager.cs
WPFUtils: refactored navigation to scoring-based candidate selection with visual context awareness; added adorner layer helper. New LibraryItemTemplateSelector for dynamic template selection based on profile state. GamepadWindow: added flyout tracking and navigation debouncing. LibreHardwarePlatform: improved error handling and recursive sensor value application. HIDModeCommands: added DInputController state. ProcessManager: added fault-only continuation for task exception observation.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~75 minutes

Possibly related PRs

  • 0.28.2.2 #1336: Modifies installer script (HandheldCompanion.iss) with version bumping and dependency logic changes—directly related to installer configuration updates in this PR.
  • I18n translation #1248: Updates application startup logic (App.xaml.cs) and localization resources—related through exception handling and resource management changes.
  • Traditional Chinese translation improvement from version 0.22.2.8 #1242: Modifies Traditional Chinese resource file (Resources.zh-Hant.resx)—related through localization resource consolidation pattern.

Poem

🐰 A helper of controllers finds new joy,
With vJoy devices and DInput's alloy,
Gyros spin swiftly with velocity's grace,
While libraries bloom in a new UI place,
Managers dance in sync, lock by lock—
A refactored delight, this PR's rock! 🎮✨

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch 0.28.6.4

@Valkirie Valkirie merged commit 53dddb6 into main Apr 8, 2026
1 of 2 checks passed
@chatgpt-codex-connector

Copy link
Copy Markdown

💡 Codex Review

protected bool GPUManagerMonitor => true; // ManagerFactory.settingsManager.GetBoolean("GPUManagerMonitor");

P2 Badge Read GPU monitor preference instead of hardcoding true

GPUManagerMonitor is hardcoded to true, so GPU.Start() always enables the update timer even when the user has disabled GPU monitoring in settings. This causes the monitor to come back on at startup and after GPU reconnects, making the new GPUManagerMonitor setting ineffective until another settings-change event happens.


copilot = desktop.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ClassNameProperty, "WinUIDesktopWin32WindowClass")); // desktop.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.NameProperty, "Copilot"));

P2 Badge Target Copilot window with a unique automation filter

The command identifies Copilot using only the class name WinUIDesktopWin32WindowClass, which is shared by other WinUI desktop apps. When another matching app is open, this hotkey can latch onto the wrong window and close/resize/invoke controls on that app instead of Copilot.

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants