--- a/plugins/background/csd-background-manager.c 2013-10-24 11:08:13.000000000 +0100
+++ b/plugins/background/csd-background-manager.c 2013-10-18 17:40:33.000000000 +0100
@@ -52,6 +52,8 @@ struct CsdBackgroundManagerPrivate
GSettings *settings;
GnomeBG *bg;
+ GnomeBGCrossfade *fade;
+
guint watch_id;
};
@@ -67,7 +69,15 @@ G_DEFINE_TYPE (CsdBackgroundManager, csd
static gpointer manager_object = NULL;
static void
-draw_background (CsdBackgroundManager *manager)
+on_crossfade_finished (CsdBackgroundManager *manager)
+{
+ g_object_unref (manager->priv->fade);
+ manager->priv->fade = NULL;
+}
+
+static void
+draw_background (CsdBackgroundManager *manager,
+ gboolean use_crossfade)
{
GdkDisplay *display;
int n_screens;
@@ -93,7 +103,19 @@ draw_background (CsdBackgroundManager *m
gdk_screen_get_height (screen),
TRUE);
- gnome_bg_set_surface_as_root (screen, surface);
+ if (use_crossfade) {
+
+ if (manager->priv->fade != NULL) {
+ g_object_unref (manager->priv->fade);
+ }
+
+ manager->priv->fade = gnome_bg_set_surface_as_root_with_crossfade (screen, surface);
+ g_signal_connect_swapped (manager->priv->fade, "finished",
+ G_CALLBACK (on_crossfade_finished),
+ manager);
+ } else {
+ gnome_bg_set_surface_as_root (screen, surface);
+ }
cairo_surface_destroy (surface);
}
@@ -101,12 +123,11 @@ draw_background (CsdBackgroundManager *m
cinnamon_settings_profile_end (NULL);
}
-
static void
on_bg_transitioned (GnomeBG *bg,
CsdBackgroundManager *manager)
{
- draw_background (manager);
+ draw_background (manager, FALSE);
}
static gboolean
@@ -124,7 +145,7 @@ static void
on_screen_size_changed (GdkScreen *screen,
CsdBackgroundManager *manager)
{
- draw_background (manager);
+ draw_background (manager, FALSE);
}
static void
@@ -140,7 +161,7 @@ static void
on_bg_changed (GnomeBG *bg,
CsdBackgroundManager *manager)
{
- draw_background (manager);
+ draw_background (manager, TRUE);
}
static void
@@ -167,12 +188,11 @@ setup_bg (CsdBackgroundManager *manager)
manager->priv->settings);
}
-static gboolean
+static void
setup_bg_and_draw_background (CsdBackgroundManager *manager)
{
setup_bg (manager);
- draw_background (manager);
- return FALSE;
+ draw_background (manager, FALSE);
}
static void
@@ -183,14 +203,14 @@ on_dbus_appeared (GDBusConnection *conne
{
CsdBackgroundManager *manager = CSD_BACKGROUND_MANAGER (user_data);
- g_timeout_add(3000, (GSourceFunc) setup_bg_and_draw_background, manager);
+ setup_bg_and_draw_background (manager);
}
static void
draw_background_after_cinnamon_loads (CsdBackgroundManager *manager)
{
manager->priv->watch_id = g_bus_watch_name (G_BUS_TYPE_SESSION,
- "org.Nemo",
+ "org.Cinnamon",
0,
on_dbus_appeared,
NULL,