Index: sources/rb-browser-source.c
===================================================================
--- sources/rb-browser-source.c	(revision 4815)
+++ sources/rb-browser-source.c	(working copy)
@@ -418,6 +418,7 @@ rb_browser_source_constructor (GType typ
 	rb_entry_view_append_column (source->priv->songs, RB_ENTRY_VIEW_COL_DURATION, FALSE);
  	rb_entry_view_append_column (source->priv->songs, RB_ENTRY_VIEW_COL_QUALITY, FALSE);
 	rb_entry_view_append_column (source->priv->songs, RB_ENTRY_VIEW_COL_PLAY_COUNT, FALSE);
+	rb_entry_view_append_column (source->priv->songs, RB_ENTRY_VIEW_COL_LOCATION, FALSE);
 
 	g_signal_connect_object (G_OBJECT (source->priv->songs), "show_popup",
 				 G_CALLBACK (rb_browser_source_songs_show_popup_cb), source, 0);
Index: lib/rb-preferences.h
===================================================================
--- lib/rb-preferences.h	(revision 4815)
+++ lib/rb-preferences.h	(working copy)
@@ -48,6 +48,7 @@ G_BEGIN_DECLS
 #define CONF_STATE_BURN_DEVICE	CONF_PREFIX "/state/burn_device"
 #define CONF_STATE_WINDOW_VISIBLE	CONF_PREFIX "/state/window_visible"
 #define CONF_UI_AUTO_PROXY_COMPLAINT	CONF_PREFIX "/ui/auto_proxy_complaint"
+#define CONF_UI_LOCATION_STYLE	CONF_PREFIX "/ui/location_style"
 
 #define CONF_AUDIOSCROBBLER_USERNAME CONF_PREFIX "/audioscrobbler/username"
 #define CONF_AUDIOSCROBBLER_PASSWORD CONF_PREFIX "/audioscrobbler/password"
Index: shell/rb-shell-preferences.c
===================================================================
--- shell/rb-shell-preferences.c	(revision 4815)
+++ shell/rb-shell-preferences.c	(working copy)
@@ -60,6 +60,8 @@ void rb_shell_preferences_browser_views_
 						      RBShellPreferences *shell_preferences);
 static void rb_shell_preferences_toolbar_style_cb (GtkComboBox *box,
 						   RBShellPreferences *preferences);
