Index: configure.in
===================================================================
--- configure.in	(revision 8779)
+++ configure.in	(working copy)
@@ -294,30 +294,6 @@
 AM_GCONF_SOURCE_2
 
 dnl ==============================================
-dnl Esd section
-dnl ==============================================
-have_esd=no
-AC_ARG_ENABLE(esd,
-  AC_HELP_STRING([--disable-esd],
-                 [turn off ESD audio support]),
-       [case "${enableval}" in
-               yes) WANT_ESD=yes ;;
-               no)  WANT_ESD=no ;;
-               *) AC_MSG_ERROR(bad value ${enableval} for --disable-esd) ;;
-       esac],
-       [WANT_ESD=yes]) dnl Default value
-
-if test x$WANT_ESD = xyes ; then
-       PKG_CHECK_MODULES(ESD, esound >= 0.2.28,
-               have_esd=yes
-	       AC_DEFINE(HAVE_ESD, 1, [Define if ESD sound server should be used]),
-               AC_MSG_RESULT([disabled]))
-fi
-
-AC_SUBST(ESD_CFLAGS)
-AC_SUBST(ESD_LIBS)
-
-dnl ==============================================
 dnl GStreamer section
 dnl ==============================================
 GST_MAJORMINOR=auto
@@ -352,7 +328,13 @@
 AC_SUBST(GST_LIBS)
 AC_SUBST(GST_CFLAGS)
 
-if test "x$have_gstreamer" = "xyes"; then
+dnl ==============================================
+dnl sound capplet section
+dnl ==============================================
+
+PKG_CHECK_MODULES(CANBERRA, libcanberra-gtk, have_canberra=yes, AC_MSG_RESULT([no]))
+
+if test "x$have_gstreamer" = "xyes" && test "x$have_canberra" = "xyes" ; then
   SOUND_CAPPLET_LIBS="$ESD_LIBS $GST_LIBS -lgstaudio-0.10 -lgstinterfaces-0.10"
   SOUND_CAPPLET_CFLAGS="$ESD_CFLAGS $GST_CFLAGS"
   AC_SUBST(SOUND_CAPPLET_LIBS)
@@ -361,6 +343,7 @@
   AC_MSG_NOTICE([*** Sound capplet will not be built]);
 fi
 
+
 dnl ==============================================
 dnl Define the main variables
 dnl ==============================================
@@ -428,7 +411,6 @@
 help/Makefile
 libslab/Makefile
 libslab/libslab.pc
-libsounds/Makefile
 libwindow-settings/Makefile
 libwindow-settings/gnome-window-settings-2.0.pc
 po/Makefile.in
Index: Makefile.am
===================================================================
--- Makefile.am	(revision 8779)
+++ Makefile.am	(working copy)
@@ -1,4 +1,4 @@
-SUBDIRS = po libsounds libwindow-settings libslab capplets shell help vfs-methods $(TYPING_BREAK)
+SUBDIRS = po libwindow-settings libslab capplets shell help vfs-methods $(TYPING_BREAK)
 
 ACLOCAL_AMFLAGS = -I m4
 
Index: capplets/sound/Makefile.am
===================================================================
--- capplets/sound/Makefile.am	(revision 8779)
+++ capplets/sound/Makefile.am	(working copy)
@@ -4,15 +4,14 @@
 bin_PROGRAMS = gnome-sound-properties
 
 gnome_sound_properties_LDADD = \
-	$(top_builddir)/libsounds/libsounds.la \
 	$(GNOMECC_CAPPLETS_LIBS) \
-	$(SOUND_CAPPLET_LIBS) \
+	$(CANBERRA_LIBS) $(SOUND_CAPPLET_LIBS) \
 	$(HAL_LIBS)
-gnome_sound_properties_SOURCES = sound-properties-capplet.c pipeline-tests.h pipeline-tests.c mixer-support.h mixer-support.c
+gnome_sound_properties_SOURCES = sound-properties-capplet.c pipeline-tests.h pipeline-tests.c mixer-support.h mixer-support.c sound-theme.c sound-theme.h
 
 INCLUDES = \
 	$(GNOMECC_CAPPLETS_CFLAGS) \
