gnome-screensaver r1485 - in trunk: . src
- From: mccann svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-screensaver r1485 - in trunk: . src
- Date: Thu, 21 Aug 2008 01:44:03 +0000 (UTC)
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]