@@ -16,9 +16,17 @@
1616 * Author: Michael Terry <michael.terry@canonical.com>
1717 */
1818
19+#include "DBusGreeter.h"
20+#include "DBusGreeterList.h"
1921#include "Greeter.h"
2022#include <libintl.h>
2123#include <QLightDM/Greeter>
24+#include <QTimer>
25+
26+static const char* GREETER_DBUS_PATH = "/";
27+static const char* GREETER_LIST_DBUS_PATH = "/list";
28+static const char* GREETER_DBUS_SERVICE = "com.canonical.UnityGreeter";
29+
2230
2331class GreeterPrivate
2432{
@@ -61,6 +69,9 @@ Greeter::Greeter(QObject* parent)
6169 this, SLOT(authenticationCompleteFilter()));
6270
6371 d->m_greeter->connectSync();
72+
73+ // Use a zero-timer to let Qml finish loading before we announce on DBus
74+ QTimer::singleShot(0, this, SLOT(registerDBus()));
6475}
6576
6677bool Greeter::isActive() const
@@ -154,3 +165,13 @@ void Greeter::authenticationCompleteFilter()
154165 Q_EMIT isAuthenticatedChanged();
155166 Q_EMIT authenticationComplete();
156167}
168+
169+void Greeter::registerDBus()
170+{
171+ QDBusConnection connection = QDBusConnection::sessionBus();
172+ DBusGreeter *root = new DBusGreeter(this, connection, GREETER_DBUS_PATH);
173+ connection.registerObject(GREETER_DBUS_PATH, root, QDBusConnection::ExportScriptableContents);
174+ DBusGreeterList *list = new DBusGreeterList(this, connection, GREETER_LIST_DBUS_PATH);
175+ connection.registerObject(GREETER_LIST_DBUS_PATH, list, QDBusConnection::ExportScriptableContents);
176+ connection.registerService(GREETER_DBUS_SERVICE);
177+}