-	$(SOUND_CAPPLET_CFLAGS) \
+	$(CANBERRA_CFLAGS) $(SOUND_CAPPLET_CFLAGS) \
 	$(HAL_CFLAGS) \
 	-DGNOMELOCALEDIR="\"$(datadir)/locale\"" \
 	-DGNOMECC_DATA_DIR="\"$(pkgdatadir)\"" \
Index: capplets/sound/sound-properties-capplet.c
===================================================================
--- capplets/sound/sound-properties-capplet.c	(revision 8779)
+++ capplets/sound/sound-properties-capplet.c	(working copy)
@@ -35,7 +35,6 @@
 
 #include "capplet-util.h"
 #include "gconf-property-editor.h"
-#include "libsounds/sound-view.h"
 
 #include <glade/glade.h>
 
@@ -53,8 +52,8 @@
 
 #include "activate-settings-daemon.h"
 #include "pipeline-tests.h"
-
 #include "mixer-support.h"
+#include "sound-theme.h"
 
 typedef enum {
 	AUDIO_PLAYBACK,
@@ -72,8 +71,8 @@
 	const gchar *test_pipeline;
 } DeviceChooser;
 
-#define ENABLE_ESD_KEY             "/desktop/gnome/sound/enable_esd"
 #define EVENT_SOUNDS_KEY           "/desktop/gnome/sound/event_sounds"
+#define INPUT_SOUNDS_KEY           "/desktop/gnome/sound/input_feedback_sounds"
 #define DEFAULT_MIXER_DEVICE_KEY   "/desktop/gnome/sound/default_mixer_device"
 #define DEFAULT_MIXER_TRACKS_KEY   "/desktop/gnome/sound/default_mixer_tracks"
 #define VISUAL_BELL_KEY            "/apps/metacity/general/visual_bell"
@@ -88,7 +87,6 @@
 
 /* Capplet-specific prototypes */
 
-static SoundProperties *props = NULL;
 static GConfClient     *gconf_client = NULL;
 static GtkWidget       *dialog_win = NULL;
 static GList           *device_choosers = NULL;
@@ -111,14 +109,6 @@
 	return have_xkb;
 }
 
