liblightdm-gobject/*.gir
liblightdm-gobject/*.typelib
liblightdm-gobject/liblightdm-gobject-*.pc
-liblightdm-qt/liblightdm-qt4-*.pc
+liblightdm-qt/liblightdm-qt-*.pc
liblightdm-qt/liblightdm-qt5-*.pc
liblightdm-qt/*_moc*.cpp
m4/*
liblightdm-gobject/liblightdm-gobject-1.pc
liblightdm-gobject/Makefile
liblightdm-qt/Makefile
-liblightdm-qt/liblightdm-qt-2.pc
-liblightdm-qt/liblightdm-qt5-2.pc
+liblightdm-qt/liblightdm-qt-3.pc
+liblightdm-qt/liblightdm-qt5-3.pc
po/Makefile.in
src/Makefile
tests/Makefile
static GDBusProxy *ck_proxy = NULL;
static GDBusProxy *login1_proxy = NULL;
-static gboolean
-upower_call_function (const gchar *function, gboolean default_result, GError **error)
+static GVariant *
+upower_call_function (const gchar *function, GError **error)
{
GVariant *result;
- gboolean function_result = FALSE;
if (!upower_proxy)
{
NULL,
error);
if (!upower_proxy)
- return FALSE;
+ return NULL;
}
- result = g_dbus_proxy_call_sync (upower_proxy,
- function,
- NULL,
- G_DBUS_CALL_FLAGS_NONE,
- -1,
- NULL,
- error);
- if (!result)
- return default_result;
-
- if (g_variant_is_of_type (result, G_VARIANT_TYPE ("(b)")))
- g_variant_get (result, "(b)", &function_result);
-
- g_variant_unref (result);
- return function_result;
+ return g_dbus_proxy_call_sync (upower_proxy,
+ function,
+ NULL,
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ NULL,
+ error);
}
/**
gboolean
lightdm_get_can_suspend (void)
{
- return upower_call_function ("SuspendAllowed", FALSE, NULL);
+ GVariant *result;
+ gboolean can_suspend = FALSE;
+
+ result = upower_call_function ("SuspendAllowed", NULL);
+ if (!result)
+ return FALSE;
+
+ if (g_variant_is_of_type (result, G_VARIANT_TYPE ("(b)")))
+ g_variant_get (result, "(b)", &can_suspend);
+ g_variant_unref (result);
+
+ return can_suspend;
}
/**
gboolean
lightdm_suspend (GError **error)
{
- return upower_call_function ("Suspend", TRUE, error);
+ GVariant *result;
+
+ result = upower_call_function ("Suspend", error);
+ if (!result)
+ return FALSE;
+
+ g_variant_unref (result);
+
+ return TRUE;
}
/**
gboolean
lightdm_get_can_hibernate (void)
{
- return upower_call_function ("HibernateAllowed", FALSE, NULL);
+ GVariant *result;
+ gboolean can_hibernate = FALSE;
+
+ result = upower_call_function ("HibernateAllowed", NULL);
+ if (!result)
+ return FALSE;
+
+ if (g_variant_is_of_type (result, G_VARIANT_TYPE ("(b)")))
+ g_variant_get (result, "(b)", &can_hibernate);
+ g_variant_unref (result);
+
+ return can_hibernate;
}
/**
gboolean
lightdm_hibernate (GError **error)
{
- return upower_call_function ("Hibernate", TRUE, error);
+ GVariant *result;
+
+ result = upower_call_function ("Hibernate", error);
+ if (!result)
+ return FALSE;
+
+ g_variant_unref (result);
+
+ return TRUE;
}
static GVariant *
common_libadd = \
-L$(top_builddir)/liblightdm-gobject \
-llightdm-gobject-1
-liblightdm_qt_2_la_LIBADD = \
+liblightdm_qt_3_la_LIBADD = \
$(LIBLIGHTDM_QT4_LIBS) \
$(common_libadd)
-liblightdm_qt5_2_la_LIBADD = \
+liblightdm_qt5_3_la_LIBADD = \
$(LIBLIGHTDM_QT5_LIBS) \
$(common_libadd)
$(LIBLIGHTDM_GOBJECT_CFLAGS) \
-DQT_NO_KEYWORDS \
-DXSESSIONS_DIR=\"$(datadir)/xsessions\"
-liblightdm_qt_2_la_CXXFLAGS = \
+liblightdm_qt_3_la_CXXFLAGS = \
$(LIBLIGHTDM_QT4_CFLAGS) \
$(common_cflags)
-liblightdm_qt5_2_la_CXXFLAGS = \
+liblightdm_qt5_3_la_CXXFLAGS = \
-fPIC \
-DQT_DISABLE_DEPRECATED_BEFORE="QT_VERSION_CHECK(4, 0, 0)" \
$(LIBLIGHTDM_QT5_CFLAGS) \
QLightDM/sessionsmodel.h \
QLightDM/usersmodel.h
-liblightdm_qt_2includedir=$(includedir)/lightdm-qt-2/QLightDM
-liblightdm_qt5_2includedir=$(includedir)/lightdm-qt5-2/QLightDM
+liblightdm_qt_3includedir=$(includedir)/lightdm-qt-3/QLightDM
+liblightdm_qt5_3includedir=$(includedir)/lightdm-qt5-3/QLightDM
common_sources = \
greeter.cpp \
power.cpp \
sessionsmodel.cpp \
usersmodel.cpp
-liblightdm_qt_2_la_SOURCES = \
+liblightdm_qt_3_la_SOURCES = \
$(common_sources) \
- $(liblightdm_qt_2include_HEADERS)
-liblightdm_qt5_2_la_SOURCES = \
+ $(liblightdm_qt_3include_HEADERS)
+liblightdm_qt5_3_la_SOURCES = \
$(common_sources) \
- $(liblightdm_qt5_2include_HEADERS)
+ $(liblightdm_qt5_3include_HEADERS)
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA =
if COMPILE_LIBLIGHTDM_QT4
-lib_LTLIBRARIES += liblightdm-qt-2.la
-liblightdm_qt_2include_HEADERS = $(common_headers)
+lib_LTLIBRARIES += liblightdm-qt-3.la
+liblightdm_qt_3include_HEADERS = $(common_headers)
BUILT_SOURCES += $(common_sources:.cpp=_moc4.cpp)
-pkgconfig_DATA += liblightdm-qt-2.pc
+pkgconfig_DATA += liblightdm-qt-3.pc
endif
if COMPILE_LIBLIGHTDM_QT5
-lib_LTLIBRARIES += liblightdm-qt5-2.la
-liblightdm_qt5_2include_HEADERS = $(common_headers)
+lib_LTLIBRARIES += liblightdm-qt5-3.la
+liblightdm_qt5_3include_HEADERS = $(common_headers)
BUILT_SOURCES += $(common_sources:.cpp=_moc5.cpp)
-pkgconfig_DATA += liblightdm-qt5-2.pc
+pkgconfig_DATA += liblightdm-qt5-3.pc
endif
bool canRestart();
public Q_SLOTS:
- void suspend();
- void hibernate();
- void shutdown();
- void restart();
+ bool suspend();
+ bool hibernate();
+ bool shutdown();
+ bool restart();
private:
class PowerInterfacePrivate;
}
}
-void PowerInterface::suspend()
+bool PowerInterface::suspend()
{
- d->powerManagementInterface->call("Suspend");
+ QDBusReply<void> reply = d->powerManagementInterface->call("Suspend");
+ return reply.isValid ();
}
bool PowerInterface::canHibernate()
}
}
-void PowerInterface::hibernate()
+bool PowerInterface::hibernate()
{
- d->powerManagementInterface->call("Hibernate");
+ QDBusReply<void> reply = d->powerManagementInterface->call("Hibernate");
+ return reply.isValid ();
}
bool PowerInterface::canShutdown()
return false;
}
-void PowerInterface::shutdown()
+bool PowerInterface::shutdown()
{
+ QDBusReply<void> reply;
if (d->login1Interface->isValid())
- d->login1Interface->call("PowerOff", false);
+ reply = d->login1Interface->call("PowerOff", false);
else
- d->consoleKitInterface->call("Stop");
+ reply = d->consoleKitInterface->call("Stop");
+ return reply.isValid();
}
bool PowerInterface::canRestart()
return false;
}
-void PowerInterface::restart()
+bool PowerInterface::restart()
{
+ QDBusReply<void> reply;
if (d->login1Interface->isValid())
- d->login1Interface->call("Reboot", false);
+ reply = d->login1Interface->call("Reboot", false);
else
- d->consoleKitInterface->call("Restart");
+ reply = d->consoleKitInterface->call("Restart");
+ return reply.isValid();
}
#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
test-no-console-kit \
test-no-login1 \
test-no-console-kit-or-login1 \
+ test-gobject-power \
+ test-gobject-power-no-console-kit \
+ test-gobject-power-no-login1 \
+ test-gobject-power-no-services \
+ test-python-power \
+ test-python-power-no-console-kit \
+ test-python-power-no-login1 \
+ test-python-power-no-services \
test-open-file-descriptors \
test-xdmcp-open-file-descriptors
test-login-qt4-guest-no-setup-script \
test-login-qt4-guest-fail-setup-script \
test-login-qt4-guest-logout \
- test-login-qt4-remote-session
+ test-login-qt4-remote-session \
+ test-qt4-power \
+ test-qt4-power-no-console-kit \
+ test-qt4-power-no-login1 \
+ test-qt4-power-no-services
endif
if COMPILE_LIBLIGHTDM_QT5
test-login-qt5-guest-no-setup-script \
test-login-qt5-guest-fail-setup-script \
test-login-qt5-guest-logout \
- test-login-qt5-remote-session
+ test-login-qt5-remote-session \
+ test-qt4-power \
+ test-qt4-power-no-console-kit \
+ test-qt4-power-no-login1 \
+ test-qt4-power-no-services
endif
EXTRA_DIST = \
scripts/no-login1.conf \
scripts/open-file-descriptors.conf \
scripts/pam.conf \
+ scripts/power.conf \
+ scripts/power-no-console-kit.conf \
+ scripts/power-no-services.conf \
+ scripts/power-no-login1.conf \
scripts/plymouth-active-vt.conf \
scripts/plymouth-inactive-vt.conf \
scripts/plymouth-no-seat.conf \
--- /dev/null
+#
+# Check can do power operations from the greeter when no ConsoleKit service
+#
+
+[test-runner-config]
+disable-console-kit=true
+
+[LightDM]
+minimum-display-number=50
+
+#?RUNNER DAEMON-START
+
+# X server starts
+#?XSERVER :50 START
+#?XSERVER :50 INDICATE-READY
+
+# LightDM connects to X server
+#?XSERVER :50 ACCEPT-CONNECT
+
+# Greeter starts
+#?GREETER :50 START
+#?XSERVER :50 ACCEPT-CONNECT
+#?GREETER :50 CONNECT-XSERVER
+#?GREETER :50 CONNECT-TO-DAEMON
+#?GREETER :50 CONNECTED-TO-DAEMON
+
+# See if can suspend
+#?*GREETER :50 GET-CAN-SUSPEND
+#?UPOWER SUSPEND-ALLOWED
+#?GREETER :50 CAN-SUSPEND ALLOWED=TRUE
+
+# Suspend
+#?*GREETER :50 SUSPEND
+#?UPOWER SUSPEND
+
+# See if can hibernate
+#?*GREETER :50 GET-CAN-HIBERNATE
+#?UPOWER HIBERNATE-ALLOWED
+#?GREETER :50 CAN-HIBERNATE ALLOWED=TRUE
+
+# Hibernate
+#?*GREETER :50 HIBERNATE
+#?UPOWER HIBERNATE
+
+# See if can restart
+#?*GREETER :50 GET-CAN-RESTART
+#?LOGIN1 CAN-REBOOT
+#?GREETER :50 CAN-RESTART ALLOWED=TRUE
+
+# Restart
+#?*GREETER :50 RESTART
+#?LOGIN1 REBOOT
+
+# See if can shutdown
+#?*GREETER :50 GET-CAN-SHUTDOWN
+#?LOGIN1 CAN-POWER-OFF
+#?GREETER :50 CAN-SHUTDOWN ALLOWED=TRUE
+
+# Shutdown
+#?*GREETER :50 SHUTDOWN
+#?LOGIN1 POWER-OFF
+
+# Cleanup
+#?*STOP-DAEMON
+# Don't know what order they will terminate
+#?(GREETER :50 TERMINATE SIGNAL=15|XSERVER :50 TERMINATE SIGNAL=15)
+#?(GREETER :50 TERMINATE SIGNAL=15|XSERVER :50 TERMINATE SIGNAL=15)
+#?RUNNER DAEMON-EXIT STATUS=0
--- /dev/null
+#
+# Check can do power operations from the greeter when no login1 service (falls back to ConsoleKit)
+#
+
+[test-runner-config]
+disable-login1=true
+
+[LightDM]
+minimum-display-number=50
+
+#?RUNNER DAEMON-START
+
+# X server starts
+#?XSERVER :50 START
+#?XSERVER :50 INDICATE-READY
+
+# LightDM connects to X server
+#?XSERVER :50 ACCEPT-CONNECT
+
+# Greeter starts
+#?GREETER :50 START
+#?XSERVER :50 ACCEPT-CONNECT
+#?GREETER :50 CONNECT-XSERVER
+#?GREETER :50 CONNECT-TO-DAEMON
+#?GREETER :50 CONNECTED-TO-DAEMON
+
+# See if can suspend
+#?*GREETER :50 GET-CAN-SUSPEND
+#?UPOWER SUSPEND-ALLOWED
+#?GREETER :50 CAN-SUSPEND ALLOWED=TRUE
+
+# Suspend
+#?*GREETER :50 SUSPEND
+#?UPOWER SUSPEND
+
+# See if can hibernate
+#?*GREETER :50 GET-CAN-HIBERNATE
+#?UPOWER HIBERNATE-ALLOWED
+#?GREETER :50 CAN-HIBERNATE ALLOWED=TRUE
+
+# Hibernate
+#?*GREETER :50 HIBERNATE
+#?UPOWER HIBERNATE
+
+# See if can restart
+#?*GREETER :50 GET-CAN-RESTART
+#?CONSOLE-KIT CAN-RESTART
+#?GREETER :50 CAN-RESTART ALLOWED=TRUE
+
+# Restart
+#?*GREETER :50 RESTART
+#?CONSOLE-KIT RESTART
+
+# See if can shutdown
+#?*GREETER :50 GET-CAN-SHUTDOWN
+#?CONSOLE-KIT CAN-STOP
+#?GREETER :50 CAN-SHUTDOWN ALLOWED=TRUE
+
+# Shutdown
+#?*GREETER :50 SHUTDOWN
+#?CONSOLE-KIT STOP
+
+# Cleanup
+#?*STOP-DAEMON
+# Don't know what order they will terminate
+#?(GREETER :50 TERMINATE SIGNAL=15|XSERVER :50 TERMINATE SIGNAL=15)
+#?(GREETER :50 TERMINATE SIGNAL=15|XSERVER :50 TERMINATE SIGNAL=15)
+#?RUNNER DAEMON-EXIT STATUS=0
--- /dev/null
+#
+# Check can do power operations from the greeter when no services running
+#
+
+[test-runner-config]
+disable-upower=true
+disable-console-kit=true
+disable-login1=true
+
+[LightDM]
+minimum-display-number=50
+
+#?RUNNER DAEMON-START
+
+# X server starts
+#?XSERVER :50 START
+#?XSERVER :50 INDICATE-READY
+
+# LightDM connects to X server
+#?XSERVER :50 ACCEPT-CONNECT
+
+# Greeter starts
+#?GREETER :50 START
+#?XSERVER :50 ACCEPT-CONNECT
+#?GREETER :50 CONNECT-XSERVER
+#?GREETER :50 CONNECT-TO-DAEMON
+#?GREETER :50 CONNECTED-TO-DAEMON
+
+# See if can suspend
+#?*GREETER :50 GET-CAN-SUSPEND
+#?GREETER :50 CAN-SUSPEND ALLOWED=FALSE
+
+# Suspend
+#?*GREETER :50 SUSPEND
+#?GREETER :50 FAIL-SUSPEND
+
+# See if can hibernate
+#?*GREETER :50 GET-CAN-HIBERNATE
+#?GREETER :50 CAN-HIBERNATE ALLOWED=FALSE
+
+# Hibernate
+#?*GREETER :50 HIBERNATE
+#?GREETER :50 FAIL-HIBERNATE
+
+# See if can restart
+#?*GREETER :50 GET-CAN-RESTART
+#?GREETER :50 CAN-RESTART ALLOWED=FALSE
+
+# Restart
+#?*GREETER :50 RESTART
+#?GREETER :50 FAIL-RESTART
+
+# See if can shutdown
+#?*GREETER :50 GET-CAN-SHUTDOWN
+#?GREETER :50 CAN-SHUTDOWN ALLOWED=FALSE
+
+# Shutdown
+#?*GREETER :50 SHUTDOWN
+#?GREETER :50 FAIL-SHUTDOWN
+
+# Cleanup
+#?*STOP-DAEMON
+# Don't know what order they will terminate
+#?(GREETER :50 TERMINATE SIGNAL=15|XSERVER :50 TERMINATE SIGNAL=15)
+#?(GREETER :50 TERMINATE SIGNAL=15|XSERVER :50 TERMINATE SIGNAL=15)
+#?RUNNER DAEMON-EXIT STATUS=0
--- /dev/null
+#
+# Check can do power operations from the greeter
+#
+
+[LightDM]
+minimum-display-number=50
+
+#?RUNNER DAEMON-START
+
+# X server starts
+#?XSERVER :50 START
+#?XSERVER :50 INDICATE-READY
+
+# LightDM connects to X server
+#?XSERVER :50 ACCEPT-CONNECT
+
+# Greeter starts
+#?GREETER :50 START
+#?XSERVER :50 ACCEPT-CONNECT
+#?GREETER :50 CONNECT-XSERVER
+#?GREETER :50 CONNECT-TO-DAEMON
+#?GREETER :50 CONNECTED-TO-DAEMON
+
+# See if can suspend
+#?*GREETER :50 GET-CAN-SUSPEND
+#?UPOWER SUSPEND-ALLOWED
+#?GREETER :50 CAN-SUSPEND ALLOWED=TRUE
+
+# Suspend
+#?*GREETER :50 SUSPEND
+#?UPOWER SUSPEND
+
+# See if can hibernate
+#?*GREETER :50 GET-CAN-HIBERNATE
+#?UPOWER HIBERNATE-ALLOWED
+#?GREETER :50 CAN-HIBERNATE ALLOWED=TRUE
+
+# Hibernate
+#?*GREETER :50 HIBERNATE
+#?UPOWER HIBERNATE
+
+# See if can restart
+#?*GREETER :50 GET-CAN-RESTART
+#?LOGIN1 CAN-REBOOT
+#?GREETER :50 CAN-RESTART ALLOWED=TRUE
+
+# Restart
+#?*GREETER :50 RESTART
+#?LOGIN1 REBOOT
+
+# See if can shutdown
+#?*GREETER :50 GET-CAN-SHUTDOWN
+#?LOGIN1 CAN-POWER-OFF
+#?GREETER :50 CAN-SHUTDOWN ALLOWED=TRUE
+
+# Shutdown
+#?*GREETER :50 SHUTDOWN
+#?LOGIN1 POWER-OFF
+
+# Cleanup
+#?*STOP-DAEMON
+# Don't know what order they will terminate
+#?(GREETER :50 TERMINATE SIGNAL=15|XSERVER :50 TERMINATE SIGNAL=15)
+#?(GREETER :50 TERMINATE SIGNAL=15|XSERVER :50 TERMINATE SIGNAL=15)
+#?RUNNER DAEMON-EXIT STATUS=0
status_notify ("GREETER %s LOG-LANGUAGE USERNAME=%s LANGUAGE=%s", getenv ("DISPLAY"), username, language ? language : "");
}
g_free (r);
+
+ r = g_strdup_printf ("GREETER %s GET-CAN-SUSPEND", getenv ("DISPLAY"));
+ if (strcmp (request, r) == 0)
+ {
+ gboolean can_suspend = lightdm_get_can_suspend ();
+ status_notify ("GREETER %s CAN-SUSPEND ALLOWED=%s", getenv ("DISPLAY"), can_suspend ? "TRUE" : "FALSE");
+ }
+ g_free (r);
+
+ r = g_strdup_printf ("GREETER %s SUSPEND", getenv ("DISPLAY"));
+ if (strcmp (request, r) == 0)
+ {
+ GError *error = NULL;
+ if (!lightdm_suspend (&error))
+ status_notify ("GREETER %s FAIL-SUSPEND", getenv ("DISPLAY"));
+ g_clear_error (&error);
+ }
+ g_free (r);
+
+ r = g_strdup_printf ("GREETER %s GET-CAN-HIBERNATE", getenv ("DISPLAY"));
+ if (strcmp (request, r) == 0)
+ {
+ gboolean can_hibernate = lightdm_get_can_hibernate ();
+ status_notify ("GREETER %s CAN-HIBERNATE ALLOWED=%s", getenv ("DISPLAY"), can_hibernate ? "TRUE" : "FALSE");
+ }
+ g_free (r);
+
+ r = g_strdup_printf ("GREETER %s HIBERNATE", getenv ("DISPLAY"));
+ if (strcmp (request, r) == 0)
+ {
+ GError *error = NULL;
+ if (!lightdm_hibernate (&error))
+ status_notify ("GREETER %s FAIL-HIBERNATE", getenv ("DISPLAY"));
+ g_clear_error (&error);
+ }
+ g_free (r);
+
+ r = g_strdup_printf ("GREETER %s GET-CAN-RESTART", getenv ("DISPLAY"));
+ if (strcmp (request, r) == 0)
+ {
+ gboolean can_restart = lightdm_get_can_restart ();
+ status_notify ("GREETER %s CAN-RESTART ALLOWED=%s", getenv ("DISPLAY"), can_restart ? "TRUE" : "FALSE");
+ }
+ g_free (r);
+
+ r = g_strdup_printf ("GREETER %s RESTART", getenv ("DISPLAY"));
+ if (strcmp (request, r) == 0)
+ {
+ GError *error = NULL;
+ if (!lightdm_restart (&error))
+ status_notify ("GREETER %s FAIL-RESTART", getenv ("DISPLAY"));
+ g_clear_error (&error);
+ }
+ g_free (r);
+
+ r = g_strdup_printf ("GREETER %s GET-CAN-SHUTDOWN", getenv ("DISPLAY"));
+ if (strcmp (request, r) == 0)
+ {
+ gboolean can_shutdown = lightdm_get_can_shutdown ();
+ status_notify ("GREETER %s CAN-SHUTDOWN ALLOWED=%s", getenv ("DISPLAY"), can_shutdown ? "TRUE" : "FALSE");
+ }
+ g_free (r);
+
+ r = g_strdup_printf ("GREETER %s SHUTDOWN", getenv ("DISPLAY"));
+ if (strcmp (request, r) == 0)
+ {
+ GError *error = NULL;
+ if (!lightdm_shutdown (&error))
+ status_notify ("GREETER %s FAIL-SHUTDOWN", getenv ("DISPLAY"));
+ g_clear_error (&error);
+ }
+ g_free (r);
}
int
language = ''
status_notify ('GREETER %s LOG-LANGUAGE USERNAME=%s LANGUAGE=%s' % (os.getenv ('DISPLAY'), username, language))
+ r = 'GREETER %s GET-CAN-SUSPEND' % os.getenv ('DISPLAY')
+ if request == r:
+ if LightDM.get_can_suspend ():
+ allowed = "TRUE"
+ else:
+ allowed = "FALSE"
+ status_notify ('GREETER %s CAN-SUSPEND ALLOWED=%s' % (os.getenv ('DISPLAY'), allowed))
+
+ r = 'GREETER %s SUSPEND' % os.getenv ('DISPLAY')
+ if request == r:
+ try:
+ LightDM.suspend ()
+ except:
+ status_notify ('GREETER %s FAIL-SUSPEND' % os.getenv ('DISPLAY'))
+
+ r = 'GREETER %s GET-CAN-HIBERNATE' % os.getenv ('DISPLAY')
+ if request == r:
+ if LightDM.get_can_hibernate ():
+ allowed = "TRUE"
+ else:
+ allowed = "FALSE"
+ status_notify ('GREETER %s CAN-HIBERNATE ALLOWED=%s' % (os.getenv ('DISPLAY'), allowed))
+
+ r = 'GREETER %s HIBERNATE' % os.getenv ('DISPLAY')
+ if request == r:
+ try:
+ LightDM.hibernate ()
+ except:
+ status_notify ('GREETER %s FAIL-HIBERNATE' % os.getenv ('DISPLAY'))
+
+ r = 'GREETER %s GET-CAN-RESTART' % os.getenv ('DISPLAY')
+ if request == r:
+ if LightDM.get_can_restart ():
+ allowed = "TRUE"
+ else:
+ allowed = "FALSE"
+ status_notify ('GREETER %s CAN-RESTART ALLOWED=%s' % (os.getenv ('DISPLAY'), allowed))
+
+ r = 'GREETER %s RESTART' % os.getenv ('DISPLAY')
+ if request == r:
+ try:
+ LightDM.restart ()
+ except:
+ status_notify ('GREETER %s FAIL-RESTART' % os.getenv ('DISPLAY'))
+
+ r = 'GREETER %s GET-CAN-SHUTDOWN' % os.getenv ('DISPLAY')
+ if request == r:
+ if LightDM.get_can_shutdown ():
+ allowed = "TRUE"
+ else:
+ allowed = "FALSE"
+ status_notify ('GREETER %s CAN-SHUTDOWN ALLOWED=%s' % (os.getenv ('DISPLAY'), allowed))
+
+ r = 'GREETER %s SHUTDOWN' % os.getenv ('DISPLAY')
+ if request == r:
+ try:
+ LightDM.shutdown ()
+ except:
+ status_notify ('GREETER %s FAIL-SHUTDOWN' % os.getenv ('DISPLAY'))
+
return True
path = os.getenv ('LIGHTDM_TEST_ROOT') + '/.status-socket'
#include <glib-object.h>
#include <xcb/xcb.h>
#include <QLightDM/Greeter>
+#include <QLightDM/Power>
#include <QtCore/QSettings>
#include <QtCore/QDebug>
#include <QtCore/QCoreApplication>
static QCoreApplication *app = NULL;
static QSettings *config = NULL;
+static QLightDM::PowerInterface *power = NULL;
static TestGreeter *greeter = NULL;
TestGreeter::TestGreeter ()
status_notify ("GREETER %s SESSION-FAILED", getenv ("DISPLAY"));
}
g_free (r);
+
+ r = g_strdup_printf ("GREETER %s GET-CAN-SUSPEND", getenv ("DISPLAY"));
+ if (strcmp (request, r) == 0)
+ {
+ gboolean can_suspend = power->canSuspend ();
+ status_notify ("GREETER %s CAN-SUSPEND ALLOWED=%s", getenv ("DISPLAY"), can_suspend ? "TRUE" : "FALSE");
+ }
+ g_free (r);
+
+ r = g_strdup_printf ("GREETER %s SUSPEND", getenv ("DISPLAY"));
+ if (strcmp (request, r) == 0)
+ {
+ if (!power->suspend ())
+ status_notify ("GREETER %s FAIL-SUSPEND", getenv ("DISPLAY"));
+ }
+ g_free (r);
+
+ r = g_strdup_printf ("GREETER %s GET-CAN-HIBERNATE", getenv ("DISPLAY"));
+ if (strcmp (request, r) == 0)
+ {
+ gboolean can_hibernate = power->canHibernate ();
+ status_notify ("GREETER %s CAN-HIBERNATE ALLOWED=%s", getenv ("DISPLAY"), can_hibernate ? "TRUE" : "FALSE");
+ }
+ g_free (r);
+
+ r = g_strdup_printf ("GREETER %s HIBERNATE", getenv ("DISPLAY"));
+ if (strcmp (request, r) == 0)
+ {
+ if (!power->hibernate ())
+ status_notify ("GREETER %s FAIL-HIBERNATE", getenv ("DISPLAY"));
+ }
+ g_free (r);
+
+ r = g_strdup_printf ("GREETER %s GET-CAN-RESTART", getenv ("DISPLAY"));
+ if (strcmp (request, r) == 0)
+ {
+ gboolean can_restart = power->canRestart ();
+ status_notify ("GREETER %s CAN-RESTART ALLOWED=%s", getenv ("DISPLAY"), can_restart ? "TRUE" : "FALSE");
+ }
+ g_free (r);
+
+ r = g_strdup_printf ("GREETER %s RESTART", getenv ("DISPLAY"));
+ if (strcmp (request, r) == 0)
+ {
+ if (!power->restart ())
+ status_notify ("GREETER %s FAIL-RESTART", getenv ("DISPLAY"));
+ }
+ g_free (r);
+
+ r = g_strdup_printf ("GREETER %s GET-CAN-SHUTDOWN", getenv ("DISPLAY"));
+ if (strcmp (request, r) == 0)
+ {
+ gboolean can_shutdown = power->canShutdown ();
+ status_notify ("GREETER %s CAN-SHUTDOWN ALLOWED=%s", getenv ("DISPLAY"), can_shutdown ? "TRUE" : "FALSE");
+ }
+ g_free (r);
+
+ r = g_strdup_printf ("GREETER %s SHUTDOWN", getenv ("DISPLAY"));
+ if (strcmp (request, r) == 0)
+ {
+ if (!power->shutdown ())
+ status_notify ("GREETER %s FAIL-SHUTDOWN", getenv ("DISPLAY"));
+ }
+ g_free (r);
}
int
status_notify ("GREETER %s CONNECT-XSERVER", getenv ("DISPLAY"));
+ power = new QLightDM::PowerInterface();
+
greeter = new TestGreeter();
status_notify ("GREETER %s CONNECT-TO-DAEMON", getenv ("DISPLAY"));
g_strfreev (lines);
}
+static void
+handle_upower_call (GDBusConnection *connection,
+ const gchar *sender,
+ const gchar *object_path,
+ const gchar *interface_name,
+ const gchar *method_name,
+ GVariant *parameters,
+ GDBusMethodInvocation *invocation,
+ gpointer user_data)
+{
+ if (strcmp (method_name, "SuspendAllowed") == 0)
+ {
+ check_status ("UPOWER SUSPEND-ALLOWED");
+ g_dbus_method_invocation_return_value (invocation, g_variant_new ("(b)", TRUE));
+ }
+ else if (strcmp (method_name, "Suspend") == 0)
+ {
+ check_status ("UPOWER SUSPEND");
+ g_dbus_method_invocation_return_value (invocation, g_variant_new ("()"));
+ }
+ else if (strcmp (method_name, "HibernateAllowed") == 0)
+ {
+ check_status ("UPOWER HIBERNATE-ALLOWED");
+ g_dbus_method_invocation_return_value (invocation, g_variant_new ("(b)", TRUE));
+ }
+ else if (strcmp (method_name, "Hibernate") == 0)
+ {
+ check_status ("UPOWER HIBERNATE");
+ g_dbus_method_invocation_return_value (invocation, g_variant_new ("()"));
+ }
+ else
+ g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, "No such method: %s", method_name);
+}
+
+static void
+upower_name_acquired_cb (GDBusConnection *connection,
+ const gchar *name,
+ gpointer user_data)
+{
+ const gchar *upower_interface =
+ "<node>"
+ " <interface name='org.freedesktop.UPower'>"
+ " <method name='SuspendAllowed'>"
+ " <arg name='allowed' direction='out' type='b'/>"
+ " </method>"
+ " <method name='Suspend'/>"
+ " <method name='HibernateAllowed'>"
+ " <arg name='allowed' direction='out' type='b'/>"
+ " </method>"
+ " <method name='Hibernate'/>"
+ " </interface>"
+ "</node>";
+ static const GDBusInterfaceVTable upower_vtable =
+ {
+ handle_upower_call,
+ };
+ GDBusNodeInfo *upower_info;
+ GError *error = NULL;
+
+ upower_info = g_dbus_node_info_new_for_xml (upower_interface, &error);
+ if (error)
+ g_warning ("Failed to parse D-Bus interface: %s", error->message);
+ g_clear_error (&error);
+ if (!upower_info)
+ return;
+ g_dbus_connection_register_object (connection,
+ "/org/freedesktop/UPower",
+ upower_info->interfaces[0],
+ &upower_vtable,
+ NULL, NULL,
+ &error);
+ if (error)
+ g_warning ("Failed to register UPower service: %s", error->message);
+ g_clear_error (&error);
+ g_dbus_node_info_unref (upower_info);
+
+ service_count--;
+ if (service_count == 0)
+ run_lightdm ();
+}
+
+static void
+start_upower_daemon ()
+{
+ service_count++;
+ g_bus_own_name (G_BUS_TYPE_SYSTEM,
+ "org.freedesktop.UPower",
+ G_BUS_NAME_OWNER_FLAGS_NONE,
+ upower_name_acquired_cb,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+}
+
static CKSession *
open_ck_session (GVariant *params)
{
gpointer user_data)
{
if (strcmp (method_name, "CanRestart") == 0)
+ {
+ check_status ("CONSOLE-KIT CAN-RESTART");
g_dbus_method_invocation_return_value (invocation, g_variant_new ("(b)", TRUE));
+ }
else if (strcmp (method_name, "CanStop") == 0)
+ {
+ check_status ("CONSOLE-KIT CAN-STOP");
g_dbus_method_invocation_return_value (invocation, g_variant_new ("(b)", TRUE));
+ }
else if (strcmp (method_name, "CloseSession") == 0)
g_dbus_method_invocation_return_value (invocation, g_variant_new ("(b)", TRUE));
else if (strcmp (method_name, "OpenSession") == 0)
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, "Unable to find session for cookie");
}
else if (strcmp (method_name, "Restart") == 0)
+ {
+ check_status ("CONSOLE-KIT RESTART");
g_dbus_method_invocation_return_value (invocation, g_variant_new ("()"));
+ }
else if (strcmp (method_name, "Stop") == 0)
+ {
+ check_status ("CONSOLE-KIT STOP");
g_dbus_method_invocation_return_value (invocation, g_variant_new ("()"));
+ }
else
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, "No such method: %s", method_name);
}
gpointer user_data)
{
if (strcmp (method_name, "CanReboot") == 0)
+ {
+ check_status ("LOGIN1 CAN-REBOOT");
g_dbus_method_invocation_return_value (invocation, g_variant_new ("(s)", "yes"));
+ }
else if (strcmp (method_name, "Reboot") == 0)
{
gboolean interactive;
g_variant_get (parameters, "(b)", &interactive);
+ check_status ("LOGIN1 REBOOT");
g_dbus_method_invocation_return_value (invocation, g_variant_new ("()"));
}
- if (strcmp (method_name, "CanPowerOff") == 0)
+ else if (strcmp (method_name, "CanPowerOff") == 0)
+ {
+ check_status ("LOGIN1 CAN-POWER-OFF");
g_dbus_method_invocation_return_value (invocation, g_variant_new ("(s)", "yes"));
+ }
else if (strcmp (method_name, "PowerOff") == 0)
{
gboolean interactive;
g_variant_get (parameters, "(b)", &interactive);
+ check_status ("LOGIN1 POWER-OFF");
g_dbus_method_invocation_return_value (invocation, g_variant_new ("()"));
}
else
g_string_free (group_data, TRUE);
/* Start D-Bus services */
+ if (!g_key_file_get_boolean (config, "test-runner-config", "disable-upower", NULL))
+ start_upower_daemon ();
if (!g_key_file_get_boolean (config, "test-runner-config", "disable-console-kit", NULL))
start_console_kit_daemon ();
if (!g_key_file_get_boolean (config, "test-runner-config", "disable-login1", NULL))
--- /dev/null
+#!/bin/sh
+./src/dbus-env ./src/test-runner power test-gobject-greeter
--- /dev/null
+#!/bin/sh
+./src/dbus-env ./src/test-runner power-no-console-kit test-gobject-greeter
--- /dev/null
+#!/bin/sh
+./src/dbus-env ./src/test-runner power-no-login1 test-gobject-greeter
--- /dev/null
+#!/bin/sh
+./src/dbus-env ./src/test-runner power-no-services test-gobject-greeter
--- /dev/null
+#!/bin/sh
+./src/dbus-env ./src/test-runner power test-python-greeter
--- /dev/null
+#!/bin/sh
+./src/dbus-env ./src/test-runner power-no-console-kit test-python-greeter
--- /dev/null
+#!/bin/sh
+./src/dbus-env ./src/test-runner power-no-login1 test-python-greeter
--- /dev/null
+#!/bin/sh
+./src/dbus-env ./src/test-runner power-no-services test-python-greeter
--- /dev/null
+#!/bin/sh
+./src/dbus-env ./src/test-runner power test-qt4-greeter
--- /dev/null
+#!/bin/sh
+./src/dbus-env ./src/test-runner power-no-console-kit test-qt4-greeter
--- /dev/null
+#!/bin/sh
+./src/dbus-env ./src/test-runner power-no-login1 test-qt4-greeter
--- /dev/null
+#!/bin/sh
+./src/dbus-env ./src/test-runner power-no-services test-qt4-greeter
--- /dev/null
+#!/bin/sh
+./src/dbus-env ./src/test-runner power test-qt5-greeter
--- /dev/null
+#!/bin/sh
+./src/dbus-env ./src/test-runner power-no-console-kit test-qt5-greeter
--- /dev/null
+#!/bin/sh
+./src/dbus-env ./src/test-runner power-no-login1 test-qt5-greeter
--- /dev/null
+#!/bin/sh
+./src/dbus-env ./src/test-runner power-no-services test-qt5-greeter