Only fire apply event when settings are actually applied

Signed-off-by: TheKodeToad <TheKodeToad@proton.me>
This commit is contained in:
TheKodeToad 2025-03-23 15:22:17 +00:00
parent 8732e17db9
commit adf2ed0849
No known key found for this signature in database
GPG key ID: 5E39D70B4C93C38E
7 changed files with 26 additions and 14 deletions

View file

@ -1564,9 +1564,9 @@ void Application::ShowGlobalSettings(class QWidget* parent, QString open_page)
{ {
SettingsObject::Lock lock(APPLICATION->settings()); SettingsObject::Lock lock(APPLICATION->settings());
PageDialog dlg(m_globalSettingsProvider.get(), open_page, parent); PageDialog dlg(m_globalSettingsProvider.get(), open_page, parent);
connect(&dlg, &PageDialog::applied, this, &Application::globalSettingsApplied);
dlg.exec(); dlg.exec();
} }
emit globalSettingsClosed();
} }
MainWindow* Application::showMainWindow(bool minimized) MainWindow* Application::showMainWindow(bool minimized)

View file

@ -197,7 +197,7 @@ class Application : public QApplication {
signals: signals:
void updateAllowedChanged(bool status); void updateAllowedChanged(bool status);
void globalSettingsAboutToOpen(); void globalSettingsAboutToOpen();
void globalSettingsClosed(); void globalSettingsApplied();
int currentCatChanged(int index); int currentCatChanged(int index);
void oauthReplyRecieved(QVariantMap); void oauthReplyRecieved(QVariantMap);

View file

@ -111,7 +111,7 @@ InstanceWindow::InstanceWindow(InstancePtr instance, QWidget* parent) : QMainWin
m_container->addButtons(horizontalLayout); m_container->addButtons(horizontalLayout);
connect(m_instance.get(), &BaseInstance::profilerChanged, this, &InstanceWindow::updateButtons); connect(m_instance.get(), &BaseInstance::profilerChanged, this, &InstanceWindow::updateButtons);
connect(APPLICATION, &Application::globalSettingsClosed, this, &InstanceWindow::updateButtons); connect(APPLICATION, &Application::globalSettingsApplied, this, &InstanceWindow::updateButtons);
} }
// restore window state // restore window state

View file

@ -351,7 +351,7 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent), ui(new Ui::MainWi
connect(APPLICATION->instances().get(), &InstanceList::instanceSelectRequest, this, &MainWindow::instanceSelectRequest); connect(APPLICATION->instances().get(), &InstanceList::instanceSelectRequest, this, &MainWindow::instanceSelectRequest);
// When the global settings page closes, we want to know about it and update our state // When the global settings page closes, we want to know about it and update our state
connect(APPLICATION, &Application::globalSettingsClosed, this, &MainWindow::globalSettingsClosed); connect(APPLICATION, &Application::globalSettingsApplied, this, &MainWindow::globalSettingsClosed);
m_statusLeft = new QLabel(tr("No instance selected"), this); m_statusLeft = new QLabel(tr("No instance selected"), this);
m_statusCenter = new QLabel(tr("Total playtime: 0s"), this); m_statusCenter = new QLabel(tr("Total playtime: 0s"), this);

View file

@ -43,20 +43,26 @@ PageDialog::PageDialog(BasePageProvider* pageProvider, QString defaultId, QWidge
buttons->setContentsMargins(6, 0, 6, 0); buttons->setContentsMargins(6, 0, 6, 0);
m_container->addButtons(buttons); m_container->addButtons(buttons);
connect(buttons->button(QDialogButtonBox::Ok), &QPushButton::clicked, this, &PageDialog::applyAndClose); connect(buttons->button(QDialogButtonBox::Ok), &QPushButton::clicked, this, &PageDialog::accept);
connect(buttons->button(QDialogButtonBox::Cancel), &QPushButton::clicked, this, &PageDialog::reject); connect(buttons->button(QDialogButtonBox::Cancel), &QPushButton::clicked, this, &PageDialog::reject);
connect(buttons->button(QDialogButtonBox::Help), &QPushButton::clicked, m_container, &PageContainer::help); connect(buttons->button(QDialogButtonBox::Help), &QPushButton::clicked, m_container, &PageContainer::help);
connect(this, &QDialog::accepted, this, &PageDialog::onAccepted);
connect(this, &QDialog::rejected, this, &PageDialog::storeGeometry);
restoreGeometry(QByteArray::fromBase64(APPLICATION->settings()->get("PagedGeometry").toByteArray())); restoreGeometry(QByteArray::fromBase64(APPLICATION->settings()->get("PagedGeometry").toByteArray()));
} }
void PageDialog::applyAndClose() void PageDialog::onAccepted()
{ {
qDebug() << "Paged dialog apply and close requested"; qDebug() << "Paged dialog accepted";
if (m_container->prepareToClose()) { if (m_container->prepareToClose()) {
qDebug() << "Paged dialog close approved"; qDebug() << "Paged dialog close approved";
APPLICATION->settings()->set("PagedGeometry", saveGeometry().toBase64()); emit applied();
qDebug() << "Paged dialog geometry saved"; }
close();
} }
void PageDialog::storeGeometry()
{
APPLICATION->settings()->set("PagedGeometry", saveGeometry().toBase64());
qDebug() << "Paged dialog geometry saved";
} }

View file

@ -25,8 +25,14 @@ class PageDialog : public QDialog {
explicit PageDialog(BasePageProvider* pageProvider, QString defaultId = QString(), QWidget* parent = 0); explicit PageDialog(BasePageProvider* pageProvider, QString defaultId = QString(), QWidget* parent = 0);
virtual ~PageDialog() {} virtual ~PageDialog() {}
private: signals:
void applyAndClose(); void applied();
private slots:
void onAccepted();
void storeGeometry();
private:
PageContainer* m_container; PageContainer* m_container;
}; };

View file

@ -48,7 +48,7 @@ class InstanceSettingsPage : public MinecraftSettingsWidget, public BasePage {
explicit InstanceSettingsPage(MinecraftInstancePtr instance, QWidget* parent = nullptr) : MinecraftSettingsWidget(std::move(instance), parent) explicit InstanceSettingsPage(MinecraftInstancePtr instance, QWidget* parent = nullptr) : MinecraftSettingsWidget(std::move(instance), parent)
{ {
connect(APPLICATION, &Application::globalSettingsAboutToOpen, this, &InstanceSettingsPage::saveSettings); connect(APPLICATION, &Application::globalSettingsAboutToOpen, this, &InstanceSettingsPage::saveSettings);
connect(APPLICATION, &Application::globalSettingsClosed, this, &InstanceSettingsPage::loadSettings); connect(APPLICATION, &Application::globalSettingsApplied, this, &InstanceSettingsPage::loadSettings);
} }
~InstanceSettingsPage() override {} ~InstanceSettingsPage() override {}
QString displayName() const override { return tr("Settings"); } QString displayName() const override { return tr("Settings"); }