-static void
-props_changed_cb (SoundProperties *p, SoundEvent *event, gpointer data)
-{
-	sound_properties_user_save (p);
-}
-
-
-
 static GConfEnumStringPair bell_flash_enums[] = {
 	{ 0, "frame_flash" },
 	{ 1, "fullscreen" },
@@ -161,26 +151,15 @@
 create_dialog (void)
 {
 	GladeXML *dialog;
-	GtkWidget *widget, *box, *view, *image;
+	GtkWidget *image;
 
-	dialog = glade_xml_new (GNOMECC_GLADE_DIR "/sound-properties.glade", "sound_prefs_dialog", NULL);
-	if (dialog == NULL)
-	  return NULL;
+	dialog = glade_xml_new ("sound-properties.glade", "sound_prefs_dialog", NULL);
+	if (dialog == NULL) {
+		dialog = glade_xml_new (GNOMECC_GLADE_DIR "/sound-properties.glade", "sound_prefs_dialog", NULL);
+		if (dialog == NULL)
+			return NULL;
+	}
 
-	widget = glade_xml_get_widget (dialog, "sound_prefs_dialog");
-
-	props = sound_properties_new ();
-	sound_properties_add_defaults (props, NULL);
-	g_signal_connect (G_OBJECT (props), "event_changed",
-			  (GCallback) props_changed_cb, NULL);
-	view = sound_view_new (props);
-	box = glade_xml_get_widget (dialog, "events_vbox");
-	gtk_box_pack_start (GTK_BOX (box), view, TRUE, TRUE, 0);
-	gtk_widget_show_all (view);
-
-	g_signal_connect_swapped (G_OBJECT (widget), "destroy",
-				  (GCallback) gtk_object_destroy, props);
-
 	gtk_image_set_from_file (GTK_IMAGE (WID ("bell_image")),
 				 GNOMECC_DATA_DIR "/pixmaps/visual-bell.png");
 
@@ -1082,15 +1061,14 @@
 			      WID ("chat_audio_capture_test"),
 			      "gconfaudiosrc" AUDIO_TEST_IN_BETWEEN "gconfaudiosink profile=chat");
 
-#ifdef HAVE_ESD
-	peditor = gconf_peditor_new_boolean (NULL, ENABLE_ESD_KEY, WID ("enable_toggle"), NULL);
-	gconf_peditor_widget_set_guard (GCONF_PROPERTY_EDITOR (peditor), WID ("events_toggle"));
-	gconf_peditor_widget_set_guard (GCONF_PROPERTY_EDITOR (peditor), WID ("events_vbox"));
-#else
-	gtk_widget_hide (WID ("enable_toggle"));
-#endif
-	gconf_peditor_new_boolean (NULL, EVENT_SOUNDS_KEY, WID ("events_toggle"), NULL);
+	peditor = gconf_peditor_new_boolean (NULL, EVENT_SOUNDS_KEY, WID ("events_toggle"), NULL);
+	gconf_peditor_widget_set_guard (GCONF_PROPERTY_EDITOR (peditor), WID ("input_feedback_toggle"));
+	gconf_peditor_widget_set_guard (GCONF_PROPERTY_EDITOR (peditor), WID ("sound_theme_combobox"));
+	gconf_peditor_widget_set_guard (GCONF_PROPERTY_EDITOR (peditor), WID ("sounds_treeview"));
+	gconf_peditor_new_boolean (NULL, INPUT_SOUNDS_KEY, WID ("input_feedback_toggle"), NULL);
 
+	//FIXME
+#if 0
 	gconf_peditor_new_boolean (NULL, AUDIO_BELL_KEY, WID ("bell_audible_toggle"), NULL);
 
 	peditor = gconf_peditor_new_boolean (NULL, VISUAL_BELL_KEY, WID ("bell_visual_toggle"), NULL);
@@ -1103,8 +1081,9 @@
 					"conv-to-widget-cb", bell_flash_to_widget,
 					"conv-from-widget-cb", bell_flash_from_widget,
 					NULL);
-
+#endif
 	setup_default_mixer (dialog);
