Compare commits

...

1 Commits

Author SHA1 Message Date
agrynco ca553a5e7d Release v0.6.29: clear clipboard history from its window 2026-11-02 11:34:45 +02:00
8 changed files with 27 additions and 16 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
cmake_minimum_required(VERSION 3.24)
project(KSwitcher VERSION 0.6.28 LANGUAGES CXX RC)
project(KSwitcher VERSION 0.6.29 LANGUAGES CXX RC)
if(NOT WIN32)
message(FATAL_ERROR "KSwitcher uses native Windows APIs")
endif()
+4
View File
@@ -321,6 +321,10 @@ existing saved shortcuts are preserved. While KSwitcher runs, this binding opens
History controls: Enter to paste, Shift+Enter for plain text, Ctrl+1…9 for quick paste,
Ctrl+P to pin/unpin, Delete to delete, Ctrl+O for the full item, Escape to hide.
**Clear history… / Alt+H** in the history window clears all saved entries after confirmation,
including pinned entries and entries hidden by search. No is the default choice. The current
Windows clipboard and future recording are unchanged. Settings also retains its Clear history action.
For an image, **Edit image**, **Ctrl+O**, or **Edit image in screenshot editor**
in the context menu opens the original image in the built-in screenshot editor.
Annotate it there, then copy the result. Opening the editor leaves the
Binary file not shown.
+8 -9
View File
@@ -1,19 +1,18 @@
# Latest Windows release
## v0.6.28 — 2026-11-02
## v0.6.29 — 2026-11-02
## Changes
- Custom automatic replacement pairs and optional dictionary typo correction. Both are off by default; enable Automatic correction and the desired modes in Auto-correction options. Custom pairs take priority; dictionary correction accepts one unambiguous single edit in words of at least four letters. Case, punctuation, exclusions and Undo are preserved.
- First synchronization now merges independent entries immediately. Different values for one setting remain pending as individual conflicts instead of requiring Download/Upload of a whole profile.
- Optional partial sync keeps this PC's layout cycle and direct shortcuts while syncing other settings. Existing server layouts and bindings are preserved, including during explicit Upload. Missing-layout errors identify the language where available and exact layout IDs.
- Disabled synchronization disables dependent controls. Save can persist disabling without connecting; forgetting the saved password remains available. Status messages can be selected, copied and scrolled.
- Selection diagnostics record expected/copied text before and after recovery, clipboard sequences and retries, timing, focus/caret information and context interruptions. Failed verification now includes expected and actual text. Context retains up to 128 events for 30 seconds.
- Added **Clear history… / Alt+H** directly to the Clipboard history window beside Edit image / Open item.
- Clearing requires confirmation, with **No** selected by default. It removes all saved entries, including pinned entries and entries hidden by the current search. Cancelling leaves history unchanged.
- The button follows the existing bottom action row when resizing. Settings retains its existing Clear history action.
- Clearing saved history does not clear the current Windows clipboard or disable future recording. This release does not change memory management.
## Validation
105 sync/protocol/conflict checks and 483 native regression checks and 48 updater checks passed. All 12 manifest files and all three executable versions were verified in the release ZIP. Focused partial-sync UI checks and screenshot PNG-save regressions passed. During development, conversion/diagnostic and typo integration scenarios passed, including Undo and uninterrupted typing. Final interactive input testing is limited by this execution session reporting no foreground window; the full screenshot UI suite also failed its pan assertion at 240 DPI. These interactive checks are not claimed as passing.
The final build passed isolated checks for the new button, cancellation, confirmed deletion of pinned/search-hidden entries and persistence after reloading the history store. 48 updater regression checks passed; all executable versions and release-manifest hashes were verified. The full desktop-interaction suite was not rerun for this focused patch.
## Limitations
Dictionary typo correction is experimental and has no sentence context. Ambiguous words are unchanged. The reported asynchronous selection mismatch in ChatGPT is not fixed by the new diagnostics; full-range verification still cancels unsafe replacements. OpenBao synchronization remains experimental and requires HTTPS, KV v2 and a provisioned userpass account/policy. Ordered layout/language lists are resolved as whole settings; partial mode keeps the entire local layout configuration. Update participating PCs together for the new profile fields. No account registration, MFA, non-root namespaces or reverse-proxy URL prefixes.
## Known limitations
Existing asynchronous-editor selection/clipboard limitations remain; this release does not fix the reported ChatGPT selection mismatch. Dictionary typo correction and OpenBao synchronization remain experimental as documented in v0.6.28.
**Upgrade:** choose Update in the tray menu. Legacy v0.3.0–v0.4.1 clients first receive the v0.4.2 compatibility bridge, then the current full release. v0.2.3 and earlier require manual installation.
For manual installation, exit KSwitcher, close screenshot editors and extract the entire ZIP into its installation folder. Keep personal `data/` and customized dictionaries.
+1 -1
View File
@@ -1 +1 @@
c15937f52c981e7c6b15203aae51ae47dd2a261b495bd458533b01fd4cfe5498 KSwitcher-win-x64.zip
c9c3e3579575a41d434201d4f37bf3829e53c1ef23c42cb1c077930dfe8fdfa6 KSwitcher-win-x64.zip
+3 -3
View File
@@ -9,8 +9,8 @@ IDC_SCREENSHOT_PENCIL CURSOR "icons/lucide/pencil.cur"
1 RT_MANIFEST "app.manifest"
201 RCDATA "update.ps1"
1 VERSIONINFO
FILEVERSION 0,6,28,0
PRODUCTVERSION 0,6,28,0
FILEVERSION 0,6,29,0
PRODUCTVERSION 0,6,29,0
FILEOS VOS_NT_WINDOWS32
FILETYPE VFT_APP
BEGIN
@@ -20,7 +20,7 @@ BEGIN
BEGIN
VALUE "FileDescription", "KSwitcher — native keyboard and clipboard utility"
VALUE "ProductName", "KSwitcher"
VALUE "FileVersion", "0.6.28"
VALUE "FileVersion", "0.6.29"
END
END
BLOCK "VarFileInfo"
+9 -1
View File
@@ -83,7 +83,7 @@ void arrangeWindow(HWND w)
{
int id = GetDlgCtrlID(child);
RECT next{scale(w, r.left) - layout->x,
scale(w, r.top) - layout->y + (id >= 110 && id <= 114 ? extraHeight : 0)};
scale(w, r.top) - layout->y + ((id >= 110 && id <= 114) || id == 116 ? extraHeight : 0)};
next.right = next.left + scale(w, r.right - r.left) + (id == 101 || id == 102 ? extraWidth : 0);
next.bottom = next.top + scale(w, r.bottom - r.top) + (id == 102 ? extraHeight : 0);
if (child == layout->stretch)
@@ -730,6 +730,13 @@ LRESULT CALLBACK historyProc(HWND w, UINT msg, WPARAM wp, LPARAM lp)
}
if (id == 102 && HIWORD(wp) == LBN_DBLCLK)
id = 110;
if (id == 116)
{
if (MessageBoxW(w, L"Delete all clipboard history, including pinned items? This also deletes items hidden by the current search.",
L"Clear history", MB_YESNO | MB_ICONWARNING | MB_DEFBUTTON2) == IDYES)
v->app->clearHistory();
return 0;
}
auto entry = selected(w, v);
if (id == 110 || id == 111)
{
@@ -1650,6 +1657,7 @@ void showHistory(App &app, bool visible)
button(w, L"P&in / unpin", 112, 222, 452, 110);
button(w, L"&Delete", 113, 340, 452, 90);
button(w, L"&Open item", 114, 438, 452, 100);
button(w, L"Clear &history…", 116, 546, 452, 150);
SetWindowSubclass(list, historyKey, 1, (DWORD_PTR)w);
SetWindowSubclass(GetDlgItem(w, 101), historyKey, 1, (DWORD_PTR)w);
}
+1 -1
View File
@@ -2,7 +2,7 @@
#include "platform.h"
namespace ks
{
inline constexpr wchar_t AppVersion[] = L"0.6.28";
inline constexpr wchar_t AppVersion[] = L"0.6.29";
inline constexpr UINT UpdateMessage = WM_APP + 7;
inline constexpr UINT UpdateCheckIntervalMs = 6 * 60 * 60 * 1000;
inline constexpr UINT UpdateNotificationRetryMs = 5 * 60 * 1000;