Allow interacting with OBS main window while plugin settings are opened

This commit is contained in:
WarmUpTill
2021-11-19 23:58:30 +01:00
committed by WarmUpTill
parent a1cae263c1
commit 82a41694a1
4 changed files with 26 additions and 5 deletions

View File

@@ -20,6 +20,7 @@ SwitcherData *switcher = nullptr;
AdvSceneSwitcher::AdvSceneSwitcher(QWidget *parent)
: QDialog(parent), ui(new Ui_AdvSceneSwitcher)
{
switcher->settingsWindowOpened = true;
ui->setupUi(this);
std::lock_guard<std::mutex> lock(switcher->m);
@@ -28,6 +29,13 @@ AdvSceneSwitcher::AdvSceneSwitcher(QWidget *parent)
loadUI();
}
AdvSceneSwitcher::~AdvSceneSwitcher()
{
if (switcher) {
switcher->settingsWindowOpened = false;
}
}
bool translationAvailable()
{
return !!strcmp(obs_module_text("AdvSceneSwitcher.pluginName"),
@@ -635,6 +643,8 @@ static void OBSEvent(enum obs_frontend_event event, void *switcher)
}
}
AdvSceneSwitcher *ssWindow;
extern "C" void InitSceneSwitcher()
{
blog(LOG_INFO, "version: %s", g_GIT_TAG);
@@ -652,11 +662,16 @@ extern "C" void InitSceneSwitcher()
PlatformInit();
auto cb = []() {
QMainWindow *window =
(QMainWindow *)obs_frontend_get_main_window();
AdvSceneSwitcher ss(window);
ss.exec();
if (switcher->settingsWindowOpened) {
ssWindow->show();
ssWindow->raise();
ssWindow->activateWindow();
} else {
ssWindow = new AdvSceneSwitcher(
(QMainWindow *)obs_frontend_get_main_window());
ssWindow->setAttribute(Qt::WA_DeleteOnClose);
ssWindow->show();
}
};
obs_frontend_add_save_callback(SaveSceneSwitcher, nullptr);

View File

@@ -186,6 +186,9 @@ void AdvSceneSwitcher::on_toggleStartButton_clicked()
void AdvSceneSwitcher::closeEvent(QCloseEvent *)
{
if (!switcher) {
return;
}
switcher->windowPos = this->pos();
switcher->windowSize = this->size();

View File

@@ -29,6 +29,7 @@ public:
bool currentStatusActive = false;
AdvSceneSwitcher(QWidget *parent);
~AdvSceneSwitcher();
void reject() override;
void closeEvent(QCloseEvent *event) override;

View File

@@ -64,6 +64,8 @@ class SwitcherThread;
struct SwitcherData {
SwitcherThread *th = nullptr;
bool settingsWindowOpened = false;
std::condition_variable cv;
std::mutex m;
bool transitionActive = false;