Index: sources/rb-library-source.c
===================================================================
--- sources/rb-library-source.c	(revision 4982)
+++ sources/rb-library-source.c	(working copy)
@@ -281,6 +281,7 @@
 	RBLibrarySource *source;
 	RBShell *shell;
 	RBEntryView *songs;
+	GSList *list;
 
 	source = RB_LIBRARY_SOURCE (G_OBJECT_CLASS (rb_library_source_parent_class)
 			->constructor (type, n_construct_properties, construct_properties));
@@ -290,6 +291,16 @@
 
 	rb_library_source_ui_prefs_sync (source);
 
+	/* Set up the default library location if there's no library location set */
+	list = eel_gconf_get_string_list (CONF_LIBRARY_LOCATION);
+	if (g_slist_length (list) == 0) {
+		list = g_slist_prepend (list, g_strdup (rb_music_dir ()));
+		eel_gconf_set_string_list (CONF_LIBRARY_LOCATION, list);
+	} else {
+		g_slist_foreach (list, (GFunc) g_free, NULL);
+		g_slist_free (list);
+	}
+
 	source->priv->library_location_notify_id =
 		eel_gconf_notification_add (CONF_LIBRARY_LOCATION,
 				    (GConfClientNotifyFunc) rb_library_source_library_location_changed, source);
@@ -609,10 +620,6 @@
 	if (list)
 		g_slist_free (list);
 
-	/* don't do the first-run druid if the user sets the library location */
-	if (list)
-		eel_gconf_set_boolean (CONF_FIRST_TIME, TRUE);
-
 	return FALSE;
 }
 
Index: sources/rb-podcast-source.c
===================================================================
--- sources/rb-podcast-source.c	(revision 4982)
+++ sources/rb-podcast-source.c	(working copy)
@@ -1246,6 +1246,9 @@
 	source->priv->config_widget = glade_xml_get_widget (xml, "podcast_vbox");
 
 	btn_file = glade_xml_get_widget (xml, "location_chooser");
+	gtk_file_chooser_add_shortcut_folder (GTK_FILE_CHOOSER (btn_file),
+					      rb_music_dir (),
+					      NULL);
 	download_dir = rb_podcast_manager_get_podcast_dir (source->priv->podcast_mgr);
 	gtk_file_chooser_set_current_folder_uri (GTK_FILE_CHOOSER (btn_file),
 						 download_dir);
Index: lib/rb-file-helpers.c
===================================================================
--- lib/rb-file-helpers.c	(revision 4982)
+++ lib/rb-file-helpers.c	(working copy)
@@ -38,6 +38,7 @@
 static GHashTable *files = NULL;
 
 static char *dot_dir = NULL;
+static char *music_dir = NULL;
 
 const char *
 rb_file (const char *filename)
@@ -90,6 +91,137 @@
 	return dot_dir;
 }
 
