From 13398c9928a151d593399480b05674a5cf44abf4 Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Mon, 17 Mar 2003 21:44:44 +0000 Subject: Fixed to work properly. Fixes bug #39654. 2003-03-17 Jeffrey Stedfast * vfolder-rule.c (source_remove): Fixed to work properly. Fixes bug #39654. svn path=/trunk/; revision=20321 --- filter/ChangeLog | 3 +++ filter/vfolder-rule.c | 41 ++++++++++++++++++++++++----------------- 2 files changed, 27 insertions(+), 17 deletions(-) (limited to 'filter') diff --git a/filter/ChangeLog b/filter/ChangeLog index bdfa2d776b..aece10729b 100644 --- a/filter/ChangeLog +++ b/filter/ChangeLog @@ -1,5 +1,8 @@ 2003-03-17 Jeffrey Stedfast + * vfolder-rule.c (source_remove): Fixed to work properly. Fixes + bug #39654. + * rule-editor.c (rule_editor_construct): Always add a Cancel button here, but if !enable_undo - make the response id GTK_RESPONSE_CANCEL rather than GTK_RESPONSE_REJECT (which does diff --git a/filter/vfolder-rule.c b/filter/vfolder-rule.c index fc7e1b853a..efd58b68a9 100644 --- a/filter/vfolder-rule.c +++ b/filter/vfolder-rule.c @@ -432,36 +432,43 @@ source_remove (GtkWidget *widget, struct _source_data *data) GtkTreePath *path; GtkTreeIter iter; int index = 0; - int len; + int n; + + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (data->list)); source = NULL; while ((source = vfolder_rule_next_source (data->vr, source))) { - if (data->current == source) { - vfolder_rule_remove_source (data->vr, source); - - path = gtk_tree_path_new (); - gtk_tree_path_append_index (path, index); + path = gtk_tree_path_new (); + gtk_tree_path_append_index (path, index); + + if (gtk_tree_selection_path_is_selected (selection, path)) { gtk_tree_model_get_iter (GTK_TREE_MODEL (data->model), &iter, path); + + vfolder_rule_remove_source (data->vr, source); gtk_list_store_remove (data->model, &iter); gtk_tree_path_free (path); - data->current = NULL; - /* now select the next rule */ - len = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (data->model), NULL); - index = index >= len ? len - 1 : index; - - path = gtk_tree_path_new (); - gtk_tree_path_append_index (path, index); - gtk_tree_model_get_iter (GTK_TREE_MODEL (data->model), &iter, path); - gtk_tree_path_free (path); + n = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (data->model), NULL); + index = index >= n ? n - 1 : index; - selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (data->list)); - gtk_tree_selection_select_iter (selection, &iter); + if (index >= 0) { + path = gtk_tree_path_new (); + gtk_tree_path_append_index (path, index); + gtk_tree_model_get_iter (GTK_TREE_MODEL (data->model), &iter, path); + gtk_tree_path_free (path); + + gtk_tree_selection_select_iter (selection, &iter); + gtk_tree_model_get (GTK_TREE_MODEL (data->model), &iter, 0, &data->current, -1); + } else { + data->current = NULL; + } break; } + index++; + gtk_tree_path_free (path); } set_sensitive (data); -- cgit