Add option to only trigger window condition if foreground window changed

This commit is contained in:
WarmUpTill 2021-06-18 20:13:31 +02:00 committed by WarmUpTill
parent bdd9d12257
commit 80334088d0
3 changed files with 31 additions and 7 deletions

View File

@ -91,7 +91,7 @@ AdvSceneSwitcher.condition.scene.type.previous="Previous"
AdvSceneSwitcher.condition.scene.entry="{{sceneType}} scene is {{scenes}}"
AdvSceneSwitcher.condition.window="Window"
AdvSceneSwitcher.condition.window.entry.line1="{{windows}} exist and ..."
AdvSceneSwitcher.condition.window.entry.line2="... is {{fullscreen}} fullscreen {{maximized}} maximized {{focused}} focused"
AdvSceneSwitcher.condition.window.entry.line2="... is {{fullscreen}} fullscreen {{maximized}} maximized {{focused}} focused {{windowFocusChanged}} foreground window changed"
AdvSceneSwitcher.condition.file="File"
AdvSceneSwitcher.condition.file.entry.line1="Content of {{fileType}} {{filePath}} {{browseButton}} matches:"
AdvSceneSwitcher.condition.file.entry.line2="{{matchText}}"

View File

@ -24,6 +24,7 @@ public:
bool _fullscreen = false;
bool _maximized = false;
bool _focus = true;
bool _windowFocusChanged = false;
private:
static bool _registered;
@ -50,13 +51,15 @@ private slots:
void WindowChanged(const QString &text);
void FullscreenChanged(int state);
void MaximizedChanged(int state);
void FocusChanged(int state);
void FocusedChanged(int state);
void WindowFocusChanged(int state);
protected:
QComboBox *_windowSelection;
QCheckBox *_fullscreen;
QCheckBox *_maximized;
QCheckBox *_focused;
QCheckBox *_windowFocusChanged;
std::shared_ptr<MacroConditionWindow> _entryData;
private:

View File

@ -47,11 +47,14 @@ bool MacroConditionWindow::CheckWindowTitleSwitchRegex(
return match;
}
bool foregroundWindowChanged()
{
return switcher->currentTitle != switcher->lastTitle;
}
bool MacroConditionWindow::CheckCondition()
{
std::string currentWindowTitle;
GetCurrentWindowTitle(currentWindowTitle);
std::string currentWindowTitle = switcher->currentTitle;
std::vector<std::string> windowList;
GetWindowList(windowList);
@ -64,6 +67,7 @@ bool MacroConditionWindow::CheckCondition()
match = CheckWindowTitleSwitchRegex(currentWindowTitle,
windowList);
}
match = match && (!_windowFocusChanged || foregroundWindowChanged());
return match;
}
@ -75,6 +79,7 @@ bool MacroConditionWindow::Save(obs_data_t *obj)
obs_data_set_bool(obj, "fullscreen", _fullscreen);
obs_data_set_bool(obj, "maximized", _maximized);
obs_data_set_bool(obj, "focus", _focus);
obs_data_set_bool(obj, "windowFocusChanged", _windowFocusChanged);
return true;
}
@ -85,6 +90,7 @@ bool MacroConditionWindow::Load(obs_data_t *obj)
_fullscreen = obs_data_get_bool(obj, "fullscreen");
_maximized = obs_data_get_bool(obj, "maximized");
_focus = obs_data_get_bool(obj, "focus");
_windowFocusChanged = obs_data_get_bool(obj, "windowFocusChanged");
return true;
}
@ -99,6 +105,7 @@ MacroConditionWindowEdit::MacroConditionWindowEdit(
_fullscreen = new QCheckBox();
_maximized = new QCheckBox();
_focused = new QCheckBox();
_windowFocusChanged = new QCheckBox();
QWidget::connect(_windowSelection,
SIGNAL(currentTextChanged(const QString &)), this,
@ -108,7 +115,9 @@ MacroConditionWindowEdit::MacroConditionWindowEdit(
QWidget::connect(_maximized, SIGNAL(stateChanged(int)), this,
SLOT(MaximizedChanged(int)));
QWidget::connect(_focused, SIGNAL(stateChanged(int)), this,
SLOT(FocusChanged(int)));
SLOT(FocusedChanged(int)));
QWidget::connect(_windowFocusChanged, SIGNAL(stateChanged(int)), this,
SLOT(WindowFocusChanged(int)));
populateWindowSelection(_windowSelection);
@ -117,6 +126,7 @@ MacroConditionWindowEdit::MacroConditionWindowEdit(
{"{{fullscreen}}", _fullscreen},
{"{{maximized}}", _maximized},
{"{{focused}}", _focused},
{"{{windowFocusChanged}}", _windowFocusChanged},
};
QVBoxLayout *mainLayout = new QVBoxLayout;
@ -167,7 +177,7 @@ void MacroConditionWindowEdit::MaximizedChanged(int state)
_entryData->_maximized = state;
}
void MacroConditionWindowEdit::FocusChanged(int state)
void MacroConditionWindowEdit::FocusedChanged(int state)
{
if (_loading || !_entryData) {
return;
@ -177,6 +187,16 @@ void MacroConditionWindowEdit::FocusChanged(int state)
_entryData->_focus = state;
}
void MacroConditionWindowEdit::WindowFocusChanged(int state)
{
if (_loading || !_entryData) {
return;
}
std::lock_guard<std::mutex> lock(switcher->m);
_entryData->_windowFocusChanged = state;
}
void MacroConditionWindowEdit::UpdateEntryData()
{
if (!_entryData) {
@ -187,4 +207,5 @@ void MacroConditionWindowEdit::UpdateEntryData()
_fullscreen->setChecked(_entryData->_fullscreen);
_maximized->setChecked(_entryData->_maximized);
_focused->setChecked(_entryData->_focus);
_windowFocusChanged->setChecked(_entryData->_windowFocusChanged);
}