+/* Copied from xdg-user-dir-lookup.c */
+#include <stdlib.h>
+
+static char *
+xdg_user_dir_lookup (const char *type)
+{
+  FILE *file;
+  char *home_dir, *config_home, *config_file;
+  char buffer[512];
+  char *user_dir;
+  char *p, *d;
+  int len;
+  int relative;
+  
+  home_dir = getenv ("HOME");
+
+  if (home_dir == NULL)
+    return strdup ("/tmp");
+
+  config_home = getenv ("XDG_CONFIG_HOME");
+  if (config_home == NULL || config_home[0] == 0)
+    {
+      config_file = malloc (strlen (home_dir) + strlen ("/.config/user-dirs.dirs") + 1);
+      strcpy (config_file, home_dir);
+      strcat (config_file, "/.config/user-dirs.dirs");
+    }
+  else
+    {
+      config_file = malloc (strlen (config_home) + strlen ("/user-dirs.dirs") + 1);
+      strcpy (config_file, config_home);
+      strcat (config_file, "/user-dirs.dirs");
+    }
+
+  file = fopen (config_file, "r");
+  free (config_file);
+  if (file == NULL)
+    goto error;
+
+  user_dir = NULL;
+  while (fgets (buffer, sizeof (buffer), file))
+    {
+      /* Remove newline at end */
+      len = strlen (buffer);
+      if (len > 0 && buffer[len-1] == '\n')
+	buffer[len-1] = 0;
+      
+      p = buffer;
+      while (*p == ' ' || *p == '\t')
+	p++;
+      
+      if (strncmp (p, "XDG_", 4) != 0)
+	continue;
+      p += 4;
+      if (strncmp (p, type, strlen (type)) != 0)
+	continue;
+      p += strlen (type);
+      if (strncmp (p, "_DIR", 4) != 0)
+	continue;
+      p += 4;
+
+      while (*p == ' ' || *p == '\t')
+	p++;
+
+      if (*p != '=')
+	continue;
+      p++;
+      
+      while (*p == ' ' || *p == '\t')
+	p++;
+
+      if (*p != '"')
+	continue;
+      p++;
+      
+      relative = 0;
+      if (strncmp (p, "$HOME/", 6) == 0)
+	{
+	  p += 6;
+	  relative = 1;
+	}
+      else if (*p != '/')
+	continue;
+      
+      if (relative)
+	{
+	  user_dir = malloc (strlen (home_dir) + 1 + strlen (p) + 1);
+	  strcpy (user_dir, home_dir);
+	  strcat (user_dir, "/");
+	}
+      else
+	{
+	  user_dir = malloc (strlen (p) + 1);
+	  *user_dir = 0;
+	}
+      
+      d = user_dir + strlen (user_dir);
+      while (*p && *p != '"')
+	{
+	  if ((*p == '\\') && (*(p+1) != 0))
+	    p++;
+	  *d++ = *p++;
+	}
+      *d = 0;
+    }  
+  fclose (file);
+
+  if (user_dir)
+    return user_dir;
+
+ error:
+  /* Special case desktop for historical compatibility */
+  if (strcmp (type, "DESKTOP") == 0)
+    {
+      user_dir = malloc (strlen (home_dir) + strlen ("/Desktop") + 1);
+      strcpy (user_dir, home_dir);
+      strcat (user_dir, "/Desktop");
+      return user_dir;
+    }
+  else
+    return strdup (home_dir);
+}
+
+const char *
+rb_music_dir (void)
+{
+	if (music_dir != NULL)
+		return (const char *) music_dir;
+	music_dir = xdg_user_dir_lookup ("MUSIC");
+	return (const char *) music_dir;
+}
+
 void
 rb_file_helpers_init (void)
 {
@@ -103,7 +235,7 @@
 rb_file_helpers_shutdown (void)
 {
 	g_hash_table_destroy (files);
-
+	g_free (music_dir);
 	g_free (dot_dir);
 }
 
Index: lib/rb-file-helpers.h
===================================================================
--- lib/rb-file-helpers.h	(revision 4982)
+++ lib/rb-file-helpers.h	(working copy)
@@ -29,6 +29,7 @@
 
 const char *	rb_file			(const char *filename);
 const char *	rb_dot_dir		(void);
+const char *	rb_music_dir		(void);
 
 char *		rb_canonicalise_uri	(const char *uri);
 
Index: shell/rb-shell.c
===================================================================
--- shell/rb-shell.c	(revision 4982)
+++ shell/rb-shell.c	(working copy)
@@ -60,7 +60,6 @@
 #include "rb-playlist-manager.h"
 #include "rb-removable-media-manager.h"
 #include "rb-preferences.h"
-#include "rb-druid.h"
 #include "rb-shell-clipboard.h"
 #include "rb-shell-player.h"
 #include "rb-source-header.h"
@@ -142,9 +141,6 @@
 					 const char *field,
 					 GValue *metadata,
 					 RBShell *shell);
-static void rb_shell_druid_response_cb (GtkDialog *druid,
-					guint response,
-					 RBShell *shell);
 
 static void rb_shell_playlist_added_cb (RBPlaylistManager *mgr, RBSource *source, RBShell *shell);
 static void rb_shell_playlist_created_cb (RBPlaylistManager *mgr, RBSource *source, RBShell *shell);
@@ -1407,21 +1403,9 @@
 	rb_shell_sync_paned (shell);
 	gtk_widget_show_all (GTK_WIDGET (shell->priv->tray_icon));
 
-	/* Stop here if this is the first time. */
-	if (!eel_gconf_get_boolean (CONF_FIRST_TIME)) {
-		RBDruid *druid;
-		druid = rb_druid_new (shell->priv->db);
-		g_signal_connect (G_OBJECT (druid),
-				  "response",
-				  G_CALLBACK (rb_shell_druid_response_cb),
-				  shell);
+	rb_shell_set_visibility (shell, eel_gconf_get_boolean (CONF_STATE_WINDOW_VISIBLE), TRUE);
+	gdk_notify_startup_complete ();
 
-		gtk_widget_show_all (GTK_WIDGET (druid));
-	} else {
-		rb_shell_set_visibility (shell, eel_gconf_get_boolean (CONF_STATE_WINDOW_VISIBLE), TRUE);
-		gdk_notify_startup_complete ();
-	}
-
 	/* focus play if small, the entry view if not */
 	if (shell->priv->window_small) {
 		GtkWidget *play_button;
@@ -3528,15 +3512,6 @@
 
 }
 
