fix: core not starting if gui started minimized, remove firstShown and use open instead

fixes #8641
This commit is contained in:
sithlord48 2025-06-01 08:56:09 -04:00 committed by Nick Bolton
parent d01a023a8b
commit d5910d77ec
2 changed files with 26 additions and 47 deletions

View file

@ -278,8 +278,6 @@ void MainWindow::connectSlots()
{ {
connect(&Logger::instance(), &Logger::newLine, this, &MainWindow::handleLogLine); connect(&Logger::instance(), &Logger::newLine, this, &MainWindow::handleLogLine);
connect(this, &MainWindow::shown, this, &MainWindow::firstShown, Qt::QueuedConnection);
connect(Settings::instance(), &Settings::serverSettingsChanged, this, &MainWindow::serverConfigSaving); connect(Settings::instance(), &Settings::serverSettingsChanged, this, &MainWindow::serverConfigSaving);
connect(Settings::instance(), &Settings::settingsChanged, this, &MainWindow::settingsChanged); connect(Settings::instance(), &Settings::settingsChanged, this, &MainWindow::settingsChanged);
@ -360,39 +358,6 @@ void MainWindow::toggleLogVisible(bool visible)
QTimer::singleShot(15, this, &MainWindow::updateSize); QTimer::singleShot(15, this, &MainWindow::updateSize);
} }
void MainWindow::firstShown()
{
// if a critical error was shown just before the main window (i.e. on app
// load), it will be hidden behind the main window. therefore we need to raise
// it up in front of the main window.
// HACK: because the `onShown` event happens just as the window is shown, the
// message box has a chance of being raised under the main window. to solve
// this we delay the error dialog raise by a split second. this seems a bit
// hacky and fragile, so maybe there's a better approach.
const auto kCriticalDialogDelay = 100;
QTimer::singleShot(kCriticalDialogDelay, this, &messages::raiseCriticalDialog);
if (!Settings::value(Settings::Gui::AutoUpdateCheck).isValid()) {
showAndActivate();
Settings::setValue(Settings::Gui::AutoUpdateCheck, messages::showUpdateCheckOption(this));
}
if (Settings::value(Settings::Gui::AutoUpdateCheck).toBool()) {
m_versionChecker.checkLatest();
} else {
qDebug() << "update check disabled";
}
if (Settings::value(Settings::Core::StartedBefore).toBool()) {
if (ui->rbModeClient->isChecked() && ui->lineHostname->text().isEmpty())
return;
m_coreProcess.start();
}
// Do not call firstshow for any more show events
disconnect(this, &MainWindow::shown, this, &MainWindow::firstShown);
}
void MainWindow::settingsChanged(const QString &key) void MainWindow::settingsChanged(const QString &key)
{ {
if (key == Settings::Log::Level) { if (key == Settings::Log::Level) {
@ -635,6 +600,32 @@ void MainWindow::serverConnectionConfigureClient(const QString &clientName)
void MainWindow::open() void MainWindow::open()
{ {
Settings::value(Settings::Gui::Autohide).toBool() ? hide() : showAndActivate(); Settings::value(Settings::Gui::Autohide).toBool() ? hide() : showAndActivate();
// if a critical error was shown just before the main window (i.e. on app
// load), it will be hidden behind the main window. therefore we need to raise
// it up in front of the main window.
// HACK: because the `onShown` event happens just as the window is shown, the
// message box has a chance of being raised under the main window. to solve
// this we delay the error dialog raise by a split second. this seems a bit
// hacky and fragile, so maybe there's a better approach.
const auto kCriticalDialogDelay = 100;
QTimer::singleShot(kCriticalDialogDelay, this, &messages::raiseCriticalDialog);
if (!Settings::value(Settings::Gui::AutoUpdateCheck).isValid()) {
Settings::setValue(Settings::Gui::AutoUpdateCheck, messages::showUpdateCheckOption(this));
}
if (Settings::value(Settings::Gui::AutoUpdateCheck).toBool()) {
m_versionChecker.checkLatest();
} else {
qDebug() << "update check disabled";
}
if (Settings::value(Settings::Core::StartedBefore).toBool()) {
if (ui->rbModeClient->isChecked() && ui->lineHostname->text().isEmpty())
return;
m_coreProcess.start();
}
} }
void MainWindow::coreProcessStarting() void MainWindow::coreProcessStarting()
@ -830,12 +821,6 @@ QString MainWindow::getTimeStamp() const
return QStringLiteral("[%1]").arg(QDateTime::currentDateTime().toString(Qt::ISODate)); return QStringLiteral("[%1]").arg(QDateTime::currentDateTime().toString(Qt::ISODate));
} }
void MainWindow::showEvent(QShowEvent *event)
{
QMainWindow::showEvent(event);
Q_EMIT shown();
}
void MainWindow::closeEvent(QCloseEvent *event) void MainWindow::closeEvent(QCloseEvent *event)
{ {
if (Settings::value(Settings::Gui::CloseToTray).toBool() && event->spontaneous()) { if (Settings::value(Settings::Gui::CloseToTray).toBool() && event->spontaneous()) {

View file

@ -88,14 +88,9 @@ public:
void hide(); void hide();
Q_SIGNALS:
void shown();
private: private:
void toggleLogVisible(bool visible); void toggleLogVisible(bool visible);
void firstShown();
void settingsChanged(const QString &key = QString()); void settingsChanged(const QString &key = QString());
void serverConfigSaving(); void serverConfigSaving();
void coreProcessStarting(); void coreProcessStarting();
@ -135,7 +130,6 @@ private:
void checkConnected(const QString &line); void checkConnected(const QString &line);
void checkFingerprint(const QString &line); void checkFingerprint(const QString &line);
[[nodiscard]] QString getTimeStamp() const; [[nodiscard]] QString getTimeStamp() const;
void showEvent(QShowEvent *) override;
void closeEvent(QCloseEvent *event) override; void closeEvent(QCloseEvent *event) override;
void secureSocket(bool secureSocket); void secureSocket(bool secureSocket);
void connectSlots(); void connectSlots();