X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-selector.c;h=82e21399768a05548cef4fc7b59e25fa4acf8ae3;hb=refs%2Fbuilds%2F20140209033012%2Fpspp;hp=372ef3c531f18adef3fde1c4dd470e860bffc098;hpb=5166b8309e1fec33d5122de360ba212ad3107a2c;p=pspp diff --git a/src/ui/gui/psppire-selector.c b/src/ui/gui/psppire-selector.c index 372ef3c531..82e2139976 100644 --- a/src/ui/gui/psppire-selector.c +++ b/src/ui/gui/psppire-selector.c @@ -599,7 +599,8 @@ static gboolean refilter (PsppireSelector *selector) { GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW (selector->source)); - gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (model)); + if (GTK_IS_TREE_MODEL_FILTER (model)) + gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (model)); return FALSE; } @@ -882,19 +883,31 @@ on_dest_data_delete (GtkTreeModel *tree_model, } +static void +remove_selector_handlers (PsppireSelector *selector, GObject *sel) +{ + g_signal_handlers_disconnect_by_data (sel, selector); +} + static void on_dest_model_changed (PsppireSelector *selector) { GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW (selector->dest)); - if ( model ) - { - g_signal_connect (model, "row-changed", G_CALLBACK (on_dest_data_change), - selector); - - g_signal_connect (model, "row-deleted", G_CALLBACK (on_dest_data_delete), - selector); - } + if (model == NULL) + return; + + g_signal_connect (model, "row-changed", G_CALLBACK (on_dest_data_change), + selector); + + g_signal_connect (model, "row-deleted", G_CALLBACK (on_dest_data_delete), + selector); + + g_signal_connect (selector, "destroy", G_CALLBACK (remove_selector_handlers), model); + + if ( selector->selecting ) return; + + refilter (selector); } /* Set the destination widget to DEST */