-static void
-rb_shell_druid_response_cb (GtkDialog *druid,
-			    guint response,
-			    RBShell *shell)
-{
-	gtk_widget_show_all (GTK_WIDGET (shell->priv->window));
-	gtk_widget_destroy (GTK_WIDGET (druid));
-}
-
 static GtkBox*
 rb_shell_get_box_for_ui_location (RBShell *shell, RBShellUILocation location)
 {
Index: data/glade/druid.glade
===================================================================
--- data/glade/druid.glade	(revision 4982)
+++ data/glade/druid.glade	(working copy)
@@ -1,291 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
-
-<glade-interface>
-<requires lib="gnome"/>
-
-<widget class="GtkWindow" id="window1">
-  <property name="visible">True</property>
-  <property name="title" translatable="yes"></property>
-  <property name="type">GTK_WINDOW_TOPLEVEL</property>
-  <property name="window_position">GTK_WIN_POS_NONE</property>
-  <property name="modal">False</property>
-  <property name="resizable">True</property>
-  <property name="destroy_with_parent">False</property>
-  <property name="decorated">True</property>
-  <property name="skip_taskbar_hint">False</property>
-  <property name="skip_pager_hint">False</property>
-  <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
-  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
-
-  <child>
-    <widget class="GnomeDruid" id="druid_toplevel">
-      <property name="border_width">4</property>
-      <property name="visible">True</property>
-      <property name="show_help">False</property>
-
-      <child>
-	<widget class="GnomeDruidPageEdge" id="druidpagestart1">
-	  <property name="visible">True</property>
-	  <property name="position">GNOME_EDGE_START</property>
-	  <property name="title" translatable="yes"></property>
-	  <property name="text" translatable="yes"></property>
-	</widget>
-      </child>
-
-      <child>
-	<widget class="GnomeDruidPageStandard" id="druidpagestandard1">
-	  <property name="visible">True</property>
-	  <property name="title" translatable="yes"></property>
-
-	  <child internal-child="vbox">
-	    <widget class="GtkVBox" id="druid-vbox1">
-	      <property name="border_width">16</property>
-	      <property name="visible">True</property>
-	      <property name="homogeneous">False</property>
-	      <property name="spacing">6</property>
-
-	      <child>
-		<widget class="GtkVBox" id="page2_vbox">
-		  <property name="visible">True</property>
-		  <property name="homogeneous">False</property>
-		  <property name="spacing">0</property>
-
-		  <child>
-		    <widget class="GtkLabel" id="label1">
-		      <property name="visible">True</property>
-		      <property name="label" translatable="yes">Rhythmbox manages all of your music in a central music &quot;library&quot;, so you can easily view, search, and organize it.
-In order to use this feature, you need to tell Rhythmbox where to find your music.  You may choose to skip this step; instead, you can add music to your library at any point later.
-Please choose one of the options below:</property>
-		      <property name="use_underline">False</property>
-		      <property name="use_markup">False</property>
-		      <property name="justify">GTK_JUSTIFY_LEFT</property>
-		      <property name="wrap">True</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>
-		    </widget>
-		    <packing>
-		      <property name="padding">6</property>
-		      <property name="expand">False</property>
-		      <property name="fill">False</property>
-		    </packing>
-		  </child>
-
-		  <child>
-		    <widget class="GtkVBox" id="vbox2">
-		      <property name="visible">True</property>
-		      <property name="homogeneous">False</property>
-		      <property name="spacing">6</property>
-
-		      <child>
-			<widget class="GtkVBox" id="vbox3">
-			  <property name="visible">True</property>
-			  <property name="homogeneous">False</property>
-			  <property name="spacing">4</property>
-
-			  <child>
-			    <widget class="GtkRadioButton" id="radiobutton1">
-			      <property name="visible">True</property>
-			      <property name="can_focus">True</property>
-			      <property name="label" translatable="yes">_Enter location:</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>
-			    <packing>
-			      <property name="padding">0</property>
-			      <property name="expand">False</property>
-			      <property name="fill">False</property>
-			    </packing>
-			  </child>
-
-			  <child>
-			    <widget class="GtkHBox" id="hbox2">
-			      <property name="visible">True</property>
-			      <property name="homogeneous">False</property>
-			      <property name="spacing">0</property>
-
-			      <child>
-				<widget class="GtkLabel" id="label2">
-				  <property name="visible">True</property>
-				  <property name="label" translatable="yes"></property>
-				  <property name="use_underline">False</property>
-				  <property name="use_markup">False</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>
-				</widget>
-				<packing>
-				  <property name="padding">0</property>
-				  <property name="expand">False</property>
-				  <property name="fill">False</property>
-				</packing>
-			      </child>
-
-			      <child>
-				<widget class="GtkHBox" id="hbox4">
-				  <property name="visible">True</property>
-				  <property name="homogeneous">False</property>
-				  <property name="spacing">0</property>
-
-				  <child>
-				    <widget class="GtkLabel" id="path_spacer">
-				      <property name="width_request">6</property>
-				      <property name="visible">True</property>
-				      <property name="label" translatable="yes"></property>
-				      <property name="use_underline">False</property>
-				      <property name="use_markup">False</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>
-				    </widget>
-				    <packing>
-				      <property name="padding">0</property>
-				      <property name="expand">False</property>
-				      <property name="fill">False</property>
-				    </packing>
-				  </child>
-
-				  <child>
-				    <widget class="GtkLabel" id="path_label">
-				      <property name="visible">True</property>
-				      <property name="label" translatable="yes">_Path:</property>
-				      <property name="use_underline">True</property>
-				      <property name="use_markup">False</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="mnemonic_widget">path_entry</property>
-				    </widget>
-				    <packing>
-				      <property name="padding">6</property>
-				      <property name="expand">False</property>
-				      <property name="fill">False</property>
-				    </packing>
-				  </child>
-
-				  <child>
-				    <widget class="GtkEntry" id="path_entry">
-				      <property name="visible">True</property>
-				      <property name="can_focus">True</property>
-				      <property name="editable">True</property>
-				      <property name="visibility">True</property>
-				      <property name="max_length">0</property>
-				      <property name="text" translatable="yes"></property>
-				      <property name="has_frame">True</property>
-				      <property name="invisible_char" translatable="yes">*</property>
-				      <property name="activates_default">False</property>
-				    </widget>
-				    <packing>
-				      <property name="padding">6</property>
-				      <property name="expand">True</property>
-				      <property name="fill">True</property>
-				    </packing>
-				  </child>
-
-				  <child>
-				    <widget class="GtkButton" id="browse_button">
-				      <property name="visible">True</property>
-				      <property name="can_focus">True</property>
-				      <property name="label" translatable="yes">_Browse...</property>
-				      <property name="use_underline">True</property>
-				      <property name="relief">GTK_RELIEF_NORMAL</property>
-				      <property name="focus_on_click">True</property>
-				    </widget>
-				    <packing>
-				      <property name="padding">0</property>
-				      <property name="expand">False</property>
-				      <property name="fill">False</property>
-				    </packing>
-				  </child>
-				</widget>
-				<packing>
-				  <property name="padding">0</property>
-				  <property name="expand">True</property>
-				  <property name="fill">True</property>
-				</packing>
-			      </child>
-			    </widget>
-			    <packing>
-			      <property name="padding">0</property>
-			      <property name="expand">True</property>
-			      <property name="fill">True</property>
-			    </packing>
-			  </child>
-			</widget>
-			<packing>
-			  <property name="padding">0</property>
-			  <property name="expand">True</property>
-			  <property name="fill">True</property>
-			</packing>
-		      </child>
-
-		      <child>
-			<widget class="GtkRadioButton" id="page2_skip_radiobutton">
-			  <property name="visible">True</property>
-			  <property name="can_focus">True</property>
-			  <property name="label" translatable="yes">_Skip this step</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>
-			  <property name="group">radiobutton1</property>
-			</widget>
-			<packing>
-			  <property name="padding">0</property>
-			  <property name="expand">False</property>
-			  <property name="fill">False</property>
-			</packing>
-		      </child>
-		    </widget>
-		    <packing>
-		      <property name="padding">0</property>
-		      <property name="expand">True</property>
-		      <property name="fill">True</property>
-		    </packing>
-		  </child>
-		</widget>
-		<packing>
-		  <property name="padding">0</property>
-		  <property name="expand">True</property>
-		  <property name="fill">True</property>
-		</packing>
-	      </child>
-	    </widget>
-	  </child>
-	</widget>
-      </child>
-
-      <child>
-	<widget class="GnomeDruidPageEdge" id="druidpagefinish1">
-	  <property name="visible">True</property>
-	  <property name="position">GNOME_EDGE_FINISH</property>
-	  <property name="title" translatable="yes"></property>
-	  <property name="text" translatable="yes"></property>
-	</widget>
-      </child>
-    </widget>
-  </child>
-</widget>
-
-</glade-interface>
Index: data/glade/Makefile.am
===================================================================
--- data/glade/Makefile.am	(revision 4982)
+++ data/glade/Makefile.am	(working copy)
@@ -8,7 +8,6 @@
 		podcast-feed-properties.glade	\
 		podcast-properties.glade	\
 		create-playlist.glade		\
-		druid.glade			\
 		uri.glade			\
 		plugins.glade			\
 		playlist-save.glade		\
Index: po/POTFILES.in
===================================================================
--- po/POTFILES.in	(revision 4982)
+++ po/POTFILES.in	(working copy)
@@ -3,7 +3,6 @@
 backends/gstreamer/rb-player-gst.c
 backends/rb-player.c
 data/glade/create-playlist.glade
-data/glade/druid.glade
 data/glade/general-prefs.glade
 data/glade/library-prefs.glade
 data/glade/playlist-save.glade
@@ -143,7 +142,6 @@
 widgets/eggtrayicon.c
 widgets/rb-cell-renderer-pixbuf.c
 widgets/rb-dialog.c
-widgets/rb-druid.c
 widgets/rb-entry-view.c
 widgets/rb-header.c
 widgets/rb-library-browser.c
Index: widgets/rb-dialog.c
===================================================================
--- widgets/rb-dialog.c	(revision 4982)
+++ widgets/rb-dialog.c	(working copy)
@@ -33,6 +33,7 @@
 #include <stdarg.h>
 
 #include "rb-dialog.h"
+#include "rb-file-helpers.h"
 #include "rb-stock-icons.h"
 
 void
@@ -104,6 +105,9 @@
 	}
 
 	gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (dialog), local_only);
