[evolution] I#463 - Deselect category when it's deleted in the Category editor



commit af78ca98d04f44c803f082ff977b0eaf7cae20f2
Author: Milan Crha <mcrha redhat com>
Date:   Thu Jun 6 19:10:43 2019 +0200

    I#463 - Deselect category when it's deleted in the Category editor
    
    Closes https://gitlab.gnome.org/GNOME/evolution/issues/463

 src/e-util/e-categories-editor.c   | 33 +++++++++++++++++----------------
 src/e-util/e-categories-selector.c |  7 +++++++
 2 files changed, 24 insertions(+), 16 deletions(-)
---
diff --git a/src/e-util/e-categories-editor.c b/src/e-util/e-categories-editor.c
index 8391824f08..8251697109 100644
--- a/src/e-util/e-categories-editor.c
+++ b/src/e-util/e-categories-editor.c
@@ -90,16 +90,13 @@ categories_editor_selection_changed_cb (ECategoriesEditor *editor,
 }
 
 static void
-category_checked_cb (ECategoriesSelector *selector,
-                     const gchar *category,
-                     const gboolean checked,
-                     ECategoriesEditor *editor)
+categories_editor_update_entry (ECategoriesEditor *editor)
 {
        GtkEntry *entry;
        gchar *categories;
 
        entry = GTK_ENTRY (editor->priv->categories_entry);
-       categories = e_categories_selector_get_checked (selector);
+       categories = e_categories_selector_get_checked (editor->priv->categories_list);
 
        gtk_entry_set_text (entry, categories);
 
@@ -155,6 +152,14 @@ edit_button_clicked_cb (GtkButton *button,
        g_free (category);
 }
 
+static void
+delete_button_clicked_cb (GtkButton *button,
+                         ECategoriesEditor *editor)
+{
+       e_categories_selector_delete_selection (editor->priv->categories_list);
+       categories_editor_update_entry (editor);
+}
+
 static void
 categories_editor_set_property (GObject *object,
                                 guint property_id,
@@ -281,9 +286,9 @@ e_categories_editor_init (ECategoriesEditor *editor)
        gtk_tree_view_set_headers_visible (
                GTK_TREE_VIEW (categories_list), FALSE);
        gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (categories_list), TRUE);
-       g_signal_connect (
+       g_signal_connect_swapped (
                G_OBJECT (categories_list), "category-checked",
-               G_CALLBACK (category_checked_cb), editor);
+               G_CALLBACK (categories_editor_update_entry), editor);
 
        hbuttonbox1 = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL);
        g_object_set (
@@ -337,10 +342,10 @@ e_categories_editor_init (ECategoriesEditor *editor)
                G_CALLBACK (edit_button_clicked_cb), editor);
 
        editor->priv->delete_button = button_delete;
-       g_signal_connect_swapped (
+       g_signal_connect (
                editor->priv->delete_button, "clicked",
-               G_CALLBACK (e_categories_selector_delete_selection),
-               editor->priv->categories_list);
+               G_CALLBACK (delete_button_clicked_cb),
+               editor);
 
        g_signal_connect (
                editor->priv->categories_entry, "changed",
@@ -401,14 +406,10 @@ void
 e_categories_editor_set_categories (ECategoriesEditor *editor,
                                     const gchar *categories)
 {
-       ECategoriesSelector *categories_list;
-
        g_return_if_fail (E_IS_CATEGORIES_EDITOR (editor));
 
-       categories_list = editor->priv->categories_list;
-
-       e_categories_selector_set_checked (categories_list, categories);
-       category_checked_cb (categories_list, NULL, FALSE, editor);
+       e_categories_selector_set_checked (editor->priv->categories_list, categories);
+       categories_editor_update_entry (editor);
 }
 
 /**
diff --git a/src/e-util/e-categories-selector.c b/src/e-util/e-categories-selector.c
index cb55e8daa8..2d21014e7b 100644
--- a/src/e-util/e-categories-selector.c
+++ b/src/e-util/e-categories-selector.c
@@ -521,6 +521,13 @@ e_categories_selector_delete_selection (ECategoriesSelector *selector)
                        COLUMN_CATEGORY, &category, -1);
                gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
                e_categories_remove (category);
+
+               if (g_hash_table_remove (selector->priv->selected_categories, category)) {
+                       g_signal_emit (
+                               selector, signals[CATEGORY_CHECKED], 0,
+                               category, FALSE);
+               }
+
                g_free (category);
        }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]