Index: rhythmdb/rhythmdb-property-model.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/rhythmdb/rhythmdb-property-model.c,v
retrieving revision 1.30
diff -u -u -p -r1.30 rhythmdb-property-model.c
--- rhythmdb/rhythmdb-property-model.c	29 Jan 2006 09:45:24 -0000	1.30
+++ rhythmdb/rhythmdb-property-model.c	31 Jan 2006 11:39:14 -0000
@@ -451,9 +451,11 @@ rhythmdb_property_model_row_inserted_cb 
 					 RhythmDBPropertyModel *propmodel)
 {
 	RhythmDBEntry *entry = entry_from_tree_iter (model, iter);
-	rhythmdb_property_model_insert (propmodel, entry);
 
-	rhythmdb_property_model_sync (propmodel);
+	if (rhythmdb_entry_get_boolean (entry, RHYTHMDB_PROP_HIDDEN) == FALSE) {
+		rhythmdb_property_model_insert (propmodel, entry);
+		rhythmdb_property_model_sync (propmodel);
+	}
 }
 
 static void
@@ -462,13 +464,31 @@ rhythmdb_property_model_prop_changed_cb 
 					 const GValue *new,
 					 RhythmDBPropertyModel *propmodel)
 {
-	if (prop != propmodel->priv->propid)
-		return;
-
-	rhythmdb_property_model_delete_prop (propmodel, g_value_get_string (old));
-	rhythmdb_property_model_insert (propmodel, entry);
-
-	rhythmdb_property_model_sync (propmodel);
+	if (prop == RHYTHMDB_PROP_HIDDEN) {
+		gboolean old_hidden = g_value_get_boolean (old);
+		gboolean new_hidden = g_value_get_boolean (new);
+
+		if (new_hidden == old_hidden)
+			return;
+
+		rb_debug ("recieving hidden-change notification for %s", entry->location);
+
+		if (new_hidden)
+			rhythmdb_property_model_delete (propmodel, entry);
+		else
+			rhythmdb_property_model_insert (propmodel, entry);
+
+		rhythmdb_property_model_sync (propmodel);
+	} else {	
+		if (prop != propmodel->priv->propid)
+			return;
+		if (rhythmdb_entry_get_boolean (entry, RHYTHMDB_PROP_HIDDEN))
+			return;
+
+		rhythmdb_property_model_delete_prop (propmodel, g_value_get_string (old));
+		rhythmdb_property_model_insert (propmodel, entry);
+		rhythmdb_property_model_sync (propmodel);
+	}
 }
 
 static void
@@ -476,9 +496,10 @@ rhythmdb_property_model_entry_removed_cb
 					  RhythmDBEntry *entry,
 					  RhythmDBPropertyModel *propmodel)
 {
-	rhythmdb_property_model_delete (propmodel, entry);
-
-	rhythmdb_property_model_sync (propmodel);
+	if (rhythmdb_entry_get_boolean (entry, RHYTHMDB_PROP_HIDDEN) == FALSE) {
+		rhythmdb_property_model_delete (propmodel, entry);
+		rhythmdb_property_model_sync (propmodel);
+	}
 }
 
 static gint
Index: rhythmdb/rhythmdb-query-model.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/rhythmdb/rhythmdb-query-model.c,v
retrieving revision 1.97
diff -u -u -p -r1.97 rhythmdb-query-model.c
--- rhythmdb/rhythmdb-query-model.c	29 Jan 2006 09:45:24 -0000	1.97
+++ rhythmdb/rhythmdb-query-model.c	31 Jan 2006 11:39:15 -0000
@@ -193,8 +193,6 @@ struct RhythmDBQueryModelPrivate
 	guint max_count;
 	guint max_time;
 
-	gboolean connected;
-
 	glong total_duration;
 	GnomeVFSFileSize total_size;
 
@@ -701,15 +699,6 @@ rhythmdb_query_model_signal_complete (Rh
 	rhythmdb_query_model_process_update (update);
 }
 