+static void rb_shell_preferences_location_style_cb (GtkComboBox *box,
+						   RBShellPreferences *preferences);
 
 enum
 {
@@ -84,6 +86,8 @@ struct RBShellPreferencesPrivate
 	GtkWidget *first_seen_check;
 	GtkWidget *quality_check;
 	GtkWidget *year_check;
+	GtkWidget *location_check;
+	GtkWidget *location_style_menu;
 
 	GSList *browser_views_group;
 
@@ -193,6 +197,10 @@ rb_shell_preferences_init (RBShellPrefer
 		glade_xml_get_widget (xml, "year_check");
 	shell_preferences->priv->first_seen_check =
 		glade_xml_get_widget (xml, "first_seen_check");
+	shell_preferences->priv->location_check =
+		glade_xml_get_widget (xml, "location_check");
+	shell_preferences->priv->location_style_menu =
+		glade_xml_get_widget (xml, "location_style_menu");
 
 	/* browser options */
 	rb_glade_boldify_label (xml, "browser_views_label");
@@ -217,6 +225,10 @@ rb_shell_preferences_init (RBShellPrefer
 				 "changed", G_CALLBACK (rb_shell_preferences_toolbar_style_cb),
 				 shell_preferences, 0);
 
+	g_signal_connect_object (G_OBJECT (shell_preferences->priv->location_style_menu),
+				 "changed", G_CALLBACK (rb_shell_preferences_location_style_cb),
+				 shell_preferences, 0);
+
 	eel_gconf_notification_add (CONF_UI_DIR,
 				    (GConfClientNotifyFunc) rb_shell_preferences_ui_pref_changed,
 				    shell_preferences);
@@ -333,6 +345,7 @@ rb_shell_preferences_column_check_change
 	char **colnames = currentcols ? g_strsplit (currentcols, ",", 0) : NULL;
 	char *colname = NULL;
 	int i;
+	guint style;
 
 	if (butt == GTK_CHECK_BUTTON (shell_preferences->priv->artist_check))
 		colname = "RHYTHMDB_PROP_ARTIST";
@@ -356,6 +369,8 @@ rb_shell_preferences_column_check_change
 		colname = "RHYTHMDB_PROP_BITRATE";
 	else if (butt == GTK_CHECK_BUTTON (shell_preferences->priv->first_seen_check))
 		colname = "RHYTHMDB_PROP_FIRST_SEEN";
+	else if (butt == GTK_CHECK_BUTTON (shell_preferences->priv->location_check))
+		colname = "RHYTHMDB_PROP_LOCATION";
 	else
 		g_assert_not_reached ();
 
@@ -378,6 +393,10 @@ rb_shell_preferences_column_check_change
 
 	eel_gconf_set_string (CONF_UI_COLUMNS_SETUP, newcolumns->str);
 	g_string_free (newcolumns, TRUE);
+
+        style = gtk_combo_box_get_active (GTK_COMBO_BOX(shell_preferences->priv->location_style_menu));
+
+        eel_gconf_set_integer (CONF_UI_LOCATION_STYLE, style);
 }
 
 static void
@@ -445,6 +464,9 @@ rb_shell_preferences_sync (RBShellPrefer
 		rb_shell_preferences_sync_column_button (shell_preferences,
 			       				 shell_preferences->priv->quality_check,
 							 columns, "RHYTHMDB_PROP_BITRATE");
+                rb_shell_preferences_sync_column_button (shell_preferences,
+                                                         shell_preferences->priv->location_check,
+                                                         columns, "RHYTHMDB_PROP_LOCATION");
 	}
 
 	g_free (columns);
@@ -468,6 +490,19 @@ rb_shell_preferences_sync (RBShellPrefer
 					   G_CALLBACK (rb_shell_preferences_toolbar_style_cb),
 					   shell_preferences);
 
+	/* location column style */
+	g_signal_handlers_block_by_func (G_OBJECT (shell_preferences->priv->location_style_menu),
+					 G_CALLBACK (rb_shell_preferences_location_style_cb),
+					 shell_preferences);
+
+	view = eel_gconf_get_integer (CONF_UI_LOCATION_STYLE);
+
+	gtk_combo_box_set_active (GTK_COMBO_BOX (shell_preferences->priv->location_style_menu), view);
+
+	g_signal_handlers_unblock_by_func (G_OBJECT (shell_preferences->priv->location_style_menu),
+					   G_CALLBACK (rb_shell_preferences_location_style_cb),
+					   shell_preferences);
+
 	shell_preferences->priv->loading = FALSE;
 }
 
@@ -485,6 +520,22 @@ rb_shell_preferences_toolbar_style_cb (G
 	eel_gconf_set_integer (CONF_UI_TOOLBAR_STYLE, selection);
 }
 
+static void
+rb_shell_preferences_location_style_cb (GtkComboBox *box, RBShellPreferences *preferences)
+{
+	int selection;
+
+	selection = gtk_combo_box_get_active (box);
+
+	/* skip the separator row */
+/*
+	if (selection >= 1)
+		selection--;
+*/
+
+	eel_gconf_set_integer (CONF_UI_LOCATION_STYLE, selection);
+}
+
 void
 rb_shell_preferences_browser_views_activated_cb (GtkWidget *widget,
 						 RBShellPreferences *shell_preferences)
Index: shell/rb-shell.c
===================================================================
--- shell/rb-shell.c	(revision 4816)
+++ shell/rb-shell.c	(working copy)
@@ -384,6 +384,7 @@ struct RBShellPrivate
 	guint toolbar_visibility_notify_id;
 	guint toolbar_style_notify_id;
 	guint smalldisplay_notify_id;
+	guint location_style;
 
 	glong last_small_time; /* when we last changed small mode */
 
@@ -1357,6 +1358,7 @@ rb_shell_constructor (GType type,
 	shell->priv->paned_position = eel_gconf_get_integer (CONF_STATE_PANED_POSITION);
 	shell->priv->sourcelist_height = eel_gconf_get_integer (CONF_STATE_SOURCELIST_HEIGHT);
 	shell->priv->statusbar_hidden = eel_gconf_get_boolean (CONF_UI_STATUSBAR_HIDDEN);
+	shell->priv->location_style = eel_gconf_get_integer (CONF_UI_LOCATION_STYLE);
 
 	rb_debug ("shell: syncing with gconf");
 	rb_shell_sync_sidepane_visibility (shell);
Index: shell/rb-tray-icon.c
===================================================================
--- shell/rb-tray-icon.c	(revision 4815)
+++ shell/rb-tray-icon.c	(working copy)
@@ -86,6 +86,7 @@ static void rb_tray_icon_drop_cb (GtkWid
 				  RBTrayIcon *icon);
 static void rb_tray_icon_suppress_tooltips (RBTrayIcon *icon, guint duration);
 static void rb_tray_icon_construct_tooltip (RBTrayIcon *icon);
+static GtkWidget* rb_tray_icon_create_blank_image (RBTrayIcon *icon);
 
 struct RBTrayIconPrivate
 {
@@ -628,9 +629,7 @@ rb_tray_icon_set_tooltip_icon (RBTrayIco
 	GList *children;
 
 	if (msgicon == NULL)
-		/*msgicon = gtk_image_new_from_icon_name (DEFAULT_TOOLTIP_ICON,
-							GTK_ICON_SIZE_DIALOG);*/
-		msgicon = gtk_image_new ();
+		msgicon = rb_tray_icon_create_blank_image (icon);
 	image_box = GTK_CONTAINER (icon->priv->tooltip_image_box);
 	children = gtk_container_get_children (image_box);
 	current_image = GTK_WIDGET (g_list_nth_data (children, 0));
@@ -676,6 +675,8 @@ rb_tray_icon_notify (RBTrayIcon *icon,
 	rb_debug ("doing notify: %s", primary_markup);
 	if (timeout > 0)
 		rb_tray_icon_suppress_tooltips (icon, timeout);
+	if (msgicon == NULL)
+		msgicon = rb_tray_icon_create_blank_image (icon);
 	egg_tray_icon_notify (EGG_TRAY_ICON (icon), timeout,
 			      primary_markup, msgicon, secondary_markup);
 }
@@ -778,9 +779,7 @@ rb_tray_icon_construct_tooltip (RBTrayIc
 	gtk_misc_set_alignment  (GTK_MISC  (icon->priv->tooltip_secondary),
 				 0.0, 0.0);
 
-	/*image = gtk_image_new_from_icon_name (DEFAULT_TOOLTIP_ICON,
-					      GTK_ICON_SIZE_DIALOG);*/
-	image = gtk_image_new ();
+	image = rb_tray_icon_create_blank_image (icon);
 	icon->priv->tooltip_image_box = gtk_vbox_new (FALSE, 12);
 	gtk_box_pack_start (GTK_BOX (icon->priv->tooltip_image_box), image,
 			    FALSE, FALSE, 0);
@@ -824,3 +823,20 @@ rb_tray_icon_suppress_tooltips (RBTrayIc
 		g_source_remove (icon->priv->tooltip_unsuppress_id);
 	icon->priv->tooltip_unsuppress_id = g_timeout_add (duration, (GSourceFunc) rb_tray_icon_unsuppress_cb, icon);
 }
+
+static GtkWidget*
+rb_tray_icon_create_blank_image (RBTrayIcon *icon)
+{
+	int width;
+	GdkPixbuf *pixbuf;
+	GtkWidget *image;
+
+	gtk_icon_size_lookup (GTK_ICON_SIZE_DIALOG, &width, NULL);
+	pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, width, width);
+	gdk_pixbuf_fill (pixbuf, 0); /* transparent */
+	image = gtk_image_new_from_pixbuf (pixbuf);
+	g_object_unref (pixbuf);
+
+	return image;
+}
+
Index: data/glade/general-prefs.glade
===================================================================
--- data/glade/general-prefs.glade	(revision 4815)
+++ data/glade/general-prefs.glade	(working copy)
@@ -2,7 +2,6 @@
 <!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
 
 <glade-interface>
-<requires lib="gnome"/>
 
 <widget class="GtkWindow" id="preferences">
   <property name="visible">True</property>
@@ -579,6 +578,29 @@
 				  <property name="y_options"></property>
 				</packing>
 			      </child>
+
+			      <child>
+				<widget class="GtkCheckButton" id="location_check">
+				  <property name="visible">True</property>
+				  <property name="can_focus">True</property>
+				  <property name="label" translatable="yes">Lo_cation</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="rb_shell_preferences_column_check_changed_cb" last_modification_time="Fri, 02 May 2003 04:26:32 GMT"/>
+				</widget>
+				<packing>
+				  <property name="left_attach">1</property>
+				  <property name="right_attach">2</property>
+				  <property name="top_attach">5</property>
+				  <property name="bottom_attach">6</property>
+				  <property name="x_options">fill</property>
+				  <property name="y_options"></property>
+				</packing>
+			      </child>
 			    </widget>
 			    <packing>
 			      <property name="padding">0</property>
@@ -779,6 +801,161 @@ Text only</property>
 	  <property name="fill">True</property>
 	</packing>
       </child>
+
+      <child>
+	<widget class="GtkVBox" id="vbox17">
+	  <property name="visible">True</property>
+	  <property name="homogeneous">False</property>
+	  <property name="spacing">6</property>
+
+	  <child>
+	    <widget class="GtkLabel" id="location_style_label">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Location Style</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</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="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">False</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkHBox" id="hbox20">
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">0</property>
+
+	      <child>
+		<widget class="GtkLabel" id="label28">
+		  <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>
+		  <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="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkHBox" id="hbox21">
+		  <property name="visible">True</property>
+		  <property name="homogeneous">False</property>
+		  <property name="spacing">0</property>
+
+		  <child>
+		    <widget class="GtkLabel" id="label29">
+		      <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">8</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="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">False</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkComboBox" id="location_style_menu">
+		      <property name="visible">True</property>
+		      <property name="items" translatable="yes">Start
+Middle
+End</property>
+		      <property name="add_tearoffs">False</property>
+		      <property name="focus_on_click">True</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label30">
+		      <property name="visible">True</property>
+		      <property name="label"></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>
+		      <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="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>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">True</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
     </widget>
   </child>
 </widget>
Index: widgets/rb-entry-view.c
===================================================================
--- widgets/rb-entry-view.c	(revision 4815)
+++ widgets/rb-entry-view.c	(working copy)
@@ -1215,7 +1215,7 @@ rb_entry_view_append_column (RBEntryView
 		break;
 	case RB_ENTRY_VIEW_COL_LOCATION:
 		propid = RHYTHMDB_PROP_LOCATION;
-		cell_data->propid = RHYTHMDB_PROP_LOCATION;
+		cell_data->propid = propid;
 		cell_data_func = (GtkTreeCellDataFunc) rb_entry_view_location_cell_data_func;
 		sort_propid = RHYTHMDB_PROP_LOCATION;
 		sort_func = (GCompareDataFunc) rhythmdb_query_model_location_sort_func;
@@ -1254,7 +1254,30 @@ rb_entry_view_append_column (RBEntryView
 	 * fixed minimum width specified.  Otherwise, gtk+ gives them a
 	 * width of 0.
 	 */
-	if (ellipsize) {
+
+	if (ellipsize && coltype == RB_ENTRY_VIEW_COL_LOCATION) {
+		rb_debug("Entering Pango Land\n");
+		guint style = eel_gconf_get_integer (CONF_UI_LOCATION_STYLE);
+		switch (style) {
+			case (0):
+				rb_debug("Pango_Start\n");
+				g_object_set(renderer, "ellipsize", PANGO_ELLIPSIZE_START, NULL);
+			break;
+			case (1):
+				rb_debug("Pango_Middle\n");
+				g_object_set(renderer, "ellipsize", PANGO_ELLIPSIZE_MIDDLE, NULL);
+			break;
+			case (2):
+				rb_debug("Pango_End\n");
+				g_object_set(renderer, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
+			break;
+			default:
+				rb_debug("Pango_Default\n");
+				g_object_set(renderer, "ellipsize", PANGO_ELLIPSIZE_MIDDLE, NULL);
+			break;
+		}
+		gtk_tree_view_column_set_expand (GTK_TREE_VIEW_COLUMN (column), TRUE);
+	} else if (ellipsize && coltype != RB_ENTRY_VIEW_COL_LOCATION) {
 		g_object_set (renderer, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
 		gtk_tree_view_column_set_expand (GTK_TREE_VIEW_COLUMN (column), TRUE);
 	} else if (column_width != -1) {
@@ -1262,7 +1285,7 @@ rb_entry_view_append_column (RBEntryView
 	} else {
 		rb_entry_view_set_fixed_column_width (view, column, renderer, strings);
 	}
-
+	
 	if (resizable)
 		gtk_tree_view_column_set_resizable (column, TRUE);
 
