Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 855719863e |
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
cmake_minimum_required(VERSION 3.24)
|
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)
|
if(NOT WIN32)
|
||||||
message(FATAL_ERROR "KSwitcher uses native Windows APIs")
|
message(FATAL_ERROR "KSwitcher uses native Windows APIs")
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
Binary file not shown.
+6
-14
@@ -1,21 +1,13 @@
|
|||||||
# Latest Windows release
|
# 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
|
- Fix the garbled dash in the executable description shown by Task Manager and Windows file properties.
|
||||||
releases, repeated presses, recent-word conversion and snippets. Mark KSwitcher's own generated
|
- Explicitly compile the UTF-8 Windows resource source as UTF-8, both in the resource file and the portable build command.
|
||||||
input to prevent recursive commands and preserve text-operation validation.
|
- Add regression checks against the compiled executable's version and exact Unicode description.
|
||||||
- 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.
|
|
||||||
|
|
||||||
Verified: 168 native checks, 51 input/layout checks (including hidden Settings at 240 DPI),
|
Verified: 168 native checks, 51 input/layout checks, and 26 updater/metadata checks.
|
||||||
24 offline updater checks, live release download/checksum/package validation, and visible Settings
|
The executable description is `KSwitcher — native keyboard and clipboard utility`.
|
||||||
at 250% scaling. Two-laptop Mouse Without Borders use and physically disconnecting a monitor still
|
|
||||||
require hardware verification.
|
|
||||||
|
|
||||||
Download **KSwitcher-win-x64.zip**, extract the entire archive to a writable folder,
|
Download **KSwitcher-win-x64.zip**, extract the entire archive to a writable folder,
|
||||||
and launch `KSwitcher.exe`. Keep `dictionaries/` next to the executable.
|
and launch `KSwitcher.exe`. Keep `dictionaries/` next to the executable.
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
e33c372d1401c5500f3b07b38c10aff9667a5b1db9f6e613420e7878202853b3 KSwitcher-win-x64.zip
|
9705cdb0c0a732eeae10b88e42101f9ff6714399ea8779e154fecc79269059a0 KSwitcher-win-x64.zip
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ try {
|
|||||||
& $compiler @common -c "src/$name.cpp" -o "build/$name.o"
|
& $compiler @common -c "src/$name.cpp" -o "build/$name.o"
|
||||||
if ($LASTEXITCODE) { throw "Compilation failed: $name" }
|
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' }
|
if ($LASTEXITCODE) { throw 'Resource compilation failed' }
|
||||||
New-Item -ItemType Directory -Force build/release | Out-Null
|
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
|
& $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
@@ -1,11 +1,12 @@
|
|||||||
|
#pragma code_page(65001)
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include "resource.h"
|
#include "resource.h"
|
||||||
IDI_KSWITCHER ICON "kswitcher.ico"
|
IDI_KSWITCHER ICON "kswitcher.ico"
|
||||||
1 RT_MANIFEST "app.manifest"
|
1 RT_MANIFEST "app.manifest"
|
||||||
201 RCDATA "update.ps1"
|
201 RCDATA "update.ps1"
|
||||||
1 VERSIONINFO
|
1 VERSIONINFO
|
||||||
FILEVERSION 0,2,1,0
|
FILEVERSION 0,2,2,0
|
||||||
PRODUCTVERSION 0,2,1,0
|
PRODUCTVERSION 0,2,2,0
|
||||||
FILEOS VOS_NT_WINDOWS32
|
FILEOS VOS_NT_WINDOWS32
|
||||||
FILETYPE VFT_APP
|
FILETYPE VFT_APP
|
||||||
BEGIN
|
BEGIN
|
||||||
@@ -15,7 +16,7 @@ BEGIN
|
|||||||
BEGIN
|
BEGIN
|
||||||
VALUE "FileDescription", "KSwitcher — native keyboard and clipboard utility"
|
VALUE "FileDescription", "KSwitcher — native keyboard and clipboard utility"
|
||||||
VALUE "ProductName", "KSwitcher"
|
VALUE "ProductName", "KSwitcher"
|
||||||
VALUE "FileVersion", "0.2.1"
|
VALUE "FileVersion", "0.2.2"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
|
|||||||
+1
-1
@@ -1134,7 +1134,7 @@ void App::trayMenu()
|
|||||||
break;
|
break;
|
||||||
case 16:
|
case 16:
|
||||||
MessageBoxW(window,
|
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"Typlo by bitcodepro. MIT license.\nHistory is encrypted for your Windows "
|
||||||
L"account.\nNo .NET, WebView or graphics framework.",
|
L"account.\nNo .NET, WebView or graphics framework.",
|
||||||
L"About KSwitcher", MB_OK);
|
L"About KSwitcher", MB_OK);
|
||||||
|
|||||||
+1
-1
@@ -2,7 +2,7 @@
|
|||||||
#include "platform.h"
|
#include "platform.h"
|
||||||
namespace ks
|
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;
|
inline constexpr UINT UpdateMessage = WM_APP + 7;
|
||||||
struct UpdateResult
|
struct UpdateResult
|
||||||
{
|
{
|
||||||
|
|||||||
+5
-1
@@ -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'))
|
$root=Join-Path ([IO.Path]::GetTempPath()) ('KSwitcher-update-tests-'+[guid]::NewGuid().ToString('N'))
|
||||||
[IO.Directory]::CreateDirectory($root) | Out-Null
|
[IO.Directory]::CreateDirectory($root) | Out-Null
|
||||||
try {
|
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 ((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-beta')) 'prerelease rejected'
|
||||||
Assert ($null -eq (Get-StableVersion 'v1.0.0;whoami')) 'invalid version 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
|
((Get-FileHash -LiteralPath $archive -Algorithm SHA256).Hash+' KSwitcher-win-x64.zip') | Set-Content -LiteralPath $sum
|
||||||
Assert-Checksum $archive $sum; ++$script:checks
|
Assert-Checksum $archive $sum; ++$script:checks
|
||||||
$stage=Join-Path $root 'stage'
|
$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'
|
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
|
('0'*64+' KSwitcher-win-x64.zip') | Set-Content -LiteralPath $sum
|
||||||
Reject { Assert-Checksum $archive $sum } 'corrupt package rejected'
|
Reject { Assert-Checksum $archive $sum } 'corrupt package rejected'
|
||||||
|
|||||||
Reference in New Issue
Block a user