aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--filter/ChangeLog3
-rw-r--r--filter/vfolder-rule.c41
2 files changed, 27 insertions, 17 deletions
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 <fejj@ximian.com>
+ * 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);