Index: data/glade/song-info-multiple.glade
===================================================================
RCS file: /cvs/gnome/rhythmbox/data/glade/song-info-multiple.glade,v
retrieving revision 1.4
diff -u -r1.4 song-info-multiple.glade
--- data/glade/song-info-multiple.glade	24 Sep 2005 14:19:15 -0000	1.4
+++ data/glade/song-info-multiple.glade	7 Dec 2005 03:53:23 -0000
@@ -12,12 +12,18 @@
   <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>
+  <property name="focus_on_map">True</property>
 
   <child>
     <widget class="GtkTable" id="song_info_basic">
       <property name="border_width">6</property>
       <property name="visible">True</property>
-      <property name="n_rows">5</property>
+      <property name="n_rows">6</property>
       <property name="n_columns">2</property>
       <property name="homogeneous">False</property>
       <property name="row_spacing">6</property>
@@ -32,7 +38,7 @@
 	  <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="invisible_char">*</property>
 	  <property name="activates_default">False</property>
 	</widget>
 	<packing>
@@ -53,7 +59,7 @@
 	  <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="invisible_char">*</property>
 	  <property name="activates_default">False</property>
 	</widget>
 	<packing>
@@ -79,6 +85,10 @@
 	  <property name="xpad">0</property>
 	  <property name="ypad">0</property>
 	  <property name="mnemonic_widget">song_info_album</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="left_attach">0</property>
@@ -104,6 +114,10 @@
 	  <property name="xpad">0</property>
 	  <property name="ypad">0</property>
 	  <property name="mnemonic_widget">song_info_artist</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="left_attach">0</property>
@@ -129,6 +143,10 @@
 	  <property name="xpad">0</property>
 	  <property name="ypad">0</property>
 	  <property name="mnemonic_widget">song_info_genre</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="left_attach">0</property>
@@ -149,7 +167,7 @@
 	  <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="invisible_char">*</property>
 	  <property name="activates_default">False</property>
 	</widget>
 	<packing>
@@ -174,12 +192,16 @@
 	  <property name="yalign">0</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="left_attach">0</property>
 	  <property name="right_attach">1</property>
-	  <property name="top_attach">4</property>
-	  <property name="bottom_attach">5</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>
@@ -198,10 +220,60 @@
 	<packing>
 	  <property name="left_attach">1</property>
 	  <property name="right_attach">2</property>
-	  <property name="top_attach">4</property>
-	  <property name="bottom_attach">5</property>
+	  <property name="top_attach">5</property>
+	  <property name="bottom_attach">6</property>
 	  <property name="x_options">fill</property>
 	  <property name="y_options">fill</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkLabel" id="year_label">
+	  <property name="visible">True</property>
+	  <property name="label" translatable="yes">_Year:</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</property>
+	  <property name="yalign">0.5</property>
+	  <property name="xpad">0</property>
+	  <property name="ypad">0</property>
+	  <property name="mnemonic_widget">song_info_year</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="left_attach">0</property>
+	  <property name="right_attach">1</property>
+	  <property name="top_attach">3</property>
+	  <property name="bottom_attach">4</property>
+	  <property name="x_options">fill</property>
+	  <property name="y_options"></property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkEntry" id="song_info_year">
+	  <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">*</property>
+	  <property name="activates_default">False</property>
+	</widget>
+	<packing>
+	  <property name="left_attach">1</property>
+	  <property name="right_attach">2</property>
+	  <property name="top_attach">3</property>
+	  <property name="bottom_attach">4</property>
+	  <property name="y_options"></property>
 	</packing>
       </child>
     </widget>
Index: widgets/rb-song-info.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/widgets/rb-song-info.c,v
retrieving revision 1.41
diff -u -r1.41 rb-song-info.c
--- widgets/rb-song-info.c	30 Nov 2005 08:47:23 -0000	1.41
+++ widgets/rb-song-info.c	7 Dec 2005 03:53:26 -0000
@@ -385,12 +385,14 @@
 	song_info->priv->artist = glade_xml_get_widget (xml, "song_info_artist");
 	song_info->priv->album = glade_xml_get_widget (xml, "song_info_album");
 	song_info->priv->genre = glade_xml_get_widget (xml, "song_info_genre");
+	song_info->priv->year = glade_xml_get_widget (xml, "song_info_year");
 	song_info->priv->playback_error_box = glade_xml_get_widget (xml, "song_info_error_box");
 	song_info->priv->playback_error_label = glade_xml_get_widget (xml, "song_info_error_label");
 
 	rb_glade_boldify_label (xml, "album_label");
 	rb_glade_boldify_label (xml, "artist_label");
 	rb_glade_boldify_label (xml, "genre_label");
+	rb_glade_boldify_label (xml, "year_label");
 	rb_glade_boldify_label (xml, "rating_label");
 
 	g_signal_connect_object (G_OBJECT (song_info->priv->artist),
@@ -866,8 +868,12 @@
 	const char *genre = gtk_entry_get_text (GTK_ENTRY (dialog->priv->genre));
 	const char *artist = gtk_entry_get_text (GTK_ENTRY (dialog->priv->artist));
 	const char *album = gtk_entry_get_text (GTK_ENTRY (dialog->priv->album));	
+	const char *year_str = gtk_entry_get_text (GTK_ENTRY (dialog->priv->year));
+
+	char *endptr;
 	GValue val = {0,};
 	GList *tem;
+	gint year;
 	gboolean changed = FALSE;
 	RhythmDBEntry *entry;
 
@@ -912,6 +918,35 @@
 		}
 		g_value_unset (&val);
 	}
+
+	year = g_ascii_strtoull (year_str, &endptr, 10);
+	if (strlen (year_str) > 0) {
+		GDate *date = NULL;
+		GType type;
+		if (year > 0) {
+			date = g_date_new_dmy(1, G_DATE_JANUARY, year);
+		} 
+
+		type = rhythmdb_get_property_type (dialog->priv->db,
+						   RHYTHMDB_PROP_DATE);
+
+		g_value_init (&val, type);
+		g_value_set_ulong (&val, g_date_get_julian (date));
+
+		for (tem = dialog->priv->selected_entries; tem; tem = tem->next) {
+			entry = (RhythmDBEntry *)tem->data;
+			if (year == g_date_get_year (entry->date))
+				continue;
+			rhythmdb_entry_set (dialog->priv->db, entry,
+					    RHYTHMDB_PROP_DATE, &val);
+			changed = TRUE;
+		}
+		g_value_unset (&val);
+		if (date)
+			g_date_free (date);
+
+	}
+
 
 	if (changed)
 		rhythmdb_commit (dialog->priv->db);
