Release v0.6.61: configure languages per application
This commit is contained in:
1 parent
011664cc53
commit
5d96abb83e
15 files changed
+456
-51
No files matched your search
+23
-8
@@ -986,21 +986,21 @@ void App::refreshChatContext()
|
||||
HWND target = GetForegroundWindow();
|
||||
chatWindow = target;
|
||||
activeChatTitle = chatTitle(target);
|
||||
activeChat = settings.chatCycles.empty() ? L"" : windowChatKey(target);
|
||||
activeChat = windowLanguageProfileKey(settings, target);
|
||||
}
|
||||
void App::switchChatLayout(bool reverse)
|
||||
{
|
||||
HWND target = chatWindow;
|
||||
auto key = activeChat;
|
||||
if (!target || target != GetForegroundWindow() || key.empty() || windowChatKey(target) != key ||
|
||||
!settings.chatCycles.contains(key) || busy.exchange(true)) return;
|
||||
if (!target || target != GetForegroundWindow() || key.empty() ||
|
||||
windowLanguageProfileKey(settings, target) != key || busy.exchange(true)) return;
|
||||
auto cycle = chatCycle(settings, key, layouts);
|
||||
auto available = layouts;
|
||||
resetInput();
|
||||
enqueue([this, target, key, cycle, available, reverse]
|
||||
enqueue([this, target, key, cycle, available, reverse, profileSettings = settings]
|
||||
{
|
||||
struct Reset { std::atomic<bool> &busy; ~Reset() { busy = false; } } reset{busy};
|
||||
auto valid = [&] { return GetForegroundWindow() == target && windowChatKey(target) == key; };
|
||||
auto valid = [&] { return GetForegroundWindow() == target && windowLanguageProfileKey(profileSettings, target) == key; };
|
||||
if (key.starts_with(L"telegram-web\n") && readChromeChat(target) != key) return;
|
||||
if (!valid()) return;
|
||||
auto next = nextChatLayout(cycle, available, windowLayout(target), reverse);
|
||||
@@ -1058,11 +1058,11 @@ bool App::handleKeyboard(const KBDLLHOOKSTRUCT &key, bool down, UINT mods)
|
||||
}
|
||||
}
|
||||
bool chatEnabled = false;
|
||||
if (down && ChatSwitchHook::candidate(key.vkCode, mods) && !settings.chatCycles.empty() &&
|
||||
if (down && ChatSwitchHook::candidate(key.vkCode, mods) && (!settings.chatCycles.empty() || !settings.appLanguageSets.empty()) &&
|
||||
!isHotkey(key.vkCode, mods))
|
||||
{
|
||||
refreshChatContext();
|
||||
chatEnabled = !activeChat.empty() && settings.chatCycles.contains(activeChat);
|
||||
chatEnabled = !activeChat.empty();
|
||||
}
|
||||
const int chatAction = chatSwitchHook.update(key.vkCode, down, mods, chatEnabled);
|
||||
if (chatAction)
|
||||
@@ -1314,7 +1314,7 @@ void App::transform(int command, int snippet)
|
||||
} reset{busy, window, preDeferred};
|
||||
auto effectiveChat = requestedChat;
|
||||
if (lower(processName(target)) == L"chrome") effectiveChat = readChromeChat(target);
|
||||
config.cycle = chatCycle(config, effectiveChat, available);
|
||||
config.cycle = chatCycle(config, languageProfileKey(config, target, effectiveChat), available);
|
||||
auto start = GetTickCount64();
|
||||
std::wstring reason = L"cancelled-before-selection";
|
||||
std::wstring text, result, expected, actual, verification = L"not-attempted";
|
||||
@@ -2294,6 +2294,20 @@ LRESULT CALLBACK App::windowProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
|
||||
if(app->lanService&&app->lanService->tickInput(!app->busy&&!app->suspended&&!app->hotkeyCapture))app->resetLanInput();
|
||||
return 0;
|
||||
case WM_TIMER:
|
||||
if (wp == 8)
|
||||
{
|
||||
if (app->settings.appLanguageSets.empty() || app->busy || app->installingUpdate) return 0;
|
||||
app->refreshChatContext();
|
||||
if (!app->activeChat.starts_with(L"app\n")) return 0;
|
||||
auto cycle = chatCycle(app->settings, app->activeChat, app->layouts);
|
||||
auto current = windowLayout(app->chatWindow);
|
||||
bool allowed = std::any_of(app->layouts.begin(), app->layouts.end(), [&](const Layout &layout) {
|
||||
return layout.handle == current && std::find(cycle.begin(), cycle.end(), layout.id) != cycle.end();
|
||||
});
|
||||
if (!allowed) app->switchChatLayout(false);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (wp == 7)
|
||||
{
|
||||
if (app->lanService)
|
||||
@@ -2452,6 +2466,7 @@ int App::execute()
|
||||
if (lanService && lanService->inputEnabled()) SetTimer(window, 7, 10, nullptr);
|
||||
SetTimer(window, 1, 60000, nullptr);
|
||||
if (!smoke) SetTimer(window, 6, 1000, nullptr);
|
||||
if (!smoke) SetTimer(window, 8, 250, nullptr);
|
||||
SetThreadExecutionState(ES_CONTINUOUS |
|
||||
(settings.awake ? (ES_DISPLAY_REQUIRED | ES_SYSTEM_REQUIRED) : 0));
|
||||
if (!registrationWarning.empty())
|
||||
|
||||
Reference in new issue
Block a user