summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Rettberg2020-08-07 10:44:03 +0200
committerSimon Rettberg2020-08-07 10:44:03 +0200
commitb4510f200ab331432cf4f43ace0239aa0ada24b0 (patch)
treea45336fb737f10cf215fc5ebc07005b8ced18f28
parentMore agressive delay and retry after screen layout changed (diff)
downloadslxgreeter-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.cpp34
-rw-r--r--src/mainwindow.h2
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: