[mutter/wip/gcampax/background: 63/68] MetaBackground: reverse the role of GnomeBG and GSettings



commit b61e221e8f98fb62cd64fef252ceffd1ebc76365
Author: Giovanni Campagna <gcampagna src gnome org>
Date:   Sun Feb 3 19:09:26 2013 +0100

    MetaBackground: reverse the role of GnomeBG and GSettings
    
    We want to phase out GnomeBG eventually, so make GSettings the public
    settings object and texture keep-alive.

 src/compositor/meta-background-actor.c |   57 ++++++++++++++-----------------
 src/libmutter.pc.in                    |    2 +-
 src/meta/meta-background-actor.h       |    4 +--
 3 files changed, 28 insertions(+), 35 deletions(-)
---
diff --git a/src/compositor/meta-background-actor.c b/src/compositor/meta-background-actor.c
index de3a331..c35b2d5 100644
--- a/src/compositor/meta-background-actor.c
+++ b/src/compositor/meta-background-actor.c
@@ -29,6 +29,9 @@
 
 #include <clutter/clutter.h>
 
+#define GNOME_DESKTOP_USE_UNSTABLE_API
+#include <libgnome-desktop/gnome-bg.h>
+
 #include "cogl-utils.h"
 #include "compositor-private.h"
 #include <meta/errors.h>
@@ -55,6 +58,7 @@ struct _MetaBackground
   float texture_height;
   CoglTexture *old_texture;
   CoglTexture *texture;
+  GnomeBG     *bg;
 
   GTask *rendering_task;
 };
