diff options
author | Ted Gould <ted@canonical.com> | 2009-10-07 18:19:32 -0400 |
---|---|---|
committer | Ted Gould <ted@canonical.com> | 2009-10-07 18:19:32 -0400 |
commit | 6795774d8b51d7098b568a55964b9e40a56217c4 (patch) | |
tree | 1a7f7e8872edd62fafe7a7ca6a3174f84f9559da /src/users-service.c | |
parent | ec8734f8b05c2df1b758fd91e81e9ce51c393a84 (diff) | |
parent | b0b14665c337a1a8aa92081375dd239148170a20 (diff) | |
download | ayatana-indicator-session-6795774d8b51d7098b568a55964b9e40a56217c4.tar.gz ayatana-indicator-session-6795774d8b51d7098b568a55964b9e40a56217c4.tar.bz2 ayatana-indicator-session-6795774d8b51d7098b568a55964b9e40a56217c4.zip |
Make it so that when locking the screen on suspend we ensure that the screen actually locks. Also stop the screen saver starting on suspend and hibernate.
Diffstat (limited to 'src/users-service.c')
-rw-r--r-- | src/users-service.c | 133 |
1 files changed, 8 insertions, 125 deletions
diff --git a/src/users-service.c b/src/users-service.c index 5a189c8..b4310da 100644 --- a/src/users-service.c +++ b/src/users-service.c @@ -35,6 +35,7 @@ #include "dbus-shared-names.h" #include "users-service-dbus.h" +#include "lock-helper.h" #define GUEST_SESSION_LAUNCHER "/usr/share/gdm/guest-session/guest-session-launch" @@ -54,11 +55,6 @@ static GMainLoop *mainloop = NULL; static UsersServiceDbus *dbus_interface = NULL; static DbusmenuMenuitem *lock_menuitem = NULL; -static gboolean is_guest = FALSE; - -static DBusGProxy * gdm_settings_proxy = NULL; -static gboolean gdm_auto_login = FALSE; -static const gchar * gdm_auto_login_string = "daemon/AutomaticLoginEnable"; static gint count; static GList *users; @@ -66,96 +62,17 @@ static GList *users; /* 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) +gdm_settings_change (void) { - 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; + if (!will_lock_screen()) { + dbusmenu_menuitem_property_set(lock_menuitem, DBUSMENU_MENUITEM_PROP_SENSITIVE, "false"); } else { - gdm_auto_login = FALSE; - } - - if (lock_menuitem != NULL) { - if (gdm_auto_login || is_guest) { - dbusmenu_menuitem_property_set(lock_menuitem, DBUSMENU_MENUITEM_PROP_SENSITIVE, "false"); - } else { - dbusmenu_menuitem_property_set(lock_menuitem, DBUSMENU_MENUITEM_PROP_SENSITIVE, "true"); - } + dbusmenu_menuitem_property_set(lock_menuitem, DBUSMENU_MENUITEM_PROP_SENSITIVE, "true"); } 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 gboolean -build_gdm_proxy (gpointer null_data) -{ - g_return_val_if_fail(gdm_settings_proxy == NULL, FALSE); - - /* Grab the system bus */ - DBusGConnection * bus = dbus_g_bus_get(DBUS_BUS_SYSTEM, NULL); - g_return_val_if_fail(bus != NULL, FALSE); - - /* 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_val_if_fail(gdm_settings_proxy != NULL, FALSE); - - /* 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 FALSE; -} - static gboolean check_guest_session (void) { @@ -222,37 +139,6 @@ activate_new_session (DbusmenuMenuitem * mi, gpointer user_data) return; } -/* A fun little function to actually lock the screen. If, - that's what you want, let's do it! */ -static void -lock_screen (DbusmenuMenuitem * mi, gpointer data) -{ - g_debug("Lock Screen"); - if (gdm_auto_login) { - g_debug("\tGDM set to autologin, blocking lock"); - return; - } - - DBusGConnection * session_bus = dbus_g_bus_get(DBUS_BUS_SESSION, NULL); - g_return_if_fail(session_bus != NULL); - - DBusGProxy * proxy = dbus_g_proxy_new_for_name_owner(session_bus, - "org.gnome.ScreenSaver", - "/", - "org.gnome.ScreenSaver", - NULL); - g_return_if_fail(proxy != NULL); - - dbus_g_proxy_call_no_reply(proxy, - "Lock", - G_TYPE_INVALID, - G_TYPE_INVALID); - - g_object_unref(proxy); - - return; -} - static void activate_user_session (DbusmenuMenuitem *mi, gpointer user_data) { @@ -292,7 +178,7 @@ rebuild_items (DbusmenuMenuitem *root, dbusmenu_menuitem_property_set(lock_menuitem, DBUSMENU_MENUITEM_PROP_LABEL, _("Lock Screen")); g_signal_connect(G_OBJECT(lock_menuitem), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(lock_screen), NULL); dbusmenu_menuitem_child_append(root, lock_menuitem); - if (gdm_auto_login || is_guest) { + if (!will_lock_screen()) { dbusmenu_menuitem_property_set(lock_menuitem, DBUSMENU_MENUITEM_PROP_SENSITIVE, "false"); } else { dbusmenu_menuitem_property_set(lock_menuitem, DBUSMENU_MENUITEM_PROP_SENSITIVE, "true"); @@ -410,11 +296,8 @@ main (int argc, char ** argv) return 1; } - if (!g_strcmp0(g_get_user_name(), "guest")) { - is_guest = TRUE; - } - - g_idle_add(build_gdm_proxy, NULL); + g_idle_add(lock_screen_setup, NULL); + lock_screen_gdm_cb_set(gdm_settings_change); dbus_interface = g_object_new (USERS_SERVICE_DBUS_TYPE, NULL); |