diff --git a/gnome-settings-daemon-2.25.1-drop-sample-cache.patch b/gnome-settings-daemon-2.25.1-drop-sample-cache.patch
new file mode 100644
index 0000000..d112845
--- /dev/null
+++ b/gnome-settings-daemon-2.25.1-drop-sample-cache.patch
@@ -0,0 +1,845 @@
+diff -up gnome-settings-daemon-2.25.1/configure.ac.drop-sample-cache gnome-settings-daemon-2.25.1/configure.ac
+--- gnome-settings-daemon-2.25.1/configure.ac.drop-sample-cache 2008-11-04 10:30:15.000000000 -0500
++++ gnome-settings-daemon-2.25.1/configure.ac 2008-11-12 23:12:36.000000000 -0500
+@@ -210,6 +210,30 @@ AC_SUBST(LIBGNOMEKBD_CFLAGS)
+ AC_SUBST(LIBGNOMEKBD_LIBS)
+
+ dnl ==============================================
++dnl PulseAudio section
++dnl ==============================================
++
++AC_ARG_ENABLE(pulse,
++ AC_HELP_STRING([--disable-pulse],
++ [turn off PulseAudio support]),
++ [case "${enableval}" in
++ yes) WANT_PULSE=yes ;;
++ no) WANT_PULSE=no ;;
++ *) AC_MSG_ERROR(bad value ${enableval} for --disable-pulse) ;;
++ esac],
++ [WANT_PULSE=yes]) dnl Default value
++
++if test x$WANT_PULSE = xyes ; then
++ PKG_CHECK_MODULES(PULSE, libpulse >= 0.9.11,
++ AC_DEFINE(HAVE_PULSE, 1, [Define if PULSE sound server should be used]),
++ AC_MSG_RESULT([disabled]))
++fi
++
++AC_SUBST(PULSE_CFLAGS)
++AC_SUBST(PULSE_LIBS)
++AC_SUBST(PULSE_LOCATION)
++
++dnl ==============================================
+ dnl GStreamer section
+ dnl ==============================================
+ GST_MAJORMINOR=auto
+@@ -399,6 +423,7 @@ plugins/media-keys/Makefile
+ plugins/media-keys/actions/Makefile
+ plugins/mouse/Makefile
+ plugins/screensaver/Makefile
++plugins/sound-sample-cache/Makefile
+ plugins/typing-break/Makefile
+ plugins/xrandr/Makefile
+ plugins/xrdb/Makefile
+diff -up gnome-settings-daemon-2.25.1/data/gnome-settings-daemon.schemas.in.drop-sample-cache gnome-settings-daemon-2.25.1/data/gnome-settings-daemon.schemas.in
+--- gnome-settings-daemon-2.25.1/data/gnome-settings-daemon.schemas.in.drop-sample-cache 2008-11-04 10:25:28.000000000 -0500
++++ gnome-settings-daemon-2.25.1/data/gnome-settings-daemon.schemas.in 2008-11-12 23:10:00.000000000 -0500
+@@ -233,6 +233,29 @@
+
+
+
++ /schemas/apps/gnome_settings_daemon/plugins/sound-sample-cache/active
++ /apps/gnome_settings_daemon/plugins/sound-sample-cache/active
++ gnome-settings-daemon
++ bool
++ TRUE
++
++ Enable sound sample cache plugin
++ Set to True to enable the plugin to manage sound sample caches.
++
++
++
++ /schemas/apps/gnome_settings_daemon/plugins/sound-sample-cache/priority
++ /apps/gnome_settings_daemon/plugins/sound-sample-cache/priority
++ gnome-settings-daemon
++ int
++ 5
++
++
++
++
++
++
++
+ /schemas/apps/gnome_settings_daemon/plugins/sound/active
+ /apps/gnome_settings_daemon/plugins/sound/active
+ gnome-settings-daemon
+diff -up gnome-settings-daemon-2.25.1/plugins/Makefile.am.drop-sample-cache gnome-settings-daemon-2.25.1/plugins/Makefile.am
+--- gnome-settings-daemon-2.25.1/plugins/Makefile.am.drop-sample-cache 2008-10-30 09:25:37.000000000 -0400
++++ gnome-settings-daemon-2.25.1/plugins/Makefile.am 2008-11-12 23:10:00.000000000 -0500
+@@ -17,4 +17,5 @@ SUBDIRS = \
+ xrandr \
+ xrdb \
+ xsettings \
++ sound-sample-cache \
+ $(NULL)
+diff -up /dev/null gnome-settings-daemon-2.25.1/plugins/sound-sample-cache/gsd-sound-sample-cache-manager.c
+--- /dev/null 2008-11-12 15:48:32.607088093 -0500
++++ gnome-settings-daemon-2.25.1/plugins/sound-sample-cache/gsd-sound-sample-cache-manager.c 2008-11-12 23:10:00.000000000 -0500
+@@ -0,0 +1,471 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
++ *
++ * Copyright (C) 2008 Lennart Poettering
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ */
++
++#include "config.h"
++
++#include
++#include
++#include
++#include
++#include
++#include
++#include
++
++#include
++
++#include
++#include
++#include
++#include
++
++#ifdef HAVE_PULSE
++#include
++#endif
++
++#include "gsd-sound-sample-cache-manager.h"
++#include "gnome-settings-profile.h"
++
++#define GSD_SOUND_SAMPLE_CACHE_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), GSD_TYPE_SOUND_SAMPLE_CACHE_MANAGER, GsdSoundSampleCacheManagerPrivate))
++
++struct GsdSoundSampleCacheManagerPrivate
++{
++ guint gconf_notify;
++ GList* monitors;
++ guint timeout;
++};
++
++#define GCONF_SOUND_DIR "/desktop/gnome/sound"
++
++static void gsd_sound_sample_cache_manager_class_init(GsdSoundSampleCacheManagerClass *klass);
++static void gsd_sound_sample_cache_manager_init(GsdSoundSampleCacheManager *sound_manager);
++static void gsd_sound_sample_cache_manager_finalize(GObject *object);
++
++G_DEFINE_TYPE(GsdSoundSampleCacheManager, gsd_sound_sample_cache_manager, G_TYPE_OBJECT)
++
++static gpointer manager_object = NULL;
++
++#ifdef HAVE_PULSE
++
++static void
++sample_info_cb(pa_context *c, const pa_sample_info *i, int eol, void *userdata)
++{
++ pa_operation *o;
++
++ if (!i)
++ return;
++
++ g_debug("Found sample %s.", i->name);
++
++ /* We only flush those samples which have an XDG sound name
++ * attached, because only those originate from themeing */
++ if (!(pa_proplist_gets(i->proplist, PA_PROP_EVENT_ID)))
++ return;
++
++ g_debug("Dropping sample %s from cache.", i->name);
++
++ if (!(o = pa_context_remove_sample(c, i->name, NULL, NULL))) {
++ g_debug("pa_context_remove_sample(): %s", pa_strerror(pa_context_errno(c)));
++ return;
++ }
++
++ pa_operation_unref(o);
++
++ /* We won't wait until the operation is actually executed to
++ * speed things up a bit.*/
++}
++
++static void
++flush_cache(void)
++{
++ pa_mainloop *ml = NULL;
++ pa_context *c = NULL;
++ pa_proplist *pl = NULL;
++ pa_operation *o = NULL;
++
++ g_debug("Flushing sample cache.");
++
++ if (!(ml = pa_mainloop_new())) {
++ g_debug("Failed to allocate pa_mainloop.");
++ goto fail;
++ }
++
++ if (!(pl = pa_proplist_new())) {
++ g_debug("Failed to allocate pa_proplist.");
++ goto fail;
++ }
++
++ pa_proplist_sets(pl, PA_PROP_APPLICATION_NAME, PACKAGE_NAME);
++ pa_proplist_sets(pl, PA_PROP_APPLICATION_VERSION, PACKAGE_VERSION);
++ pa_proplist_sets(pl, PA_PROP_APPLICATION_ID, "org.gnome.SettingsDaemon");
++
++ if (!(c = pa_context_new_with_proplist(pa_mainloop_get_api(ml), PACKAGE_NAME, pl))) {
++ g_debug("Failed to allocate pa_context.");
++ goto fail;
++ }
++
++ pa_proplist_free(pl);
++ pl = NULL;
++
++ if (pa_context_connect(c, NULL, PA_CONTEXT_NOAUTOSPAWN, NULL) < 0) {
++ g_debug("pa_context_connect(): %s", pa_strerror(pa_context_errno(c)));
++ goto fail;
++ }
++
++ /* Wait until the connection is established */
++ while (pa_context_get_state(c) != PA_CONTEXT_READY) {
++
++ if (!PA_CONTEXT_IS_GOOD(pa_context_get_state(c))) {
++ g_debug("Connection failed: %s", pa_strerror(pa_context_errno(c)));
++ goto fail;
++ }
++
++ if (pa_mainloop_iterate(ml, TRUE, NULL) < 0) {
++ g_debug("pa_mainloop_iterate() failed.");
++ goto fail;
++ }
++ }
++
++ /* Enumerate all cached samples */
++ if (!(o = pa_context_get_sample_info_list(c, sample_info_cb, NULL))) {
++ g_debug("pa_context_get_sample_info_list(): %s", pa_strerror(pa_context_errno(c)));
++ goto fail;
++ }
++
++ /* Wait until our operation is finished and there's nothing
++ * more queued to send to the server */
++ while (pa_operation_get_state(o) == PA_OPERATION_RUNNING || pa_context_is_pending(c)) {
++
++ if (!PA_CONTEXT_IS_GOOD(pa_context_get_state(c))) {
++ g_debug("Connection failed: %s", pa_strerror(pa_context_errno(c)));
++ goto fail;
++ }
++
++ if (pa_mainloop_iterate(ml, TRUE, NULL) < 0) {
++ g_debug("pa_mainloop_iterate() failed.");
++ goto fail;
++ }
++ }
++
++ g_debug("Sample cache flushed.");
++
++fail:
++ if (o) {
++ pa_operation_cancel(o);
++ pa_operation_unref(o);
++ }
++
++ if (c) {
++ pa_context_disconnect(c);
++ pa_context_unref(c);
++ }
++
++ if (pl)
++ pa_proplist_free(pl);
++
++ if (ml)
++ pa_mainloop_free(ml);
++}
++
++static gboolean
++flush_cb(GsdSoundSampleCacheManager *manager)
++{
++ flush_cache();
++ manager->priv->timeout = 0;
++ return FALSE;
++}
++
++static void
++trigger_flush(GsdSoundSampleCacheManager *manager)
++{
++
++ if (manager->priv->timeout)
++ g_source_remove(manager->priv->timeout);
++
++ /* We delay the flushing a bit so that we can coalesce
++ * multiple changes into a single cache flush */
++ manager->priv->timeout = g_timeout_add(500, (GSourceFunc) flush_cb, manager);
++}
++
++static void
++gconf_client_notify_cb(
++ GConfClient *client,
++ guint cnxn_id,
++ GConfEntry *entry,
++ GsdSoundSampleCacheManager *manager)
++{
++ g_debug("GConf dir changed");
++ trigger_flush(manager);
++}
++
++static gboolean
++register_config_callback(
++ GsdSoundSampleCacheManager *manager,
++ GError **error)
++{
++ GConfClient *client;
++
++ client = gconf_client_get_default();
++
++ gconf_client_add_dir(client, GCONF_SOUND_DIR, GCONF_CLIENT_PRELOAD_NONE, error);
++ g_return_val_if_fail(!error || !*error, FALSE);
++
++ manager->priv->gconf_notify = gconf_client_notify_add(client, GCONF_SOUND_DIR, (GConfClientNotifyFunc) gconf_client_notify_cb, manager, NULL, error);
++ g_return_val_if_fail(!error || !*error, FALSE);
++
++ g_object_unref(client);
++
++ return TRUE;
++}
++
++static void
++file_monitor_changed_cb(
++ GFileMonitor *monitor,
++ GFile *file,
++ GFile *other_file,
++ GFileMonitorEvent event,
++ GsdSoundSampleCacheManager *manager)
++{
++ g_debug("Theme dir changed");
++ trigger_flush(manager);
++}
++
++static gboolean
++register_directory_callback(
++ GsdSoundSampleCacheManager *manager,
++ const char *path,
++ GError **error)
++{
++
++ GFile *f;
++ GFileMonitor *m;
++
++ g_debug("registering directory monitor for %s", path);
++
++ f = g_file_new_for_path(path);
++ g_return_val_if_fail(f, FALSE);
++
++ m = g_file_monitor_directory(f, 0, NULL, error);
++ g_return_val_if_fail(m, FALSE);
++
++ g_signal_connect(m, "changed", G_CALLBACK(file_monitor_changed_cb), manager);
++
++ manager->priv->monitors = g_list_prepend(manager->priv->monitors, m);
++
++ g_object_unref(G_OBJECT(f));
++
++ return TRUE;
++}
++
++#endif
++
++gboolean
++gsd_sound_sample_cache_manager_start(
++ GsdSoundSampleCacheManager *manager,
++ GError **error)
++{
++
++#ifdef HAVE_PULSE
++ char *p, **ps, **k;
++ const char *env, *dd;
++#endif
++
++ g_debug("Starting sound sample cache manager");
++ gnome_settings_profile_start(NULL);
++
++#ifdef HAVE_PULSE
++
++ /* We listen for change of the selected theme ... */
++ register_config_callback(manager, NULL);
++
++ /* ... and we listen to changes of the theme base directories
++ * in $HOME ...*/
++
++ if ((env = g_getenv("XDG_DATA_HOME")) && *env == '/')
++ p = g_build_filename(env, "sounds", NULL);
++ else if (((env = g_getenv("HOME")) && *env == '/') || (env = g_get_home_dir()))
++ p = g_build_filename(env, ".local", "share", "sounds", NULL);
++ else
++ p = NULL;
++
++ if (p) {
++ register_directory_callback(manager, p, NULL);
++ g_free(p);
++ }
++
++ /* ... and globally. */
++ if (!(dd = g_getenv("XDG_DATA_DIRS")) || *dd == 0)
++ dd = "/usr/local/share:/usr/share";
++
++ ps = g_strsplit(dd, ":", 0);
++
++ for (k = ps; *k; k++)
++ register_directory_callback(manager, *k, NULL);
++
++ g_strfreev(ps);
++#endif
++
++ return TRUE;
++}
++
++void
++gsd_sound_sample_cache_manager_stop(
++ GsdSoundSampleCacheManager *manager)
++{
++ g_debug("Stopping sound sample cache manager");
++
++#ifdef HAVE_PULSE
++ if (manager->priv->gconf_notify != 0) {
++ GConfClient *client = gconf_client_get_default();
++
++ gconf_client_remove_dir(client, GCONF_SOUND_DIR, NULL);
++
++ gconf_client_notify_remove(client, manager->priv->gconf_notify);
++ manager->priv->gconf_notify = 0;
++
++ g_object_unref(client);
++ }
++
++ if (manager->priv->timeout) {
++ g_source_remove(manager->priv->timeout);
++ manager->priv->timeout = 0;
++ }
++
++ while (manager->priv->monitors) {
++ g_file_monitor_cancel(G_FILE_MONITOR(manager->priv->monitors->data));
++ g_object_unref(G_OBJECT(manager->priv->monitors->data));
++ manager->priv->monitors = g_list_delete_link(manager->priv->monitors, manager->priv->monitors);
++ }
++#endif
++}
++
++static void
++gsd_sound_sample_cache_manager_set_property(
++ GObject *object,
++ guint prop_id,
++ const GValue *value,
++ GParamSpec *pspec)
++{
++ GsdSoundSampleCacheManager *self;
++
++ self = GSD_SOUND_SAMPLE_CACHE_MANAGER(object);
++
++ switch (prop_id) {
++ default:
++ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
++ break;
++ }
++}
++
++static void
++gsd_sound_sample_cache_manager_get_property(
++ GObject *object,
++ guint prop_id,
++ GValue *value,
++ GParamSpec *pspec)
++{
++ GsdSoundSampleCacheManager *self;
++
++ self = GSD_SOUND_SAMPLE_CACHE_MANAGER(object);
++
++ switch (prop_id) {
++ default:
++ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
++ break;
++ }
++}
++
++static GObject *
++gsd_sound_sample_cache_manager_constructor(
++ GType type,
++ guint n_construct_properties,
++ GObjectConstructParam *construct_properties)
++{
++ GsdSoundSampleCacheManager *m;
++ GsdSoundSampleCacheManagerClass *klass;
++
++ klass = GSD_SOUND_SAMPLE_CACHE_MANAGER_CLASS(g_type_class_peek(GSD_TYPE_SOUND_SAMPLE_CACHE_MANAGER));
++
++ m = GSD_SOUND_SAMPLE_CACHE_MANAGER(G_OBJECT_CLASS(gsd_sound_sample_cache_manager_parent_class)->constructor(
++ type,
++ n_construct_properties,
++ construct_properties));
++
++ return G_OBJECT(m);
++}
++
++static void
++gsd_sound_sample_cache_manager_dispose(GObject *object)
++{
++ GsdSoundSampleCacheManager *manager;
++
++ manager = GSD_SOUND_SAMPLE_CACHE_MANAGER(object);
++
++ gsd_sound_sample_cache_manager_stop(manager);
++
++ G_OBJECT_CLASS(gsd_sound_sample_cache_manager_parent_class)->dispose(object);
++}
++
++static void
++gsd_sound_sample_cache_manager_class_init(GsdSoundSampleCacheManagerClass *klass)
++{
++ GObjectClass *object_class = G_OBJECT_CLASS(klass);
++
++ object_class->get_property = gsd_sound_sample_cache_manager_get_property;
++ object_class->set_property = gsd_sound_sample_cache_manager_set_property;
++ object_class->constructor = gsd_sound_sample_cache_manager_constructor;
++ object_class->dispose = gsd_sound_sample_cache_manager_dispose;
++ object_class->finalize = gsd_sound_sample_cache_manager_finalize;
++
++ g_type_class_add_private(klass, sizeof(GsdSoundSampleCacheManagerPrivate));
++}
++
++static void
++gsd_sound_sample_cache_manager_init(GsdSoundSampleCacheManager *manager)
++{
++ manager->priv = GSD_SOUND_SAMPLE_CACHE_MANAGER_GET_PRIVATE(manager);
++}
++
++static void
++gsd_sound_sample_cache_manager_finalize(GObject *object)
++{
++ GsdSoundSampleCacheManager *sound_sample_cache_manager;
++
++ g_return_if_fail(object != NULL);
++ g_return_if_fail(GSD_IS_SOUND_SAMPLE_CACHE_MANAGER(object));
++
++ sound_sample_cache_manager = GSD_SOUND_SAMPLE_CACHE_MANAGER(object);
++
++ g_return_if_fail(sound_sample_cache_manager->priv);
++
++ G_OBJECT_CLASS(gsd_sound_sample_cache_manager_parent_class)->finalize(object);
++}
++
++GsdSoundSampleCacheManager *
++gsd_sound_sample_cache_manager_new(void)
++{
++ if (manager_object) {
++ g_object_ref(manager_object);
++ } else {
++ manager_object = g_object_new(GSD_TYPE_SOUND_SAMPLE_CACHE_MANAGER, NULL);
++ g_object_add_weak_pointer(manager_object, (gpointer *) &manager_object);
++ }
++
++ return GSD_SOUND_SAMPLE_CACHE_MANAGER(manager_object);
++}
+diff -up /dev/null gnome-settings-daemon-2.25.1/plugins/sound-sample-cache/gsd-sound-sample-cache-manager.h
+--- /dev/null 2008-11-12 15:48:32.607088093 -0500
++++ gnome-settings-daemon-2.25.1/plugins/sound-sample-cache/gsd-sound-sample-cache-manager.h 2008-11-12 23:10:00.000000000 -0500
+@@ -0,0 +1,57 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
++ *
++ * Copyright (C) 2008 Lennart Poettering
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ */
++
++#ifndef __GSD_SOUND_SAMPLE_CACHE_MANAGER_H
++#define __GSD_SOUND_SAMPLE_CACHE_MANAGER_H
++
++#include
++#include
++
++G_BEGIN_DECLS
++
++#define GSD_TYPE_SOUND_SAMPLE_CACHE_MANAGER (gsd_sound_sample_cache_manager_get_type())
++#define GSD_SOUND_SAMPLE_CACHE_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST((o), GSD_TYPE_SOUND_SAMPLE_CACHE_MANAGER, GsdSoundSampleCacheManager))
++#define GSD_SOUND_SAMPLE_CACHE_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GSD_TYPE_SOUND_SAMPLE_CACHE_MANAGER, GsdSoundSampleCacheManagerClass))
++#define GSD_IS_SOUND_SAMPLE_CACHE_MANAGER(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), GSD_TYPE_SOUND_SAMPLE_CACHE_MANAGER))
++#define GSD_IS_SOUND_SAMPLE_CACHE_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE((k), GSD_TYPE_SOUND_SAMPLE_CACHE_MANAGER))
++#define GSD_SOUND_SAMPLE_CACHE_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), GSD_TYPE_SOUND_SAMPLE_CACHE_MANAGER, GsdSoundSampleCacheManagerClass))
++
++typedef struct GsdSoundSampleCacheManagerPrivate GsdSoundSampleCacheManagerPrivate;
++
++typedef struct
++{
++ GObject parent;
++ GsdSoundSampleCacheManagerPrivate *priv;
++} GsdSoundSampleCacheManager;
++
++typedef struct
++{
++ GObjectClass parent_class;
++} GsdSoundSampleCacheManagerClass;
++
++GType gsd_sound_sample_cache_manager_get_type(void) G_GNUC_CONST;
++
++GsdSoundSampleCacheManager *gsd_sound_sample_cache_manager_new(void);
++gboolean gsd_sound_sample_cache_manager_start(GsdSoundSampleCacheManager *manager, GError **error);
++void gsd_sound_sample_cache_manager_stop(GsdSoundSampleCacheManager *manager);
++
++G_END_DECLS
++
++#endif /* __GSD_SOUND_SAMPLE_CACHE_MANAGER_H */
+diff -up /dev/null gnome-settings-daemon-2.25.1/plugins/sound-sample-cache/gsd-sound-sample-cache-plugin.c
+--- /dev/null 2008-11-12 15:48:32.607088093 -0500
++++ gnome-settings-daemon-2.25.1/plugins/sound-sample-cache/gsd-sound-sample-cache-plugin.c 2008-11-12 23:10:00.000000000 -0500
+@@ -0,0 +1,100 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
++ *
++ * Copyright (C) 2008 Lennart Poettering
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2, or (at your option)
++ * any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ */
++
++#include "config.h"
++
++#include
++#include
++
++#include "gnome-settings-plugin.h"
++#include "gsd-sound-sample-cache-plugin.h"
++#include "gsd-sound-sample-cache-manager.h"
++
++struct GsdSoundSampleCachePluginPrivate {
++ GsdSoundSampleCacheManager *manager;
++};
++
++#define GSD_SOUND_SAMPLE_CACHE_PLUGIN_GET_PRIVATE(object) (G_TYPE_INSTANCE_GET_PRIVATE((object), GSD_TYPE_SOUND_SAMPLE_CACHE_PLUGIN, GsdSoundSampleCachePluginPrivate))
++
++GNOME_SETTINGS_PLUGIN_REGISTER(GsdSoundSampleCachePlugin, gsd_sound_sample_cache_plugin)
++
++static void
++gsd_sound_sample_cache_plugin_init(GsdSoundSampleCachePlugin *plugin)
++{
++ plugin->priv = GSD_SOUND_SAMPLE_CACHE_PLUGIN_GET_PRIVATE(plugin);
++
++ g_debug("GsdSoundSampleCachePlugin initializing");
++
++ plugin->priv->manager = gsd_sound_sample_cache_manager_new();
++}
++
++static void
++gsd_sound_sample_cache_plugin_finalize(GObject *object)
++{
++ GsdSoundSampleCachePlugin *plugin;
++
++ g_return_if_fail(object != NULL);
++ g_return_if_fail(GSD_IS_SOUND_SAMPLE_CACHE_PLUGIN(object));
++
++ g_debug("GsdSoundSampleCachePlugin finalizing");
++
++ plugin = GSD_SOUND_SAMPLE_CACHE_PLUGIN(object);
++
++ g_return_if_fail(plugin->priv != NULL);
++
++ if (plugin->priv->manager != NULL)
++ g_object_unref(plugin->priv->manager);
++
++ G_OBJECT_CLASS(gsd_sound_sample_cache_plugin_parent_class)->finalize(object);
++}
++
++static void
++impl_activate(GnomeSettingsPlugin *plugin)
++{
++ GError *error = NULL;
++
++ g_debug("Activating sound_sample_cache plugin");
++
++ if (!gsd_sound_sample_cache_manager_start(GSD_SOUND_SAMPLE_CACHE_PLUGIN(plugin)->priv->manager, &error)) {
++ g_warning("Unable to start sound sample cache manager: %s", error->message);
++ g_error_free(error);
++ }
++}
++
++static void
++impl_deactivate(GnomeSettingsPlugin *plugin)
++{
++ g_debug("Deactivating sound sample cache plugin");
++ gsd_sound_sample_cache_manager_stop(GSD_SOUND_SAMPLE_CACHE_PLUGIN(plugin)->priv->manager);
++}
++
++static void
++gsd_sound_sample_cache_plugin_class_init(GsdSoundSampleCachePluginClass *klass)
++{
++ GObjectClass *object_class = G_OBJECT_CLASS(klass);
++ GnomeSettingsPluginClass *plugin_class = GNOME_SETTINGS_PLUGIN_CLASS(klass);
++
++ object_class->finalize = gsd_sound_sample_cache_plugin_finalize;
++
++ plugin_class->activate = impl_activate;
++ plugin_class->deactivate = impl_deactivate;
++
++ g_type_class_add_private(klass, sizeof(GsdSoundSampleCachePluginPrivate));
++}
+diff -up /dev/null gnome-settings-daemon-2.25.1/plugins/sound-sample-cache/gsd-sound-sample-cache-plugin.h
+--- /dev/null 2008-11-12 15:48:32.607088093 -0500
++++ gnome-settings-daemon-2.25.1/plugins/sound-sample-cache/gsd-sound-sample-cache-plugin.h 2008-11-12 23:10:00.000000000 -0500
+@@ -0,0 +1,59 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
++ *
++ * Copyright (C) 2008 Lennart Poettering
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2, or (at your option)
++ * any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ */
++
++#ifndef __GSD_SOUND_SAMPLE_CACHE_PLUGIN_H__
++#define __GSD_SOUND_SAMPLE_CACHE_PLUGIN_H__
++
++#include
++#include
++#include
++
++#include "gnome-settings-plugin.h"
++
++G_BEGIN_DECLS
++
++#define GSD_TYPE_SOUND_SAMPLE_CACHE_PLUGIN (gsd_sound_sample_cache_plugin_get_type())
++#define GSD_SOUND_SAMPLE_CACHE_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_CAST((o), GSD_TYPE_SOUND_SAMPLE_CACHE_PLUGIN, GsdSoundSampleCachePlugin))
++#define GSD_SOUND_SAMPLE_CACHE_PLUGIN_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GSD_TYPE_SOUND_SAMPLE_CACHE_PLUGIN, GsdSoundSampleCachePluginClass))
++#define GSD_IS_SOUND_SAMPLE_CACHE_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), GSD_TYPE_SOUND_SAMPLE_CACHE_PLUGIN))
++#define GSD_IS_SOUND_SAMPLE_CACHE_PLUGIN_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE((k), GSD_TYPE_SOUND_SAMPLE_CACHE_PLUGIN))
++#define GSD_SOUND_SAMPLE_CACHE_PLUGIN_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), GSD_TYPE_SOUND_SAMPLE_CACHE_PLUGIN, GsdSoundSampleCachePluginClass))
++
++typedef struct GsdSoundSampleCachePluginPrivate GsdSoundSampleCachePluginPrivate;
++
++typedef struct
++{
++ GnomeSettingsPlugin parent;
++ GsdSoundSampleCachePluginPrivate *priv;
++} GsdSoundSampleCachePlugin;
++
++typedef struct
++{
++ GnomeSettingsPluginClass parent_class;
++} GsdSoundSampleCachePluginClass;
++
++GType gsd_sound_sample_cache_plugin_get_type(void) G_GNUC_CONST;
++
++/* All the plugins must implement this function */
++G_MODULE_EXPORT GType register_gnome_settings_plugin(GTypeModule *module);
++
++G_END_DECLS
++
++#endif /* __GSD_SOUND_SAMPLE_CACHE_PLUGIN_H__ */
+diff -up /dev/null gnome-settings-daemon-2.25.1/plugins/sound-sample-cache/Makefile.am
+--- /dev/null 2008-11-12 15:48:32.607088093 -0500
++++ gnome-settings-daemon-2.25.1/plugins/sound-sample-cache/Makefile.am 2008-11-12 23:10:00.000000000 -0500
+@@ -0,0 +1,42 @@
++plugin_LTLIBRARIES = \
++ libsound-sample-cache.la
++
++libsound_sample_cache_la_SOURCES = \
++ gsd-sound-sample-cache-plugin.h \
++ gsd-sound-sample-cache-plugin.c \
++ gsd-sound-sample-cache-manager.h \
++ gsd-sound-sample-cache-manager.c
++
++libsound_sample_cache_la_CPPFLAGS = \
++ -I$(top_srcdir)/gnome-settings-daemon \
++ -DGNOME_SETTINGS_LOCALEDIR=\""$(datadir)/locale"\" \
++ $(AM_CPPFLAGS)
++
++libsound_sample_cache_la_CFLAGS = \
++ $(SETTINGS_PLUGIN_CFLAGS) \
++ $(GNOME_CFLAGS) \
++ $(PULSE_CFLAGS) \
++ $(AM_CFLAGS)
++
++libsound_sample_cache_la_LDFLAGS = \
++ $(GSD_PLUGIN_LDFLAGS)
++
++libsound_sample_cache_la_LIBADD = \
++ $(SETTINGS_PLUGIN_LIBS) \
++ $(PULSE_LIBS)
++
++plugin_in_files = \
++ sound-sample-cache.gnome-settings-plugin.in
++
++plugin_DATA = $(plugin_in_files:.gnome-settings-plugin.in=.gnome-settings-plugin)
++
++EXTRA_DIST = \
++ $(plugin_in_files)
++
++CLEANFILES = \
++ $(plugin_DATA)
++
++DISTCLEANFILES = \
++ $(plugin_DATA)
++
++@GSD_INTLTOOL_PLUGIN_RULE@
+diff -up /dev/null gnome-settings-daemon-2.25.1/plugins/sound-sample-cache/sound-sample-cache.gnome-settings-plugin.in
+--- /dev/null 2008-11-12 15:48:32.607088093 -0500
++++ gnome-settings-daemon-2.25.1/plugins/sound-sample-cache/sound-sample-cache.gnome-settings-plugin.in 2008-11-12 23:10:00.000000000 -0500
+@@ -0,0 +1,8 @@
++[GNOME Settings Plugin]
++Module=sound-sample-cache
++IAge=0
++_Name=Sound Sample Cache
++_Description=Sound Sample Cache plugin
++Authors=Lennart Poettering
++Copyright=Copyright © 2008
++Website=
diff --git a/gnome-settings-daemon.spec b/gnome-settings-daemon.spec
index 219c091..63a2dc0 100644
--- a/gnome-settings-daemon.spec
+++ b/gnome-settings-daemon.spec
@@ -1,6 +1,6 @@
Name: gnome-settings-daemon
Version: 2.25.1
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: The daemon sharing settings from GNOME to GTK+/KDE applications
Group: System Environment/Daemons
@@ -32,18 +32,13 @@ BuildRequires: perl(XML::Parser)
BuildRequires: autoconf, automake, libtool, intltool
BuildRequires: fontconfig-devel
-Patch6: gnome-settings-daemon-2.23.4-drop-sample-cache.patch
+# http://bugzilla.gnome.org/show_bug.cgi?id=545386
+Patch6: gnome-settings-daemon-2.25.1-drop-sample-cache.patch
Patch7: gnome-settings-daemon-2.23.91-fnf7-cycle.patch
# http://bugzilla.gnome.org/show_bug.cgi?id=552857
Patch8: gnome-settings-daemon-2.24.0-fade.patch
-# http://bugzilla.gnome.org/show_bug.cgi?id=555873
-Patch9: fix-gdm-layout.patch
-
-# http://bugzilla.gnome.org/show_bug.cgi?id=556307
-Patch10: power-button.patch
-
%description
A daemon to share settings from GNOME to other applications. It also
handles global keybindings, as well as a number of desktop-wide settings.
@@ -65,8 +60,6 @@ developing applications that use %{name}.
%patch6 -p1 -b .drop-sample-cache
%patch7 -p1 -b .fnf7-cycle
%patch8 -p1 -b .fade
-%patch9 -p1 -b .fix-gdm-layout
-%patch10 -p1 -b .power-button
%build
aclocal
@@ -169,7 +162,7 @@ fi
%{_libdir}/pkgconfig/gnome-settings-daemon.pc
%changelog
-* Wed Nov 12 2008 Matthias Clasen - 2.25.1-1
+* Wed Nov 12 2008 Matthias Clasen - 2.25.1-2
- Update to 2.25.1
* Fri Oct 24 2008 Ray Strode - 2.24.0-14