diff options
author | Jonathan Bauer | 2019-05-16 10:50:24 +0200 |
---|---|---|
committer | Jonathan Bauer | 2019-05-16 10:50:24 +0200 |
commit | 340c3c47af2563e15cbb7dd255654ab47d21e66e (patch) | |
tree | 5ed066c5532ec7025aa5b3f511edd93f32ff4cf2 | |
parent | Improve graphics rendering (diff) | |
download | slxgreeter-340c3c47af2563e15cbb7dd255654ab47d21e66e.tar.gz slxgreeter-340c3c47af2563e15cbb7dd255654ab47d21e66e.tar.xz slxgreeter-340c3c47af2563e15cbb7dd255654ab47d21e66e.zip |
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
-rw-r--r-- | qt-lightdm-greeter.qrc | 1 | ||||
-rw-r--r-- | resources/backIcon.svg | 1 | ||||
-rw-r--r-- | src/loginform.cpp | 52 | ||||
-rw-r--r-- | src/loginform.h | 2 | ||||
-rw-r--r-- | src/loginform.ui | 326 | ||||
-rw-r--r-- | src/settings.h | 5 |
6 files changed, 317 insertions, 70 deletions
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 @@ <RCC> <qresource prefix="/"> <file>resources/dropdown.svg</file> + <file>resources/backIcon.svg</file> <file>resources/leaveIcon.svg</file> <file>resources/bwlp.svg</file> <file>resources/gnome-face-tired.svg</file> 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 @@ +<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg height="512px" id="Layer_1" style="enable-background:new 0 0 512 512;" version="1.1" viewBox="0 0 512 512" width="512px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><polygon points="352,128.4 319.7,96 160,256 160,256 160,256 319.7,416 352,383.6 224.7,256 "/></svg>
\ 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<int, void (QLightDM::PowerInterface::*)()> 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 { } </string> </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> + <layout class="QGridLayout" name="gridLayout_3"> + <item row="0" column="0"> <widget class="QFrame" name="formFrame"> <property name="frameShape"> <enum>QFrame::StyledPanel</enum> @@ -192,75 +192,242 @@ QComboBox QAbstractItemView::item { </widget> </item> <item> - <widget class="QLineEdit" name="userInput"> - <property name="minimumSize"> - <size> - <width>350</width> - <height>60</height> - </size> - </property> - <property name="maximumSize"> - <size> - <width>10000</width> - <height>60</height> - </size> - </property> - <property name="font"> - <font> - <family>Bitstream Vera Sans</family> - <pointsize>12</pointsize> - <weight>75</weight> - <bold>true</bold> - </font> - </property> - <property name="echoMode"> - <enum>QLineEdit::Normal</enum> - </property> - <property name="placeholderText"> - <string>user id</string> - </property> - </widget> - </item> - <item> - <widget class="QLineEdit" name="passwordInput"> - <property name="minimumSize"> - <size> - <width>350</width> - <height>60</height> - </size> - </property> - <property name="maximumSize"> - <size> - <width>10000</width> - <height>60</height> - </size> - </property> - <property name="font"> - <font> - <family>Bitstream Vera Sans</family> - <pointsize>12</pointsize> - <weight>75</weight> - <bold>true</bold> - </font> - </property> - <property name="text"> - <string/> - </property> - <property name="echoMode"> - <enum>QLineEdit::Password</enum> - </property> - <property name="alignment"> - <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set> - </property> - <property name="placeholderText"> - <string>password</string> - </property> - <property name="margin" stdset="0"> + <widget class="QStackedWidget" name="loginChooser"> + <property name="currentIndex"> <number>0</number> </property> - <property name="indent" stdset="0"> - <number>10</number> - </property> + <widget class="QWidget" name="welcomePage"> + <property name="autoFillBackground"> + <bool>false</bool> + </property> + <layout class="QGridLayout" name="gridLayout"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item row="1" column="0"> + <widget class="QPushButton" name="guestButton"> + <property name="minimumSize"> + <size> + <width>0</width> + <height>50</height> + </size> + </property> + <property name="font"> + <font> + <pointsize>10</pointsize> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="styleSheet"> + <string notr="true">color: rgb(0, 0, 0);</string> + </property> + <property name="text"> + <string>Gast-Login</string> + </property> + </widget> + </item> + <item row="0" column="0"> + <widget class="QPushButton" name="loginButton"> + <property name="minimumSize"> + <size> + <width>0</width> + <height>50</height> + </size> + </property> + <property name="font"> + <font> + <pointsize>10</pointsize> + <weight>75</weight> + <italic>false</italic> + <bold>true</bold> + </font> + </property> + <property name="styleSheet"> + <string notr="true">color: rgb(0, 0, 0);</string> + </property> + <property name="text"> + <string>Campus-Login</string> + </property> + </widget> + </item> + </layout> + </widget> + <widget class="QWidget" name="loginPage"> + <layout class="QGridLayout" name="gridLayout_4"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item row="1" column="0"> + <widget class="QLineEdit" name="passwordInput"> + <property name="minimumSize"> + <size> + <width>350</width> + <height>60</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>10000</width> + <height>60</height> + </size> + </property> + <property name="font"> + <font> + <family>Bitstream Vera Sans</family> + <pointsize>12</pointsize> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="text"> + <string/> + </property> + <property name="echoMode"> + <enum>QLineEdit::Password</enum> + </property> + <property name="alignment"> + <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set> + </property> + <property name="placeholderText"> + <string>password</string> + </property> + <property name="margin" stdset="0"> + <number>0</number> + </property> + <property name="indent" stdset="0"> + <number>10</number> + </property> + </widget> + </item> + <item row="0" column="0"> + <widget class="QLineEdit" name="userInput"> + <property name="minimumSize"> + <size> + <width>350</width> + <height>60</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>10000</width> + <height>60</height> + </size> + </property> + <property name="font"> + <font> + <family>Bitstream Vera Sans</family> + <pointsize>12</pointsize> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="echoMode"> + <enum>QLineEdit::Normal</enum> + </property> + <property name="placeholderText"> + <string>user id</string> + </property> + </widget> + </item> + </layout> + </widget> + <widget class="QWidget" name="guestPage"> + <layout class="QGridLayout" name="gridLayout_2"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item row="1" column="0"> + <widget class="QPushButton" name="guestStartButton"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>50</height> + </size> + </property> + <property name="font"> + <font> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="styleSheet"> + <string notr="true">color: rgb(0, 0, 0);</string> + </property> + <property name="text"> + <string>Starten einer Gast-Sitzung</string> + </property> + </widget> + </item> + <item row="0" column="0"> + <widget class="QLabel" name="guestStartText"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>45</height> + </size> + </property> + <property name="font"> + <font> + <pointsize>10</pointsize> + <italic>true</italic> + </font> + </property> + <property name="styleSheet"> + <string notr="true">color: rgb(255, 255, 255);</string> + </property> + <property name="text"> + <string>Wenn Sie sich als Gast einloggen, dürfen Sie nur die Webseiten der Universtität Freiburg besuchen.</string> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + <property name="wordWrap"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </widget> </widget> </item> <item> @@ -285,6 +452,20 @@ QComboBox QAbstractItemView::item { <number>0</number> </property> <item> + <widget class="QPushButton" name="backButton"> + <property name="minimumSize"> + <size> + <width>50</width> + <height>30</height> + </size> + </property> + <property name="icon"> + <iconset resource="../qt-lightdm-greeter.qrc"> + <normaloff>:/resources/backIcon.svg</normaloff>:/resources/backIcon.svg</iconset> + </property> + </widget> + </item> + <item> <widget class="QLabel" name="messageLabel"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> @@ -348,6 +529,13 @@ QComboBox QAbstractItemView::item { </item> </layout> </widget> + <tabstops> + <tabstop>guestButton</tabstop> + <tabstop>guestStartButton</tabstop> + <tabstop>userInput</tabstop> + <tabstop>passwordInput</tabstop> + <tabstop>backButton</tabstop> + </tabstops> <resources> <include location="../qt-lightdm-greeter.qrc"/> </resources> 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 |