Release v0.6.9: notify about updates and fix Settings scroll flicker

This commit is contained in:
2026-10-29 22:15:30 +02:00
parent 107d2f8852
commit 5c786e12a9
16 changed files with 196 additions and 44 deletions
+22
View File
@@ -3,6 +3,14 @@
#include <shlobj.h>
#include <iostream>
static std::wstring programs;
static std::wstring activationExecutable, activationCommand;
static int activationCalls{};
static BOOL WINAPI testCreateProcess(LPCWSTR path, LPWSTR command, LPSECURITY_ATTRIBUTES,
LPSECURITY_ATTRIBUTES, BOOL, DWORD, LPVOID, LPCWSTR, LPSTARTUPINFOW, LPPROCESS_INFORMATION)
{
++activationCalls; activationExecutable=path; activationCommand=command;
SetLastError(ERROR_CANCELLED); return FALSE; // Inspect activation without starting any program.
}
static HRESULT testKnownFolder(REFKNOWNFOLDERID, DWORD, HANDLE, PWSTR *out)
{
*out=(PWSTR)CoTaskMemAlloc((programs.size()+1)*sizeof(wchar_t));
@@ -10,8 +18,10 @@ static HRESULT testKnownFolder(REFKNOWNFOLDERID, DWORD, HANDLE, PWSTR *out)
wcscpy(*out,programs.c_str()); return S_OK;
}
#define SHGetKnownFolderPath testKnownFolder
#define CreateProcessW testCreateProcess
#include "../src/screenshot_activation.cpp"
#undef SHGetKnownFolderPath
#undef CreateProcessW
int main()
{
CoInitializeEx(nullptr,COINIT_APARTMENTTHREADED);
@@ -45,6 +55,18 @@ int main()
valid=id.vt==VT_CLSID && *id.puuid==ks::ActivatorId; PropVariantClear(&id);
if(!valid) throw std::runtime_error("shortcut activator missing");
ks::registerScreenshotNotifications(); // Registration is safe to repeat.
ks::Activator activator(helper.wstring(),false);
activator.Activate(L"HrynCo.KSwitcher.Screenshot",L"check-update",nullptr,0);
auto main=(helper.parent_path()/L"KSwitcher.exe").wstring();
if(activationCalls!=1 || activationExecutable!=main || activationCommand!=L"\""+main+L"\" --check-update")
throw std::runtime_error("update toast must open review, never install automatically");
if(activator.Activate(L"other-app",L"check-update",nullptr,0)!=E_INVALIDARG ||
activator.Activate(L"HrynCo.KSwitcher.Screenshot",L"--install",nullptr,0)!=E_INVALIDARG || activationCalls!=1)
throw std::runtime_error("invalid notification activation must not launch a process");
const wchar_t *token=L"12345678-1234-1234-1234-123456789abc";
activator.Activate(L"HrynCo.KSwitcher.Screenshot",token,nullptr,0);
if(activationCalls!=2 || activationExecutable!=helper.wstring() || activationCommand.find(token)==activationCommand.npos)
throw std::runtime_error("screenshot activation must retain its existing route");
std::cout<<"Passed isolated screenshot registration checks\n";
} catch(const std::exception &e) { std::cerr<<e.what()<<'\n'; result=1; }
RegOverridePredefKey(HKEY_CURRENT_USER,nullptr);