Compare commits

...

1 Commits

Author SHA1 Message Date
agrynco 855719863e Release v0.2.2: fix Unicode executable description 2026-10-28 11:14:31 +02:00
9 changed files with 20 additions and 23 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
cmake_minimum_required(VERSION 3.24)
project(KSwitcher VERSION 0.2.1 LANGUAGES CXX RC)
project(KSwitcher VERSION 0.2.2 LANGUAGES CXX RC)
if(NOT WIN32)
message(FATAL_ERROR "KSwitcher uses native Windows APIs")
endif()
Binary file not shown.
+6 -14
View File
@@ -1,21 +1,13 @@
# Latest Windows release
## v0.2.1 — 2026-10-28
## v0.2.2 — 2026-10-28
- Accept keyboard and mouse input forwarded by Microsoft Mouse Without Borders, including hotkey
releases, repeated presses, recent-word conversion and snippets. Mark KSwitcher's own generated
input to prevent recursive commands and preserve text-operation validation.
- Add **Update** to the tray menu and a non-installing startup check against this repository's
Releases. Verify the x64 ZIP, SHA-256, executable identity and version before closing; restart
automatically and roll back on replacement/startup failure. Keep settings, history and existing dictionaries.
- Fix initial window sizing on high-DPI monitors. Size the frame and controls from the same monitor
DPI, recover windows after display changes, and provide resizing, scrolling and focus visibility
when the available work area is smaller than the contents.
- Fix the garbled dash in the executable description shown by Task Manager and Windows file properties.
- Explicitly compile the UTF-8 Windows resource source as UTF-8, both in the resource file and the portable build command.
- Add regression checks against the compiled executable's version and exact Unicode description.
Verified: 168 native checks, 51 input/layout checks (including hidden Settings at 240 DPI),
24 offline updater checks, live release download/checksum/package validation, and visible Settings
at 250% scaling. Two-laptop Mouse Without Borders use and physically disconnecting a monitor still
require hardware verification.
Verified: 168 native checks, 51 input/layout checks, and 26 updater/metadata checks.
The executable description is `KSwitcher — native keyboard and clipboard utility`.
Download **KSwitcher-win-x64.zip**, extract the entire archive to a writable folder,
and launch `KSwitcher.exe`. Keep `dictionaries/` next to the executable.
+1 -1
View File
@@ -1 +1 @@
e33c372d1401c5500f3b07b38c10aff9667a5b1db9f6e613420e7878202853b3 KSwitcher-win-x64.zip
9705cdb0c0a732eeae10b88e42101f9ff6714399ea8779e154fecc79269059a0 KSwitcher-win-x64.zip
+1 -1
View File
@@ -18,7 +18,7 @@ try {
& $compiler @common -c "src/$name.cpp" -o "build/$name.o"
if ($LASTEXITCODE) { throw "Compilation failed: $name" }
}
& windres resources/app.rc -O coff -o build/app-res.o
& windres --codepage=65001 resources/app.rc -O coff -o build/app-res.o
if ($LASTEXITCODE) { throw 'Resource compilation failed' }
New-Item -ItemType Directory -Force build/release | Out-Null
& $compiler -mwindows -municode -static -s '-Wl,--gc-sections' build/core.o build/platform.o build/autostart.o build/autocorrect.o build/storage.o build/ocr.o build/richtext.o build/update.o build/app.o build/ui.o build/main.o build/app-res.o @libs -o $executablePath
+4 -3
View File
@@ -1,11 +1,12 @@
#pragma code_page(65001)
#include <windows.h>
#include "resource.h"
IDI_KSWITCHER ICON "kswitcher.ico"
1 RT_MANIFEST "app.manifest"
201 RCDATA "update.ps1"
1 VERSIONINFO
FILEVERSION 0,2,1,0
PRODUCTVERSION 0,2,1,0
FILEVERSION 0,2,2,0
PRODUCTVERSION 0,2,2,0
FILEOS VOS_NT_WINDOWS32
FILETYPE VFT_APP
BEGIN
@@ -15,7 +16,7 @@ BEGIN
BEGIN
VALUE "FileDescription", "KSwitcher — native keyboard and clipboard utility"
VALUE "ProductName", "KSwitcher"
VALUE "FileVersion", "0.2.1"
VALUE "FileVersion", "0.2.2"
END
END
BLOCK "VarFileInfo"
+1 -1
View File
@@ -1134,7 +1134,7 @@ void App::trayMenu()
break;
case 16:
MessageBoxW(window,
L"KSwitcher 0.2.1\nNative C++ / Win32 keyboard and clipboard utility\n\nBased on "
L"KSwitcher 0.2.2\nNative C++ / Win32 keyboard and clipboard utility\n\nBased on "
L"Typlo by bitcodepro. MIT license.\nHistory is encrypted for your Windows "
L"account.\nNo .NET, WebView or graphics framework.",
L"About KSwitcher", MB_OK);
+1 -1
View File
@@ -2,7 +2,7 @@
#include "platform.h"
namespace ks
{
inline constexpr wchar_t AppVersion[] = L"0.2.1";
inline constexpr wchar_t AppVersion[] = L"0.2.2";
inline constexpr UINT UpdateMessage = WM_APP + 7;
struct UpdateResult
{
+5 -1
View File
@@ -7,6 +7,10 @@ function Reject([scriptblock]$Action,[string]$Name) { $rejected=$false; try { &
$root=Join-Path ([IO.Path]::GetTempPath()) ('KSwitcher-update-tests-'+[guid]::NewGuid().ToString('N'))
[IO.Directory]::CreateDirectory($root) | Out-Null
try {
$binaryInfo = [Diagnostics.FileVersionInfo]::GetVersionInfo((Resolve-Path -LiteralPath $Executable).Path)
$binaryVersion = Get-StableVersion $binaryInfo.FileVersion
Assert ($null -ne $binaryVersion) 'executable has a stable version'
Assert ($binaryInfo.FileDescription -ceq ('KSwitcher ' + [char]0x2014 + ' native keyboard and clipboard utility')) 'executable description preserves Unicode em dash'
Assert ((Get-StableVersion 'v0.10.0') -gt (Get-StableVersion 'v0.2.9')) 'numeric versions'
Assert ($null -eq (Get-StableVersion 'v1.0.0-beta')) 'prerelease rejected'
Assert ($null -eq (Get-StableVersion 'v1.0.0;whoami')) 'invalid version rejected'
@@ -36,7 +40,7 @@ try {
((Get-FileHash -LiteralPath $archive -Algorithm SHA256).Hash+' KSwitcher-win-x64.zip') | Set-Content -LiteralPath $sum
Assert-Checksum $archive $sum; ++$script:checks
$stage=Join-Path $root 'stage'
Expand-Release $archive $stage ([version]'0.2.1'); ++$script:checks
Expand-Release $archive $stage $binaryVersion; ++$script:checks
Reject { Expand-Release $archive (Join-Path $root 'wrong-version') ([version]'9.0.0') } 'version mismatch rejected'
('0'*64+' KSwitcher-win-x64.zip') | Set-Content -LiteralPath $sum
Reject { Assert-Checksum $archive $sum } 'corrupt package rejected'