summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonathan Bauer2019-05-16 10:50:24 +0200
committerJonathan Bauer2019-05-16 10:50:24 +0200
commit340c3c47af2563e15cbb7dd255654ab47d21e66e (patch)
tree5ed066c5532ec7025aa5b3f511edd93f32ff4cf2
parentImprove graphics rendering (diff)
downloadslxgreeter-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.qrc1
-rw-r--r--resources/backIcon.svg1
-rw-r--r--src/loginform.cpp52
-rw-r--r--src/loginform.h2
-rw-r--r--src/loginform.ui326
-rw-r--r--src/settings.h5
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