[gnome-screensaver] Port background handling to GSettings and new gnome-bg API



commit 22aff5e2a8c8faa8608cd38951665ccb175d6953
Author: Tomas Bzatek <tbzatek redhat com>
Date:   Fri Nov 19 14:26:14 2010 +0100

    Port background handling to GSettings and new gnome-bg API
    
    See bug 632566 for details.

 src/gs-manager.c |  118 +++++++++++++++++++++--------------------------------
 1 files changed, 47 insertions(+), 71 deletions(-)
---
diff --git a/src/gs-manager.c b/src/gs-manager.c
index a6b2404..0f0d42c 100644
--- a/src/gs-manager.c
+++ b/src/gs-manager.c
@@ -26,11 +26,8 @@
 #include <gdk/gdk.h>
 #include <gdk/gdkx.h>
 
-#include <gconf/gconf-engine.h>
-#include <gconf/gconf-client.h>
-
 #define GNOME_DESKTOP_USE_UNSTABLE_API
-#include <libgnomeui/gnome-bg.h>
+#include <libgnome-desktop/gnome-bg.h>
 
 #include "gs-prefs.h"        /* for GSSaverMode */
 
@@ -54,9 +51,8 @@ struct GSManagerPrivate
         GHashTable  *jobs;
 
         GSThemeManager *theme_manager;
-        GConfClient    *client;
+        GSettings      *settings;
         GnomeBG        *bg;
-        guint           bg_notify_id;
 
         /* Policy */
         glong        lock_timeout;
@@ -949,61 +945,46 @@ on_bg_changed (GnomeBG   *bg,
         gs_debug ("background changed");
 }
 
-static void
-gconf_changed_callback (GConfClient *client,
-                        guint        cnxn_id,
-                        GConfEntry  *entry,
-                        GSManager   *manager)
-{
+static gboolean
+background_settings_change_event_cb (GSettings *settings,
+                                     gpointer   keys,
+                                     gint       n_keys,
+                                     GSManager   *manager)
+{
+#if 0
+        /* FIXME: since we bind user settings instead of system ones,
+         *        watching for changes is no longer valid.
+         */
         gnome_bg_load_from_preferences (manager->priv->bg,
-                                        manager->priv->client);
-}
+                                        manager->priv->settings);
+#endif
 
-static void
-watch_bg_preferences (GSManager *manager)
-{
-        g_assert (manager->priv->bg_notify_id == 0);
-
-        gconf_client_add_dir (manager->priv->client,
-                              GNOME_BG_KEY_DIR,
-                              GCONF_CLIENT_PRELOAD_NONE,
-                              NULL);
-        manager->priv->bg_notify_id = gconf_client_notify_add (manager->priv->client,
-                                                               GNOME_BG_KEY_DIR,
-                                                               (GConfClientNotifyFunc)gconf_changed_callback,
-                                                               manager,
-                                                               NULL,
-                                                               NULL);
+        return FALSE;
 }
 
-static GConfClient *
-get_gconf_client (void)
+static GSettings *
+get_system_settings (void)
 {
-        GConfClient        *client;
-        GSList             *addresses;
-        GError             *error;
-        GConfEngine        *engine;
+        GSettings *settings;
+        gchar **keys;
+        gchar **k;
 
-        client = NULL;
-        addresses = NULL;
+        /* FIXME: we need to bind system settings instead of user but
+         *        that's currently impossible, not implemented yet.
+         *        Hence, reset to system default values.
+         */
+        /* TODO: Ideally we would like to bind some other key, screensaver-specific. */
+        settings = g_settings_new ("org.gnome.desktop.background");
 
-        addresses = g_slist_prepend (addresses, "xml:merged:" SYSCONFDIR "/gconf/gconf.xml.mandatory");
-        addresses = g_slist_prepend (addresses, "xml:merged:" SYSCONFDIR "/gconf/gconf.xml.system");
-        addresses = g_slist_prepend (addresses, "xml:merged:" SYSCONFDIR "/gconf/gconf.xml.defaults");
-        addresses = g_slist_reverse (addresses);
+        g_settings_delay (settings);
 
-        error = NULL;
-        engine = gconf_engine_get_for_addresses (addresses, &error);
-        if (engine == NULL) {
-                gs_debug ("Unable to get gconf engine for addresses: %s", error->message);
-                g_error_free (error);
-        } else {
-                client = gconf_client_get_for_engine (engine);
+        keys = g_settings_list_keys (settings);
+        for (k = keys; *k; k++) {
+                g_settings_reset (settings, *k);
         }
+        g_strfreev (keys);
 
-        g_slist_free (addresses);
-
-        return client;
+        return settings;
 }
 
 static void
@@ -1015,18 +996,20 @@ gs_manager_init (GSManager *manager)
         manager->priv->grab = gs_grab_new ();
         manager->priv->theme_manager = gs_theme_manager_new ();
 
-        manager->priv->client = get_gconf_client ();
-        if (manager->priv->client != NULL) {
-                manager->priv->bg = gnome_bg_new ();
+        manager->priv->settings = get_system_settings ();
+        manager->priv->bg = gnome_bg_new ();
 
-                g_signal_connect (manager->priv->bg,
-                                  "changed",
-                                  G_CALLBACK (on_bg_changed),
-                                  manager);
-                watch_bg_preferences (manager);
+        g_signal_connect (manager->priv->bg,
+                          "changed",
+                          G_CALLBACK (on_bg_changed),
+                          manager);
+        g_signal_connect (manager->priv->settings,
+                          "change-event",
+                          G_CALLBACK (background_settings_change_event_cb),
+                          manager);
 
-                gnome_bg_load_from_preferences (manager->priv->bg, manager->priv->client);
-        }
+        gnome_bg_load_from_preferences (manager->priv->bg,
+                                        manager->priv->settings);
 }
 
 static void
@@ -1600,19 +1583,12 @@ gs_manager_finalize (GObject *object)
 
         g_return_if_fail (manager->priv != NULL);
 
-        if (manager->priv->bg_notify_id != 0) {
-                gconf_client_remove_dir (manager->priv->client,
-                                         GNOME_BG_KEY_DIR,
-                                         NULL);
-                gconf_client_notify_remove (manager->priv->client,
-                                            manager->priv->bg_notify_id);
-                manager->priv->bg_notify_id = 0;
-        }
         if (manager->priv->bg != NULL) {
                 g_object_unref (manager->priv->bg);
         }
-        if (manager->priv->client != NULL) {
-                g_object_unref (manager->priv->client);
+        if (manager->priv->settings != NULL) {
+                g_settings_revert (manager->priv->settings);
+                g_object_unref (manager->priv->settings);
         }
 
         free_themes (manager);



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