+	setup_sound_theme (dialog);
 }
 
 /* get_legacy_settings
@@ -1123,7 +1102,6 @@
 	gboolean val_bool, def;
 
 	client = gconf_client_get_default ();
-	COPY_FROM_LEGACY (bool, "/desktop/gnome/sound/enable_esd", "/sound/system/settings/start_esd=false");
 	COPY_FROM_LEGACY (bool, "/desktop/gnome/sound/event_sounds", "/sound/system/settings/event_sounds=false");
 	g_object_unref (G_OBJECT (client));
 }
Index: capplets/sound/sound-theme.c
===================================================================
--- capplets/sound/sound-theme.c	(revision 0)
+++ capplets/sound/sound-theme.c	(revision 0)
@@ -0,0 +1,250 @@
+/* -*- mode: c; style: linux -*- */
+/* -*- c-basic-offset: 2 -*- */
+
+/* sound-theme.c
+ * Copyright (C) 2008 Bastien Nocera <hadess@hadess.net>
+ *
+ * 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 <gtk/gtk.h>
+#include <glade/glade.h>
+#include <gconf/gconf-client.h>
+
+#include "capplet-util.h"
+
+#define SOUND_THEME_KEY "/desktop/gnome/sound/theme_name"
+
+enum {
+	DISPLAY_COL,
+	IDENTIFIER_COL,
+	NUM_COLS
+};
+
+static void set_combox_for_theme_name (GladeXML *dialog, const char *name);
+
+static void
+theme_changed_cb (GConfClient *client,
+		  guint cnxn_id,
+		  GConfEntry *entry,
+		  GladeXML *dialog)
+{
+	char *theme_name;
+
+	theme_name = gconf_client_get_string (client, SOUND_THEME_KEY, NULL);
+	set_combox_for_theme_name (dialog, theme_name);
+}
+
+static void
+add_theme_to_store (const char *key,
+		    const char *value,
+		    GtkListStore *store)
+{
+	gtk_list_store_insert_with_values (store, NULL, G_MAXINT,
+					   DISPLAY_COL, value,
+					   IDENTIFIER_COL, key,
+					   -1);
+}
+
+static char *
+load_index_theme_name (const char *index)
+{
+	GKeyFile *file;
+	char *indexname;
+
+	file = g_key_file_new ();
+	if (g_key_file_load_from_file (file, index, G_KEY_FILE_KEEP_TRANSLATIONS, NULL) == FALSE) {
+		g_key_file_free (file);
+		return NULL;
+	}
+	indexname = g_key_file_get_locale_string (file,
+						  "Sound Theme",
+						  "Name",
+						  NULL,
+						  NULL);
+	g_key_file_free (file);
+	return indexname;
+}
+
+static void
+sound_theme_in_dir (GHashTable *hash, const char *dir)
+{
+	GDir *d;
+	const char *name;
+
+	d = g_dir_open (dir, 0, NULL);
+	if (d == NULL)
+		return;
+	while ((name = g_dir_read_name (d)) != NULL) {
+		char *dirname, *index, *indexname;
+
+		/* Look for directories */
+		dirname = g_build_filename (dir, name, NULL);
+		if (g_file_test (dirname, G_FILE_TEST_IS_DIR) == FALSE) {
+			g_free (dirname);
+			continue;
+		}
+
+		/* Look for index files */
+		index = g_build_filename (dirname, "index.theme", NULL);
+		g_free (dirname);
+
+		/* Check the name of the theme in the index.theme file */
+		indexname = load_index_theme_name (index);
+		g_free (index);
+		if (indexname == NULL)
+			continue;
+
+		g_hash_table_insert (hash, g_strdup (name), indexname);
+	}
+
+	g_dir_close (d);
+}
+
+static void
+set_combox_for_theme_name (GladeXML *dialog, const char *name)
+{
+	GtkTreeIter iter;
+	GtkTreeModel *model;
+	gboolean found;
+
+	g_message ("setting theme %s", name);
+
+	/* If the name is empty, use "freedesktop" */
+	if (name == NULL || *name == '\0')
+		name = "freedesktop";
+
+	found = FALSE;
+	model = gtk_combo_box_get_model (GTK_COMBO_BOX (WID ("sound_theme_combobox")));
+
+	if (gtk_tree_model_get_iter_first (model, &iter) == FALSE) {
+		return;
+	}
+
+	while (1) {
+		char *value;
+
+		gtk_tree_model_get (model, &iter, IDENTIFIER_COL, &value, -1);
+		if (value != NULL && strcmp (value, name) == 0) {
+			g_free (value);
+			found = TRUE;
+			break;
+		}
+		if (gtk_tree_model_iter_next (model, &iter) == FALSE)
+			break;
+	}
+
+	/* When we can't find the theme we need to set, try to set the default
+	 * one "freedesktop" */
+	if (found == FALSE && strcmp (name, "freedesktop") != 0) {
+		g_message ("not found, falling back to fdo");
+		set_combox_for_theme_name (dialog, "freedesktop");
+	}
+	else if (found != FALSE)
+		gtk_combo_box_set_active_iter (GTK_COMBO_BOX (WID ("sound_theme_combobox")), &iter);
+}
+
+static void
+theme_combobox_changed (GtkComboBox *widget,
+			GladeXML *dialog)
+{
+	GtkTreeIter iter;
+	GtkTreeModel *model;
+	GConfClient *client;
+	char *theme_name;
+
+	if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (WID ("sound_theme_combobox")), &iter) == FALSE)
+		return;
+
+	model = gtk_combo_box_get_model (GTK_COMBO_BOX (WID ("sound_theme_combobox")));
+	gtk_tree_model_get (model, &iter, IDENTIFIER_COL, &theme_name, -1);
+
+	client = gconf_client_get_default ();
+	gconf_client_set_string (client, SOUND_THEME_KEY, theme_name, NULL);
+	g_object_unref (G_OBJECT (client));
+}
+
+void
+setup_sound_theme (GladeXML *dialog)
+{
+	GHashTable *hash;
+	GtkListStore *store;
+	GtkCellRenderer *renderer;
+	const char * const *data_dirs;
+	const char *data_dir;
+	char *dir, *theme_name;
+	GConfClient *client;
+	guint i;
+
+	/* Add the theme names and their display name to a hash table,
+	 * makes it easy to avoid duplicate themes */
+	hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+
+	data_dirs = g_get_system_data_dirs ();
+	for (i = 0; data_dirs[i] != NULL; i++) {
+		dir = g_build_filename (data_dirs[i], "sounds", NULL);
+		sound_theme_in_dir (hash, dir);
+		g_free (dir);
+	}
+
+	data_dir = g_get_user_data_dir ();
+	dir = g_build_filename (data_dir, "sounds", NULL);
+	sound_theme_in_dir (hash, dir);
+	g_free (dir);
+
+	/* If there isn't at least one theme, make everything
+	 * insensitive, LAME! */
+	if (g_hash_table_size (hash) == 0) {
+		gtk_widget_set_sensitive (WID ("sounds_vbox"), FALSE);
+		g_warning ("Bad setup, install the freedesktop sound theme");
+		return;
+	}
+
+	/* Setup the tree model, 2 columns:
+	 * - internal theme name/directory
+	 * - display theme name */
+	store = gtk_list_store_new (NUM_COLS, G_TYPE_STRING, G_TYPE_STRING);
+
+	/* Add the themes to a combobox */
+	g_hash_table_foreach (hash, (GHFunc) add_theme_to_store, store);
+	g_hash_table_destroy (hash);
+
+	/* Set the display */
+	gtk_combo_box_set_model (GTK_COMBO_BOX (WID ("sound_theme_combobox")),
+				 GTK_TREE_MODEL (store));
+
+	renderer = gtk_cell_renderer_text_new ();
+	gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (WID ("sound_theme_combobox")),
+				    renderer, TRUE);
+	gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (WID ("sound_theme_combobox")),
+					renderer, "text", DISPLAY_COL, NULL);
+
+	/* Setup the default as per the GConf setting */
+	client = gconf_client_get_default ();
+	theme_name = gconf_client_get_string (client, SOUND_THEME_KEY, NULL);
+	set_combox_for_theme_name (dialog, theme_name);
+	g_free (theme_name);
+
+	/* Listen for changes in GConf, and on the combobox */
+	gconf_client_notify_add (client, SOUND_THEME_KEY,
+				 (GConfClientNotifyFunc) theme_changed_cb, dialog, NULL, NULL);
+	g_object_unref (G_OBJECT (client));
+
+	g_signal_connect (G_OBJECT (WID ("sound_theme_combobox")), "changed",
+			  G_CALLBACK (theme_combobox_changed), dialog);
+}
+
Index: capplets/sound/sound-properties.glade
===================================================================
--- capplets/sound/sound-properties.glade	(revision 8779)
+++ capplets/sound/sound-properties.glade	(working copy)
@@ -211,7 +211,7 @@
 	  <property name="enable_popup">False</property>
 
 	  <child>
