Assamese translation updated
[platform/upstream/evolution-data-server.git] / libedataserverui / e-categories-selector.c
index addd266..e2eedfa 100644 (file)
 
 #include <config.h>
 #include <glib/gi18n-lib.h>
-#include "libedataserver/e-categories.h"
+
+#include <libedataserver/libedataserver.h>
+
 #include "e-categories-selector.h"
 #include "e-data-server-ui-marshal.h"
 
-G_DEFINE_TYPE (
-       ECategoriesSelector,
-       e_categories_selector,
-       GTK_TYPE_TREE_VIEW)
+#define E_CATEGORIES_SELECTOR_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), E_TYPE_CATEGORIES_SELECTOR, ECategoriesSelectorPrivate))
 
 struct _ECategoriesSelectorPrivate {
        gboolean checkable;
@@ -55,6 +56,11 @@ enum {
 
 static gint signals[LAST_SIGNAL] = {0};
 
+G_DEFINE_TYPE (
+       ECategoriesSelector,
+       e_categories_selector,
+       GTK_TYPE_TREE_VIEW)
+
 static void
 categories_selector_build_model (ECategoriesSelector *selector)
 {
@@ -131,7 +137,8 @@ category_toggled_cb (GtkCellRenderer *renderer,
                gchar *category;
                gboolean active;
 
-               gtk_tree_model_get (model, &iter,
+               gtk_tree_model_get (
+                       model, &iter,
                        COLUMN_ACTIVE, &active,
                        COLUMN_CATEGORY, &category, -1);
 
@@ -224,7 +231,7 @@ categories_selector_dispose (GObject *object)
 {
        ECategoriesSelectorPrivate *priv;
 
-       priv = E_CATEGORIES_SELECTOR (object)->priv;
+       priv = E_CATEGORIES_SELECTOR_GET_PRIVATE (object);
 
        if (priv->selected_categories != NULL) {
                g_hash_table_destroy (priv->selected_categories);
@@ -294,9 +301,7 @@ e_categories_selector_init (ECategoriesSelector *selector)
        GtkTreeViewColumn *column;
        GtkTreeSelection *selection;
 
-       selector->priv = G_TYPE_INSTANCE_GET_PRIVATE (
-               selector, E_TYPE_CATEGORIES_SELECTOR,
-               ECategoriesSelectorPrivate);
+       selector->priv = E_CATEGORIES_SELECTOR_GET_PRIVATE (selector);
 
        selector->priv->checkable = TRUE;
        selector->priv->selected_categories = g_hash_table_new_full (
@@ -332,7 +337,7 @@ e_categories_selector_init (ECategoriesSelector *selector)
 
        g_signal_connect (
                selector, "key-press-event",
-               G_CALLBACK(categories_selector_key_press_event), NULL);
+               G_CALLBACK (categories_selector_key_press_event), NULL);
 
        e_categories_register_change_listener (
                G_CALLBACK (categories_selector_listener_cb), selector);
@@ -379,6 +384,9 @@ e_categories_selector_set_items_checkable (ECategoriesSelector *selector,
 
        g_return_if_fail (E_IS_CATEGORIES_SELECTOR (selector));
 
+       if ((selector->priv->checkable ? 1 : 0) == (checkable ? 1 : 0))
+               return;
+
        selector->priv->checkable = checkable;
 
        column = gtk_tree_view_get_column (
@@ -391,18 +399,24 @@ e_categories_selector_set_items_checkable (ECategoriesSelector *selector,
 /**
  * e_categories_selector_get_checked:
  *
+ * Free returned pointer with g_free().
+ *
  * Since: 3.2
  **/
-const gchar *
+gchar *
 e_categories_selector_get_checked (ECategoriesSelector *selector)
 {
-       GString *str = g_string_new ("");
+       GString *str;
        GList *list, *category;
 
        g_return_val_if_fail (E_IS_CATEGORIES_SELECTOR (selector), NULL);
 
+       str = g_string_new ("");
        list = g_hash_table_get_values (selector->priv->selected_categories);
 
+       /* to get them always in the same order */
+       list = g_list_sort (list, (GCompareFunc) g_utf8_collate);
+
        for (category = list; category != NULL; category = category->next) {
                if (str->len > 0)
                        g_string_append_printf (
@@ -452,7 +466,8 @@ e_categories_selector_set_checked (ECategoriesSelector *selector,
                        gchar *category_name;
                        gboolean found;
 
-                       gtk_tree_model_get (model, &iter,
+                       gtk_tree_model_get (
+                               model, &iter,
                                COLUMN_CATEGORY, &category_name,
                                -1);
                        found = (g_hash_table_lookup (
@@ -494,7 +509,7 @@ e_categories_selector_delete_selection (ECategoriesSelector *selector)
                selected, (GCompareFunc) gtk_tree_path_compare));
 
        /* Prevent the model from being rebuilt every time we
-          remove a category, since we're already modifying it. */
+        * remove a category, since we're already modifying it. */
        selector->priv->ignore_category_changes = TRUE;
 
        for (item = selected; item != NULL; item = item->next) {
@@ -503,7 +518,8 @@ e_categories_selector_delete_selection (ECategoriesSelector *selector)
                gchar *category;
 
                gtk_tree_model_get_iter (model, &iter, path);
-               gtk_tree_model_get (model, &iter,
+               gtk_tree_model_get (
+                       model, &iter,
                        COLUMN_CATEGORY, &category, -1);
                gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
                e_categories_remove (category);
@@ -529,9 +545,11 @@ e_categories_selector_delete_selection (ECategoriesSelector *selector)
 /**
  * e_categories_selector_get_selected:
  *
+ * Free returned pointer with g_free().
+ *
  * Since: 3.2
  **/
-const gchar *
+gchar *
 e_categories_selector_get_selected (ECategoriesSelector *selector)
 {
        GtkTreeModel *model;
@@ -553,7 +571,8 @@ e_categories_selector_get_selected (ECategoriesSelector *selector)
                gchar *category;
 
                gtk_tree_model_get_iter (model, &iter, path);
-               gtk_tree_model_get (model, &iter,
+               gtk_tree_model_get (
+                       model, &iter,
                        COLUMN_CATEGORY, &category, -1);
                if (str->len == 0)
                        g_string_assign (str, category);