-void
-rhythmdb_query_model_set_connected (RhythmDBQueryModel *model, gboolean connected)
-{
-	model->priv->connected = connected;
-
-	if (model->priv->base_model)
-		rhythmdb_query_model_set_connected (model->priv->base_model, connected);
-}
-
 gboolean
 rhythmdb_query_model_has_pending_changes (RhythmDBQueryModel *model)
 {
@@ -748,10 +737,6 @@ rhythmdb_query_model_entry_changed_cb (R
 	gboolean hidden = FALSE;
 	GSList *t;
 
-	if (!model->priv->connected)
-		return;
-
-
 	hidden = (!model->priv->show_hidden && rhythmdb_entry_get_boolean (entry, RHYTHMDB_PROP_HIDDEN));
 
 	if (g_hash_table_lookup (model->priv->reverse_map, entry) == NULL) {
@@ -764,6 +749,23 @@ rhythmdb_query_model_entry_changed_cb (R
 	}
 
 	if (hidden) {
+		/* emit this, so things know why it was removed.
+		 * this is needed to update propery models correctly */
+		GValue true_val = { 0, };
+		GValue false_val = { 0, };
+		
+		g_value_init (&true_val, G_TYPE_BOOLEAN);
+		g_value_set_boolean (&true_val, TRUE);
+		g_value_init (&false_val, G_TYPE_BOOLEAN);
+		g_value_set_boolean (&false_val, FALSE);
+		
+		rb_debug ("emitting hidden-removal notification for %s", entry->location);
+		g_signal_emit (G_OBJECT (model),
+			       rhythmdb_query_model_signals[ENTRY_PROP_CHANGED], 0,
+			       entry, RHYTHMDB_PROP_HIDDEN, &false_val, &true_val);
+		g_value_unset (&true_val);
+		g_value_unset (&false_val);
+		
 		rhythmdb_query_model_remove_entry (model, entry);
 		return;
 	}
Index: rhythmdb/rhythmdb-query-model.h
===================================================================
RCS file: /cvs/gnome/rhythmbox/rhythmdb/rhythmdb-query-model.h,v
retrieving revision 1.21
diff -u -u -p -r1.21 rhythmdb-query-model.h
--- rhythmdb/rhythmdb-query-model.h	29 Jan 2006 09:45:24 -0000	1.21
+++ rhythmdb/rhythmdb-query-model.h	31 Jan 2006 11:39:15 -0000
@@ -77,8 +77,6 @@ gboolean		rhythmdb_query_model_remove_en
 
 void			rhythmdb_query_model_move_entry (RhythmDBQueryModel *model, RhythmDBEntry *entry, gint index);
 
-void			rhythmdb_query_model_set_connected	(RhythmDBQueryModel *model, gboolean connected);
-
 void			rhythmdb_query_model_signal_complete	(RhythmDBQueryModel *model);
 
 GnomeVFSFileSize	rhythmdb_query_model_get_size	(RhythmDBQueryModel *model);
Index: sources/rb-iradio-source.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/sources/rb-iradio-source.c,v
retrieving revision 1.104
diff -u -u -p -r1.104 rb-iradio-source.c
--- sources/rb-iradio-source.c	13 Jan 2006 12:20:01 -0000	1.104
+++ sources/rb-iradio-source.c	31 Jan 2006 11:39:21 -0000
@@ -739,12 +739,6 @@ rb_iradio_source_do_query (RBIRadioSourc
 	rb_entry_view_set_model (source->priv->stations, RHYTHMDB_QUERY_MODEL (query_model));
 	g_object_set (G_OBJECT (source), "query-model", query_model, NULL);
 
-	/* we rely on getting signals from all_query to update the genre view.
-	 * we keep it marked as connected so it doesn't just eat the signals.
-	 */
-	if (query_model != source->priv->all_query)
-		rhythmdb_query_model_set_connected (source->priv->all_query, TRUE);
-
 	rhythmdb_do_full_query_parsed (source->priv->db, model, query);
 
 	rhythmdb_query_free (query);
Index: widgets/rb-entry-view.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/widgets/rb-entry-view.c,v
retrieving revision 1.123
diff -u -u -p -r1.123 rb-entry-view.c
--- widgets/rb-entry-view.c	29 Jan 2006 09:45:25 -0000	1.123
+++ widgets/rb-entry-view.c	31 Jan 2006 11:39:25 -0000
@@ -439,7 +439,6 @@ rb_entry_view_set_property (GObject *obj
 		RhythmDBQueryModel *new_model;
 		
 		if (view->priv->model) {
-			rhythmdb_query_model_set_connected (RHYTHMDB_QUERY_MODEL (view->priv->model), FALSE);
 			g_signal_handlers_disconnect_by_func (G_OBJECT (view->priv->model),
 							      G_CALLBACK (rb_entry_view_row_inserted_cb),
 							      view);
@@ -451,9 +450,6 @@ rb_entry_view_set_property (GObject *obj
 							      view);
 		}
 		new_model = g_value_get_object (value);
-
-		rhythmdb_query_model_set_connected (RHYTHMDB_QUERY_MODEL (new_model),
-						    TRUE);
 
 		g_signal_connect_object (G_OBJECT (new_model),
 					 "row_inserted",
