summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Ancell <robert.ancell@canonical.com>2011-04-13 17:08:44 +1000
committerRobert Ancell <robert.ancell@canonical.com>2011-04-13 17:08:44 +1000
commitf25d89b3f9d519c238c133d3f1b35f58caaa04c9 (patch)
tree7faf7885ef24da22c679fc24331fcd0ecfad4314
parent879060c3d0ee8c4114beba44f5fd8921849daa37 (diff)
downloadlightdm-f25d89b3f9d519c238c133d3f1b35f58caaa04c9.tar.gz
Add a QT greeter
-rw-r--r--.bzrignore2
-rw-r--r--NEWS1
-rw-r--r--configure.ac18
-rw-r--r--greeters/Makefile.am37
-rw-r--r--greeters/lightdm-qt-greeter.cpp83
-rw-r--r--greeters/lightdm-qt-greeter.h24
6 files changed, 154 insertions, 11 deletions
diff --git a/.bzrignore b/.bzrignore
index b355fa32..5d1be4b1 100644
--- a/.bzrignore
+++ b/.bzrignore
@@ -31,6 +31,8 @@ doc/tmpl/*-unused.sgml
doc/*.txt
doc/xml
greeters/lightdm-gtk-greeter
+greeters/lightdm-qt-greeter
+greeters/lightdm-qt-greeter_moc.cpp
liblightdm-gobject/*.gir
liblightdm-gobject/*.typelib
liblightdm-gobject/*.vapi
diff --git a/NEWS b/NEWS
index 368e6595..96541a34 100644
--- a/NEWS
+++ b/NEWS
@@ -9,6 +9,7 @@ Overview of changes in lightdm 0.3.0
* liblightdmgreeter now connect asynchronously
* Use GDBus instead of dbus-glib
* Use the engine process name instead of a hardcoded value in theme files
+ * Add basic QT engine
Overview of changes in lightdm 0.2.3
diff --git a/configure.ac b/configure.ac
index 4ede8cc6..52519029 100644
--- a/configure.ac
+++ b/configure.ac
@@ -67,17 +67,28 @@ compile_liblightdm_qt=no
if test x"$enable_liblightdm_qt" = "xauto"; then
PKG_CHECK_MODULES(LIBLIGHTDM_QT, [
QtCore
- QtGui
+ QtDBus
+ QtNetwork
], compile_liblightdm_qt=yes, compile_liblightdm_qt=no)
elif test x"$enable_liblightdm_qt" = "xyes"; then
PKG_CHECK_MODULES(LIBLIGHTDM_QT, [
QtCore
- QtGui
+ QtDBus
+ QtNetwork
])
compile_liblightdm_qt=yes
fi
AM_CONDITIONAL(COMPILE_LIBLIGHTDM_QT, test x"$compile_liblightdm_qt" != "xno")
+have_qt=no
+if test x"$compile_liblightdm_qt" = "xyes"; then
+ PKG_CHECK_MODULES(LIGHTDM_QT_GREETER, [
+ QtCore
+ QtGui
+ ], have_qt=yes, have_qt=no)
+fi
+AM_CONDITIONAL(HAVE_QT_GREETER, test $have_qt = yes)
+
PKG_CHECK_MODULES(LIGHTDM_GTK_GREETER, [
gtk+-2.0
], have_gtk=yes, have_gtk=no)
@@ -276,5 +287,6 @@ echo "
liblightdm-gobject: $compile_liblightdm_gobject
GObject introspection: $found_introspection
liblightdm-qt: $compile_liblightdm_qt
- GTK+: $have_gtk
+ GTK+ Greeter: $have_gtk
+ Qt Greeter: $have_qt
"
diff --git a/greeters/Makefile.am b/greeters/Makefile.am
index 39fd0b6d..b5b85044 100644
--- a/greeters/Makefile.am
+++ b/greeters/Makefile.am
@@ -4,18 +4,15 @@ if HAVE_GTK_GREETER
libexec_PROGRAMS += lightdm-gtk-greeter
endif
-LIBLIGHTDM_LIB = $(top_builddir)/liblightdm-gobject/liblightdm-gobject.la
-LIBLIGHTDM_CFLAGS = \
- -I$(top_srcdir)/liblightdm-gobject
-LIBLIGHTDM_LDADD = \
- -L$(top_builddir)/liblightdm-gobject \
- -llightdm-gobject-0
+if HAVE_QT_GREETER
+libexec_PROGRAMS += lightdm-qt-greeter
+endif
lightdm_gtk_greeter_SOURCES = \
lightdm-gtk-greeter.c
lightdm_gtk_greeter_CFLAGS = \
- $(LIBLIGHTDM_CFLAGS) \
+ -I$(top_srcdir)/liblightdm-gobject \
$(LIGHTDM_GTK_GREETER_CFLAGS) \
$(WARN_CFLAGS) \
-DVERSION=\"$(VERSION)\" \
@@ -24,8 +21,32 @@ lightdm_gtk_greeter_CFLAGS = \
-DLIGHTDM_GTK_GREETER_BINARY=\"lightdm-gtk-greeter\"
lightdm_gtk_greeter_LDADD = \
- $(LIBLIGHTDM_LDADD) \
+ -L$(top_builddir)/liblightdm-gobject \
+ -llightdm-gobject-0 \
$(LIGHTDM_GTK_GREETER_LIBS)
+lightdm-qt-greeter_moc.cpp: lightdm-qt-greeter.h
+ moc $< -o $@
+
+lightdm_qt_greeter_SOURCES = \
+ lightdm-qt-greeter.cpp \
+ lightdm-qt-greeter_moc.cpp
+
+lightdm_qt_greeter_CXXFLAGS = \
+ -I$(top_srcdir)/liblightdm-qt \
+ $(LIGHTDM_QT_GREETER_CFLAGS) \
+ -DVERSION=\"$(VERSION)\" \
+ -DGETTEXT_PACKAGE=\"$(GETTEXT_PACKAGE)\" \
+ -DLOCALE_DIR=\"$(localedir)\" \
+ -DLIGHTDM_QT_GREETER_BINARY=\"lightdm-qt-greeter\"
+
+lightdm_qt_greeter_LDADD = \
+ -L$(top_builddir)/liblightdm-qt \
+ -llightdm-qt-0 \
+ $(LIGHTDM_QT_GREETER_LIBS)
+
+CLEANFILES = \
+ lightdm-qt-greeter_moc.cpp
+
DISTCLEANFILES = \
Makefile.in
diff --git a/greeters/lightdm-qt-greeter.cpp b/greeters/lightdm-qt-greeter.cpp
new file mode 100644
index 00000000..ea2a5f0b
--- /dev/null
+++ b/greeters/lightdm-qt-greeter.cpp
@@ -0,0 +1,83 @@
+#include <QApplication>
+#include <QtGui>
+
+#include "lightdm-qt-greeter.h"
+
+LoginDialog::LoginDialog() : QDialog()
+{
+ label = new QLabel("Username:");
+ entry = new QLineEdit;
+ connect(entry, SIGNAL(returnPressed()), this, SLOT(onLogin()));
+ QPushButton *button = new QPushButton("Login");
+ connect(button, SIGNAL(clicked()), this, SLOT(onLogin()));
+
+ QGridLayout *layout = new QGridLayout;
+ layout->addWidget(label, 0, 0, 1, 1);
+ layout->addWidget(entry, 1, 0, 2, 1);
+ layout->addWidget(button, 2, 0, 3, 1);
+ setLayout(layout);
+
+ greeter = new LdmGreeter;
+ connect(greeter, SIGNAL(showPrompt(QString)), this, SLOT(showPrompt(QString)));
+ connect(greeter, SIGNAL(showMessage(QString)), this, SLOT(showMessage(QString)));
+ connect(greeter, SIGNAL(showError(QString)), this, SLOT(showError(QString)));
+ connect(greeter, SIGNAL(authenticationComplete()), this, SLOT(authenticationComplete()));
+ connect(greeter, SIGNAL(quit()), this, SLOT(quit()));
+ greeter->connectToServer();
+}
+
+void LoginDialog::onLogin()
+{
+ if(greeter->inAuthentication())
+ {
+ if(inPrompt)
+ greeter->provideSecret(entry->text());
+ inPrompt = false;
+ entry->setText("");
+ entry->setEchoMode(QLineEdit::Normal);
+ }
+ else
+ greeter->startAuthentication(entry->text());
+}
+
+void LoginDialog::showPrompt(QString text)
+{
+ entry->setText("");
+ entry->setEchoMode(QLineEdit::Password);
+ label->setText(text);
+ inPrompt = true;
+}
+
+void LoginDialog::showMessage(QString text)
+{
+ label->setText(text);
+}
+
+void LoginDialog::showError(QString text)
+{
+ label->setText(text);
+}
+
+void LoginDialog::authenticationComplete()
+{
+ entry->setText("");
+ if(greeter->isAuthenticated())
+ greeter->login(greeter->authenticationUser(), greeter->defaultSession(), greeter->defaultLanguage());
+ else
+ label->setText("Failed to authenticate");
+}
+
+void LoginDialog::quit()
+{
+ exit(0);
+}
+
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+
+ LoginDialog d;
+ d.show();
+
+ return a.exec();
+}
diff --git a/greeters/lightdm-qt-greeter.h b/greeters/lightdm-qt-greeter.h
new file mode 100644
index 00000000..832964f8
--- /dev/null
+++ b/greeters/lightdm-qt-greeter.h
@@ -0,0 +1,24 @@
+#include <QtGui>
+
+#include "ldmgreeter.h"
+
+class LoginDialog : public QDialog
+{
+ Q_OBJECT
+public:
+ LoginDialog();
+
+private:
+ LdmGreeter *greeter;
+ QLabel *label;
+ QLineEdit *entry;
+ bool inPrompt;
+
+private slots:
+ void onLogin();
+ void showPrompt(QString text);
+ void showMessage(QString text);
+ void showError(QString text);
+ void authenticationComplete();
+ void quit();
+};