Release v0.6.41: filter and remember pinned clipboard history

This commit is contained in:
agrynco committed 2026-11-04 19:58:15 +02:00
1 parent 524a836cc0
commit 684ca1b3cc
14 files changed
+60 -28

No files matched your search

+19 -5
View File
@@ -514,15 +514,16 @@ void search(HWND w, HistoryView *v)
v->previewActive = std::make_shared<std::atomic<bool>>(true);
v->closed = false;
auto q = value(w, 101);
const bool pinnedOnly = SendDlgItemMessageW(w, 117, CB_GETCURSEL, 0, 0) == 1;
auto generation = ++v->generation;
v->pending.clear();
auto *app = v->app;
app->enqueueHistorySearch(
[w, app, q, generation]
[w, app, q, generation, pinnedOnly]
{
try
{
auto result = new SearchResult{generation, app->history->search(q)};
auto result = new SearchResult{generation, app->history->search(q, pinnedOnly)};
if (!PostMessageW(w, ResultsMessage, 0, (LPARAM)result))
delete result;
}
@@ -739,6 +740,12 @@ LRESULT CALLBACK historyProc(HWND w, UINT msg, WPARAM wp, LPARAM lp)
case WM_COMMAND:
{
int id = LOWORD(wp);
if (id == 117 && HIWORD(wp) == CBN_SELCHANGE)
{
KillTimer(w, 1);
search(w, v);
return 0;
}
if (id == 101 && HIWORD(wp) == EN_CHANGE)
{
// Reject an older result even during the debounce interval.
@@ -910,7 +917,8 @@ LRESULT CALLBACK historyProc(HWND w, UINT msg, WPARAM wp, LPARAM lp)
v->rememberedSelection = selected(w, v);
int top = (int)SendDlgItemMessageW(w,102,LB_GETTOPINDEX,0,0);
v->rememberedTop = top >= 0 && top < (int)v->items.size() ? v->items[top].id : L"";
v->app->saveHistoryView(v->rememberedSelection, v->rememberedTop, value(w, 101));
v->app->saveHistoryView(v->rememberedSelection, v->rememberedTop, value(w, 101),
SendDlgItemMessageW(w, 117, CB_GETCURSEL, 0, 0) == 1);
KillTimer(w, 1);
v->closed = true;
v->previewActive->store(false);
@@ -1737,8 +1745,14 @@ void showHistory(App &app, bool visible)
HWND w = makeWindow(app, L"KSwitcher.History", L"Clipboard history", historyProc, 760, 500);
app.historyWindow = w;
windowLayoutState(w)->history = true;
label(w, L"&Search clipboard history", 16, 12, 500);
edit(w, 101, 16, 38, 728);
label(w, L"&Filter", 16, 12, 170);
auto filter = control(w, L"COMBOBOX", L"", WS_TABSTOP | CBS_DROPDOWNLIST | WS_VSCROLL,
117, 16, 38, 170, 100);
SendMessageW(filter, CB_ADDSTRING, 0, (LPARAM)L"All items");
SendMessageW(filter, CB_ADDSTRING, 0, (LPARAM)L"★ Pinned only");
SendMessageW(filter, CB_SETCURSEL, app.historyPinnedOnly ? 1 : 0, 0);
label(w, L"&Search clipboard history", 194, 12, 500);
edit(w, 101, 194, 38, 550);
auto list = control(w, L"LISTBOX", L"",
WS_TABSTOP | WS_VSCROLL | LBS_NOTIFY | LBS_NOINTEGRALHEIGHT | WS_BORDER |
LBS_OWNERDRAWFIXED | LBS_HASSTRINGS,