+	gtk_file_chooser_add_shortcut_folder (GTK_FILE_CHOOSER (dialog),
+					      rb_music_dir (),
+					      NULL);
 
 	if (parent != NULL) {
 		gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (parent));
Index: widgets/rb-druid.c
===================================================================
--- widgets/rb-druid.c	(revision 4982)
+++ widgets/rb-druid.c	(working copy)
@@ -1,378 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * arch-tag: Implementation of Rhythmbox first-time druid
- *
- *  Copyright (C) 2003,2004 Colin Walters <walters@debian.org>
- *
- *  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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA.
- *
- */
-
-#include "config.h"
-
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-#include <libgnomeui/gnome-druid.h>
-#include <libgnomeui/gnome-druid-page-edge.h>
-#include <libgnomeui/gnome-druid-page-standard.h>
-#include <libgnomevfs/gnome-vfs-utils.h>
-
-#include "rb-druid.h"
-#include "rb-preferences.h"
-#include "rb-debug.h"
-#include "rb-dialog.h"
-#include "rb-glade-helpers.h"
-#include "eel-gconf-extensions.h"
-
-static void rb_druid_finalize (GObject *object);
-static void rb_druid_set_property (GObject *object,
-				   guint prop_id,
-				   const GValue *value,
-				   GParamSpec *pspec);
-static void rb_druid_get_property (GObject *object,
-				   guint prop_id,
-				   GValue *value,
-				   GParamSpec *pspec);
-static void rb_druid_browse_clicked_cb (GtkButton *button, RBDruid *druid);
-static void rb_druid_entry_changed_cb (GtkEntry *entry, RBDruid *druid);
-static gboolean rb_druid_page2_prepare_cb (GnomeDruidPage *druid_page, GtkWidget *druid_widget,
-					   RBDruid *druid);
-static void rb_druid_skip_toggled_cb (GtkToggleButton *button, RBDruid *druid);
-static void rb_druid_page3_finish_cb (GnomeDruidPage *druid_page, GtkWidget *druid_widget,
-				      RBDruid *druid);
-static void do_response (RBDruid *druid);
-
-struct RBDruidPrivate
-{
-	RhythmDB *db;
-	GnomeDruid *druid;
-
-	GtkWidget *page2_vbox;
-	GtkWidget *browse_button;
-	GtkWidget *page2_skip_radiobutton;
-	GtkWidget *path_entry;
-};
-
-G_DEFINE_TYPE (RBDruid, rb_druid, GTK_TYPE_DIALOG)
-#define RB_DRUID_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), RB_TYPE_DRUID, RBDruidPrivate))
-
-enum
-{
-	PROP_0,
-	PROP_DB,
-};
-
-static void
-rb_druid_class_init (RBDruidClass *klass)
-{
-	GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
-	object_class->finalize = rb_druid_finalize;
-	object_class->set_property = rb_druid_set_property;
-	object_class->get_property = rb_druid_get_property;
-
-	g_object_class_install_property (object_class,
-					 PROP_DB,
-					 g_param_spec_object ("db",
-							      "RhythmDB",
-							      "RhythmDB object",
-							      RHYTHMDB_TYPE,
-							      G_PARAM_READWRITE));
-
-	g_type_class_add_private (klass, sizeof (RBDruidPrivate));
-}
-
-static void
-rb_druid_init (RBDruid *druid)
-{
-	GladeXML *xml;
-
-	druid->priv = RB_DRUID_GET_PRIVATE (druid);
-
-	xml = rb_glade_xml_new ("druid.glade", "druid_toplevel", druid);
-
-	druid->priv->page2_vbox = glade_xml_get_widget (xml, "page2_vbox");
-	gtk_object_ref (GTK_OBJECT (druid->priv->page2_vbox));
-	gtk_container_remove (GTK_CONTAINER (gtk_widget_get_parent (druid->priv->page2_vbox)),
-			      druid->priv->page2_vbox);
-	druid->priv->browse_button = glade_xml_get_widget (xml, "browse_button");
-	druid->priv->path_entry = glade_xml_get_widget (xml, "path_entry");
-	druid->priv->page2_skip_radiobutton = glade_xml_get_widget (xml, "page2_skip_radiobutton");
-
-	g_signal_connect_object (G_OBJECT (druid->priv->page2_skip_radiobutton), "toggled",
-				 G_CALLBACK (rb_druid_skip_toggled_cb), druid, 0);
-	g_signal_connect_object (G_OBJECT (druid->priv->browse_button), "clicked",
-				 G_CALLBACK (rb_druid_browse_clicked_cb), druid, 0);
-	g_signal_connect_object (G_OBJECT (druid->priv->path_entry), "changed",
-				 G_CALLBACK (rb_druid_entry_changed_cb), druid, 0);
-
-	g_object_unref (G_OBJECT (xml));
-}
-
-static void
-rb_druid_finalize (GObject *object)
-{
-	RBDruid *druid;
-
-	g_return_if_fail (object != NULL);
-	g_return_if_fail (RB_IS_DRUID (object));
-
-	druid = RB_DRUID (object);
-
-	g_return_if_fail (druid->priv != NULL);
-
-	G_OBJECT_CLASS (rb_druid_parent_class)->finalize (object);
-}
-
-static void
-rb_druid_set_property (GObject *object,
-			   guint prop_id,
-			   const GValue *value,
-			   GParamSpec *pspec)
-{
-	RBDruid *druid = RB_DRUID (object);
-
-	switch (prop_id)
-	{
-	case PROP_DB:
-		druid->priv->db = g_value_get_object (value);
-		break;
-	default:
-		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-		break;
-	}
-}
-
-static void
-rb_druid_get_property (GObject *object,
-			      guint prop_id,
-			      GValue *value,
-			      GParamSpec *pspec)
-{
-	RBDruid *druid = RB_DRUID (object);
-
-	switch (prop_id)
-	{
-	case PROP_DB:
-		g_value_set_object (value, druid->priv->db);
-		break;
-	default:
-		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-		break;
-	}
-}
-
-static void
-rb_druid_init_widgets (RBDruid *druid)
-{
-	GnomeDruidPage *page;
-
-	g_return_if_fail (RB_IS_DRUID (druid));
-
-	gtk_window_set_title (GTK_WINDOW (druid),_("Rhythmbox"));
-	gtk_window_set_modal (GTK_WINDOW (druid), TRUE);
-
-	druid->priv->druid = GNOME_DRUID (gnome_druid_new ());
-	gtk_widget_show (GTK_WIDGET (druid->priv->druid));
-	gtk_container_add (GTK_CONTAINER (GTK_DIALOG (druid)->vbox),
-			   GTK_WIDGET (druid->priv->druid));
-	gnome_druid_set_show_help (druid->priv->druid, FALSE);
-
-	g_signal_connect_object (druid->priv->druid, "cancel",
-				 G_CALLBACK (do_response),
-				 druid, G_CONNECT_SWAPPED);
-
-	g_signal_connect_object (druid->priv->druid, "destroy",
-				 G_CALLBACK (do_response),
-				 druid, G_CONNECT_SWAPPED);
-
-	/* page 1 */
-	page = GNOME_DRUID_PAGE (gnome_druid_page_edge_new (GNOME_EDGE_START));
-	gtk_widget_show (GTK_WIDGET (page));
-	gnome_druid_page_edge_set_title (GNOME_DRUID_PAGE_EDGE (page),
-					 _("Welcome to Rhythmbox"));
-	gnome_druid_append_page (druid->priv->druid, page);
-	gnome_druid_set_page (druid->priv->druid, page);
-	gnome_druid_page_edge_set_text (GNOME_DRUID_PAGE_EDGE (page),
-					_("Rhythmbox is the GNOME music player that lets you do everything: play your music files, listen to Internet Radio, import music from CDs, and much more.\n\nThis assistant will help you get started by asking you some simple questions."));
-
-	/* page 2 */
-	page = GNOME_DRUID_PAGE (gnome_druid_page_standard_new ());
-	gtk_widget_show (GTK_WIDGET (page));
-	gnome_druid_page_standard_set_title (GNOME_DRUID_PAGE_STANDARD (page),
-					     _("Music library setup"));
-	gtk_container_add (GTK_CONTAINER (GNOME_DRUID_PAGE_STANDARD (page)->vbox),
-			   druid->priv->page2_vbox);
-	gnome_druid_append_page (druid->priv->druid, page);
-	g_signal_connect_object (G_OBJECT (page), "prepare", G_CALLBACK (rb_druid_page2_prepare_cb), druid, 0);
-
-	/* page 3 */
-	page = GNOME_DRUID_PAGE (gnome_druid_page_edge_new (GNOME_EDGE_FINISH));
-	gtk_widget_show (GTK_WIDGET (page));
-	gnome_druid_page_edge_set_title (GNOME_DRUID_PAGE_EDGE (page), _("Finish"));
-	gnome_druid_page_edge_set_text (GNOME_DRUID_PAGE_EDGE (page),
-					_("You are now ready to start Rhythmbox.\n\nRemember that you may add music to the library using \"Music\" then \"Import Folder\", or by importing it from CDs."));
-	g_signal_connect_object (G_OBJECT (page), "finish", G_CALLBACK (rb_druid_page3_finish_cb), druid, 0);
-	gnome_druid_append_page (druid->priv->druid, page);
-
-/* 	g_signal_connect_object (page, "prepare", G_CALLBACK (gb_export_druid_page_5_prepare_cb), d, 0); */
-
-	/* misc */
-	gnome_druid_set_show_help (druid->priv->druid, FALSE);
-	gtk_button_set_label (GTK_BUTTON (druid->priv->druid->cancel), GTK_STOCK_CLOSE);
-}
-
-RBDruid *
-rb_druid_new (RhythmDB *db)
-{
-	RBDruid *druid = g_object_new (RB_TYPE_DRUID, "db", db, NULL);
-
-	g_return_val_if_fail (druid->priv != NULL, NULL);
-
-	rb_druid_init_widgets (druid);
-
-	return druid;
-}
-
-static void
-path_dialog_response_cb (GtkDialog *dialog,
-			 int response_id,
-			 RBDruid *druid)
-{
-	char *uri;
-	char *path;
-
-	rb_debug ("got response");
-
-	if (response_id != GTK_RESPONSE_ACCEPT) {
-		gtk_widget_destroy (GTK_WIDGET (dialog));
-		return;
-	}
-
-	uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (dialog));
-	if (uri == NULL) {
-		uri = gtk_file_chooser_get_current_folder_uri (GTK_FILE_CHOOSER (dialog));
-	}
-
-	gtk_widget_destroy (GTK_WIDGET (dialog));
-
-	if (uri == NULL)
-		return;
-
-	path = gnome_vfs_format_uri_for_display (uri);
-	gtk_entry_set_text (GTK_ENTRY (druid->priv->path_entry), path);
-	g_free (uri);
-	g_free (path);
-}
-
-static void
-rb_druid_browse_clicked_cb (GtkButton *button, RBDruid *druid)
-{
-	GtkWidget *dialog;
-	rb_debug ("browse");
-
-	dialog = rb_file_chooser_new (_("Load folder into Library"),
-				      GTK_WINDOW (druid),
-				      GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
-				      FALSE);
-	gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
-
-	g_signal_connect_object (G_OBJECT (dialog), "response",
-				 G_CALLBACK (path_dialog_response_cb), druid, 0);
-}
-
-static void
-rb_druid_page2_sync_sensitive (RBDruid *druid)
-{
-	gboolean next_enabled;
-	gboolean skip_active;
-	const char *text;
-	rb_debug ("syncing sensitivity");
-
-	text = gtk_entry_get_text (GTK_ENTRY (druid->priv->path_entry));
-
-	skip_active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (druid->priv->page2_skip_radiobutton));
-	next_enabled = g_utf8_strlen (text, -1) > 0 || skip_active;
-
-	gtk_widget_set_sensitive (druid->priv->path_entry, !skip_active);
-	gtk_widget_set_sensitive (druid->priv->druid->next, next_enabled);
-}
-
-static void
-rb_druid_skip_toggled_cb (GtkToggleButton *button, RBDruid *druid)
-{
-	rb_debug ("skip changed");
-
-	rb_druid_page2_sync_sensitive (druid);
-}
-
-static void
-rb_druid_entry_changed_cb (GtkEntry *entry, RBDruid *druid)
-{
-	rb_debug ("entry changed");
-
-	rb_druid_page2_sync_sensitive (druid);
-}
-
-static gboolean
-idle_set_sensitive (RBDruid *druid)
-{
-	g_return_val_if_fail (RB_IS_DRUID (druid), FALSE);
-
-	GDK_THREADS_ENTER ();
-
-	rb_druid_page2_sync_sensitive (druid);
-
-	GDK_THREADS_LEAVE ();
-	return FALSE;
-}
-
-static gboolean
-rb_druid_page2_prepare_cb (GnomeDruidPage *druid_page, GtkWidget *druid_widget,
-			   RBDruid *druid)
-{
-	g_return_val_if_fail (RB_IS_DRUID (druid), FALSE);
-
-	rb_debug ("page2 prepare");
-
-	/* FIXME: this is a gross hack, but setting the next button
-	 * to not be sensitive at this point doesn't work! */
-	g_idle_add ((GSourceFunc) idle_set_sensitive, druid);
-	return FALSE;
-}
-
-static void
-do_response (RBDruid *druid)
-{
-	g_return_if_fail (RB_IS_DRUID (druid));
-	gtk_dialog_response (GTK_DIALOG (druid), GTK_RESPONSE_OK);
-}
-
-static void
-rb_druid_page3_finish_cb (GnomeDruidPage *druid_page, GtkWidget *druid_widget,
-			  RBDruid *druid)
-{
-	rb_debug ("druid finished!");
-	if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (druid->priv->page2_skip_radiobutton))) {
-		const char *uri = gtk_entry_get_text (GTK_ENTRY (druid->priv->path_entry));
-
-		rb_debug ("page2 next; adding %s to library", uri);
-		rhythmdb_add_uri (druid->priv->db, uri);
-	}
-	eel_gconf_set_boolean (CONF_FIRST_TIME, TRUE);
-	gnome_druid_set_buttons_sensitive (GNOME_DRUID (druid_widget),
-					   FALSE, FALSE, FALSE, FALSE);
-	do_response (druid);
-}
Index: widgets/rb-druid.h
===================================================================
--- widgets/rb-druid.h	(revision 4982)
+++ widgets/rb-druid.h	(working copy)
@@ -1,58 +0,0 @@
-/*
- * arch-tag: Header for Rhythmbox first-time druid
- *
- *  Copyright (C) 2003 Colin Walters <walters@verbum.org>
- *
- *  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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA.
- *
- */
-
-#include <gtk/gtk.h>
-
-#include "rhythmdb.h"
-
-#ifndef __RB_DRUID_H
-#define __RB_DRUID_H
-
-G_BEGIN_DECLS
-
-#define RB_TYPE_DRUID         (rb_druid_get_type ())
-#define RB_DRUID(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), RB_TYPE_DRUID, RBDruid))
-#define RB_DRUID_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), RB_TYPE_DRUID, RBDruidClass))
-#define RB_IS_DRUID(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), RB_TYPE_DRUID))
-#define RB_IS_DRUID_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), RB_TYPE_DRUID))
-#define RB_DRUID_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), RB_TYPE_DRUID, RBDruidClass))
-
-typedef struct RBDruidPrivate RBDruidPrivate;
-
-typedef struct
-{
-	GtkDialog parent;
-
-	RBDruidPrivate *priv;
-} RBDruid;
-
-typedef struct
-{
-	GtkDialogClass parent_class;
-} RBDruidClass;
-
-GType			rb_druid_get_type	(void);
-
-RBDruid *		rb_druid_new		(RhythmDB *db);
-
-G_END_DECLS
-
-#endif /* __RB_DRUID_H */
Index: widgets/Makefile.am
===================================================================
--- widgets/Makefile.am	(revision 4982)
+++ widgets/Makefile.am	(working copy)
@@ -18,8 +18,6 @@
 	rb-header.h					\
 	bacon-volume.c					\
 	bacon-volume.h					\
-	rb-druid.c					\
-	rb-druid.h					\
 	eggtrayicon.c					\
 	eggtrayicon.h					\
 	rb-dialog.c					\
