diff --git a/plasmoid/lib/syncthingapplet.cpp b/plasmoid/lib/syncthingapplet.cpp index b215d5f..ebb56ce 100644 --- a/plasmoid/lib/syncthingapplet.cpp +++ b/plasmoid/lib/syncthingapplet.cpp @@ -98,8 +98,6 @@ void SyncthingApplet::init() // restore settings Settings::restore(); - // load primary connection config - setCurrentConnectionConfigIndex(config().readEntry("selectedConfig", 0)); // initialize systemd service support #ifdef LIB_SYNCTHING_CONNECTOR_SUPPORT_SYSTEMD @@ -110,6 +108,9 @@ void SyncthingApplet::init() connect(&m_service, &SyncthingService::errorOccurred, this, &SyncthingApplet::handleSystemdServiceError); #endif + // load primary connection config + m_currentConnectionConfig = config().readEntry("selectedConfig", 0); + // apply settings and connect according to settings handleSettingsChanged(); diff --git a/tray/application/main.cpp b/tray/application/main.cpp index 021d84d..2a359b7 100644 --- a/tray/application/main.cpp +++ b/tray/application/main.cpp @@ -56,9 +56,10 @@ int initSyncthingTray(bool windowed, bool waitForTray, const char *connectionCon // handle "windowed" case if (windowed) { settings.launcher.autostart(); - auto *const trayWidget = new TrayWidget(connectionConfigQStr); + auto *const trayWidget = new TrayWidget(); trayWidget->setAttribute(Qt::WA_DeleteOnClose); trayWidget->show(); + trayWidget->applySettings(connectionConfigQStr); return 0; } diff --git a/tray/gui/trayicon.cpp b/tray/gui/trayicon.cpp index f80eb65..5a97b69 100644 --- a/tray/gui/trayicon.cpp +++ b/tray/gui/trayicon.cpp @@ -38,7 +38,7 @@ namespace QtGui { */ TrayIcon::TrayIcon(const QString &connectionConfig, QObject *parent) : QSystemTrayIcon(parent) - , m_trayMenu(connectionConfig, this) + , m_trayMenu(this) #ifdef QT_UTILITIES_SUPPORT_DBUS_NOTIFICATIONS , m_dbusNotificationsEnabled(Settings::values().dbusNotifications) #endif @@ -104,6 +104,10 @@ TrayIcon::TrayIcon(const QString &connectionConfig, QObject *parent) connect(&m_dbusNotifier, &DBusStatusNotifier::webUiRequested, &widget, &TrayWidget::showWebUi); connect(¬ifier, &SyncthingNotifier::connected, &m_dbusNotifier, &DBusStatusNotifier::hideDisconnect); #endif + + // apply settings, this also establishes the connection to Syncthing (according to settings) + // note: it is important to apply settings after all Signals & Slots have been connected (eg. to handle SyncthingConnection::error()) + m_trayMenu.widget().applySettings(connectionConfig); } /*! diff --git a/tray/gui/traymenu.cpp b/tray/gui/traymenu.cpp index 179ba9a..63998df 100644 --- a/tray/gui/traymenu.cpp +++ b/tray/gui/traymenu.cpp @@ -11,14 +11,14 @@ namespace QtGui { -TrayMenu::TrayMenu(const QString &connectionConfig, TrayIcon *trayIcon, QWidget *parent) +TrayMenu::TrayMenu(TrayIcon *trayIcon, QWidget *parent) : QMenu(parent) , m_trayIcon(trayIcon) { auto *const menuLayout = new QHBoxLayout; menuLayout->setMargin(0); menuLayout->setSpacing(0); - menuLayout->addWidget(m_trayWidget = new TrayWidget(connectionConfig, this)); + menuLayout->addWidget(m_trayWidget = new TrayWidget(this)); setLayout(menuLayout); setPlatformMenu(nullptr); } diff --git a/tray/gui/traymenu.h b/tray/gui/traymenu.h index c709e59..97707b7 100644 --- a/tray/gui/traymenu.h +++ b/tray/gui/traymenu.h @@ -12,7 +12,7 @@ class TrayMenu : public QMenu { Q_OBJECT public: - TrayMenu(const QString &connectionConfig = QString(), TrayIcon *trayIcon = nullptr, QWidget *parent = nullptr); + TrayMenu(TrayIcon *trayIcon = nullptr, QWidget *parent = nullptr); QSize sizeHint() const; TrayWidget &widget(); diff --git a/tray/gui/traywidget.cpp b/tray/gui/traywidget.cpp index 9143016..b11efae 100644 --- a/tray/gui/traywidget.cpp +++ b/tray/gui/traywidget.cpp @@ -55,8 +55,11 @@ vector TrayWidget::m_instances; /*! * \brief Instantiates a new tray widget. + * \remarks Doesn't apply the settings (and won't connect according to settings). This must be done manually by calling + * TrayWidget::applySettings(). This allows postponing connecting until all signals of the TrayWidget::connection() + * are connected as required. */ -TrayWidget::TrayWidget(const QString &connectionConfig, TrayMenu *parent) +TrayWidget::TrayWidget(TrayMenu *parent) : QWidget(parent) , m_menu(parent) , m_ui(new Ui::TrayWidget) @@ -122,9 +125,6 @@ TrayWidget::TrayWidget(const QString &connectionConfig, TrayMenu *parent) m_notificationsMenu->addAction(m_ui->actionDismissNotifications); m_ui->notificationsPushButton->setMenu(m_notificationsMenu); - // apply settings, this also establishes the connection to Syncthing (according to settings) - applySettings(connectionConfig); - // setup other widgets m_ui->notificationsPushButton->setHidden(true); m_ui->trafficIconLabel->setPixmap( diff --git a/tray/gui/traywidget.h b/tray/gui/traywidget.h index 7ae261a..ffc769a 100644 --- a/tray/gui/traywidget.h +++ b/tray/gui/traywidget.h @@ -42,7 +42,7 @@ class TrayWidget : public QWidget { Q_OBJECT public: - TrayWidget(const QString &connectionConfig = QString(), TrayMenu *parent = nullptr); + TrayWidget(TrayMenu *parent = nullptr); ~TrayWidget(); Data::SyncthingConnection &connection(); @@ -63,10 +63,10 @@ public slots: void dismissNotifications(); void restartSyncthing(); void quitTray(); + void applySettings(const QString &connectionConfig = QString()); private slots: void handleStatusChanged(Data::SyncthingStatus status); - void applySettings(const QString &connectionConfig = QString()); static void applySettingsOnAllInstances(); void openDir(const Data::SyncthingDir &dir); void openItemDir(const Data::SyncthingItemDownloadProgress &item);