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.
This commit is contained in:
Giovanni Campagna 2013-02-03 19:09:26 +01:00
parent f278fd92d5
commit b61e221e8f
3 changed files with 28 additions and 35 deletions

View File

@ -29,6 +29,9 @@
#include <clutter/clutter.h> #include <clutter/clutter.h>
#define GNOME_DESKTOP_USE_UNSTABLE_API
#include <libgnome-desktop/gnome-bg.h>
#include "cogl-utils.h" #include "cogl-utils.h"
#include "compositor-private.h" #include "compositor-private.h"
#include <meta/errors.h> #include <meta/errors.h>
@ -55,6 +58,7 @@ struct _MetaBackground
float texture_height; float texture_height;
CoglTexture *old_texture; CoglTexture *old_texture;
CoglTexture *texture; CoglTexture *texture;
GnomeBG *bg;
GTask *rendering_task; GTask *rendering_task;
}; };
@ -63,7 +67,7 @@ struct _MetaBackgroundActorPrivate
{ {
MetaScreen *screen; MetaScreen *screen;
MetaBackground *background; MetaBackground *background;
GnomeBG *settings; GSettings *settings;
CoglPipeline *single_pipeline; CoglPipeline *single_pipeline;
CoglPipeline *crossfade_pipeline; CoglPipeline *crossfade_pipeline;
@ -124,30 +128,15 @@ on_settings_changed (GSettings *settings,
gnome_bg_load_from_preferences (bg, settings); gnome_bg_load_from_preferences (bg, settings);
} }
static GnomeBG * static GSettings *
meta_background_get_default_settings (void) meta_background_get_default_settings (void)
{ {
GSettings *settings; return g_settings_new ("org.gnome.desktop.background");
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;
} }
static MetaBackground * static MetaBackground *
meta_background_get (MetaScreen *screen, meta_background_get (MetaScreen *screen,
GnomeBG *bg) GSettings *settings)
{ {
static GQuark background_quark; static GQuark background_quark;
MetaBackground *background; MetaBackground *background;
@ -155,27 +144,33 @@ meta_background_get (MetaScreen *screen,
if (G_UNLIKELY (background_quark == 0)) if (G_UNLIKELY (background_quark == 0))
background_quark = g_quark_from_static_string ("meta-background"); 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)) if (G_UNLIKELY (background == NULL))
{ {
background = g_slice_new0 (MetaBackground); 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, (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->screen = screen;
background->texture_width = -1; background->texture_width = -1;
background->texture_height = -1; background->texture_height = -1;
g_signal_connect (bg, "transitioned", g_signal_connect (background->bg, "transitioned",
G_CALLBACK (meta_background_update), background); G_CALLBACK (meta_background_update), background);
g_signal_connect (bg, "changed", g_signal_connect (background->bg, "changed",
G_CALLBACK (meta_background_update), background); G_CALLBACK (meta_background_update), background);
/* GnomeBG has queued a changed event, but we need to start rendering now, /* 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. 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)); g_object_set_data (G_OBJECT (background->bg), "ignore-pending-change", GINT_TO_POINTER (TRUE));
meta_background_update (bg, background); meta_background_update (background->bg, background);
} }
return background; return background;
@ -498,7 +493,7 @@ meta_background_actor_set_screen (MetaBackgroundActor *self,
static void static void
meta_background_actor_set_settings (MetaBackgroundActor *self, meta_background_actor_set_settings (MetaBackgroundActor *self,
GnomeBG *settings) GSettings *settings)
{ {
MetaBackgroundActorPrivate *priv; 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)); meta_background_actor_set_crossfade_progress (self, g_value_get_float (value));
break; break;
case PROP_SETTINGS: 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; break;
case PROP_SCREEN: case PROP_SCREEN:
meta_background_actor_set_screen (self, META_SCREEN (g_value_get_object (value))); 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: * MetaBackgroundActor:settings:
* *
* The #GnomeBG object holding settings for this background. * The #GSettings object holding settings for this background.
*/ */
pspec = g_param_spec_object ("settings", pspec = g_param_spec_object ("settings",
"Settings", "Settings",
"Object holding required information to render a background", "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); G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
obj_props[PROP_SETTINGS] = pspec; obj_props[PROP_SETTINGS] = pspec;
@ -675,7 +670,7 @@ meta_background_actor_constructed (GObject *object)
/** /**
* meta_background_actor_new: * meta_background_actor_new:
* @screen: the #MetaScreen * @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. * or %NULL to pick the default one.
* *
* Creates a new actor to draw the background for the given screen. * Creates a new actor to draw the background for the given screen.
@ -684,7 +679,7 @@ meta_background_actor_constructed (GObject *object)
*/ */
ClutterActor * ClutterActor *
meta_background_actor_new (MetaScreen *screen, meta_background_actor_new (MetaScreen *screen,
GnomeBG *settings) GSettings *settings)
{ {
g_return_val_if_fail (META_IS_SCREEN (screen), NULL); g_return_val_if_fail (META_IS_SCREEN (screen), NULL);

View File

@ -12,7 +12,7 @@ mutter_plugin_api_version=@MUTTER_PLUGIN_API_VERSION@
Name: libmutter Name: libmutter
Description: Mutter window manager library 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@ Version: @VERSION@
Libs: -L${libdir} -lmutter 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} 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}

View File

@ -24,8 +24,6 @@
#define META_BACKGROUND_ACTOR_H #define META_BACKGROUND_ACTOR_H
#include <clutter/clutter.h> #include <clutter/clutter.h>
#define GNOME_DESKTOP_USE_UNSTABLE_API
#include <libgnome-desktop/gnome-bg.h>
#include <meta/screen.h> #include <meta/screen.h>
@ -63,7 +61,7 @@ struct _MetaBackgroundActor
GType meta_background_actor_get_type (void); GType meta_background_actor_get_type (void);
ClutterActor *meta_background_actor_new (MetaScreen *screen, ClutterActor *meta_background_actor_new (MetaScreen *screen,
GnomeBG *settings); GSettings *settings);
/** /**
* MetaSnippetHook: * MetaSnippetHook: