gnome-screensaver r1485 - in trunk: . src



Author: mccann
Date: Thu Aug 21 01:44:03 2008
New Revision: 1485
URL: http://svn.gnome.org/viewvc/gnome-screensaver?rev=1485&view=rev

Log:
2008-08-20  William Jon McCann  <jmccann redhat com>

	* src/gnome-screensaver-preferences.c (config_get_lock_disabled),
	(ui_disable_lock), (ui_set_lock), (ui_set_enabled),
	(key_changed_cb), (init_capplet):
	* src/gs-monitor.c (listener_lock_cb),
	(_gs_monitor_update_from_prefs):
	* src/gs-prefs.c (_gs_prefs_set_lock_disabled),
	(gs_prefs_load_from_gconf), (key_changed_cb), (gs_prefs_init):
	* src/gs-prefs.h:
	Patch from: <nickspoon0 gmail com>
	Fixes #317609



Modified:
   trunk/ChangeLog
   trunk/src/gnome-screensaver-preferences.c
   trunk/src/gs-monitor.c
   trunk/src/gs-prefs.c
   trunk/src/gs-prefs.h

Modified: trunk/src/gnome-screensaver-preferences.c
==============================================================================
--- trunk/src/gnome-screensaver-preferences.c	(original)
+++ trunk/src/gnome-screensaver-preferences.c	Thu Aug 21 01:44:03 2008
@@ -46,6 +46,9 @@
 
 #define GLADE_XML_FILE "gnome-screensaver-preferences.glade"
 
+#define GNOME_LOCKDOWN_DIR  "/desktop/gnome/lockdown"
+#define KEY_LOCK_DISABLE    GNOME_LOCKDOWN_DIR "/disable_lock_screen"
+
 #define KEY_DIR             "/apps/gnome-screensaver"
 #define KEY_LOCK            KEY_DIR "/lock_enabled"
 #define KEY_IDLE_ACTIVATION_ENABLED         KEY_DIR "/idle_activation_enabled"
@@ -322,6 +325,20 @@
         return lock;
 }
 
