feat: X2 detection fixes, native tray/icon polish, and streamlined NSIS installer (v0.4.4)#4
Merged
Merged
Conversation
X2 detection matched only two hardcoded SKU strings (X2P-66-100, which was never a real chip, and a misspec'd X2E-88-100), so any real X2 machine — including the reporter's X2E-78-100 — fell through to "Snapdragon Generic". Replace the table with the real 9-SKU X2 lineup sourced from Qualcomm's product briefs, normalize the detected name before matching (hyphen/case/marks-insensitive), and add a family-wide fallback so an unlisted X2 SKU still gets a correctly-named profile instead of Generic. Adds this repo's first unit tests.
Tray font defaults to Bold (was Medium, reported as too thin to read at a glance) with a Normal/Bold setting in Notification Area settings. An optional degree symbol can be shown in the tray icon (default off — it costs digit size at 16px, so it's opt-in rather than the headline fix). Taskbar overlay badge follows the bold setting but never shows the degree symbol (no room at that size). The tray's "Mini-mode" menu item is now a checked/unchecked toggle reflecting the actual mini-mode state, synced from both the tray menu and the in-window Options menu.
Reports mini-mode changes to the new set_mini_state command whenever it changes, regardless of whether it was toggled from the tray menu or the in-window Options menu.
The About dialog's reference list only had 5 of the 13 real SKUs and highlighted by marketing name — with 7 different X2 SKUs all named "Snapdragon X2 Elite", that could highlight the wrong row(s). Highlight by model (the unique part number) instead, and list every known SKU.
Users called out the app as feeling like "a webview experience" rather than a native Windows program. Without touching any styling: block the browser right-click menu (except in text inputs), browser hotkeys (F5/Ctrl+F/Ctrl+P/etc.), Ctrl+wheel and pinch zoom, stray text selection outside inputs, image drag-ghosting, and the startup white flash (window backgroundColor now matches the dark surface instead of defaulting white pre-paint). Also switch button/menu cursors from the web-ism pointer hand to the native arrow, keeping pointer only on the About dialog's real hyperlinks.
After the Snapdragon-logo removal, wire in the new hand-made icon as the one app icon: window/EXE/taskbar, About dialog, and both installers (MSI + NSIS inherit icon.ico automatically — no config changes needed). Regenerated the full icon set from the 1024px source via `tauri icon`, which also fixes two long-standing placeholder bugs: 128x128@2x.png was actually 128px (not a true @2x), and icon.icns was a PNG renamed to .icns. Removed the old placeholder-art generator script.
release.yml's publish step sent make_latest as a JSON boolean where the REST API expects the string enum "true"/"false" — fixed. Add pr-ci.yml so PRs actually get built/tested (nothing did before this). Add auto-tag.yml: merging a version bump to main now creates the matching v-tag and dispatches release.yml directly, since a GITHUB_TOKEN-pushed tag doesn't trigger other workflows' on-push-tags. Manual tag pushes and manual workflow_dispatch on release.yml keep working unchanged.
New app icon, tray bold/degree options, mini-mode tray checkmark, X2 detection fix, de-webview polish, and CI hardening.
Forks tauri-bundler's stock NSIS template so upgrades and repairs stop feeling broken: - Older-version upgrades skip the Welcome/Already-Installed/Directory pages entirely and go straight to progress + Finish (no unnecessary prompts for what is obviously "just update it"). - Same-version reinstall is reworded from confusing "Add/Reinstall" to a clear Repair/Uninstall maintenance choice. - A prior MSI install (from before 0.4.4) is migrated automatically via a passive /qb (or /qn when silent) msiexec call instead of running the MSI's raw UninstallString, which used to pop msiexec's own confirmation and could open the full Windows Installer maintenance wizard with no context — the exact "asked to uninstall, said no, it reinstalled anyway" bug this fixes. - A declined or failed migration during an auto-resolved run now shows one message and quits cleanly instead of silently continuing to install over a still-present previous version. - Choosing "Uninstall" on the same-version page now actually quits after uninstalling, instead of falling through and reinstalling. - Setup guards against two instances racing (e.g. a double double-click), mirroring the app's own single-instance lock. - Fixed a latent stale-register bug (ReadRegStr leaves its destination unchanged on a missing key) that could misreport a fresh install as already-installed. - Shortcuts now stamp an explicit icon location instead of relying on implicit resolution, which Explorer's icon cache could serve broken after repeated reinstalls; a shell change notification is fired so Explorer picks up the fix immediately. Also drops the MSI bundle target — WiX's stock installer UI (red default art, no desktop-shortcut option, unthemed checkbox strip) was jarringly inconsistent with the NSIS installer above, and can't be fully re-skinned without forking a second template. Existing MSI users are migrated automatically by the fix above, so nothing is lost.
Appending "°" straight onto the digit string forced the shrink-to-fit loop to squeeze in a 3rd full-width glyph, shrinking the font by about 30% the moment the ° option was turned on. Instead, reserve a thin column on the right of the tray icon and draw "°" there separately at roughly half the digit height, top-aligned like a superscript — the digits now lose only about a pixel instead of a third of their size.
Comments and installer inventory referenced the now-dropped MSI target.
Replaces every screenshot with a current capture (new icon, bold tray digits, X2 chip list, streamlined installer wording) and adds an About dialog shot showing the full detected/supported processor list. Also updates README's installer description for the NSIS-only setup.exe.
The installer popped its stock "app is running, click OK to kill it" modal on nearly every run (ARMtemp autostarts, so it's almost always running), showed Welcome/Directory pages even on machines that already had ARMtemp installed, required an extra manual click after a successful install, and left an orphaned uninstall.exe + folder behind when the same-version maintenance page's "Uninstall" choice was used. Also fixes the MSI->NSIS migration leaving a stale "Start with Windows" registry entry pointing at the deleted Program Files path, and de-MSIs the local build script (tauri.conf.json now targets NSIS only) and fixes its broken backtick-n string literals.
kind_for_core assigned each logical core's P/E badge positionally from the chip profile's static cluster table, assuming Performance cores always enumerate before Efficiency ones. Evidence relayed on issue #2 (a Surface X2E-78-100 CPU-Z capture) suggests that assumption doesn't hold on X2 hardware. Rather than hardcode a guessed order for X2, query GetLogicalProcessorInformationEx(RelationProcessorCore) to read each core's real EfficiencyClass and derive P/E from that directly; the static cluster-order walk now only serves as a fallback if the query fails. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ay-native # Conflicts: # README.md
The merge from main took main's README verbatim to resolve a conflict, which silently discarded this branch's refreshed 0.4.4 screenshots and the new About-dialog screenshot entry in favor of main's placeholder text (main had stripped screenshots pending a refresh that this branch already did). Restore this branch's version of the affected sections. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
spenceriam
marked this pull request as ready for review
July 9, 2026 02:31
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
(R)/(TM)marks in OEM firmware strings no longer break matching, and the full real X2 lineup (X2 Elite Extreme, X2 Elite, X2 Plus — 9 SKUs) is now in the profile table, with an unrecognized X2 SKU still labeled by family instead of falling back to "Generic".GetLogicalProcessorInformationEx) instead of a static positional assumption — the static cluster table is only a fallback if that query fails. This follows up on evidence in X2 Missing information #2 suggesting the static Performance-cores-enumerate-first assumption doesn't hold on X2 hardware; rather than hardcode a guessed order for X2, we now ask Windows directly.uninstall.exe+ folder behind.Still needs a manual pass on a machine with a prior 0.4.3 MSI install, and on real X2 hardware to confirm the P/E badge order (a P-core-pinned load should light up tiles now badged "P") — tracked as follow-up, not blocking this draft.
References #2 (X2 Missing information) — intentionally not using
Fixes/Closesso it can be closed manually after validating with the original reporters.