-	    <widget class="GtkVBox" id="vbox13">
+	    <widget class="GtkVBox" id="devices_vbox">
 	      <property name="border_width">12</property>
 	      <property name="visible">True</property>
 	      <property name="homogeneous">False</property>
@@ -321,10 +321,10 @@
 				<widget class="GtkButton" id="sounds_playback_test">
 				  <property name="visible">True</property>
 				  <property name="can_focus">True</property>
+				  <property name="label" translatable="yes">Test</property>
+				  <property name="use_underline">True</property>
 				  <property name="relief">GTK_RELIEF_NORMAL</property>
 				  <property name="focus_on_click">True</property>
-			 	  <property name="label" translatable="yes">Test</property>
-				  <property name="use_underline">True</property>
 				</widget>
 				<packing>
 				  <property name="padding">0</property>
@@ -460,10 +460,10 @@
 				<widget class="GtkButton" id="music_playback_test">
 				  <property name="visible">True</property>
 				  <property name="can_focus">True</property>
+				  <property name="label" translatable="yes">Test</property>
+				  <property name="use_underline">True</property>
 				  <property name="relief">GTK_RELIEF_NORMAL</property>
 				  <property name="focus_on_click">True</property>
-				  <property name="label" translatable="yes">Test</property>
-				  <property name="use_underline">True</property>
 				</widget>
 				<packing>
 				  <property name="padding">0</property>
