aboutsummaryrefslogtreecommitdiff
path: root/src/lock-helper.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lock-helper.c')
-rw-r--r--src/lock-helper.c140
1 files changed, 19 insertions, 121 deletions
diff --git a/src/lock-helper.c b/src/lock-helper.c
index ded1b33..b38be65 100644
--- a/src/lock-helper.c
+++ b/src/lock-helper.c
@@ -27,13 +27,9 @@ static GMainLoop * gss_mainloop = NULL;
static guint cookie = 0;
static DBusGProxyCall * cookie_call = NULL;
-static DBusGProxy * gdm_settings_proxy = NULL;
-static gboolean gdm_auto_login = FALSE;
-static const gchar * gdm_auto_login_string = "daemon/AutomaticLoginEnable";
-
static gboolean is_guest = FALSE;
-static gdm_autologin_cb_t gdm_autologin_cb = NULL;
+void build_gss_proxy (void);
/* Checks to see if there is an error and reports
it. Not much else we can do. */
@@ -56,6 +52,9 @@ screensaver_unthrottle (void)
{
g_return_if_fail(cookie != 0);
+ build_gss_proxy();
+ g_return_if_fail(gss_proxy != NULL);
+
dbus_g_proxy_begin_call(gss_proxy, "UnThrottle",
unthrottle_return, NULL,
NULL,
@@ -103,6 +102,9 @@ screensaver_throttle (gchar * reason)
screensaver_unthrottle();
}
+ build_gss_proxy();
+ g_return_if_fail(gss_proxy != NULL);
+
cookie_call = dbus_g_proxy_begin_call(gss_proxy, "Throttle",
throttle_return, NULL,
NULL,
@@ -113,26 +115,11 @@ screensaver_throttle (gchar * reason)
return;
}
-/* Setting up a call back */
-void
-lock_screen_gdm_cb_set (gdm_autologin_cb_t cb)
-{
- if (gdm_autologin_cb) {
- g_warning("Already had a callback, setting up a new one...");
- }
-
- gdm_autologin_cb = cb;
- return;
-}
-
/* This is our logic on whether the screen should be locked
or not. It effects everything else. */
gboolean
will_lock_screen (void)
{
- if (gdm_auto_login) {
- return FALSE;
- }
if (is_guest) {
return FALSE;
}
@@ -140,95 +127,6 @@ will_lock_screen (void)
return TRUE;
}
-/* Respond to the signal of autologin changing to see if the
- setting for timed login changes. */
-static void
-gdm_settings_change (DBusGProxy * proxy, const gchar * value, const gchar * old, const gchar * new, gpointer data)
-{
- if (g_strcmp0(value, gdm_auto_login_string)) {
- /* This is not a setting that we care about,
- there is only one. */
- return;
- }
- g_debug("GDM Settings change: %s", new);
-
- if (g_strcmp0(new, "true") == 0) {
- gdm_auto_login = TRUE;
- } else {
- gdm_auto_login = FALSE;
- }
-
- if (gdm_autologin_cb != NULL) {
- gdm_autologin_cb();
- }
-
- return;
-}
-
-/* Get back the data from querying to see if there is auto
- login enabled in GDM */
-static void
-gdm_get_autologin (DBusGProxy * proxy, DBusGProxyCall * call, gpointer data)
-{
- GError * error = NULL;
- gchar * value = NULL;
-
- if (!dbus_g_proxy_end_call(proxy, call, &error, G_TYPE_STRING, &value, G_TYPE_INVALID)) {
- g_warning("Unable to get autologin setting: %s", error != NULL ? error->message : "null");
- g_error_free(error);
- return;
- }
-
- g_return_if_fail(value != NULL);
- gdm_settings_change(proxy, gdm_auto_login_string, NULL, value, NULL);
-
- return;
-}
-
-/* Sets up the proxy and queries for the setting to know
- whether we're doing an autologin. */
-static void
-build_gdm_proxy (void)
-{
- g_return_if_fail(gdm_settings_proxy == NULL);
-
- /* Grab the system bus */
- DBusGConnection * bus = dbus_g_bus_get(DBUS_BUS_SYSTEM, NULL);
- g_return_if_fail(bus != NULL);
-
- /* Get the settings proxy */
- gdm_settings_proxy = dbus_g_proxy_new_for_name_owner(bus,
- "org.gnome.DisplayManager",
- "/org/gnome/DisplayManager/Settings",
- "org.gnome.DisplayManager.Settings", NULL);
- g_return_if_fail(gdm_settings_proxy != NULL);
-
- /* Signal for value changed */
- dbus_g_proxy_add_signal(gdm_settings_proxy,
- "ValueChanged",
- G_TYPE_STRING,
- G_TYPE_STRING,
- G_TYPE_STRING,
- G_TYPE_INVALID);
- dbus_g_proxy_connect_signal(gdm_settings_proxy,
- "ValueChanged",
- G_CALLBACK(gdm_settings_change),
- NULL,
- NULL);
-
- /* Start to get the initial value */
- dbus_g_proxy_begin_call(gdm_settings_proxy,
- "GetValue",
- gdm_get_autologin,
- NULL,
- NULL,
- G_TYPE_STRING,
- gdm_auto_login_string,
- G_TYPE_INVALID);
-
- return;
-}
-
/* When the screensave go active, if we've got a mainloop
running we should quit it. */
static void
@@ -245,17 +143,19 @@ gss_active_changed (DBusGProxy * proxy, gboolean active, gpointer data)
void
build_gss_proxy (void)
{
- DBusGConnection * session_bus = dbus_g_bus_get(DBUS_BUS_SESSION, NULL);
- g_return_if_fail(session_bus != NULL);
+ if (gss_proxy == NULL) {
+ DBusGConnection * session_bus = dbus_g_bus_get(DBUS_BUS_SESSION, NULL);
+ g_return_if_fail(session_bus != NULL);
- gss_proxy = dbus_g_proxy_new_for_name(session_bus,
- "org.gnome.ScreenSaver",
- "/",
- "org.gnome.ScreenSaver");
- g_return_if_fail(gss_proxy != NULL);
+ gss_proxy = dbus_g_proxy_new_for_name(session_bus,
+ "org.gnome.ScreenSaver",
+ "/",
+ "org.gnome.ScreenSaver");
+ g_return_if_fail(gss_proxy != NULL);
- dbus_g_proxy_add_signal(gss_proxy, "ActiveChanged", G_TYPE_BOOLEAN, G_TYPE_INVALID);
- dbus_g_proxy_connect_signal(gss_proxy, "ActiveChanged", G_CALLBACK(gss_active_changed), NULL, NULL);
+ dbus_g_proxy_add_signal(gss_proxy, "ActiveChanged", G_TYPE_BOOLEAN, G_TYPE_INVALID);
+ dbus_g_proxy_connect_signal(gss_proxy, "ActiveChanged", G_CALLBACK(gss_active_changed), NULL, NULL);
+ }
return;
}
@@ -286,6 +186,7 @@ lock_screen (DbusmenuMenuitem * mi, guint timestamp, gpointer data)
return;
}
+ build_gss_proxy();
g_return_if_fail(gss_proxy != NULL);
dbus_g_proxy_call_no_reply(gss_proxy,
@@ -317,9 +218,6 @@ lock_screen_setup (gpointer data)
is_guest = TRUE;
}
- build_gdm_proxy();
- build_gss_proxy();
-
return FALSE;
}