+
+/* This function is a callback which occurs when the
+ SOURCE's model has changed */
+static void
+update_model (
+ GtkTreeView *source,
+ GParamSpec *psp,
+ PsppireSelector *selector
+ )
+{
+ GtkTreeModel *model = gtk_tree_view_get_model (source);
+
+ g_assert (source == GTK_TREE_VIEW (selector->source));
+
+ if (model && (model == g_object_get_data (G_OBJECT (source), "model-copy")))
+ return;
+
+ if (model != NULL)
+ {
+ GtkTreeModel *new_model = gtk_tree_model_filter_new (model, NULL);
+
+ g_object_set_data (G_OBJECT (source), "model-copy", new_model);
+
+ gtk_tree_view_set_model (source, new_model);
+
+ gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (new_model),
+ is_source_item_visible,
+ selector,
+ NULL);
+
+ g_signal_connect_swapped (new_model,
+ "row-deleted",
+ G_CALLBACK (on_row_deleted), selector);
+
+ g_signal_connect_swapped (new_model,
+ "row-inserted",
+ G_CALLBACK (on_row_inserted), selector);
+
+ g_object_unref (new_model);
+ }
+}
+
+
+