@@ -605,10 +605,10 @@
 				    <widget class="GtkButton" id="chat_audio_playback_test">
 				      <property name="visible">True</property>
 				      <property name="can_focus">True</property>
+				      <property name="label" translatable="yes">Test</property>
+				      <property name="use_underline">True</property>
 				      <property name="relief">GTK_RELIEF_NORMAL</property>
 				      <property name="focus_on_click">True</property>
-				      <property name="label" translatable="yes">Test</property>
-				      <property name="use_underline">True</property>
 				    </widget>
 				    <packing>
 				      <property name="padding">0</property>
@@ -692,10 +692,10 @@
 				    <widget class="GtkButton" id="chat_audio_capture_test">
 				      <property name="visible">True</property>
 				      <property name="can_focus">True</property>
+				      <property name="label" translatable="yes">Test</property>
+				      <property name="use_underline">True</property>
 				      <property name="relief">GTK_RELIEF_NORMAL</property>
 				      <property name="focus_on_click">True</property>
-				      <property name="label" translatable="yes">Test</property>
-				      <property name="use_underline">True</property>
 				    </widget>
 				    <packing>
 				      <property name="padding">0</property>
@@ -940,24 +940,24 @@
 	  </child>
 
 	  <child>
-	    <widget class="GtkVBox" id="vbox1">
+	    <widget class="GtkVBox" id="sounds_vbox">
 	      <property name="border_width">12</property>
 	      <property name="visible">True</property>
 	      <property name="homogeneous">False</property>
 	      <property name="spacing">6</property>
 
 	      <child>
-		<widget class="GtkCheckButton" id="enable_toggle">
+		<widget class="GtkCheckButton" id="events_toggle">
 		  <property name="visible">True</property>
 		  <property name="can_focus">True</property>
-		  <property name="label" translatable="yes">E_nable software sound mixing</property>
+		  <property name="label" translatable="yes">_Play system sounds</property>
 		  <property name="use_underline">True</property>
 		  <property name="relief">GTK_RELIEF_NORMAL</property>
 		  <property name="focus_on_click">True</property>
 		  <property name="active">False</property>
 		  <property name="inconsistent">False</property>
 		  <property name="draw_indicator">True</property>
-		  <signal name="toggled" handler="enable_toggled_cb"/>
+		  <signal name="toggled" handler="events_toggled_cb"/>
 		</widget>
 		<packing>
 		  <property name="padding">0</property>
@@ -967,17 +967,30 @@
 	      </child>
 
 	      <child>
-		<widget class="GtkCheckButton" id="events_toggle">
+		<widget class="GtkAlignment" id="alignment17">
 		  <property name="visible">True</property>
-		  <property name="can_focus">True</property>
-		  <property name="label" translatable="yes">_Play system sounds</property>
-		  <property name="use_underline">True</property>
-		  <property name="relief">GTK_RELIEF_NORMAL</property>
-		  <property name="focus_on_click">True</property>
-		  <property name="active">False</property>
-		  <property name="inconsistent">False</property>
-		  <property name="draw_indicator">True</property>
-		  <signal name="toggled" handler="events_toggled_cb"/>
+		  <property name="xalign">0.5</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xscale">1</property>
+		  <property name="yscale">1</property>
+		  <property name="top_padding">0</property>
+		  <property name="bottom_padding">0</property>
+		  <property name="left_padding">12</property>
+		  <property name="right_padding">0</property>
+
+		  <child>
+		    <widget class="GtkCheckButton" id="input_feedback_toggle">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="label" translatable="yes">Play sounds when buttons are pressed</property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+		    </widget>
+		  </child>
 		</widget>
 		<packing>
 		  <property name="padding">0</property>
@@ -987,31 +1000,135 @@
 	      </child>
 
 	      <child>
