X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-selector.c;h=d871d5d1511a69c894525be369e933ca85d6a2b6;hb=03134dc262125d1785891d6111eec58ca09b3b54;hp=7e0ade25009dd019125f8e7cc8b4a96df4c2f967;hpb=a9a69251edd625a50f271af5d64c157533b5fe48;p=pspp-builds.git diff --git a/src/ui/gui/psppire-selector.c b/src/ui/gui/psppire-selector.c index 7e0ade25..d871d5d1 100644 --- a/src/ui/gui/psppire-selector.c +++ b/src/ui/gui/psppire-selector.c @@ -303,6 +303,11 @@ psppire_selector_base_finalize(PsppireSelectorClass *class, static void psppire_selector_init (PsppireSelector *selector) { + selector->select_user_data = NULL; + selector->select_items = NULL; + selector->allow_selection = NULL; + selector->filter = NULL; + selector->arrow = gtk_arrow_new (GTK_ARROW_LEFT, GTK_SHADOW_NONE); selector->filtered_source = NULL; @@ -321,6 +326,10 @@ psppire_selector_init (PsppireSelector *selector) selector->source = NULL; selector->dest = NULL; selector->dispose_has_run = FALSE; + + + selector->row_activate_id = 0; + selector->source_select_id = 0; } @@ -680,14 +689,13 @@ set_tree_view_source (PsppireSelector *selector, GList *list = NULL; PsppireSelectorClass *class = g_type_class_peek (PSPPIRE_SELECTOR_TYPE); + + GtkTreeModel *model = gtk_tree_view_get_model (source); if ( ! (list = g_hash_table_lookup (class->source_hash, source))) { selector->filtered_source = - GTK_TREE_MODEL_FILTER (gtk_tree_model_filter_new - (gtk_tree_view_get_model (source), NULL)); - - gtk_tree_view_set_model (source, NULL); + GTK_TREE_MODEL_FILTER (gtk_tree_model_filter_new (model, NULL)); gtk_tree_view_set_model (source, GTK_TREE_MODEL (selector->filtered_source)); @@ -705,8 +713,7 @@ set_tree_view_source (PsppireSelector *selector, { /* Append this selector to the list and push the pair onto the hash table */ - selector->filtered_source = GTK_TREE_MODEL_FILTER ( - gtk_tree_view_get_model (source)); + selector->filtered_source = GTK_TREE_MODEL_FILTER (model); list = g_list_append (list, selector); g_hash_table_replace (class->source_hash, source, list); @@ -714,11 +721,17 @@ set_tree_view_source (PsppireSelector *selector, selection = gtk_tree_view_get_selection (source); - g_signal_connect (source, "row-activated", G_CALLBACK (on_row_activate), - selector); + if ( selector->row_activate_id ) + g_signal_handler_disconnect (source, selector->row_activate_id); - g_signal_connect (selection, "changed", G_CALLBACK (on_source_select), - selector); + selector->row_activate_id = + g_signal_connect (source, "row-activated", G_CALLBACK (on_row_activate), selector); + + if ( selector->source_select_id ) + g_signal_handler_disconnect (selection, selector->source_select_id); + + selector->source_select_id = + g_signal_connect (selection, "changed", G_CALLBACK (on_source_select), selector); } @@ -863,6 +876,12 @@ update_subjects (PsppireSelector *selector) if ( NULL == selector->dest ) return; + if ( selector->filter == NULL) + { + if (GTK_IS_TREE_VIEW (selector->dest)) + selector->filter = is_item_in_dest; + } + if ( NULL == selector->source ) return; @@ -900,22 +919,28 @@ update_subjects (PsppireSelector *selector) } -/* Set SELECT_FUNC and FILTER_FUNC for this selector */ +/* Set FILTER_FUNC for this selector */ void -psppire_selector_set_subjects (PsppireSelector *selector, - SelectItemsFunc *select_func, - FilterItemsFunc *filter_func, - gpointer user_data) +psppire_selector_set_filter_func (PsppireSelector *selector, + FilterItemsFunc *filter_func) { selector->filter = filter_func ; - selector->select_user_data = user_data; - if ( filter_func == NULL) + if ( selector->filter == NULL) { if (GTK_IS_TREE_VIEW (selector->dest)) selector->filter = is_item_in_dest; } +} + +/* Set SELECT_FUNC for this selector */ +void +psppire_selector_set_select_func (PsppireSelector *selector, + SelectItemsFunc *select_func, + gpointer user_data) +{ + selector->select_user_data = user_data; selector->select_items = select_func; }