+static gboolean
+config_get_lock_disabled ()
+{
+        GConfClient *client;
+        gboolean     lock;
+
+        client = gconf_client_get_default ();
+
+        lock = gconf_client_get_bool (client, KEY_LOCK_DISABLE, NULL);
+
+        g_object_unref (client);
+        return lock;
+}
+
 static void
 config_set_lock (gboolean lock)
 {
@@ -818,19 +835,19 @@
 theme_installer_run (GtkWidget *prefs_dialog, GList *files)
 {
         GtkWidget *copy_dialog;
-        
+
         copy_dialog = copy_theme_dialog_new (files);
         g_list_foreach (files, (GFunc) (g_object_unref), NULL);
         g_list_free (files);
-        
+
         gtk_window_set_transient_for (GTK_WINDOW (copy_dialog),
                                         GTK_WINDOW (prefs_dialog));
         gtk_window_set_icon_name (GTK_WINDOW (copy_dialog),
                                         "preferences-desktop-screensaver");
-        
+
         g_signal_connect (copy_dialog, "complete",
                           G_CALLBACK (theme_copy_complete_cb), NULL);
-        
+
         copy_theme_dialog_begin (COPY_THEME_DIALOG (copy_dialog));
 }
 
@@ -866,11 +883,11 @@
         gchar *retval;
         GFile *file;
         GList *result = NULL;
-        
+
         g_return_val_if_fail (uri_list != NULL, NULL);
-        
+
         p = uri_list;
-        
+
         /* We don't actually try to validate the URI according to RFC
          * 2396, or even check for allowed characters - we just ignore
          * comments and trim whitespace off the ends.  We also
@@ -880,27 +897,27 @@
                 if (*p != '#') {
                         while (g_ascii_isspace (*p))
                                 p++;
-                        
+
                         q = p;
                         while ((*q != '\0')
                                && (*q != '\n')
                                && (*q != '\r'))
                                 q++;
-                        
+
                         if (q > p) {
                                 q--;
                                 while (q > p
                                        && g_ascii_isspace (*q))
                                         q--;
-                                
+
                                 retval = g_malloc (q - p + 2);
                                 strncpy (retval, p, q - p + 1);
                                 retval[q - p + 1] = '\0';
-                                
+
                                 file = g_file_new_for_uri (retval);
-                                
+
                                 g_free (retval);
-                                
+
                                 if (file != NULL)
                                         result = g_list_prepend (result, file);
                         }
@@ -909,7 +926,7 @@
                 if (p != NULL)
                         p++;
         }
-        
+
         return g_list_reverse (result);
 }
 
@@ -928,11 +945,11 @@
 
         if (!(info == TARGET_URI_LIST || info == TARGET_NS_URL))
                 return;
-        
+
         files = uri_list_parse ((char *) selection_data->data);
         if (files != NULL) {
                 GtkWidget *prefs_dialog;
-                
+
                 prefs_dialog = glade_xml_get_widget (xml, "prefs_dialog");
                 theme_installer_run (prefs_dialog, files);
         }
@@ -1021,10 +1038,23 @@
 }
 
 static void
+ui_disable_lock (gboolean disable)
+{
+        GtkWidget *widget;
+
+        widget = glade_xml_get_widget (xml, "lock_checkbox");
+        gtk_widget_set_sensitive (widget, !disable);
+        if (disable) {
+                gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE);
+        }
+}
+
+static void
 ui_set_lock (gboolean enabled)
 {
         GtkWidget *widget;
         gboolean   active;
+        gboolean   lock_disabled;
 
         widget = glade_xml_get_widget (xml, "lock_checkbox");
 
@@ -1032,6 +1062,8 @@
         if (active != enabled) {
                 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), enabled);
         }
+        lock_disabled = config_get_lock_disabled ();
+        ui_disable_lock (lock_disabled);
 }
 
 static void
@@ -1040,6 +1072,7 @@
         GtkWidget *widget;
         gboolean   active;
         gboolean   is_writable;
+        gboolean   lock_disabled;
 
         widget = glade_xml_get_widget (xml, "enable_checkbox");
         active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
@@ -1052,6 +1085,8 @@
         if (is_writable) {
                 gtk_widget_set_sensitive (widget, enabled);
         }
+        lock_disabled = config_get_lock_disabled ();
+        ui_disable_lock(lock_disabled);
 }
 
 static void
@@ -1074,7 +1109,7 @@
 
         key = gconf_entry_get_key (entry);
 
-        if (! g_str_has_prefix (key, KEY_DIR)) {
+        if (! g_str_has_prefix (key, KEY_DIR) && ! g_str_has_prefix (key, GNOME_LOCKDOWN_DIR)) {
                 return;
         }
 
@@ -1100,6 +1135,16 @@
                 } else {
                         invalid_type_warning (key);
                 }
+        } else if (strcmp (key, KEY_LOCK_DISABLE) == 0) {
+                if (value->type == GCONF_VALUE_BOOL) {
+                        gboolean disabled;
+
+                        disabled = gconf_value_get_bool (value);
+
+                        ui_disable_lock (disabled);
+                } else {
+                        invalid_type_warning (key);
+                }
         } else if (strcmp (key, KEY_THEMES) == 0) {
                 if (value->type == GCONF_VALUE_LIST) {
                         GtkWidget *treeview;
@@ -1503,6 +1548,13 @@
                                  KEY_DIR,
                                  key_changed_cb,
                                  NULL, NULL, NULL);
+        gconf_client_add_dir (client, GNOME_LOCKDOWN_DIR,
+                              GCONF_CLIENT_PRELOAD_ONELEVEL,
+                              NULL);
+        gconf_client_notify_add (client,
+                                 GNOME_LOCKDOWN_DIR,
+                                 key_changed_cb,
+                                 NULL, NULL, NULL);
 
         g_object_unref (client);
 

Modified: trunk/src/gs-monitor.c
==============================================================================
--- trunk/src/gs-monitor.c	(original)
+++ trunk/src/gs-monitor.c	Thu Aug 21 01:44:03 2008
@@ -244,7 +244,11 @@
 listener_lock_cb (GSListener *listener,
                   GSMonitor  *monitor)
 {
-        gs_monitor_lock_screen (monitor);
+        if (! monitor->priv->prefs->lock_disabled) {
+                gs_monitor_lock_screen (monitor);
+        } else {
+                gs_debug ("Locking disabled by the administrator");
+        }
 
 }
 
@@ -317,8 +321,11 @@
         gboolean idle_detection_active;
         gboolean activate_watch;
         gboolean manager_active;
+        gboolean lock_enabled;
+
+        lock_enabled = (monitor->priv->prefs->lock_enabled && !monitor->priv->prefs->lock_disabled);
 
-        gs_manager_set_lock_enabled (monitor->priv->manager, monitor->priv->prefs->lock_enabled);
+        gs_manager_set_lock_enabled (monitor->priv->manager, lock_enabled);
         gs_manager_set_lock_timeout (monitor->priv->manager, monitor->priv->prefs->lock_timeout);
         gs_manager_set_logout_enabled (monitor->priv->manager, monitor->priv->prefs->logout_enabled);
         gs_manager_set_user_switch_enabled (monitor->priv->manager, monitor->priv->prefs->user_switch_enabled);

Modified: trunk/src/gs-prefs.c
==============================================================================
--- trunk/src/gs-prefs.c	(original)
+++ trunk/src/gs-prefs.c	Thu Aug 21 01:44:03 2008
@@ -34,6 +34,9 @@
 static void gs_prefs_init       (GSPrefs      *prefs);
 static void gs_prefs_finalize   (GObject      *object);
 
+#define GNOME_LOCKDOWN_DIR "/desktop/gnome/lockdown"
+#define KEY_LOCK_DISABLE   GNOME_LOCKDOWN_DIR "/disable_lock_screen"
+
 #define KEY_DIR            "/apps/gnome-screensaver"
 #define KEY_IDLE_ACTIVATION_ENABLED         KEY_DIR "/idle_activation_enabled"
 #define KEY_LOCK_ENABLED   KEY_DIR "/lock_enabled"
@@ -196,7 +199,7 @@
 {
         int mode;
 
-	if (value && gconf_string_to_enum (mode_enum_map, value, &mode))
+        if (value && gconf_string_to_enum (mode_enum_map, value, &mode))
                 prefs->mode = mode;
         else
                 prefs->mode = GS_MODE_BLANK_ONLY;
@@ -230,6 +233,13 @@
 }
 
 static void
+_gs_prefs_set_lock_disabled (GSPrefs *prefs,
+                             gboolean value)
+{
+        prefs->lock_disabled = value;
+}
+
+static void
 _gs_prefs_set_keyboard_enabled (GSPrefs *prefs,
                                 gboolean value)
 {
@@ -335,6 +345,13 @@
                 key_error_and_free (KEY_LOCK_ENABLED, error);
         }
 
+        bvalue = gconf_client_get_bool (prefs->priv->gconf_client, KEY_LOCK_DISABLE, &error);
+        if (! error) {
+                _gs_prefs_set_lock_disabled (prefs, bvalue);
+        } else {
+                key_error_and_free (KEY_LOCK_DISABLE, error);
+        }
+
         value = gconf_client_get_int (prefs->priv->gconf_client, KEY_ACTIVATE_DELAY, &error);
         if (! error) {
                 _gs_prefs_set_timeout (prefs, value);
@@ -457,7 +474,7 @@
 
         key = gconf_entry_get_key (entry);
 
-        if (! g_str_has_prefix (key, KEY_DIR))
+        if (! g_str_has_prefix (key, KEY_DIR) && ! g_str_has_prefix (key, GNOME_LOCKDOWN_DIR))
                 return;
 
         value = gconf_entry_get_value (entry);
@@ -574,6 +591,19 @@
                         invalid_type_warning (key);
                 }
 
+        } else if (strcmp (key, KEY_LOCK_DISABLE) == 0) {
+
+                if (value->type == GCONF_VALUE_BOOL) {
+                        gboolean disabled;
+
+                        disabled = gconf_value_get_bool (value);
+                        _gs_prefs_set_lock_disabled (prefs, disabled);
+
+                        changed = TRUE;
+                } else {
+                        invalid_type_warning (key);
+                }
+
         } else if (strcmp (key, KEY_CYCLE_DELAY) == 0) {
 
                 if (value->type == GCONF_VALUE_INT) {
@@ -696,6 +726,7 @@
 
         prefs->idle_activation_enabled = TRUE;
         prefs->lock_enabled            = TRUE;
+        prefs->lock_disabled           = FALSE;
         prefs->logout_enabled          = FALSE;
         prefs->user_switch_enabled     = FALSE;
 
@@ -711,12 +742,21 @@
         gconf_client_add_dir (prefs->priv->gconf_client,
                               KEY_DIR,
                               GCONF_CLIENT_PRELOAD_NONE, NULL);
+        gconf_client_add_dir (prefs->priv->gconf_client,
+                              GNOME_LOCKDOWN_DIR,
+                              GCONF_CLIENT_PRELOAD_NONE, NULL);
+
 
         gconf_client_notify_add (prefs->priv->gconf_client,
                                  KEY_DIR,
                                  (GConfClientNotifyFunc)key_changed_cb,
                                  prefs,
                                  NULL, NULL);
+        gconf_client_notify_add (prefs->priv->gconf_client,
+                                 GNOME_LOCKDOWN_DIR,
+                                 (GConfClientNotifyFunc)key_changed_cb,
+                                 prefs,
+                                 NULL, NULL);
 
         gs_prefs_load_from_gconf (prefs);
 }

Modified: trunk/src/gs-prefs.h
==============================================================================
--- trunk/src/gs-prefs.h	(original)
+++ trunk/src/gs-prefs.h	Thu Aug 21 01:44:03 2008
@@ -49,6 +49,7 @@
         guint            idle_activation_enabled : 1; /* whether to activate when idle */
         guint            lock_enabled : 1;		/* whether to lock when active */
         guint            logout_enabled : 1;	/* Whether to offer the logout option */
+        guint            lock_disabled : 1;     /* Whether locking the system is disabled */
         guint            user_switch_enabled : 1;	/* Whether to offer the user switch option */
         guint            keyboard_enabled : 1;	/* Whether to try to embed a keyboard */
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]