diff options
author | Simon Rettberg | 2020-08-07 10:44:03 +0200 |
---|---|---|
committer | Simon Rettberg | 2020-08-07 10:44:03 +0200 |
commit | b4510f200ab331432cf4f43ace0239aa0ada24b0 (patch) | |
tree | a45336fb737f10cf215fc5ebc07005b8ced18f28 | |
parent | More agressive delay and retry after screen layout changed (diff) | |
download | slxgreeter-b4510f200ab331432cf4f43ace0239aa0ada24b0.tar.gz slxgreeter-b4510f200ab331432cf4f43ace0239aa0ada24b0.tar.xz slxgreeter-b4510f200ab331432cf4f43ace0239aa0ada24b0.zip |
Make MainWindow reusing code smarter wrt LoginForm
Previously, we might have ended up with no LoginForm after some screen
setup change events.
-rw-r--r-- | src/main.cpp | 34 | ||||
-rw-r--r-- | src/mainwindow.h | 2 |
2 files changed, 16 insertions, 20 deletions
diff --git a/src/main.cpp b/src/main.cpp index c25d7df..77c4932 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -212,18 +212,18 @@ void setupScreens() MainWindow *old = remaining.take(it.key()); if (old != nullptr) { // Existing - qDebug() << "Re-using existing window"; - old->setGeometry(it.value()); - if (old->showLoginForm() && primary != it.key()) { - qDebug() << "Destroying old login form"; - LoginForm *logForm = old->stealLoginForm(); - if (logForm != nullptr) { - logForm->setParent(nullptr); - logForm->deleteLater(); + if (old->showLoginForm() == (primary == it.key())) { + qDebug() << "Re-using existing window"; + old->setGeometry(it.value()); + currentWindows.insert(it.key(), old); + it.remove(); + if (old->showLoginForm()) { + old->setFocus(Qt::OtherFocusReason); + old->activateWindow(); } + } else { + old->deleteLater(); } - currentWindows.insert(it.key(), old); - it.remove(); } } } while(0); @@ -234,17 +234,15 @@ void setupScreens() it.next(); MainWindow *old = nullptr; if (!remaining.empty()) { - qDebug() << "This should never happen, reusing old window II"; old = remaining.take(remaining.firstKey()); if (old != nullptr) { - if (old->showLoginForm() && primary != it.key()) { - LoginForm *logForm = old->stealLoginForm(); - if (logForm != nullptr) { - logForm->setParent(nullptr); - logForm->deleteLater(); - } + if (old->showLoginForm() == (primary == it.key())) { + qDebug() << "This should never happen, reusing old window II"; + old->setGeometry(it.value()); + } else { + old->deleteLater(); + old = nullptr; } - old->setGeometry(it.value()); } } if (old == nullptr) { diff --git a/src/mainwindow.h b/src/mainwindow.h index f6b1072..e1a8011 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -38,8 +38,6 @@ public: bool showLoginForm(); - LoginForm* stealLoginForm() { LoginForm *p = m_LoginForm; m_LoginForm = nullptr; return p; } - const QImage& background() { return m_background; } protected: |