@@ -63,7 +67,7 @@ struct _MetaBackgroundActorPrivate
 {
   MetaScreen     *screen;
   MetaBackground *background;
-  GnomeBG        *settings;
+  GSettings      *settings;
 
   CoglPipeline *single_pipeline;
   CoglPipeline *crossfade_pipeline;
@@ -124,30 +128,15 @@ on_settings_changed (GSettings   *settings,
   gnome_bg_load_from_preferences (bg, settings);
 }
 
-static GnomeBG *
+static GSettings *
 meta_background_get_default_settings (void)
 {
-  GSettings *settings;
-  GnomeBG *bg;
-
-  settings = g_settings_new ("org.gnome.desktop.background");
-  bg = gnome_bg_new ();
-
-  g_signal_connect (settings, "changed",
-                    G_CALLBACK (on_settings_changed), bg);
-  on_settings_changed (settings, NULL, bg);
-
-  /* Just to keep settings alive */
-  g_object_set_data_full (G_OBJECT (bg), "g-settings",
-                          g_object_ref (settings), g_object_unref);
-  g_object_unref (settings);
-
-  return bg;
+  return g_settings_new ("org.gnome.desktop.background");
 }
 
 static MetaBackground *
 meta_background_get (MetaScreen *screen,
-                     GnomeBG    *bg)
+                     GSettings  *settings)
 {
   static GQuark background_quark;
   MetaBackground *background;
@@ -155,27 +144,33 @@ meta_background_get (MetaScreen *screen,
   if (G_UNLIKELY (background_quark == 0))
     background_quark = g_quark_from_static_string ("meta-background");
 
-  background = g_object_get_qdata (G_OBJECT (bg), background_quark);
+  background = g_object_get_qdata (G_OBJECT (settings), background_quark);
   if (G_UNLIKELY (background == NULL))
     {
       background = g_slice_new0 (MetaBackground);
-      g_object_set_qdata_full (G_OBJECT (bg), background_quark,
+      g_object_set_qdata_full (G_OBJECT (settings), background_quark,
                                background, (GDestroyNotify) meta_background_free);
 
+      background->bg = gnome_bg_new ();
+
+      g_signal_connect (settings, "changed",
+                        G_CALLBACK (on_settings_changed), background->bg);
+      on_settings_changed (settings, NULL, background->bg);
+
       background->screen = screen;
       background->texture_width = -1;
       background->texture_height = -1;
 
-      g_signal_connect (bg, "transitioned",
+      g_signal_connect (background->bg, "transitioned",
                         G_CALLBACK (meta_background_update), background);
-      g_signal_connect (bg, "changed",
+      g_signal_connect (background->bg, "changed",
                         G_CALLBACK (meta_background_update), background);
 
       /* GnomeBG has queued a changed event, but we need to start rendering now,
          or it will be too late when we paint the first frame.
       */
-      g_object_set_data (G_OBJECT (bg), "ignore-pending-change", GINT_TO_POINTER (TRUE));
-      meta_background_update (bg, background);
+      g_object_set_data (G_OBJECT (background->bg), "ignore-pending-change", GINT_TO_POINTER (TRUE));
+      meta_background_update (background->bg, background);
     }
 
   return background;
@@ -498,7 +493,7 @@ meta_background_actor_set_screen (MetaBackgroundActor *self,
 
 static void
 meta_background_actor_set_settings (MetaBackgroundActor *self,
-                                    GnomeBG             *settings)
+                                    GSettings           *settings)
 {
   MetaBackgroundActorPrivate *priv;
 
@@ -556,7 +551,7 @@ meta_background_actor_set_property(GObject         *object,
       meta_background_actor_set_crossfade_progress (self, g_value_get_float (value));
       break;
     case PROP_SETTINGS:
-      meta_background_actor_set_settings (self, GNOME_BG (g_value_get_object (value)));
+      meta_background_actor_set_settings (self, G_SETTINGS (g_value_get_object (value)));
       break;
     case PROP_SCREEN:
       meta_background_actor_set_screen (self, META_SCREEN (g_value_get_object (value)));
@@ -601,12 +596,12 @@ meta_background_actor_class_init (MetaBackgroundActorClass *klass)
   /**
    * MetaBackgroundActor:settings:
    *
-   * The #GnomeBG object holding settings for this background.
+   * The #GSettings object holding settings for this background.
    */
   pspec = g_param_spec_object ("settings",
                                "Settings",
                                "Object holding required information to render a background",
-                               GNOME_TYPE_BG,
+                               G_TYPE_SETTINGS,
                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
   obj_props[PROP_SETTINGS] = pspec;
 
@@ -675,7 +670,7 @@ meta_background_actor_constructed (GObject *object)
 /**
  * meta_background_actor_new:
  * @screen: the #MetaScreen
- * @settings: (allow-none): a #GnomeBG holding the background configuration,
+ * @settings: (allow-none): a #GSettings object holding the background configuration,
  *            or %NULL to pick the default one.
  *
  * Creates a new actor to draw the background for the given screen.
@@ -684,7 +679,7 @@ meta_background_actor_constructed (GObject *object)
  */
 ClutterActor *
 meta_background_actor_new (MetaScreen *screen,
-                           GnomeBG    *settings)
+                           GSettings  *settings)
 {
   g_return_val_if_fail (META_IS_SCREEN (screen), NULL);
 
diff --git a/src/libmutter.pc.in b/src/libmutter.pc.in
index f445e14..1f819af 100644
--- a/src/libmutter.pc.in
+++ b/src/libmutter.pc.in
@@ -12,7 +12,7 @@ mutter_plugin_api_version= MUTTER_PLUGIN_API_VERSION@
 
 Name: libmutter
 Description: Mutter window manager library
-Requires: gsettings-desktop-schemas gtk+-3.0 @CLUTTER_PACKAGE@ x11 gnome-desktop-3.0
+Requires: gsettings-desktop-schemas gtk+-3.0 @CLUTTER_PACKAGE@ x11
 Version: @VERSION@
 Libs: -L${libdir} -lmutter
 Cflags: -I${includedir}/mutter -DMUTTER_MAJOR_VERSION=${mutter_major_version} -DMUTTER_MINOR_VERSION=${mutter_minor_version} -DMUTTER_MICRO_VERSION=${mutter_micro_version} -DMUTTER_PLUGIN_API_VERSION=${mutter_plugin_api_version}
diff --git a/src/meta/meta-background-actor.h b/src/meta/meta-background-actor.h
index bca6e0d..1d42fd0 100644
--- a/src/meta/meta-background-actor.h
+++ b/src/meta/meta-background-actor.h
@@ -24,8 +24,6 @@
 #define META_BACKGROUND_ACTOR_H
 
 #include <clutter/clutter.h>
-#define GNOME_DESKTOP_USE_UNSTABLE_API
-#include <libgnome-desktop/gnome-bg.h>
 
 #include <meta/screen.h>
 
@@ -63,7 +61,7 @@ struct _MetaBackgroundActor
 GType meta_background_actor_get_type (void);
 
 ClutterActor *meta_background_actor_new (MetaScreen *screen,
-                                         GnomeBG    *settings);
+                                         GSettings  *settings);
 
 /**
  * MetaSnippetHook:


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