diff options
Diffstat (limited to 'tools/gnome_screensaver.c')
-rw-r--r-- | tools/gnome_screensaver.c | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/tools/gnome_screensaver.c b/tools/gnome_screensaver.c index d9dba279..81685100 100644 --- a/tools/gnome_screensaver.c +++ b/tools/gnome_screensaver.c @@ -26,6 +26,11 @@ #include <stdarg.h> #include <string.h> +#include "../features.h" +#ifdef HAVE_MCE_DBUS_NAMES +# include <mce/dbus-names.h> +#endif + #define LOG_MODULENAME "[scrnsaver] " #include "../logdefs.h" @@ -49,6 +54,8 @@ #define MSG_GError "Error: %s" #define MSG_GNOMEScreensaverEnabled "GNOME screensaver enabled" #define MSG_GNOMEScreensaverDisabled "GNOME screensaver disabled" +#define MSG_MCEScreensaverEnabled "MCE screensaver enabled" +#define MSG_MCEScreensaverDisabled "MCE screensaver disabled" static guint32 cookie; @@ -101,6 +108,50 @@ static int gnome_sessionmanager_control(DBusGConnection *connection, int enable) return 1; } +#ifdef HAVE_MCE_DBUS_NAMES +static int mce_control(DBusGConnection *connection, int enable) +{ + GError *error; + DBusGProxy *proxy; + gboolean ret = 1; + + /* Create a proxy object */ + proxy = dbus_g_proxy_new_for_name(connection, + MCE_SERVICE, MCE_REQUEST_PATH, MCE_REQUEST_IF); + if (!proxy) { + LOGDBG("Failed to get a proxy for " SM_SERVICE); + return 0; + } + + error = NULL; + if (enable) { + ret = dbus_g_proxy_call(proxy, MCE_CANCEL_PREVENT_BLANK_REQ, &error, + G_TYPE_INVALID, G_TYPE_INVALID); + } else { + ret = dbus_g_proxy_call(proxy, MCE_PREVENT_BLANK_REQ, &error, + G_TYPE_INVALID, G_TYPE_INVALID); + } + + g_object_unref(proxy); + + if (!ret) { + /* Check if it's a remote exception or a regular GError */ + if (error->domain == DBUS_GERROR && + error->code == DBUS_GERROR_REMOTE_EXCEPTION) { + LOGMSG(MSG_RemoteMethodException, dbus_g_error_get_name(error), error->message); + } else { + LOGMSG(MSG_GError, error->message); + } + g_error_free(error); + + return 0; + } + + LOGMSG(enable ? MSG_MCEScreensaverEnabled : MSG_MCEScreensaverDisabled); + return 1; +} +#endif + void gnome_screensaver_control(int enable) { DBusGConnection *connection; @@ -110,6 +161,17 @@ void gnome_screensaver_control(int enable) g_type_init(); +#ifdef HAVE_MCE_DBUS_NAMES + error = NULL; + connection = dbus_g_bus_get(DBUS_BUS_SYSTEM, &error); + if (!connection) { + LOGMSG(MSG_OpenBusConnectionError, error ? error->message : "<null>"); + g_error_free(error); + } else if (mce_control(connection, enable)) { + return; + } +#endif + /* Get a connection to the session bus */ error = NULL; connection = dbus_g_bus_get(DBUS_BUS_SESSION, &error); |