From 340c3c47af2563e15cbb7dd255654ab47d21e66e Mon Sep 17 00:00:00 2001 From: Jonathan Bauer Date: Thu, 16 May 2019 10:50:24 +0200 Subject: support for guest session * guest sessions are not supported by default * enabled through configuration option 'guest-session-enabled=[true|false]' * button and label texts can be overwritten through configuration options (see code) * transformed the form UI into stacked widget with welcome, login and guest session pages --- qt-lightdm-greeter.qrc | 1 + resources/backIcon.svg | 1 + src/loginform.cpp | 52 ++++++++ src/loginform.h | 2 +- src/loginform.ui | 326 ++++++++++++++++++++++++++++++++++++++----------- src/settings.h | 5 + 6 files changed, 317 insertions(+), 70 deletions(-) create mode 100644 resources/backIcon.svg diff --git a/qt-lightdm-greeter.qrc b/qt-lightdm-greeter.qrc index d632f53..eed73f9 100644 --- a/qt-lightdm-greeter.qrc +++ b/qt-lightdm-greeter.qrc @@ -1,6 +1,7 @@ resources/dropdown.svg + resources/backIcon.svg resources/leaveIcon.svg resources/bwlp.svg resources/gnome-face-tired.svg diff --git a/resources/backIcon.svg b/resources/backIcon.svg new file mode 100644 index 0000000..cbd2be9 --- /dev/null +++ b/resources/backIcon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/loginform.cpp b/src/loginform.cpp index a47767a..9016d41 100644 --- a/src/loginform.cpp +++ b/src/loginform.cpp @@ -105,11 +105,53 @@ void LoginForm::initialize() connect(Global::greeter(), &QLightDM::Greeter::showPrompt, this, &LoginForm::onPrompt); connect(Global::greeter(), &QLightDM::Greeter::showMessage, this, &LoginForm::onMessage); connect(Global::greeter(), &QLightDM::Greeter::authenticationComplete, this, &LoginForm::onAuthenticationComplete); + + if (Settings::guestSessionEnabled()) { + if (!Settings::guestSessionButtonText().isEmpty()) { + ui->guestButton->setText(Settings::guestSessionButtonText()); + } + if (!Settings::userSessionButtonText().isEmpty()) { + ui->loginButton->setText(Settings::userSessionButtonText()); + } + if (!Settings::guestSessionStartText().isEmpty()) { + ui->guestStartText->setText(Settings::guestSessionStartText()); + } + if (!Settings::guestSessionStartButtonText().isEmpty()) { + ui->guestStartButton->setText(Settings::guestSessionStartButtonText()); + } + connect(ui->loginButton, &QAbstractButton::released, this, [this]() { + ui->loginChooser->setCurrentWidget(ui->loginPage); + ui->userInput->setFocus(); + }); + connect(ui->guestButton, &QAbstractButton::released, this, [this]() { + ui->loginChooser->setCurrentWidget(ui->guestPage); + }); + connect(ui->backButton, &QAbstractButton::released, this, [this]() { + resetLoginChooser(); + }); + connect(ui->loginChooser, &QStackedWidget::currentChanged, this, [this]() { + if (ui->loginChooser->currentWidget() == ui->welcomePage) { + ui->backButton->hide(); + } else { + ui->backButton->show(); + } + }); + connect(ui->guestStartButton, &QAbstractButton::released, this, []() { + if (!Global::autoLoginGuest()) { + std::cerr << "Guest login failed..." << std::endl; + // TODO warn user about it + } + }); + ui->loginChooser->setCurrentWidget(ui->welcomePage); + } else { + ui->loginChooser->setCurrentWidget(ui->loginPage); + } } // Load regexp for name substitution NameReplace::loadSubs(); + ui->backButton->hide(); ui->leaveComboBox->setDisabled(ui->leaveComboBox->count() <= 1); ui->passwordInput->clear(); this->layout()->setSizeConstraint(QLayout::SetFixedSize); @@ -268,10 +310,20 @@ void LoginForm::keyPressEvent(QKeyEvent *event) return; } } + if (Settings::guestSessionEnabled() && event->key() == Qt::Key_Escape) { + resetLoginChooser(); + } // Fallback: Passthrough QWidget::keyPressEvent(event); } +void LoginForm::resetLoginChooser() +{ + ui->loginChooser->setCurrentWidget(ui->welcomePage); + ui->userInput->clear(); + ui->passwordInput->clear(); +} + bool LoginForm::eventFilter(QObject *object, QEvent *event) { if (event->type() == QEvent::KeyRelease) { diff --git a/src/loginform.h b/src/loginform.h index 35d0fea..11cee99 100644 --- a/src/loginform.h +++ b/src/loginform.h @@ -56,7 +56,7 @@ private: QString currentSession(); void setCurrentSession(QString session); void showMessage(QString message, bool error); - + void resetLoginChooser(); Ui::LoginForm *ui; QMap powerSlots; diff --git a/src/loginform.ui b/src/loginform.ui index f195294..b74b68e 100644 --- a/src/loginform.ui +++ b/src/loginform.ui @@ -77,8 +77,8 @@ QComboBox QAbstractItemView::item { } - - + + QFrame::StyledPanel @@ -192,75 +192,242 @@ QComboBox QAbstractItemView::item { - - - - 350 - 60 - - - - - 10000 - 60 - - - - - Bitstream Vera Sans - 12 - 75 - true - - - - QLineEdit::Normal - - - user id - - - - - - - - 350 - 60 - - - - - 10000 - 60 - - - - - Bitstream Vera Sans - 12 - 75 - true - - - - - - - QLineEdit::Password - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - password - - + + 0 - - 10 - + + + false + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 50 + + + + + 10 + 75 + true + + + + color: rgb(0, 0, 0); + + + Gast-Login + + + + + + + + 0 + 50 + + + + + 10 + 75 + false + true + + + + color: rgb(0, 0, 0); + + + Campus-Login + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 350 + 60 + + + + + 10000 + 60 + + + + + Bitstream Vera Sans + 12 + 75 + true + + + + + + + QLineEdit::Password + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + password + + + 0 + + + 10 + + + + + + + + 350 + 60 + + + + + 10000 + 60 + + + + + Bitstream Vera Sans + 12 + 75 + true + + + + QLineEdit::Normal + + + user id + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 0 + 50 + + + + + 75 + true + + + + color: rgb(0, 0, 0); + + + Starten einer Gast-Sitzung + + + + + + + + 0 + 0 + + + + + 0 + 45 + + + + + 10 + true + + + + color: rgb(255, 255, 255); + + + Wenn Sie sich als Gast einloggen, dürfen Sie nur die Webseiten der Universtität Freiburg besuchen. + + + Qt::AlignCenter + + + true + + + + + @@ -284,6 +451,20 @@ QComboBox QAbstractItemView::item { 0 + + + + + 50 + 30 + + + + + :/resources/backIcon.svg:/resources/backIcon.svg + + + @@ -348,6 +529,13 @@ QComboBox QAbstractItemView::item { + + guestButton + guestStartButton + userInput + passwordInput + backButton + diff --git a/src/settings.h b/src/settings.h index 59410bd..420558c 100644 --- a/src/settings.h +++ b/src/settings.h @@ -42,6 +42,11 @@ public: static QString clockBackgroundStyle() { return s_settings->value("clock-background-style").toString(); } static QStringList clockShadow() { return s_settings->value("clock-shadow").toString().split(QRegExp("\\s"), QString::SkipEmptyParts); } static QString usernamePlaceholder() { return s_settings->value("username-placeholder").toString(); } + static bool guestSessionEnabled() { return s_settings->value("guest-session-enabled").toBool(); } + static QString userSessionButtonText() { return s_settings->value("user-session-button-text").toString(); } + static QString guestSessionButtonText() { return s_settings->value("guest-session-button-text").toString(); } + static QString guestSessionStartText() { return s_settings->value("guest-session-start-text").toString(); } + static QString guestSessionStartButtonText() { return s_settings->value("guest-session-start-button-text").toString(); } }; #endif // SETTINGS_H -- cgit v1.2.3-55-g7522