screen: Hook up screen locking

https://bugzilla.gnome.org/show_bug.cgi?id=637939
This commit is contained in:
Bastien Nocera 2011-02-07 18:55:03 +00:00
parent f2461603f3
commit c09ecde3cf
2 changed files with 75 additions and 2 deletions

View file

@ -77,7 +77,7 @@ dnl ==============================================
GLIB_REQUIRED_VERSION=2.25.11
GTK_REQUIRED_VERSION=2.91.6
DESKTOP_SCHEMAS_REQUIRED_VERSION=0.1.3
DESKTOP_SCHEMAS_REQUIRED_VERSION=0.1.7
PA_REQUIRED_VERSION=0.9.16
CANBERRA_REQUIRED_VERSION=0.13
GDKPIXBUF_REQUIRED_VERSION=2.23.0

View file

@ -112,6 +112,8 @@ on_lock_settings_changed (GSettings *settings,
const char *key,
CcScreenPanel *panel)
{
if (g_str_equal (key, "lock-delay") == FALSE)
return;
}
static void
@ -289,6 +291,28 @@ dpms_combo_changed_cb (GtkWidget *widget, CcScreenPanel *self)
g_settings_set_int (self->priv->gsd_settings, "sleep-display-battery", value);
}
static void
lock_combo_changed_cb (GtkWidget *widget, CcScreenPanel *self)
{
GtkTreeIter iter;
GtkTreeModel *model;
gint value;
gboolean ret;
/* no selection */
ret = gtk_combo_box_get_active_iter (GTK_COMBO_BOX(widget), &iter);
if (!ret)
return;
/* get entry */
model = gtk_combo_box_get_model (GTK_COMBO_BOX(widget));
gtk_tree_model_get (model, &iter,
1, &value,
-1);
g_settings_set (self->priv->lock_settings, "lock-delay", "u", value);
}
static void
set_dpms_value_for_combo (GtkComboBox *combo_box, CcScreenPanel *self)
{
@ -319,6 +343,36 @@ set_dpms_value_for_combo (GtkComboBox *combo_box, CcScreenPanel *self)
} while (gtk_tree_model_iter_next (model, &iter));
}
static void
set_lock_value_for_combo (GtkComboBox *combo_box, CcScreenPanel *self)
{
GtkTreeIter iter;
GtkTreeModel *model;
guint value;
gint value_tmp;
gboolean ret;
/* get entry */
model = gtk_combo_box_get_model (combo_box);
ret = gtk_tree_model_get_iter_first (model, &iter);
if (!ret)
return;
/* try to make the UI match the AC setting */
g_settings_get (self->priv->lock_settings, "lock-delay", "u", &value);
do
{
gtk_tree_model_get (model, &iter,
1, &value_tmp,
-1);
if (value == value_tmp)
{
gtk_combo_box_set_active_iter (combo_box, &iter);
break;
}
} while (gtk_tree_model_iter_next (model, &iter));
}
static void
cc_screen_panel_init (CcScreenPanel *self)
{
@ -354,7 +408,7 @@ cc_screen_panel_init (CcScreenPanel *self)
got_power_proxy_cb,
self);
self->priv->lock_settings = g_settings_new ("org.gnome.desktop.interface");
self->priv->lock_settings = g_settings_new ("org.gnome.desktop.screensaver");
g_signal_connect (self->priv->lock_settings,
"changed",
G_CALLBACK (on_lock_settings_changed),
@ -375,6 +429,25 @@ cc_screen_panel_init (CcScreenPanel *self)
G_CALLBACK (dpms_combo_changed_cb),
self);
/* bind the screen lock checkbox */
widget = WID ("screen_lock_on_switch");
g_settings_bind (self->priv->lock_settings,
"lock-enabled",
widget, "active",
G_SETTINGS_BIND_DEFAULT);
/* lock time */
widget = WID ("screen_lock_combobox");
set_lock_value_for_combo (GTK_COMBO_BOX (widget), self);
g_signal_connect (widget, "changed",
G_CALLBACK (lock_combo_changed_cb),
self);
g_settings_bind (self->priv->lock_settings,
"lock-enabled",
widget, "sensitive",
G_SETTINGS_BIND_GET);
widget = WID ("screen_vbox");
gtk_widget_reparent (widget, (GtkWidget *) self);
}