[gnome-session] gsm, capplet: move from gconf to gsettings
- From: Ray Strode <halfline src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-session] gsm, capplet: move from gconf to gsettings
- Date: Mon, 24 Jan 2011 17:52:39 +0000 (UTC)
commit 93c66fece3ee439e9d4bf55ab7455c0321dbe8e2
Author: Ray Strode <rstrode redhat com>
Date: Mon Jan 17 19:13:07 2011 -0500
gsm, capplet: move from gconf to gsettings
This gets us more GNOME 3 compliant.
Note we still use gconf for autostart files that require it.
https://bugzilla.gnome.org/show_bug.cgi?id=639801
capplet/gsm-properties-dialog.c | 53 +++----
capplet/main.c | 2 -
configure.ac | 3 +
data/Makefile.am | 27 +---
data/gnome-session.schemas.in | 43 -----
data/org.gnome.SessionManager.gschema.migrate | 3 +
data/org.gnome.SessionManager.gschema.xml.in | 14 ++
data/org.gnome.desktop.session.gschema.migrate | 2 +
data/org.gnome.desktop.session.gschema.xml.in | 9 +
gnome-session/gsm-inhibit-dialog.c | 2 -
gnome-session/gsm-manager.c | 198 ++++++------------------
11 files changed, 112 insertions(+), 244 deletions(-)
---
diff --git a/capplet/gsm-properties-dialog.c b/capplet/gsm-properties-dialog.c
index 81a340c..74eb7d8 100644
--- a/capplet/gsm-properties-dialog.c
+++ b/capplet/gsm-properties-dialog.c
@@ -27,8 +27,6 @@
#include <glib/gi18n.h>
#include <gtk/gtk.h>
-#include <gconf/gconf-client.h>
-
#include "gsm-properties-dialog.h"
#include "gsm-app-dialog.h"
#include "eggdesktopfile.h"
@@ -49,8 +47,8 @@
#define STARTUP_APP_ICON "system-run"
-#define SPC_GCONF_CONFIG_PREFIX "/apps/gnome-session/options"
-#define SPC_GCONF_AUTOSAVE_KEY SPC_GCONF_CONFIG_PREFIX "/auto_save_session"
+#define SPC_SETTINGS_SCHEMA "org.gnome.SessionManager"
+#define SPC_SETTINGS_AUTOSAVE_KEY "auto-save-session"
struct GsmPropertiesDialogPrivate
{
@@ -65,6 +63,8 @@ struct GsmPropertiesDialogPrivate
GtkWidget *remember_toggle;
+ GSettings *settings;
+
GspAppManager *manager;
};
@@ -457,19 +457,19 @@ on_row_activated (GtkTreeView *tree_view,
}
static void
-on_autosave_value_notify (GConfClient *client,
- guint id,
- GConfEntry *entry,
- GsmPropertiesDialog *dialog)
+on_autosave_value_setting_changed (GSettings *settings,
+ const gchar *key,
+ GsmPropertiesDialog *dialog)
{
gboolean gval;
gboolean bval;
- gval = gconf_value_get_bool (entry->value);
+ gval = g_settings_get_boolean (dialog->priv->settings, key);
bval = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->priv->remember_toggle));
if (bval != gval) {
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->remember_toggle), gval);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->remember_toggle),
+ gval);
}
}
@@ -477,18 +477,18 @@ static void
on_autosave_value_toggled (GtkToggleButton *button,
GsmPropertiesDialog *dialog)
{
- GConfClient *client;
gboolean gval;
gboolean bval;
- client = gconf_client_get_default ();
- gval = gconf_client_get_bool (client, SPC_GCONF_AUTOSAVE_KEY, NULL);
+ gval = g_settings_get_boolean (dialog->priv->settings,
+ SPC_SETTINGS_AUTOSAVE_KEY);
bval = gtk_toggle_button_get_active (button);
if (gval != bval) {
- gconf_client_set_bool (client, SPC_GCONF_AUTOSAVE_KEY, bval, NULL);
+ g_settings_set_boolean (dialog->priv->settings,
+ SPC_SETTINGS_AUTOSAVE_KEY,
+ bval);
}
- g_object_unref (client);
}
static void
@@ -507,7 +507,6 @@ setup_dialog (GsmPropertiesDialog *dialog)
GtkTreeViewColumn *column;
GtkCellRenderer *renderer;
GtkTreeSelection *selection;
- GConfClient *client;
GtkTargetList *targetlist;
gtk_dialog_add_buttons (GTK_DIALOG (dialog),
@@ -660,19 +659,16 @@ setup_dialog (GsmPropertiesDialog *dialog)
G_CALLBACK (on_edit_app_clicked),
dialog);
- client = gconf_client_get_default ();
button = GTK_WIDGET (gtk_builder_get_object (dialog->priv->xml,
CAPPLET_REMEMBER_WIDGET_NAME));
dialog->priv->remember_toggle = button;
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
- gconf_client_get_bool (client, SPC_GCONF_AUTOSAVE_KEY, NULL));
- gconf_client_notify_add (client,
- SPC_GCONF_AUTOSAVE_KEY,
- (GConfClientNotifyFunc)on_autosave_value_notify,
- dialog,
- NULL,
- NULL);
- g_object_unref (client);
+ g_settings_get_boolean (dialog->priv->settings,
+ SPC_SETTINGS_AUTOSAVE_KEY));
+ g_signal_connect (dialog->priv->settings,
+ "changed::" SPC_SETTINGS_AUTOSAVE_KEY,
+ G_CALLBACK (on_autosave_value_setting_changed),
+ dialog);
g_signal_connect (button,
"toggled",
@@ -757,16 +753,11 @@ gsm_properties_dialog_init (GsmPropertiesDialog *dialog)
{
GtkWidget *content_area;
GtkWidget *widget;
- GConfClient *client;
GError *error;
dialog->priv = GSM_PROPERTIES_DIALOG_GET_PRIVATE (dialog);
- client = gconf_client_get_default ();
- gconf_client_add_dir (client,
- SPC_GCONF_CONFIG_PREFIX,
- GCONF_CLIENT_PRELOAD_ONELEVEL,
- NULL);
+ dialog->priv->settings = g_settings_new (SPC_SETTINGS_SCHEMA);
dialog->priv->xml = gtk_builder_new ();
gtk_builder_set_translation_domain (dialog->priv->xml, GETTEXT_PACKAGE);
diff --git a/capplet/main.c b/capplet/main.c
index 861e36a..3c7177b 100644
--- a/capplet/main.c
+++ b/capplet/main.c
@@ -27,8 +27,6 @@
#include <glib/gi18n.h>
#include <gtk/gtk.h>
-#include <gconf/gconf-client.h>
-
#include "gsm-properties-dialog.h"
static gboolean show_version = FALSE;
diff --git a/configure.ac b/configure.ac
index 8083e46..8bb76fe 100644
--- a/configure.ac
+++ b/configure.ac
@@ -235,6 +235,7 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE",
AC_SUBST(GETTEXT_PACKAGE)
AM_GLIB_GNU_GETTEXT
+GLIB_GSETTINGS
dnl ====================================================================
dnl Headers
@@ -336,6 +337,8 @@ doc/dbus/gnome-session.xml
doc/man/Makefile
data/Makefile
data/session-properties.desktop.in
+data/org.gnome.SessionManager.gschema.xml
+data/org.gnome.desktop.session.gschema.xml
data/icons/Makefile
data/icons/16x16/Makefile
data/icons/22x22/Makefile
diff --git a/data/Makefile.am b/data/Makefile.am
index eb3b23d..02933b0 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -27,40 +27,29 @@ session_DATA = $(session_in_files:.session.desktop.in=.session)
%.session: %.session.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@
@INTLTOOL_DESKTOP_RULE@
+ INTLTOOL_XML_NOMERGE_RULE@
-schemas_in_files = gnome-session.schemas.in
-schemasdir = $(GCONF_SCHEMA_FILE_DIR)
-schemas_DATA = $(schemas_in_files:.schemas.in=.schemas)
+gsettings_SCHEMAS = org.gnome.SessionManager.gschema.xml org.gnome.desktop.session.gschema.xml
+ GSETTINGS_RULES@
- INTLTOOL_SCHEMAS_RULE@
-
-if GCONF_SCHEMAS_INSTALL
-install-data-local:
- if test -z "$(DESTDIR)" ; then \
- for p in $(schemas_DATA) ; do \
- GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $(top_builddir)/data/$$p ; \
- done \
- fi
-uninstall-local:
- for p in $(schema_DATA) ; do \
- GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-uninstall-rule $(top_builddir)/data/$$p ; \
- done
-endif
+migrationdir = $(datadir)/GConf/gsettings
+dist_migration_DATA = org.gnome.SessionManager.gschema.migrate org.gnome.desktop.session.gschema.migrate
EXTRA_DIST = \
$(xsession_in_files) \
$(session_in_in_files) \
- $(schemas_in_files) \
+ $(gsettings_SCHEMAS:.xml=.xml.in) \
$(ui_DATA) \
$(pixmap_DATA_dist)
CLEANFILES = \
- $(schemas_DATA) \
+ $(gsettings_SCHEMAS:.xml=.xml.in) \
$(xsession_DATA) \
$(desktop_DATA) \
$(session_DATA)
DISTCLEANFILES = \
+ $(gsettings_SCHEMAS:.xml=.xml.in) \
$(desktop_in_files)
-include $(top_srcdir)/git.mk
diff --git a/data/org.gnome.SessionManager.gschema.migrate b/data/org.gnome.SessionManager.gschema.migrate
new file mode 100644
index 0000000..fd4dfab
--- /dev/null
+++ b/data/org.gnome.SessionManager.gschema.migrate
@@ -0,0 +1,3 @@
+[org.gnome.SessionManager]
+auto-save-session = /apps/gnome-session/options/auto_save_session
+logout-prompt = /apps/gnome-session/options/logout_prompt
diff --git a/data/org.gnome.SessionManager.gschema.xml.in b/data/org.gnome.SessionManager.gschema.xml.in
new file mode 100644
index 0000000..05eb9f1
--- /dev/null
+++ b/data/org.gnome.SessionManager.gschema.xml.in
@@ -0,0 +1,14 @@
+<schemalist gettext-domain="gnome-session-3.0">
+ <schema id="org.gnome.SessionManager" path="/org/gnome/GnomeSession/">
+ <key name="auto-save-session" type="b">
+ <default>false</default>
+ <summary>Save sessions</summary>
+ <description>If enabled, gnome-session will save the session automatically.</description>
+ </key>
+ <key name="logout-prompt" type="b">
+ <default>true</default>
+ <summary>Logout prompt</summary>
+ <description>If enabled, gnome-session will prompt the user before ending a session.</description>
+ </key>
+ </schema>
+</schemalist>
diff --git a/data/org.gnome.desktop.session.gschema.migrate b/data/org.gnome.desktop.session.gschema.migrate
new file mode 100644
index 0000000..7367763
--- /dev/null
+++ b/data/org.gnome.desktop.session.gschema.migrate
@@ -0,0 +1,2 @@
+[org.gnome.desktop.session]
+idle-delay = /desktop/gnome/session/idle-delay
diff --git a/data/org.gnome.desktop.session.gschema.xml.in b/data/org.gnome.desktop.session.gschema.xml.in
new file mode 100644
index 0000000..ba7f6c7
--- /dev/null
+++ b/data/org.gnome.desktop.session.gschema.xml.in
@@ -0,0 +1,9 @@
+<schemalist gettext-domain="gnome-session-3.0">
+ <schema id="org.gnome.desktop.session" path="/desktop/gnome/session/">
+ <key name="idle-delay" type="i">
+ <default>5</default>
+ <summary>Time before session is considered idle</summary>
+ <description>The number of minutes of inactivity before the session is considered idle.</description>
+ </key>
+ </schema>
+</schemalist>
diff --git a/gnome-session/gsm-inhibit-dialog.c b/gnome-session/gsm-inhibit-dialog.c
index 7621a5b..a22dbde 100644
--- a/gnome-session/gsm-inhibit-dialog.c
+++ b/gnome-session/gsm-inhibit-dialog.c
@@ -32,8 +32,6 @@
#include <gdk/gdkx.h>
#include <cairo-xlib.h>
-#include <gconf/gconf-client.h>
-
#include "gsm-inhibit-dialog.h"
#include "gsm-store.h"
#include "gsm-client.h"
diff --git a/gnome-session/gsm-manager.c b/gnome-session/gsm-manager.c
index 012a9d6..326d859 100644
--- a/gnome-session/gsm-manager.c
+++ b/gnome-session/gsm-manager.c
@@ -41,7 +41,6 @@
#include <upower.h>
#include <gtk/gtk.h> /* for logout dialog */
-#include <gconf/gconf-client.h>
#include "gsm-manager.h"
#include "gsm-manager-glue.h"
@@ -72,18 +71,15 @@
#define GDM_FLEXISERVER_COMMAND "gdmflexiserver"
#define GDM_FLEXISERVER_ARGS "--startnew Standard"
+#define SESSION_SCHEMA "org.gnome.desktop.session"
+#define KEY_IDLE_DELAY "idle-delay"
-#define KEY_LOCKDOWN_DIR "/desktop/gnome/lockdown"
-#define KEY_LOCK_DISABLE KEY_LOCKDOWN_DIR "/disable_lock_screen"
-#define KEY_USER_SWITCH_DISABLE KEY_LOCKDOWN_DIR "/disable_user_switching"
+#define GSM_MANAGER_SCHEMA "org.gnome.SessionManager"
+#define KEY_AUTOSAVE "auto-save-session"
+#define KEY_LOGOUT_PROMPT "logout-prompt"
-#define KEY_DESKTOP_DIR "/desktop/gnome/session"
-#define KEY_IDLE_DELAY KEY_DESKTOP_DIR "/idle_delay"
-
-#define KEY_GNOME_SESSION_DIR "/apps/gnome-session/options"
-#define KEY_AUTOSAVE KEY_GNOME_SESSION_DIR "/auto_save_session"
-
-#define KEY_SLEEP_LOCK "/apps/gnome-screensaver/lock_enabled"
+#define SCREENSAVER_SCHEMA "org.gnome.screensaver"
+#define KEY_SLEEP_LOCK "lock-enabled"
typedef enum
{
@@ -125,9 +121,9 @@ struct GsmManagerPrivate
* and shouldn't be automatically restarted */
GSList *condition_clients;
- GConfClient *gconf_client;
- guint desktop_notify_id;
- guint lockdown_notify_id;
+ GSettings *settings;
+ GSettings *session_settings;
+ GSettings *screensaver_settings;
DBusGProxy *bus_proxy;
DBusGConnection *connection;
@@ -956,20 +952,17 @@ manager_switch_user (GsmManager *manager)
static gboolean
sleep_lock_is_enabled (GsmManager *manager)
{
- GError *error;
gboolean enable_lock;
- error = NULL;
- enable_lock = gconf_client_get_bool (manager->priv->gconf_client,
- KEY_SLEEP_LOCK, &error);
-
- if (error) {
- g_warning ("Error retrieving configuration key '%s': %s",
- KEY_SLEEP_LOCK, error->message);
- g_error_free (error);
+ if (manager->priv->screensaver_settings == NULL) {
+ g_warning ("Unable to read screen lock configuration, "
+ "unconditionally enabling screen locking");
- /* If we fail to query gconf key, just enable locking */
+ /* If we fail to query the setting, just enable locking */
enable_lock = TRUE;
+ } else {
+ enable_lock = g_settings_get_boolean (manager->priv->screensaver_settings,
+ KEY_SLEEP_LOCK);
}
return enable_lock;
@@ -1853,19 +1846,8 @@ auto_save_is_enabled (GsmManager *manager)
gboolean auto_save;
error = NULL;
- auto_save = gconf_client_get_bool (manager->priv->gconf_client,
- KEY_AUTOSAVE,
- &error);
-
- if (error) {
- g_warning ("Error retrieving configuration key '%s': %s",
- KEY_AUTOSAVE,
- error->message);
- g_error_free (error);
-
- /* If we fail to query gconf key, disable auto save */
- auto_save = FALSE;
- }
+ auto_save = g_settings_get_boolean (manager->priv->settings,
+ KEY_AUTOSAVE);
return auto_save;
}
@@ -2239,26 +2221,19 @@ gsm_manager_dispose (GObject *object)
manager->priv->presence = NULL;
}
- if (manager->priv->gconf_client) {
- if (manager->priv->desktop_notify_id != 0) {
- gconf_client_remove_dir (manager->priv->gconf_client,
- KEY_DESKTOP_DIR,
- NULL);
- gconf_client_notify_remove (manager->priv->gconf_client,
- manager->priv->desktop_notify_id);
- manager->priv->desktop_notify_id = 0;
- }
- if (manager->priv->lockdown_notify_id != 0) {
- gconf_client_remove_dir (manager->priv->gconf_client,
- KEY_LOCKDOWN_DIR,
- NULL);
- gconf_client_notify_remove (manager->priv->gconf_client,
- manager->priv->lockdown_notify_id);
- manager->priv->lockdown_notify_id = 0;
- }
+ if (manager->priv->settings) {
+ g_object_unref (manager->priv->settings);
+ manager->priv->settings = NULL;
+ }
+
+ if (manager->priv->session_settings) {
+ g_object_unref (manager->priv->session_settings);
+ manager->priv->session_settings = NULL;
+ }
- g_object_unref (manager->priv->gconf_client);
- manager->priv->gconf_client = NULL;
+ if (manager->priv->screensaver_settings) {
+ g_object_unref (manager->priv->screensaver_settings);
+ manager->priv->screensaver_settings = NULL;
}
if (manager->priv->up_client != NULL) {
@@ -2374,83 +2349,26 @@ gsm_manager_class_init (GsmManagerClass *klass)
}
static void
-invalid_type_warning (const char *type)
+fetch_idle_delay_setting (GsmManager *manager)
{
- g_warning ("Error retrieving configuration key '%s': Invalid type",
- type);
-}
-
-static void
-load_idle_delay_from_gconf (GsmManager *manager)
-{
- GError *error;
glong value;
- error = NULL;
- value = gconf_client_get_int (manager->priv->gconf_client,
- KEY_IDLE_DELAY,
- &error);
- if (error == NULL) {
- gsm_presence_set_idle_timeout (manager->priv->presence, value * 60000);
- } else {
- g_warning ("Error retrieving configuration key '%s': %s",
- KEY_IDLE_DELAY,
- error->message);
- g_error_free (error);
- }
-
+ value = g_settings_get_int (manager->priv->session_settings,
+ KEY_IDLE_DELAY);
+ gsm_presence_set_idle_timeout (manager->priv->presence, value * 60000);
}
static void
-on_gconf_key_changed (GConfClient *client,
- guint cnxn_id,
- GConfEntry *entry,
- GsmManager *manager)
+on_setting_changed (GSettings *settings,
+ const char *key,
+ GsmManager *manager)
{
- const char *key;
- GConfValue *value;
-
- key = gconf_entry_get_key (entry);
-
- if (! g_str_has_prefix (key, KEY_DESKTOP_DIR)
- && ! g_str_has_prefix (key, KEY_LOCKDOWN_DIR)) {
- return;
- }
-
- value = gconf_entry_get_value (entry);
-
if (strcmp (key, KEY_IDLE_DELAY) == 0) {
- if (value->type == GCONF_VALUE_INT) {
- int delay;
-
- delay = gconf_value_get_int (value);
-
- gsm_presence_set_idle_timeout (manager->priv->presence, delay * 60000);
- } 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);
-
- /* FIXME: handle this */
- } else {
- invalid_type_warning (key);
- }
- } else if (strcmp (key, KEY_USER_SWITCH_DISABLE) == 0) {
+ int delay;
- if (value->type == GCONF_VALUE_BOOL) {
- gboolean disabled;
-
- disabled = gconf_value_get_bool (value);
-
- /* FIXME: handle this */
- } else {
- invalid_type_warning (key);
- }
+ delay = g_settings_get_int (settings, key);
+ gsm_presence_set_idle_timeout (manager->priv->presence, delay * 60000);
} else {
g_debug ("Config key not handled: %s", key);
}
@@ -2474,7 +2392,9 @@ gsm_manager_init (GsmManager *manager)
manager->priv = GSM_MANAGER_GET_PRIVATE (manager);
- manager->priv->gconf_client = gconf_client_get_default ();
+ manager->priv->settings = g_settings_new (GSM_MANAGER_SCHEMA);
+ manager->priv->session_settings = g_settings_new (SESSION_SCHEMA);
+ manager->priv->screensaver_settings = g_settings_new (SCREENSAVER_SCHEMA);
manager->priv->inhibitors = gsm_store_new ();
g_signal_connect (manager->priv->inhibitors,
@@ -2496,26 +2416,12 @@ gsm_manager_init (GsmManager *manager)
manager->priv->up_client = up_client_new ();
- /* GConf setup */
- gconf_client_add_dir (manager->priv->gconf_client,
- KEY_DESKTOP_DIR,
- GCONF_CLIENT_PRELOAD_RECURSIVE, NULL);
- gconf_client_add_dir (manager->priv->gconf_client,
- KEY_LOCKDOWN_DIR,
- GCONF_CLIENT_PRELOAD_NONE, NULL);
-
- manager->priv->desktop_notify_id = gconf_client_notify_add (manager->priv->gconf_client,
- KEY_DESKTOP_DIR,
- (GConfClientNotifyFunc)on_gconf_key_changed,
- manager,
- NULL, NULL);
- manager->priv->lockdown_notify_id = gconf_client_notify_add (manager->priv->gconf_client,
- KEY_LOCKDOWN_DIR,
- (GConfClientNotifyFunc)on_gconf_key_changed,
- manager,
- NULL, NULL);
+ g_signal_connect (manager->priv->session_settings,
+ "changed",
+ G_CALLBACK (on_setting_changed),
+ manager);
- load_idle_delay_from_gconf (manager);
+ fetch_idle_delay_setting (manager);
}
static void
@@ -2955,10 +2861,8 @@ user_logout (GsmManager *manager,
return;
}
- logout_prompt =
- gconf_client_get_bool (manager->priv->gconf_client,
- "/apps/gnome-session/options/logout_prompt",
- NULL);
+ logout_prompt = g_settings_get_boolean (manager->priv->settings,
+ KEY_LOGOUT_PROMPT);
/* Global settings overides input parameter in order to disable confirmation
* dialog accordingly. If we're shutting down, we always show the confirmation
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]