diff --git a/tray/gui/traywidget.cpp b/tray/gui/traywidget.cpp index 2fb3338..8533abd 100644 --- a/tray/gui/traywidget.cpp +++ b/tray/gui/traywidget.cpp @@ -84,6 +84,9 @@ TrayWidget::TrayWidget(TrayMenu *parent) , m_selectedConnection(nullptr) , m_startStopButtonTarget(StartStopButtonTarget::None) { + if (!s_instances.empty() && s_settingsDlg) { + s_settingsDlg->hideConnectionStatus(); + } s_instances.push_back(this); m_ui->setupUi(this); @@ -219,7 +222,7 @@ void TrayWidget::showSettingsDialog() s_dialogParent = make_unique(); } if (!s_settingsDlg) { - s_settingsDlg = new SettingsDialog(&m_connection, s_dialogParent.get()); + s_settingsDlg = new SettingsDialog(s_instances.size() < 2 ? &m_connection : nullptr, s_dialogParent.get()); connect(s_settingsDlg, &SettingsDialog::applied, &TrayWidget::applySettingsOnAllInstances); // save settings to disk when applied diff --git a/widgets/settings/settingsdialog.cpp b/widgets/settings/settingsdialog.cpp index 8427bc3..728a303 100644 --- a/widgets/settings/settingsdialog.cpp +++ b/widgets/settings/settingsdialog.cpp @@ -81,6 +81,14 @@ ConnectionOptionPage::~ConnectionOptionPage() { } +void ConnectionOptionPage::hideConnectionStatus() +{ + ui()->statusTextLabel->setHidden(true); + ui()->statusLabel->setHidden(true); + ui()->connectPushButton->setHidden(true); + m_connection = nullptr; +} + QWidget *ConnectionOptionPage::setupWidget() { auto *const widget = ConnectionOptionPageBase::setupWidget(); @@ -92,7 +100,11 @@ QWidget *ConnectionOptionPage::setupWidget() ui()->pollDevStatsLabel->setToolTip(ui()->pollDevStatsSpinBox->toolTip()); ui()->pollErrorsLabel->setToolTip(ui()->pollErrorsSpinBox->toolTip()); ui()->reconnectLabel->setToolTip(ui()->reconnectSpinBox->toolTip()); - QObject::connect(m_connection, &SyncthingConnection::statusChanged, bind(&ConnectionOptionPage::updateConnectionStatus, this)); + if (m_connection) { + QObject::connect(m_connection, &SyncthingConnection::statusChanged, bind(&ConnectionOptionPage::updateConnectionStatus, this)); + } else { + hideConnectionStatus(); + } QObject::connect(ui()->connectPushButton, &QPushButton::clicked, bind(&ConnectionOptionPage::applyAndReconnect, this)); QObject::connect(ui()->insertFromConfigFilePushButton, &QPushButton::clicked, bind(&ConnectionOptionPage::insertFromConfigFile, this, false)); QObject::connect( @@ -160,7 +172,9 @@ void ConnectionOptionPage::insertFromConfigFile(bool forceFileSelection) void ConnectionOptionPage::updateConnectionStatus() { - ui()->statusLabel->setText(m_connection->statusText()); + if (m_connection) { + ui()->statusLabel->setText(m_connection->statusText()); + } } bool ConnectionOptionPage::showConnectionSettings(int index) @@ -352,7 +366,9 @@ void ConnectionOptionPage::reset() void ConnectionOptionPage::applyAndReconnect() { apply(); - m_connection->reconnect((m_currentIndex == 0 ? m_primarySettings : m_secondarySettings[static_cast(m_currentIndex - 1)])); + if (m_connection) { + m_connection->reconnect((m_currentIndex == 0 ? m_primarySettings : m_secondarySettings[static_cast(m_currentIndex - 1)])); + } } // NotificationsOptionPage @@ -1333,7 +1349,7 @@ SettingsDialog::SettingsDialog(Data::SyncthingConnection *connection, QWidget *p category = new OptionCategory(this); category->setDisplayName(tr("Tray")); - category->assignPages({ new ConnectionOptionPage(connection), new NotificationsOptionPage, new AppearanceOptionPage, + category->assignPages({ m_connectionsOptionPage = new ConnectionOptionPage(connection), new NotificationsOptionPage, new AppearanceOptionPage, new IconsOptionPage(IconsOptionPage::Context::UI), new IconsOptionPage(IconsOptionPage::Context::System) }); category->setIcon(QIcon(QStringLiteral(":/icons/hicolor/scalable/app/syncthingtray.svg"))); categories << category; @@ -1376,6 +1392,12 @@ void SettingsDialog::init() // some settings could be applied without restarting the application, good idea? //connect(this, &Dialogs::SettingsDialog::applied, bind(&Dialogs::QtSettings::apply, &Settings::qtSettings())); } + +void SettingsDialog::hideConnectionStatus() +{ + m_connectionsOptionPage->hideConnectionStatus(); +} + } // namespace QtGui INSTANTIATE_UI_FILE_BASED_OPTION_PAGE_NS(QtGui, ConnectionOptionPage) diff --git a/widgets/settings/settingsdialog.h b/widgets/settings/settingsdialog.h index b81e9d7..b4f0ff3 100644 --- a/widgets/settings/settingsdialog.h +++ b/widgets/settings/settingsdialog.h @@ -49,6 +49,7 @@ enum class GuiType { BEGIN_DECLARE_UI_FILE_BASED_OPTION_PAGE_CUSTOM_CTOR(ConnectionOptionPage) public: ConnectionOptionPage(Data::SyncthingConnection *connection, QWidget *parentWidget = nullptr); +void hideConnectionStatus(); private: DECLARE_SETUP_WIDGETS @@ -158,9 +159,12 @@ public: explicit SettingsDialog(const QList &categories, QWidget *parent = nullptr); explicit SettingsDialog(QWidget *parent = nullptr); ~SettingsDialog() override; + void hideConnectionStatus(); private: void init(); + + ConnectionOptionPage *m_connectionsOptionPage; }; } // namespace QtGui