Release v0.6.39: isolate history UI and image clipboard memory
This commit is contained in:
1 parent
fa2f6d2ce4
commit
00c9cb0ee4
22 files changed
+747
-49
No files matched your search
+26
-5
@@ -549,11 +549,11 @@ void requestPreview(HWND w, HistoryView *v, const Entry &entry)
|
||||
auto result = new PreviewResult{generation, id, {}, {}};
|
||||
try
|
||||
{
|
||||
auto clip = app->history->load(id);
|
||||
if (!active->load()) { delete result; return; }
|
||||
if (image)
|
||||
result->pixels = decodeImage(clip, 208, 128);
|
||||
result->pixels = app->history->thumbnail(id, [active] { return !active->load(); });
|
||||
else {
|
||||
auto clip = app->history->load(id);
|
||||
if (!active->load()) { delete result; return; }
|
||||
result->text.rtf = richPreview(clip, false);
|
||||
if (result->text.rtf.empty()) {
|
||||
result->text.plain = clip.text();
|
||||
@@ -771,7 +771,10 @@ LRESULT CALLBACK historyProc(HWND w, UINT msg, WPARAM wp, LPARAM lp)
|
||||
{
|
||||
if (!entry.empty())
|
||||
{
|
||||
if (id == 112)
|
||||
if (v->app->historyService) {
|
||||
v->app->remoteHistory(id == 112 ? "pin" : "remove", entry);
|
||||
v->app->history->reload();
|
||||
} else if (id == 112)
|
||||
v->app->history->pin(entry);
|
||||
else
|
||||
v->app->history->remove(entry);
|
||||
@@ -907,6 +910,7 @@ 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));
|
||||
KillTimer(w, 1);
|
||||
v->closed = true;
|
||||
v->previewActive->store(false);
|
||||
@@ -918,6 +922,8 @@ LRESULT CALLBACK historyProc(HWND w, UINT msg, WPARAM wp, LPARAM lp)
|
||||
v->richTexts.clear();
|
||||
if (v->rich) SetWindowTextW(v->rich, L"");
|
||||
v->pending.clear();
|
||||
if (v->app->historyService && !v->app->historyEntryWindows)
|
||||
PostMessageW(v->app->window, WM_CLOSE, 0, 0);
|
||||
return 0;
|
||||
}
|
||||
case WM_NCDESTROY:
|
||||
@@ -1681,13 +1687,19 @@ LRESULT CALLBACK snippetProc(HWND w, UINT msg, WPARAM wp, LPARAM lp)
|
||||
#ifndef KS_CONFIG_APP
|
||||
LRESULT CALLBACK entryProc(HWND w, UINT msg, WPARAM wp, LPARAM lp)
|
||||
{
|
||||
if (msg == WM_NCCREATE)
|
||||
SetWindowLongPtrW(w, GWLP_USERDATA, (LONG_PTR)((CREATESTRUCTW *)lp)->lpCreateParams);
|
||||
if (msg == WM_SIZE)
|
||||
{
|
||||
MoveWindow(GetDlgItem(w, 1), 10, 10, LOWORD(lp) - 20, HIWORD(lp) - 20, TRUE);
|
||||
return 0;
|
||||
}
|
||||
if (msg == WM_NCDESTROY)
|
||||
if (msg == WM_NCDESTROY) {
|
||||
disposeFont(w);
|
||||
auto *app = (App *)GetWindowLongPtrW(w, GWLP_USERDATA);
|
||||
if (app && app->historyService && app->historyEntryWindows && !--app->historyEntryWindows &&
|
||||
!IsWindowVisible(app->historyWindow)) PostMessageW(app->window, WM_CLOSE, 0, 0);
|
||||
}
|
||||
return DefWindowProcW(w, msg, wp, lp);
|
||||
}
|
||||
#endif
|
||||
@@ -1695,6 +1707,7 @@ LRESULT CALLBACK entryProc(HWND w, UINT msg, WPARAM wp, LPARAM lp)
|
||||
#ifndef KS_CONFIG_APP
|
||||
void refreshHistory(App &app)
|
||||
{
|
||||
if (app.isolateHistory) { app.refreshHistoryProcess(); return; }
|
||||
if (app.historyWindow)
|
||||
{
|
||||
auto *v = (HistoryView *)GetWindowLongPtrW(app.historyWindow, GWLP_USERDATA);
|
||||
@@ -1703,6 +1716,7 @@ void refreshHistory(App &app)
|
||||
}
|
||||
void showHistory(App &app, bool visible)
|
||||
{
|
||||
if (app.isolateHistory) { if (visible) app.openHistoryProcess(); return; }
|
||||
if (!app.history)
|
||||
{
|
||||
app.report(L"Clipboard history is unavailable. See the log in the data folder.");
|
||||
@@ -1738,6 +1752,12 @@ void showHistory(App &app, bool visible)
|
||||
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);
|
||||
if (app.historyService) {
|
||||
auto *v = (HistoryView *)GetWindowLongPtrW(w, GWLP_USERDATA);
|
||||
v->rememberedSelection = app.historySelection;
|
||||
v->rememberedTop = app.historyTop;
|
||||
SetDlgItemTextW(w, 101, app.historyQuery.c_str());
|
||||
}
|
||||
}
|
||||
if (!visible) return;
|
||||
POINT cursor;
|
||||
@@ -1894,6 +1914,7 @@ void showEntry(App &app, const std::wstring &id)
|
||||
}
|
||||
HWND w = makeWindow(app, L"KSwitcher.Entry", L"Clipboard item", entryProc, 720, 500,
|
||||
WS_THICKFRAME | WS_MAXIMIZEBOX);
|
||||
if (app.historyService) ++app.historyEntryWindows;
|
||||
auto field = edit(w, 1, 10, 10, 700, 480, ES_MULTILINE | ES_READONLY | ES_AUTOVSCROLL | WS_VSCROLL);
|
||||
SetWindowTextW(field, text.c_str());
|
||||
showRequestedWindow(w);
|
||||
|
||||
Reference in new issue
Block a user