From 208556b5aad17b0850ee6e39fd8da3a7edc837f8 Mon Sep 17 00:00:00 2001 From: sithlord48 Date: Mon, 16 Feb 2026 16:01:40 -0500 Subject: [PATCH] refactor: SettingsDialog, add reset to default button --- src/lib/gui/dialogs/SettingsDialog.cpp | 69 ++++++++++++++++++++++++++ src/lib/gui/dialogs/SettingsDialog.h | 11 ++++ src/lib/gui/dialogs/SettingsDialog.ui | 2 +- translations/deskflow_es.ts | 4 ++ translations/deskflow_it.ts | 4 ++ translations/deskflow_ja.ts | 4 ++ translations/deskflow_ko.ts | 4 ++ translations/deskflow_ru.ts | 4 ++ translations/deskflow_zh_CN.ts | 4 ++ 9 files changed, 105 insertions(+), 1 deletion(-) diff --git a/src/lib/gui/dialogs/SettingsDialog.cpp b/src/lib/gui/dialogs/SettingsDialog.cpp index 360bec8d7..28159bf1c 100644 --- a/src/lib/gui/dialogs/SettingsDialog.cpp +++ b/src/lib/gui/dialogs/SettingsDialog.cpp @@ -85,6 +85,10 @@ void SettingsDialog::initConnections() const connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &SettingsDialog::accept); connect(ui->buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject); connect(ui->buttonBox->button(QDialogButtonBox::Reset), &QPushButton::clicked, this, &SettingsDialog::loadFromConfig); + connect( + ui->buttonBox->button(QDialogButtonBox::RestoreDefaults), &QPushButton::clicked, this, + &SettingsDialog::resetToDefault + ); connect(ui->groupSecurity, &QGroupBox::toggled, this, &SettingsDialog::updateTlsControlsEnabled); connect(ui->groupService, &QGroupBox::toggled, this, &SettingsDialog::updateControls); @@ -191,6 +195,7 @@ void SettingsDialog::updateText() ui->buttonBox->button(QDialogButtonBox::Save)->setToolTip(tr("Close and save changes")); ui->buttonBox->button(QDialogButtonBox::Cancel)->setToolTip(tr("Close and forget changes")); ui->buttonBox->button(QDialogButtonBox::Reset)->setToolTip(tr("Reset to stored values")); + ui->buttonBox->button(QDialogButtonBox::RestoreDefaults)->setToolTip(tr("Reset to default values")); } void SettingsDialog::accept() @@ -397,11 +402,75 @@ bool SettingsDialog::isModified() const ); } +bool SettingsDialog::isDefault() const +{ + const auto processMode = Settings::defaultValue(Settings::Core::ProcessMode).value(); + + return ( + (ui->sbPort->value() == Settings::defaultValue(Settings::Core::Port).toInt()) && + (ui->comboLogLevel->currentIndex() == Settings::defaultValue(Settings::Log::Level).toInt()) && + (ui->cbLogToFile->isChecked() == Settings::defaultValue(Settings::Log::ToFile).toBool()) && + (ui->lineLogFilename->text() == Settings::defaultValue(Settings::Log::File).toString()) && + (ui->cbAutoHide->isChecked() == Settings::defaultValue(Settings::Gui::Autohide).toBool()) && + (ui->cbPreventSleep->isChecked() == Settings::defaultValue(Settings::Core::PreventSleep).toBool()) && + (ui->cbCloseToTray->isChecked() == Settings::defaultValue(Settings::Gui::CloseToTray).toBool()) && + (ui->cbElevateDaemon->isChecked() == Settings::defaultValue(Settings::Daemon::Elevate).toBool()) && + (ui->cbAutoUpdate->isChecked() == Settings::defaultValue(Settings::Gui::AutoUpdateCheck).toBool()) && + (ui->cbGuiDebug->isChecked() == Settings::defaultValue(Settings::Log::GuiDebug).toBool()) && + (ui->cbUseWlClipboard->isChecked() == Settings::defaultValue(Settings::Core::UseWlClipboard).toBool()) && + (ui->cbShowVersion->isChecked() == Settings::defaultValue(Settings::Gui::ShowVersionInTitle).toBool()) && + (ui->rbIconMono->isChecked() == Settings::defaultValue(Settings::Gui::SymbolicTrayIcon).toBool()) && + (ui->groupService->isChecked() == (processMode == Settings::ProcessMode::Service)) && + (ui->comboInterface->currentIndex() == 0) && + (ui->lineTlsCertPath->text() == Settings::defaultValue(Settings::Security::Certificate).toString()) && + (ui->comboTlsKeyLength->currentText() == Settings::defaultValue(Settings::Security::KeySize).toString()) && + (ui->groupSecurity->isChecked() == Settings::defaultValue(Settings::Security::TlsEnabled).toBool()) && + (ui->cbRequireClientCert->isChecked() == Settings::defaultValue(Settings::Security::CheckPeers).toBool()) && + (ui->comboLanguage->currentText() == "English") + ); +} + +void SettingsDialog::resetToDefault() +{ + ui->sbPort->setValue(Settings::defaultValue(Settings::Core::Port).toInt()); + ui->comboLogLevel->setCurrentIndex(Settings::defaultValue(Settings::Log::Level).toInt()); + ui->cbLogToFile->setChecked(Settings::defaultValue(Settings::Log::ToFile).toBool()); + ui->lineLogFilename->setText(Settings::defaultValue(Settings::Log::File).toString()); + ui->cbAutoHide->setChecked(Settings::defaultValue(Settings::Gui::Autohide).toBool()); + ui->cbPreventSleep->setChecked(Settings::defaultValue(Settings::Core::PreventSleep).toBool()); + ui->cbCloseToTray->setChecked(Settings::defaultValue(Settings::Gui::CloseToTray).toBool()); + ui->cbElevateDaemon->setChecked(Settings::defaultValue(Settings::Daemon::Elevate).toBool()); + ui->cbAutoUpdate->setChecked(Settings::defaultValue(Settings::Gui::AutoUpdateCheck).toBool()); + ui->cbGuiDebug->setChecked(Settings::defaultValue(Settings::Log::GuiDebug).toBool()); + ui->cbUseWlClipboard->setChecked(Settings::defaultValue(Settings::Core::UseWlClipboard).toBool()); + ui->cbShowVersion->setChecked(Settings::defaultValue(Settings::Gui::ShowVersionInTitle).toBool()); + + const auto processMode = Settings::defaultValue(Settings::Core::ProcessMode).value(); + ui->groupService->setChecked(processMode == Settings::ProcessMode::Service); + + if (!deskflow::platform::isWindows()) + ui->groupService->setVisible(false); + + if (Settings::defaultValue(Settings::Gui::SymbolicTrayIcon).toBool()) + ui->rbIconMono->setChecked(true); + else + ui->rbIconColorful->setChecked(true); + + ui->lblDebugWarning->setVisible(false); + + ui->comboInterface->setCurrentIndex(0); + + qDebug() << "reset to default values"; + updateControls(); + setButtonBoxEnabledButtons(); +} + void SettingsDialog::setButtonBoxEnabledButtons() const { const bool modified = isModified(); ui->buttonBox->button(QDialogButtonBox::Save)->setEnabled(modified); ui->buttonBox->button(QDialogButtonBox::Reset)->setEnabled(modified); + ui->buttonBox->button(QDialogButtonBox::RestoreDefaults)->setEnabled(!isDefault()); } SettingsDialog::~SettingsDialog() = default; diff --git a/src/lib/gui/dialogs/SettingsDialog.h b/src/lib/gui/dialogs/SettingsDialog.h index 29dcedc0d..5d8c2454b 100644 --- a/src/lib/gui/dialogs/SettingsDialog.h +++ b/src/lib/gui/dialogs/SettingsDialog.h @@ -67,6 +67,17 @@ private: */ bool isModified() const; + /** + * @brief isDefault + * @return true if all client settings match the default values + */ + bool isDefault() const; + + /** + * @brief Set the gui values to the defalut values for all client settings + */ + void resetToDefault(); + /** * @brief setButtonBoxEnabledButtons * Enable / Disable the button box buttons based on the state of the gui diff --git a/src/lib/gui/dialogs/SettingsDialog.ui b/src/lib/gui/dialogs/SettingsDialog.ui index 642ded743..d6fd16314 100644 --- a/src/lib/gui/dialogs/SettingsDialog.ui +++ b/src/lib/gui/dialogs/SettingsDialog.ui @@ -711,7 +711,7 @@ Qt::Orientation::Horizontal - QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Reset|QDialogButtonBox::StandardButton::Save + QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Reset|QDialogButtonBox::StandardButton::RestoreDefaults|QDialogButtonBox::StandardButton::Save diff --git a/translations/deskflow_es.ts b/translations/deskflow_es.ts index c40928770..42449eb29 100644 --- a/translations/deskflow_es.ts +++ b/translations/deskflow_es.ts @@ -1327,6 +1327,10 @@ Al habilitar esta opción, se deshabilitará la interfaz gráfica de usuario (GU Reset to stored values Restablecer los valores almacenados + + Reset to default values + Restablecer valores predeterminados + TLS Certificate Regenerated Certificado TLS regenerado diff --git a/translations/deskflow_it.ts b/translations/deskflow_it.ts index ebe787a26..bcddb1192 100644 --- a/translations/deskflow_it.ts +++ b/translations/deskflow_it.ts @@ -1327,6 +1327,10 @@ L'abilitazione di questa impostazione disabiliterà l'interfaccia graf Reset to stored values Ripristina i valori memorizzati + + Reset to default values + Ripristina i valori predefiniti + TLS Certificate Regenerated Certificato TLS rigenerato diff --git a/translations/deskflow_ja.ts b/translations/deskflow_ja.ts index 537ac3496..a309fa701 100644 --- a/translations/deskflow_ja.ts +++ b/translations/deskflow_ja.ts @@ -1356,6 +1356,10 @@ Enabling this setting will disable the server config GUI. Reset to stored values 変更前の値にリセットする + + Reset to default values + デフォルト値にリセットする + Enable wl-clipboard support wl-clipboard によるクリップボード対応を有効にする diff --git a/translations/deskflow_ko.ts b/translations/deskflow_ko.ts index 34cd16c64..fa6f92a6e 100644 --- a/translations/deskflow_ko.ts +++ b/translations/deskflow_ko.ts @@ -1354,6 +1354,10 @@ Enabling this setting will disable the server config GUI. Reset to stored values 저장된 값으로 재설정 + + Reset to default values + 기본값으로 재설정 + Enable wl-clipboard support wl-clipboard 지원 사용 diff --git a/translations/deskflow_ru.ts b/translations/deskflow_ru.ts index 410783973..bb23bd202 100644 --- a/translations/deskflow_ru.ts +++ b/translations/deskflow_ru.ts @@ -1358,6 +1358,10 @@ Enabling this setting will disable the server config GUI. Reset to stored values Сбросить до сохраненных значений + + Reset to default values + Сбросить до значений по умолчанию + <html><head/><body><p>Requires the wl-clipboard package</p><p>When using wl-clipboard v2.2.1, there is a focus stealing bug that may make Deskflow harder to use. This has been fixed when using the wl-clipboard master branch, unless your Compositor lacks wlroots-data-control protocol support.</p></body></html> <html><head/><body><p>Требуется пакет wl-clipboard. В версии 2.2.1 есть ошибка перехвата фокуса.</p></body></html> diff --git a/translations/deskflow_zh_CN.ts b/translations/deskflow_zh_CN.ts index 7d1b2538a..2391a9efa 100644 --- a/translations/deskflow_zh_CN.ts +++ b/translations/deskflow_zh_CN.ts @@ -1356,6 +1356,10 @@ Enabling this setting will disable the server config GUI. Reset to stored values 重置为存储值 + + Reset to default values + 重置为默认值 + Enable wl-clipboard support 启用 wl-clipboard 支持