-		<widget class="GtkAlignment" id="alignment4">
+		<widget class="GtkFrame" id="frame1">
 		  <property name="visible">True</property>
-		  <property name="xalign">0</property>
-		  <property name="yalign">0</property>
-		  <property name="xscale">1</property>
-		  <property name="yscale">1</property>
-		  <property name="top_padding">12</property>
-		  <property name="bottom_padding">0</property>
-		  <property name="left_padding">0</property>
-		  <property name="right_padding">0</property>
+		  <property name="label_xalign">0</property>
+		  <property name="label_yalign">0.5</property>
+		  <property name="shadow_type">GTK_SHADOW_NONE</property>
 
 		  <child>
-		    <widget class="GtkVBox" id="events_vbox">
+		    <widget class="GtkAlignment" id="alignment15">
 		      <property name="visible">True</property>
-		      <property name="homogeneous">False</property>
-		      <property name="spacing">0</property>
+		      <property name="xalign">0.5</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xscale">1</property>
+		      <property name="yscale">1</property>
+		      <property name="top_padding">12</property>
+		      <property name="bottom_padding">12</property>
+		      <property name="left_padding">12</property>
+		      <property name="right_padding">0</property>
 
 		      <child>
-			<placeholder/>
+			<widget class="GtkComboBox" id="sound_theme_combobox">
+			  <property name="visible">True</property>
+			  <property name="add_tearoffs">False</property>
+			  <property name="focus_on_click">True</property>
+			</widget>
 		      </child>
 		    </widget>
 		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label17">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">&lt;b&gt;Sound theme&lt;/b&gt;</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">True</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0.5</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="type">label_item</property>
+		    </packing>
+		  </child>
 		</widget>
 		<packing>
 		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkFrame" id="frame2">
+		  <property name="visible">True</property>
+		  <property name="label_xalign">0</property>
+		  <property name="label_yalign">0.5</property>
+		  <property name="shadow_type">GTK_SHADOW_NONE</property>
+
+		  <child>
+		    <widget class="GtkAlignment" id="alignment16">
+		      <property name="visible">True</property>
+		      <property name="xalign">0.5</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xscale">1</property>
+		      <property name="yscale">1</property>
+		      <property name="top_padding">12</property>
+		      <property name="bottom_padding">0</property>
+		      <property name="left_padding">12</property>
+		      <property name="right_padding">0</property>
+
+		      <child>
+			<widget class="GtkScrolledWindow" id="scrolledwindow2">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
+			  <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property>
+			  <property name="shadow_type">GTK_SHADOW_IN</property>
+			  <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+
+			  <child>
+			    <widget class="GtkTreeView" id="sounds_treeview">
+			      <property name="visible">True</property>
+			      <property name="can_focus">True</property>
+			      <property name="headers_visible">True</property>
+			      <property name="rules_hint">False</property>
+			      <property name="reorderable">False</property>
+			      <property name="enable_search">True</property>
+			      <property name="fixed_height_mode">False</property>
+			      <property name="hover_selection">False</property>
+			      <property name="hover_expand">False</property>
+			    </widget>
+			  </child>
+			</widget>
+		      </child>
+		    </widget>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label18">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">&lt;b&gt;System sounds&lt;/b&gt;</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">True</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0.5</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="type">label_item</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
 		  <property name="expand">True</property>
 		  <property name="fill">True</property>
 		</packing>
Index: capplets/sound/sound-theme.h
===================================================================
--- capplets/sound/sound-theme.h	(revision 0)
+++ capplets/sound/sound-theme.h	(revision 0)
@@ -0,0 +1,30 @@
+/* -*- mode: c; style: linux -*- */
+/* -*- c-basic-offset: 2 -*- */
+
+/* sound-theme.h
+ * Copyright (C) 2008 Bastien Nocera <hadess@hadess.net>
+ *
+ * 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 __SOUND_THEME_HH__
+#define __SOUND_THEME_HH__
+
+#include <gtk/gtk.h>
+#include <glade/glade.h>
+
+void setup_sound_theme (GladeXML *dialog);
+
+#endif /* __SOUND_THEME_HH__ */
