Skip to content

feat: X2 detection fixes, native tray/icon polish, and streamlined NSIS installer (v0.4.4)#4

Merged
spenceriam merged 16 commits into
mainfrom
feat/0.4.4-icon-x2-tray-native
Jul 9, 2026
Merged

feat: X2 detection fixes, native tray/icon polish, and streamlined NSIS installer (v0.4.4)#4
spenceriam merged 16 commits into
mainfrom
feat/0.4.4-icon-x2-tray-native

Conversation

@spenceriam

@spenceriam spenceriam commented Jul 9, 2026

Copy link
Copy Markdown
Owner

Summary

  • Fixes Snapdragon X2 detection (relates to X2 Missing information #2): CPU-name matching is now alphanumeric-normalized so hyphens/(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".
  • Per-core P/E badges are now classified from the OS's real per-core topology (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.
  • Replaces the MSI installer with a custom NSIS template (forked from tauri-bundler) that migrates a prior MSI install automatically, then further streamlines that flow: a running ARMtemp is now closed silently instead of popping a "click OK to kill it" modal on nearly every upgrade, the Welcome/Directory pages are skipped whenever any existing install is detected, a successful install auto-advances to Finish, and the same-version "Uninstall" choice no longer leaves an orphaned uninstall.exe + folder behind.
  • Fixes the MSI→NSIS migration silently breaking "Start with Windows" (stale registry path from the old per-machine install location) with an app-side self-heal on launch.
  • New app icon (restored v1 mark) applied everywhere: exe, installers, window/taskbar, About dialog.
  • Native-shell hardening: strips WebView2's browser affordances (right-click menu, reload/find/zoom hotkeys, ctrl+wheel zoom) so the app reads as a native Windows utility.
  • Tray polish: bold tray font option, optional degree symbol (rendered as a small superscript), mini-mode tray checkmark kept in sync from the frontend.

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/Closes so it can be closed manually after validating with the original reporters.

spenceriam and others added 16 commits July 8, 2026 10:52
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>
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
spenceriam marked this pull request as ready for review July 9, 2026 02:31
@spenceriam
spenceriam merged commit dd52543 into main Jul 9, 2026
1 check passed
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.

1 participant