diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f9ad382..ecc94631 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - added new global hot key to bring sandman in fron as top most ALT+Break [#3320](https://github.com/sandboxie-plus/Sandboxie/issues/3320) - added Exclude specific boxes from 'Terminate all processes' [#3108](https://github.com/sandboxie-plus/Sandboxie/issues/3108) - Note: press the panic button hot key 3 times with less then 1 second between clicks to Terminate All with NO exceptions +- added Customizable global hotkey that toggles the state of "pause forced programs" [#2441](https://github.com/sandboxie-plus/Sandboxie/issues/2441) ### Changed - improved suspend process ahndling [#3375](https://github.com/sandboxie-plus/Sandboxie/issues/3375) diff --git a/SandboxiePlus/SandMan/SandMan.cpp b/SandboxiePlus/SandMan/SandMan.cpp index 8f981f69..b7103b32 100644 --- a/SandboxiePlus/SandMan/SandMan.cpp +++ b/SandboxiePlus/SandMan/SandMan.cpp @@ -2560,6 +2560,7 @@ void CSandMan::CheckSupport() #define HK_PANIC 1 #define HK_TOP 2 +#define HK_FORCE 3 void CSandMan::SetupHotKeys() { @@ -2569,7 +2570,10 @@ void CSandMan::SetupHotKeys() m_pHotkeyManager->registerHotkey(theConf->GetString("Options/PanicKeySequence", "Shift+Pause"), HK_PANIC); if (theConf->GetBool("Options/EnableTopMostKey", false)) - m_pHotkeyManager->registerHotkey(theConf->GetString("Options/PanicTopMostSequence", "Alt+Pause"), HK_TOP); + m_pHotkeyManager->registerHotkey(theConf->GetString("Options/TopMostSequence", "Alt+Pause"), HK_TOP); + + if (theConf->GetBool("Options/EnablePauseForceKey", false)) + m_pHotkeyManager->registerHotkey(theConf->GetString("Options/PauseForceKeySequence", "Ctrl+Alt+F"), HK_FORCE); } void CSandMan::OnHotKey(size_t id) @@ -2595,7 +2599,6 @@ void CSandMan::OnHotKey(size_t id) m_bOnTop = false; else { m_bOnTop = true; - QTimer::singleShot(100, [this]() { this->setWindowState((this->windowState() & ~Qt::WindowMinimized) | Qt::WindowActive); SetForegroundWindow(MainWndHandle); @@ -2604,6 +2607,10 @@ void CSandMan::OnHotKey(size_t id) this->setWindowFlag(Qt::WindowStaysOnTopHint, m_bOnTop); SafeShow(this); break; + + case HK_FORCE: + theAPI->DisableForceProcess(!theAPI->AreForceProcessDisabled()); + break; } } diff --git a/SandboxiePlus/SandMan/Windows/SettingsWindow.cpp b/SandboxiePlus/SandMan/Windows/SettingsWindow.cpp index dda77144..7f74fbd9 100644 --- a/SandboxiePlus/SandMan/Windows/SettingsWindow.cpp +++ b/SandboxiePlus/SandMan/Windows/SettingsWindow.cpp @@ -296,6 +296,8 @@ CSettingsWindow::CSettingsWindow(QWidget* parent) connect(ui.keyPanic, SIGNAL(keySequenceChanged(const QKeySequence &)), this, SLOT(OnOptChanged())); connect(ui.chkTop, SIGNAL(stateChanged(int)), this, SLOT(OnOptChanged())); connect(ui.keyTop, SIGNAL(keySequenceChanged(const QKeySequence &)), this, SLOT(OnOptChanged())); + connect(ui.chkPauseForce, SIGNAL(stateChanged(int)), this, SLOT(OnOptChanged())); + connect(ui.keyPauseForce, SIGNAL(keySequenceChanged(const QKeySequence &)), this, SLOT(OnOptChanged())); connect(ui.chkAsyncBoxOps, SIGNAL(stateChanged(int)), this, SLOT(OnOptChanged())); connect(ui.chkSilentMode, SIGNAL(stateChanged(int)), this, SLOT(OnOptChanged())); @@ -913,6 +915,9 @@ void CSettingsWindow::LoadSettings() ui.chkTop->setChecked(theConf->GetBool("Options/EnableTopMostKey", false)); ui.keyTop->setKeySequence(QKeySequence(theConf->GetString("Options/TopMostKeySequence", "Alt+Pause"))); + ui.chkPauseForce->setChecked(theConf->GetBool("Options/EnablePauseForceKey", false)); + ui.keyPauseForce->setKeySequence(QKeySequence(theConf->GetString("Options/PauseForceKeySequence", "Ctrl+Alt+F"))); + ui.chkMonitorSize->setChecked(theConf->GetBool("Options/WatchBoxSize", false)); ui.chkWatchConfig->setChecked(theConf->GetBool("Options/WatchIni", true)); @@ -1509,6 +1514,9 @@ void CSettingsWindow::SaveSettings() theConf->SetValue("Options/EnableTopMostKey", ui.chkTop->isChecked()); theConf->SetValue("Options/TopMostKeySequence", ui.keyTop->keySequence().toString()); + + theConf->SetValue("Options/EnablePauseForceKey", ui.chkPauseForce->isChecked()); + theConf->SetValue("Options/PauseForceKeySequence", ui.keyPauseForce->keySequence().toString()); theConf->SetValue("Options/WatchBoxSize", ui.chkMonitorSize->isChecked());