-#include "greeter.h"
+/*
+ * Copyright (C) 2010-2011 David Edmundson
+ * Copyright (C) 2010-2011 Robert Ancell
+ * Author: David Edmundson <kde@davidedmundson.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 2 or version 3 of the License.
+ * See http://www.gnu.org/copyleft/lgpl.html the full text of the license.
+ */
-#include "user.h"
-#include "sessionsmodel.h"
-#include <security/pam_appl.h>
-#include <pwd.h>
-#include <errno.h>
+#include "QLightDM/greeter.h"
-#include <QtNetwork/QHostInfo> //needed for localHostName
#include <QtCore/QDebug>
#include <QtCore/QDir>
#include <QtCore/QVariant>
-#include <QtCore/QFile>
-#include <QtDBus/QDBusPendingReply>
+#include <QtCore/QSettings>
-
-typedef enum
-{
- /* Messages from the greeter to the server */
- GREETER_MESSAGE_CONNECT = 1,
- GREETER_MESSAGE_START_AUTHENTICATION = 2,
- GREETER_MESSAGE_CONTINUE_AUTHENTICATION = 3,
- GREETER_MESSAGE_LOGIN = 4,
- GREETER_MESSAGE_CANCEL_AUTHENTICATION = 5,
-
- /* Messages from the server to the greeter */
- GREETER_MESSAGE_CONNECTED = 101,
- GREETER_MESSAGE_QUIT = 102,
- GREETER_MESSAGE_PROMPT_AUTHENTICATION = 103,
- GREETER_MESSAGE_END_AUTHENTICATION = 104
-} GreeterMessage;
-
-#define HEADER_SIZE 8
+#include <lightdm.h>
using namespace QLightDM;
-class GreeterPrivate
+class QLightDM::GreeterPrivate
{
public:
- QString theme;
- QString defaultLayout;
- QString defaultSession;
- QString timedUser;
- int loginDelay;
-
- SessionsModel *sessionsModel;
-
- QSettings *config;
- bool haveConfig;
-
- QList<User*> users;
- bool haveUsers;
-
- QDBusInterface* lightdmInterface;
- QDBusInterface* powerManagementInterface;
- QDBusInterface* consoleKitInterface;
-
- int toServerFd;
- int fromServerFd;
- QSocketNotifier *n;
- char *readBuffer;
- int nRead;
- bool inAuthentication;
- bool isAuthenticated;
- QString authenticationUser;
+ GreeterPrivate(Greeter *parent);
+ LightDMGreeter *ldmGreeter;
+protected:
+ Greeter* q_ptr;
+
+ static void cb_showPrompt(LightDMGreeter *greeter, const gchar *text, LightDMPromptType type, gpointer data);
+ static void cb_showMessage(LightDMGreeter *greeter, const gchar *text, LightDMMessageType type, gpointer data);
+ static void cb_authenticationComplete(LightDMGreeter *greeter, gpointer data);
+ static void cb_autoLoginExpired(LightDMGreeter *greeter, gpointer data);
+ static void cb_idle(LightDMGreeter *greeter, gpointer data);
+ static void cb_reset(LightDMGreeter *greeter, gpointer data);
+
+private:
+ Q_DECLARE_PUBLIC(Greeter)
};
-
-Greeter::Greeter(QObject *parent) :
- QObject(parent),
- d(new GreeterPrivate)
+GreeterPrivate::GreeterPrivate(Greeter *parent) :
+ q_ptr(parent)
{
- d->readBuffer = (char *)malloc (HEADER_SIZE);
- d->nRead = 0;
- d->haveConfig = false;
- d->haveUsers = false;
-
- d->sessionsModel = new SessionsModel(this);
-}
+#if !defined(GLIB_VERSION_2_36)
+ g_type_init();
+#endif
+ ldmGreeter = lightdm_greeter_new();
-Greeter::~Greeter()
-{
- delete d->readBuffer;
- delete d;
+ g_signal_connect (ldmGreeter, LIGHTDM_GREETER_SIGNAL_SHOW_PROMPT, G_CALLBACK (cb_showPrompt), this);
+ g_signal_connect (ldmGreeter, LIGHTDM_GREETER_SIGNAL_SHOW_MESSAGE, G_CALLBACK (cb_showMessage), this);
+ g_signal_connect (ldmGreeter, LIGHTDM_GREETER_SIGNAL_AUTHENTICATION_COMPLETE, G_CALLBACK (cb_authenticationComplete), this);
+ g_signal_connect (ldmGreeter, LIGHTDM_GREETER_SIGNAL_AUTOLOGIN_TIMER_EXPIRED, G_CALLBACK (cb_autoLoginExpired), this);
+ g_signal_connect (ldmGreeter, LIGHTDM_GREETER_SIGNAL_IDLE, G_CALLBACK (cb_idle), this);
+ g_signal_connect (ldmGreeter, LIGHTDM_GREETER_SIGNAL_RESET, G_CALLBACK (cb_reset), this);
}
-static int intLength()
+void GreeterPrivate::cb_showPrompt(LightDMGreeter *greeter, const gchar *text, LightDMPromptType type, gpointer data)
{
- return 4;
+ Q_UNUSED(greeter);
+
+ GreeterPrivate *that = static_cast<GreeterPrivate*>(data);
+ QString message = QString::fromUtf8(text);
+
+ Q_EMIT that->q_func()->showPrompt(message, type == LIGHTDM_PROMPT_TYPE_QUESTION ?
+ Greeter::PromptTypeQuestion : Greeter::PromptTypeSecret);
}
-static int stringLength(QString value)
+void GreeterPrivate::cb_showMessage(LightDMGreeter *greeter, const gchar *text, LightDMMessageType type, gpointer data)
{
- QByteArray a = value.toUtf8();
- return intLength() + a.size();
+ Q_UNUSED(greeter);
+
+ GreeterPrivate *that = static_cast<GreeterPrivate*>(data);
+ QString message = QString::fromUtf8(text);
+
+ Q_EMIT that->q_func()->showMessage(message, type == LIGHTDM_MESSAGE_TYPE_INFO ?
+ Greeter::MessageTypeInfo : Greeter::MessageTypeError);
}
-void Greeter::writeInt(int value)
+void GreeterPrivate::cb_authenticationComplete(LightDMGreeter *greeter, gpointer data)
{
- char buffer[4];
- buffer[0] = value >> 24;
- buffer[1] = (value >> 16) & 0xFF;
- buffer[2] = (value >> 8) & 0xFF;
- buffer[3] = value & 0xFF;
- if (write(d->toServerFd, buffer, intLength()) != intLength()) {
- qDebug() << "Error writing to server";
- }
+ Q_UNUSED(greeter);
+ GreeterPrivate *that = static_cast<GreeterPrivate*>(data);
+ Q_EMIT that->q_func()->authenticationComplete();
}
-void Greeter::writeString(QString value)
+void GreeterPrivate::cb_autoLoginExpired(LightDMGreeter *greeter, gpointer data)
{
- QByteArray a = value.toUtf8();
- writeInt(a.size());
- if (write(d->toServerFd, a.data(), a.size()) != a.size()) {
- qDebug() << "Error writing to server";
- }
+ Q_UNUSED(greeter);
+ GreeterPrivate *that = static_cast<GreeterPrivate*>(data);
+ Q_EMIT that->q_func()->autologinTimerExpired();
}
-void Greeter::writeHeader(int id, int length)
+void GreeterPrivate::cb_idle(LightDMGreeter *greeter, gpointer data)
{
- writeInt(id);
- writeInt(length);
+ Q_UNUSED(greeter);
+ GreeterPrivate *that = static_cast<GreeterPrivate*>(data);
+ Q_EMIT that->q_func()->idle();
}
-void Greeter::flush()
+void GreeterPrivate::cb_reset(LightDMGreeter *greeter, gpointer data)
{
- fsync(d->toServerFd);
+ Q_UNUSED(greeter);
+ GreeterPrivate *that = static_cast<GreeterPrivate*>(data);
+ Q_EMIT that->q_func()->reset();
}
-int Greeter::getPacketLength()
+Greeter::Greeter(QObject *parent) :
+ QObject(parent),
+ d_ptr(new GreeterPrivate(this))
{
- int offset = intLength();
- return readInt(&offset);
}
-int Greeter::readInt(int *offset)
+Greeter::~Greeter()
{
- if(d->nRead - *offset < intLength()) {
- qDebug() << "Not enough space for int, need " << intLength() << ", got " << (d->nRead - *offset);
- return 0;
- }
-
- char *buffer = d->readBuffer + *offset;
- int value = buffer[0] << 24 | buffer[1] << 16 | buffer[2] << 8 | buffer[3];
- *offset += intLength();
- return value;
+ delete d_ptr;
}
-QString Greeter::readString(int *offset)
+
+bool Greeter::connectToDaemonSync()
{
- int length = readInt(offset);
- if(d->nRead - *offset < length) {
- qDebug() << "Not enough space for string, need " << length << ", got " << (d->nRead - *offset);
- return "";
- }
- char *start = d->readBuffer + *offset;
- *offset += length;
- return QString::fromUtf8(start, length);
+ Q_D(Greeter);
+ return lightdm_greeter_connect_to_daemon_sync(d->ldmGreeter, NULL);
}
-void Greeter::connectToServer()
+bool Greeter::connectSync()
{
- QDBusConnection busType = QDBusConnection::systemBus();
- QString ldmBus(qgetenv("LDM_BUS"));
- if(ldmBus == QLatin1String("SESSION")) {
- busType = QDBusConnection::sessionBus();
- }
-
-
- d->lightdmInterface = new QDBusInterface("org.lightdm.LightDisplayManager", "/org/lightdm/LightDisplayManager", "org.lightdm.LightDisplayManager", busType);
- d->powerManagementInterface = new QDBusInterface("org.freedesktop.PowerManagement","/org/freedesktop/PowerManagement", "org.freedesktop.PowerManagement");
- d->consoleKitInterface = new QDBusInterface("org.freedesktop.ConsoleKit", "/org/freedesktop/ConsoleKit/Manager", "org.freedesktop.ConsoleKit");
-
- char* fd = getenv("LDM_TO_SERVER_FD");
- if(!fd) {
- qDebug() << "No LDM_TO_SERVER_FD environment variable";
- return;
- }
- d->toServerFd = atoi(fd);
-
-
- qDebug() << "***connecting to server";
- QFile toServer;
- qDebug() << toServer.open(d->toServerFd, QIODevice::WriteOnly);
-
- fd = getenv("LDM_FROM_SERVER_FD");
- if(!fd) {
- qDebug() << "No LDM_FROM_SERVER_FD environment variable";
- return;
- }
- d->fromServerFd = atoi(fd);
-
- d->n = new QSocketNotifier(d->fromServerFd, QSocketNotifier::Read);
- connect(d->n, SIGNAL(activated(int)), this, SLOT(onRead(int)));
-
- qDebug() << "Connecting to display manager...";
- writeHeader(GREETER_MESSAGE_CONNECT, 0);
- flush();
+ Q_D(Greeter);
+ return lightdm_greeter_connect_to_daemon_sync(d->ldmGreeter, NULL);
}
-void Greeter::startAuthentication(const QString &username)
+void Greeter::authenticate(const QString &username)
{
- d->inAuthentication = true;
- d->isAuthenticated = false;
- d->authenticationUser = username;
- qDebug() << "Starting authentication for user " << username << "...";
- writeHeader(GREETER_MESSAGE_START_AUTHENTICATION, stringLength(username));
- writeString(username);
- flush();
+ Q_D(Greeter);
+ lightdm_greeter_authenticate(d->ldmGreeter, username.toLocal8Bit().data(), NULL);
}
-void Greeter::provideSecret(const QString &secret)
+void Greeter::authenticateAsGuest()
{
- qDebug() << "Providing secret to display manager";
- writeHeader(GREETER_MESSAGE_CONTINUE_AUTHENTICATION, intLength() + stringLength(secret));
- // FIXME: Could be multiple secrets required
- writeInt(1);
- writeString(secret);
- flush();
+ Q_D(Greeter);
+ lightdm_greeter_authenticate_as_guest(d->ldmGreeter, NULL);
}
-void Greeter::cancelAuthentication()
+void Greeter::authenticateAutologin()
{
- qDebug() << "Cancelling authentication";
- writeHeader(GREETER_MESSAGE_CANCEL_AUTHENTICATION, 0);
- flush();
+ Q_D(Greeter);
+ lightdm_greeter_authenticate_autologin(d->ldmGreeter, NULL);
}
-bool Greeter::inAuthentication() const
+void Greeter::authenticateRemote(const QString &session, const QString &username)
{
- return d->inAuthentication;
+ Q_D(Greeter);
+ lightdm_greeter_authenticate_remote(d->ldmGreeter, session.toLocal8Bit().data(), username.toLocal8Bit().data(), NULL);
}
-bool Greeter::isAuthenticated() const
+void Greeter::respond(const QString &response)
{
- return d->isAuthenticated;
+ Q_D(Greeter);
+ lightdm_greeter_respond(d->ldmGreeter, response.toLocal8Bit().data(), NULL);
}
-QString Greeter::authenticationUser() const
+void Greeter::cancelAuthentication()
{
- return d->authenticationUser;
-}
-
-void Greeter::login(const QString &username, const QString &session, const QString &language)
-{
- qDebug() << "Logging in as " << username << " for session " << session << " with language " << language;
- writeHeader(GREETER_MESSAGE_LOGIN, stringLength(username) + stringLength(session) + stringLength(language));
- writeString(username);
- writeString(session);
- writeString(language);
- flush();
-}
-
-void Greeter::loginWithDefaults(const QString &username)
-{
- login(username, NULL, NULL);
-}
-
-void Greeter::onRead(int fd)
-{
- //qDebug() << "Reading from server";
-
- int nToRead = HEADER_SIZE;
- if(d->nRead >= HEADER_SIZE)
- nToRead += getPacketLength();
-
- ssize_t nRead;
- nRead = read(fd, d->readBuffer + d->nRead, nToRead - d->nRead);
- if(nRead < 0)
- {
- qDebug() << "Error reading from server";
- return;
- }
- if (nRead == 0)
- {
- qDebug() << "EOF reading from server";
- return;
- }
-
- //qDebug() << "Read " << nRead << "octets";
- d->nRead += nRead;
- if(d->nRead != nToRead)
- return;
-
- /* If have header, rerun for content */
- if(d->nRead == HEADER_SIZE)
- {
- nToRead = getPacketLength();
- if(nToRead > 0)
- {
- d->readBuffer = (char *)realloc(d->readBuffer, HEADER_SIZE + nToRead);
- onRead(fd);
- return;
- }
- }
-
- int offset = 0;
- int id = readInt(&offset);
- readInt(&offset);
- int nMessages, returnCode;
- switch(id)
- {
- case GREETER_MESSAGE_CONNECTED:
- d->theme = readString(&offset);
- d->defaultLayout = readString(&offset);
- d->defaultSession = readString(&offset);
- d->timedUser = readString(&offset);
- d->loginDelay = readInt(&offset);
- qDebug() << "Connected theme=" << d->theme << " default-layout=" << d->defaultLayout << " default-session=" << d->defaultSession << " timed-user=" << d->timedUser << " login-delay" << d->loginDelay;
-
- /* Set timeout for default login */
- if(d->timedUser != "" && d->loginDelay > 0)
- {
- qDebug() << "Logging in as " << d->timedUser << " in " << d->loginDelay << " seconds";
- //FIXME: d->login_timeout = g_timeout_add (d->login_delay * 1000, timed_login_cb, greeter);
- }
- emit connected();
- break;
- case GREETER_MESSAGE_QUIT:
- qDebug() << "Got quit request from server";
- emit quit();
- break;
- case GREETER_MESSAGE_PROMPT_AUTHENTICATION:
- nMessages = readInt(&offset);
- qDebug() << "Prompt user with " << nMessages << " message(s)";
- for(int i = 0; i < nMessages; i++)
- {
- int msg_style = readInt (&offset);
- QString msg = readString (&offset);
-
- // FIXME: Should stop on prompts?
- switch (msg_style)
- {
- case PAM_PROMPT_ECHO_OFF:
- case PAM_PROMPT_ECHO_ON:
- emit showPrompt(msg);
- break;
- case PAM_ERROR_MSG:
- emit showError(msg);
- break;
- case PAM_TEXT_INFO:
- emit showMessage(msg);
- break;
- }
- }
- break;
- case GREETER_MESSAGE_END_AUTHENTICATION:
- returnCode = readInt(&offset);
- qDebug() << "Authentication complete with return code " << returnCode;
- d->isAuthenticated = (returnCode == 0);
- if(!d->isAuthenticated) {
- d->authenticationUser = "";
- }
- emit authenticationComplete(d->isAuthenticated);
- d->inAuthentication = false;
- break;
- default:
- qDebug() << "Unknown message from server: " << id;
- }
-
- d->nRead = 0;
+ Q_D(Greeter);
+ lightdm_greeter_cancel_authentication(d->ldmGreeter, NULL);
}
-QString Greeter::hostname() const
+void Greeter::cancelAutologin()
{
- return QHostInfo::localHostName();
+ Q_D(Greeter);
+ lightdm_greeter_cancel_autologin(d->ldmGreeter);
}
-QString Greeter::theme() const
+bool Greeter::inAuthentication() const
{
- return d->theme;
+ Q_D(const Greeter);
+ return lightdm_greeter_get_in_authentication(d->ldmGreeter);
}
-QVariant Greeter::getProperty(const QString &name) const
+bool Greeter::isAuthenticated() const
{
- return QVariant(); //FIXME TODO
+ Q_D(const Greeter);
+ return lightdm_greeter_get_is_authenticated(d->ldmGreeter);
}
-QString Greeter::defaultLanguage() const
+QString Greeter::authenticationUser() const
{
- return getenv("LANG");
+ Q_D(const Greeter);
+ return QString::fromUtf8(lightdm_greeter_get_authentication_user(d->ldmGreeter));
}
-QString Greeter::defaultLayout() const
+void Greeter::setLanguage (const QString &language)
{
- return d->defaultLayout;
+ Q_D(Greeter);
+ lightdm_greeter_set_language(d->ldmGreeter, language.toLocal8Bit().constData(), NULL);
}
-QString Greeter::defaultSession() const
+void Greeter::setResettable (bool resettable)
{
- return d->defaultSession;
+ Q_D(Greeter);
+ lightdm_greeter_set_resettable(d->ldmGreeter, resettable);
}
-QString Greeter::timedLoginUser() const
+bool Greeter::startSessionSync(const QString &session)
{
- return d->timedUser;
+ Q_D(Greeter);
+ return lightdm_greeter_start_session_sync(d->ldmGreeter, session.toLocal8Bit().constData(), NULL);
}
-int Greeter::timedLoginDelay() const
+QString Greeter::ensureSharedDataDirSync(const QString &username)
{
- return d->loginDelay;
+ Q_D(Greeter);
+ return QString::fromUtf8(lightdm_greeter_ensure_shared_data_dir_sync(d->ldmGreeter, username.toLocal8Bit().constData(), NULL));
}
-void Greeter::loadConfig()
-{
- if(d->haveConfig)
- return;
-
- QString file;
- if(false)
- file = d->lightdmInterface->property("ConfigFile").toString();
- qDebug() << "Loading configuration from " << file;
- d->config = new QSettings(file, QSettings::IniFormat);
- d->haveConfig = true;
+QString Greeter::getHint(const QString &name) const
+{
+ Q_D(const Greeter);
+ return lightdm_greeter_get_hint(d->ldmGreeter, name.toLocal8Bit().constData());
}
-void Greeter::loadUsers()
+QString Greeter::defaultSessionHint() const
{
- QStringList hiddenUsers, hiddenShells;
- int minimumUid;
- QList<User*> users, oldUsers, newUsers, changedUsers;
-
- loadConfig();
-
- if(d->config->contains("UserManager/minimum-uid"))
- minimumUid = d->config->value("UserManager/minimum-uid").toInt();
- else
- minimumUid = 500;
-
- if (d->config->contains("UserManager/hidden-shells"))
- hiddenUsers = d->config->value("UserManager/hidden-shells").toString().split(" ");
- else
- hiddenUsers << "nobody" << "nobody4" << "noaccess";
-
- if (d->config->contains("UserManager/hidden-shells"))
- hiddenShells = d->config->value("UserManager/hidden-shells").toString().split(" ");
- else
- hiddenShells << "/bin/false" << "/usr/sbin/nologin";
-
- setpwent();
-
- while(TRUE)
- {
- struct passwd *entry;
- User *user;
- QStringList tokens;
- QString realName, image;
- QFile *imageFile;
- int i;
-
- errno = 0;
- entry = getpwent();
- if(!entry)
- break;
-
- /* Ignore system users */
- if(entry->pw_uid < minimumUid)
- continue;
-
- /* Ignore users disabled by shell */
- if(entry->pw_shell)
- {
- for(i = 0; i < hiddenShells.size(); i++)
- if(entry->pw_shell == hiddenShells.at(i))
- break;
- if(i < hiddenShells.size())
- continue;
- }
-
- /* Ignore certain users */
- for(i = 0; i < hiddenUsers.size(); i++)
- if(entry->pw_name == hiddenUsers.at(i))
- break;
- if(i < hiddenUsers.size())
- continue;
-
- tokens = QString(entry->pw_gecos).split(",");
- if(tokens.size() > 0 && tokens.at(i) != "")
- realName = tokens.at(i);
-
- QDir homeDir(entry->pw_dir);
- imageFile = new QFile(homeDir.filePath(".face"));
- if(!imageFile->exists())
- {
- delete imageFile;
- imageFile = new QFile(homeDir.filePath(".face.icon"));
- }
- if(imageFile->exists())
- image = "file://" + imageFile->fileName();
- delete imageFile;
-
- user = new User(entry->pw_name, realName, entry->pw_dir, image, FALSE);
-
- /* Update existing users if have them */
- bool matchedUser = false;
- foreach(User *info, d->users)
- {
- if(info->name() == user->name())
- {
- matchedUser = true;
- if(info->update(user->realName(), user->homeDirectory(), user->image(), user->isLoggedIn()))
- changedUsers.append(user);
- delete user;
- user = info;
- break;
- }
- }
- if(!matchedUser)
- {
- /* Only notify once we have loaded the user list */
- if(d->haveUsers)
- newUsers.append(user);
- }
- users.append(user);
- }
-
- if(errno != 0)
- qDebug() << "Failed to read password database: " << strerror(errno);
-
- endpwent();
-
- /* Use new user list */
- oldUsers = d->users;
- d->users = users;
-
- /* Notify of changes */
- foreach(User *user, newUsers)
- {
- qDebug() << "User " << user->name() << " added";
- emit userAdded(user);
- }
-
- foreach(User *user, changedUsers)
- {
- qDebug() << "User " << user->name() << " changed";
- emit userChanged(user);
- }
-
- foreach(User *user, oldUsers)
- {
- /* See if this user is in the current list */
- bool existing = false;
- foreach(User *new_user, d->users)
- {
- if (new_user == user)
- {
- existing = true;
- break;
- }
- }
-
- if(!existing)
- {
- qDebug() << "User " << user->name() << " removed";
- emit userRemoved(user);
- delete user;
- }
- }
+ Q_D(const Greeter);
+ return QString::fromUtf8(lightdm_greeter_get_default_session_hint(d->ldmGreeter));
}
-void Greeter::updateUsers()
+bool Greeter::hideUsersHint() const
{
- if (d->haveUsers) {
- return;
- }
-
- loadConfig();
-
- /* User listing is disabled */
- if (d->config->contains("UserManager/load-users") &&
- !d->config->value("UserManager/load-users").toBool())
- {
- d->haveUsers = true;
- return;
- }
-
- loadUsers();
-
- d->haveUsers = true;
+ Q_D(const Greeter);
+ return lightdm_greeter_get_hide_users_hint(d->ldmGreeter);
}
-QList<User*> Greeter::users()
+bool Greeter::showManualLoginHint() const
{
- updateUsers();
- return d->users;
+ Q_D(const Greeter);
+ return lightdm_greeter_get_show_manual_login_hint(d->ldmGreeter);
}
-SessionsModel* Greeter::sessionsModel() const
+bool Greeter::showRemoteLoginHint() const
{
- return d->sessionsModel;
+ Q_D(const Greeter);
+ return lightdm_greeter_get_show_remote_login_hint(d->ldmGreeter);
}
-
-bool Greeter::canSuspend() const
+bool Greeter::lockHint() const
{
- QDBusReply<bool> reply = d->powerManagementInterface->call("CanSuspend");
- if (reply.isValid())
- return reply.value();
- else
- return false;
+ Q_D(const Greeter);
+ return lightdm_greeter_get_lock_hint(d->ldmGreeter);
}
-void Greeter::suspend()
+bool Greeter::hasGuestAccountHint() const
{
- d->powerManagementInterface->call("Suspend");
+ Q_D(const Greeter);
+ return lightdm_greeter_get_has_guest_account_hint(d->ldmGreeter);
}
-bool Greeter::canHibernate() const
+QString Greeter::selectUserHint() const
{
- QDBusReply<bool> reply = d->powerManagementInterface->call("CanHibernate");
- if (reply.isValid())
- return reply.value();
- else
- return false;
+ Q_D(const Greeter);
+ return QString::fromUtf8(lightdm_greeter_get_select_user_hint(d->ldmGreeter));
}
-void Greeter::hibernate()
+bool Greeter::selectGuestHint() const
{
- d->powerManagementInterface->call("Hibernate");
+ Q_D(const Greeter);
+ return lightdm_greeter_get_select_guest_hint(d->ldmGreeter);
}
-bool Greeter::canShutdown() const
+QString Greeter::autologinUserHint() const
{
- QDBusReply<bool> reply = d->consoleKitInterface->call("CanStop");
- if (reply.isValid())
- return reply.value();
- else
- return false;
+ Q_D(const Greeter);
+ return QString::fromUtf8(lightdm_greeter_get_autologin_user_hint(d->ldmGreeter));
}
-void Greeter::shutdown()
+bool Greeter::autologinGuestHint() const
{
- d->consoleKitInterface->call("stop");
+ Q_D(const Greeter);
+ return lightdm_greeter_get_autologin_guest_hint(d->ldmGreeter);
}
-bool Greeter::canRestart() const
+int Greeter::autologinTimeoutHint() const
{
- QDBusReply<bool> reply = d->consoleKitInterface->call("CanRestart");
- if (reply.isValid())
- return reply.value();
- else
- return false;
+ Q_D(const Greeter);
+ return lightdm_greeter_get_autologin_timeout_hint(d->ldmGreeter);
}
-void Greeter::restart()
+QString Greeter::hostname() const
{
- d->consoleKitInterface->call("Restart");
+ return QString::fromUtf8(lightdm_get_hostname());
}
+
+#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
+#include "greeter_moc5.cpp"
+#else
+#include "greeter_moc4.cpp"
+#endif