* Add a new dialog, Sort Dialog (WID-DIA021).
authorJavier Fernandez Garcia-Boente <jfernandez@igalia.com>
Sat, 28 Apr 2007 17:47:21 +0000 (17:47 +0000)
committerJavier Fernandez Garcia-Boente <jfernandez@igalia.com>
Sat, 28 Apr 2007 17:47:21 +0000 (17:47 +0000)
* Connect iUIManager actions to sort dialog.
* Store sort settings into gconf configuration parameters.

pmo-trunk-r1711

src/maemo/modest-main-window.c
src/maemo/modest-platform.c
src/modest-platform.h
src/modest-ui-actions.c
src/modest-widget-memory.c
src/widgets/modest-header-view.c
src/widgets/modest-header-view.h

index 6f3be3f..709c116 100644 (file)
@@ -660,7 +660,6 @@ modest_main_window_show_toolbar (ModestWindow *self,
        ModestWindowPrivate *parent_priv = NULL;        
        GtkWidget *reply_button = NULL, *menu = NULL;
        GtkWidget *placeholder = NULL;
        ModestWindowPrivate *parent_priv = NULL;        
        GtkWidget *reply_button = NULL, *menu = NULL;
        GtkWidget *placeholder = NULL;
-       GtkWidget *tool_item = NULL;
        gint insert_index;
 
        parent_priv = MODEST_WINDOW_GET_PRIVATE(self);
        gint insert_index;
 
        parent_priv = MODEST_WINDOW_GET_PRIVATE(self);
@@ -673,24 +672,24 @@ modest_main_window_show_toolbar (ModestWindow *self,
                /* Set homogeneous toolbar */
                gtk_container_foreach (GTK_CONTAINER (parent_priv->toolbar), 
                                       set_homogeneous, NULL);
                /* Set homogeneous toolbar */
                gtk_container_foreach (GTK_CONTAINER (parent_priv->toolbar), 
                                       set_homogeneous, NULL);
+       
+               priv->progress_toolitem = GTK_WIDGET (gtk_tool_item_new ());
+               priv->cancel_toolitem = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarCancel");
+               priv->refresh_toolitem = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarSendReceive");
+               priv->sort_toolitem = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarSort");
+               gtk_tool_item_set_expand (GTK_TOOL_ITEM (priv->progress_toolitem), FALSE);
+               gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (priv->progress_toolitem), FALSE);
+               gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (priv->cancel_toolitem), FALSE);
+               gtk_tool_item_set_expand (GTK_TOOL_ITEM (priv->cancel_toolitem), FALSE);
 
                /* Add ProgressBar (Transfer toolbar) */ 
                priv->progress_bar = modest_progress_bar_widget_new ();
                gtk_widget_set_no_show_all (priv->progress_bar, TRUE);
                placeholder = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ProgressBarView");
                insert_index = gtk_toolbar_get_item_index(GTK_TOOLBAR (parent_priv->toolbar), GTK_TOOL_ITEM(placeholder));
 
                /* Add ProgressBar (Transfer toolbar) */ 
                priv->progress_bar = modest_progress_bar_widget_new ();
                gtk_widget_set_no_show_all (priv->progress_bar, TRUE);
                placeholder = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ProgressBarView");
                insert_index = gtk_toolbar_get_item_index(GTK_TOOLBAR (parent_priv->toolbar), GTK_TOOL_ITEM(placeholder));
-               tool_item = GTK_WIDGET (gtk_tool_item_new ());
-/*             gtk_widget_set_no_show_all (tool_item, TRUE); */
-               gtk_container_add (GTK_CONTAINER (tool_item), priv->progress_bar);
-/*             gtk_tool_item_set_expand (GTK_TOOL_ITEM (tool_item), TRUE); */
-/*             gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (tool_item), TRUE); */
-               gtk_toolbar_insert(GTK_TOOLBAR(parent_priv->toolbar), GTK_TOOL_ITEM (tool_item), insert_index);
+               gtk_container_add (GTK_CONTAINER (priv->progress_toolitem), priv->progress_bar);
+               gtk_toolbar_insert(GTK_TOOLBAR(parent_priv->toolbar), GTK_TOOL_ITEM (priv->progress_toolitem), insert_index);
                
                
-               priv->progress_toolitem = tool_item;
-               priv->cancel_toolitem = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarCancel");
-               priv->refresh_toolitem = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarSendReceive");
-               priv->sort_toolitem = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarSort");
-
                /* Add it to the observers list */
                priv->progress_widgets = g_slist_prepend(priv->progress_widgets, priv->progress_bar);
 
                /* Add it to the observers list */
                priv->progress_widgets = g_slist_prepend(priv->progress_widgets, priv->progress_bar);
 
@@ -1033,33 +1032,22 @@ static void
 set_toolbar_mode (ModestMainWindow *self, 
                  ModestToolBarModes mode)
 {
 set_toolbar_mode (ModestMainWindow *self, 
                  ModestToolBarModes mode)
 {
-       ModestWindowPrivate *parent_priv;
        ModestMainWindowPrivate *priv;
        ModestMainWindowPrivate *priv;
-       GtkAction *sort_action, *refresh_action, *cancel_action;
 
        g_return_if_fail (MODEST_IS_MAIN_WINDOW (self));
 
        priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
 
        g_return_if_fail (MODEST_IS_MAIN_WINDOW (self));
 
        priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
-       parent_priv = MODEST_WINDOW_GET_PRIVATE(self);
-
-       cancel_action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/ToolbarCancel");
-       sort_action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/ToolbarSort");
-       refresh_action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/ToolbarSendReceive");
                        
        switch (mode) {
        case TOOLBAR_MODE_NORMAL:
                        
        switch (mode) {
        case TOOLBAR_MODE_NORMAL:
-/*             gtk_action_set_visible (sort_action, TRUE); */
-/*             gtk_action_set_visible (refresh_action, TRUE); */
-/*             gtk_action_set_visible (cancel_action, FALSE); */
-/*             gtk_widget_hide (priv->progress_toolitem); */
-/*             gtk_widget_hide (priv->progress_bar); */
-
                if (priv->sort_toolitem)
                gtk_widget_show (priv->sort_toolitem);
                
                if (priv->refresh_toolitem)
                        gtk_widget_show (priv->refresh_toolitem);
                        
                if (priv->sort_toolitem)
                gtk_widget_show (priv->sort_toolitem);
                
                if (priv->refresh_toolitem)
                        gtk_widget_show (priv->refresh_toolitem);
                        
+               if (priv->progress_toolitem)
+                       gtk_tool_item_set_expand (GTK_TOOL_ITEM (priv->progress_toolitem), FALSE);
                if (priv->progress_bar)
                        gtk_widget_hide (priv->progress_bar);
                        
                if (priv->progress_bar)
                        gtk_widget_hide (priv->progress_bar);
                        
@@ -1067,18 +1055,14 @@ set_toolbar_mode (ModestMainWindow *self,
                        gtk_widget_hide (priv->cancel_toolitem);
                break;
        case TOOLBAR_MODE_TRANSFER:
                        gtk_widget_hide (priv->cancel_toolitem);
                break;
        case TOOLBAR_MODE_TRANSFER:
-/*             gtk_action_set_visible (sort_action, FALSE); */
-/*             gtk_action_set_visible (refresh_action, FALSE); */
-/*             gtk_action_set_visible (cancel_action, TRUE); */
-/*             gtk_widget_show (priv->progress_toolitem); */
-/*             gtk_widget_show (priv->progress_bar); */
-
                if (priv->sort_toolitem)
                        gtk_widget_hide (priv->sort_toolitem);
                
                if (priv->refresh_toolitem)
                        gtk_widget_hide (priv->refresh_toolitem);
                
                if (priv->sort_toolitem)
                        gtk_widget_hide (priv->sort_toolitem);
                
                if (priv->refresh_toolitem)
                        gtk_widget_hide (priv->refresh_toolitem);
                
+               if (priv->progress_toolitem)
+                       gtk_tool_item_set_expand (GTK_TOOL_ITEM (priv->progress_toolitem), TRUE);
                if (priv->progress_bar)
                        gtk_widget_show (priv->progress_bar);
                        
                if (priv->progress_bar)
                        gtk_widget_show (priv->progress_bar);
                        
@@ -1086,12 +1070,6 @@ set_toolbar_mode (ModestMainWindow *self,
                        gtk_widget_show (priv->cancel_toolitem);
                break;
        default:
                        gtk_widget_show (priv->cancel_toolitem);
                break;
        default:
-/*             gtk_action_set_visible (sort_action, TRUE); */
-/*             gtk_action_set_visible (refresh_action, TRUE); */
-/*             gtk_action_set_visible (cancel_action, FALSE); */
-/*             gtk_widget_hide (priv->progress_toolitem); */
-/*             gtk_widget_hide (priv->progress_bar); */
-
                if (priv->cancel_toolitem)
                        gtk_widget_show (priv->sort_toolitem);
                        
                if (priv->cancel_toolitem)
                        gtk_widget_show (priv->sort_toolitem);
                        
@@ -1114,14 +1092,29 @@ on_queue_changed (ModestMailOperationQueue *queue,
 {
        GSList *tmp;
        ModestMainWindowPrivate *priv;
 {
        GSList *tmp;
        ModestMainWindowPrivate *priv;
-
+       ModestMailOperationId op_id;
+       ModestToolBarModes mode;
+       
        priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
 
        priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
 
+       /* Get toolbar mode from operation id*/
+       op_id = modest_mail_operation_get_id (mail_op);
+       switch (op_id) {
+       case MODEST_MAIL_OPERATION_ID_SEND:
+       case MODEST_MAIL_OPERATION_ID_RECEIVE:
+               mode = TOOLBAR_MODE_TRANSFER;
+               break;
+       default:
+               mode = TOOLBAR_MODE_NORMAL;
+               
+       }
+               
+       /* Add operation observers and change toolbar if neccessary*/
        tmp = priv->progress_widgets;
        tmp = priv->progress_widgets;
-
        switch (type) {
        case MODEST_MAIL_OPERATION_QUEUE_OPERATION_ADDED:
        switch (type) {
        case MODEST_MAIL_OPERATION_QUEUE_OPERATION_ADDED:
-               set_toolbar_mode (MODEST_MAIN_WINDOW(self), TOOLBAR_MODE_TRANSFER);
+               if (mode != TOOLBAR_MODE_NORMAL) 
+                       set_toolbar_mode (MODEST_MAIN_WINDOW(self), mode);
                while (tmp) {
                        modest_progress_object_add_operation (MODEST_PROGRESS_OBJECT (tmp->data),
                                                              mail_op);
                while (tmp) {
                        modest_progress_object_add_operation (MODEST_PROGRESS_OBJECT (tmp->data),
                                                              mail_op);
@@ -1129,7 +1122,8 @@ on_queue_changed (ModestMailOperationQueue *queue,
                }
                break;
        case MODEST_MAIL_OPERATION_QUEUE_OPERATION_REMOVED:
                }
                break;
        case MODEST_MAIL_OPERATION_QUEUE_OPERATION_REMOVED:
-               set_toolbar_mode (MODEST_MAIN_WINDOW(self), TOOLBAR_MODE_NORMAL);
+               if (mode != TOOLBAR_MODE_NORMAL) 
+                       set_toolbar_mode (MODEST_MAIN_WINDOW(self), TOOLBAR_MODE_NORMAL);
                while (tmp) {
                        modest_progress_object_remove_operation (MODEST_PROGRESS_OBJECT (tmp->data),
                                                                 mail_op);
                while (tmp) {
                        modest_progress_object_remove_operation (MODEST_PROGRESS_OBJECT (tmp->data),
                                                                 mail_op);
index c91d394..8d6ba12 100644 (file)
 #include <glib/gi18n.h>
 #include <modest-platform.h>
 #include <modest-runtime.h>
 #include <glib/gi18n.h>
 #include <modest-platform.h>
 #include <modest-runtime.h>
+#include <modest-main-window.h>
+#include <modest-header-view.h>
+
+#include <modest-hildon-includes.h>
+
 #include <dbus_api/modest-dbus-callbacks.h>
 #include <libosso.h>
 #include <dbus_api/modest-dbus-callbacks.h>
 #include <libosso.h>
-#include <modest-hildon-includes.h>
 #include <tny-maemo-conic-device.h>
 #include <tny-folder.h>
 #include <gtk/gtkicontheme.h>
 #include <tny-maemo-conic-device.h>
 #include <tny-folder.h>
 #include <gtk/gtkicontheme.h>
@@ -387,6 +391,106 @@ entry_changed (GtkEditable *editable,
        g_free (chars);
 }
 
        g_free (chars);
 }
 
+static void
+launch_sort_headers_dialog (GtkWindow *parent_window,
+                           HildonSortDialog *dialog)
+{
+       ModestHeaderView *header_view = NULL;
+       GList *cols = NULL;
+       GList *tmp = NULL;
+       GtkSortType sort_type;
+       gint sort_key;
+       gint result;
+       
+       /* Get header window */
+       if (MODEST_IS_MAIN_WINDOW (parent_window)) {
+               header_view = MODEST_HEADER_VIEW(modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(parent_window),
+                                                                                     MODEST_WIDGET_TYPE_HEADER_VIEW));
+       }
+       if (!header_view) return;
+
+       /* Add sorting keys */
+       cols = modest_header_view_get_columns (header_view);    
+       if (cols == NULL) return;
+       int num_cols = g_list_length(cols);
+       int sort_ids[num_cols];
+       int sort_model_ids[num_cols];
+       GtkTreeViewColumn *sort_cols[num_cols];
+       for (tmp=cols; tmp; tmp=tmp->next) {
+               gint col_id = GPOINTER_TO_INT (g_object_get_data(G_OBJECT(tmp->data), MODEST_HEADER_VIEW_COLUMN));
+               switch (col_id) {
+               case MODEST_HEADER_VIEW_COLUMN_COMPACT_FLAG:
+                       sort_key = hildon_sort_dialog_add_sort_key (dialog, _("mcen_li_sort_attachment"));
+                       sort_ids[sort_key] = col_id;
+                       sort_model_ids[sort_key] = TNY_HEADER_FLAG_ATTACHMENTS;
+                       sort_cols[sort_key] = tmp->data;
+
+                       sort_key = hildon_sort_dialog_add_sort_key (dialog, _("mcen_li_sort_priority"));
+                       sort_ids[sort_key] = col_id;
+                       sort_model_ids[sort_key] = TNY_HEADER_FLAG_PRIORITY;
+                       sort_cols[sort_key] = tmp->data;
+                       break;
+               case MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_OUT:
+                       sort_key = hildon_sort_dialog_add_sort_key (dialog, _("mcen_li_sort_sender_recipient"));
+                       sort_ids[sort_key] = col_id;
+                       sort_model_ids[sort_key] = TNY_GTK_HEADER_LIST_MODEL_TO_COLUMN;
+                       sort_cols[sort_key] = tmp->data;
+
+                       sort_key = hildon_sort_dialog_add_sort_key (dialog, _("mcen_li_sort_subject"));
+                       sort_ids[sort_key] = col_id;
+                       sort_model_ids[sort_key] = TNY_GTK_HEADER_LIST_MODEL_SUBJECT_COLUMN;
+                       sort_cols[sort_key] = tmp->data;
+                       break;
+               case MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_IN:
+                       sort_key = hildon_sort_dialog_add_sort_key (dialog, _("mcen_li_sort_sender_recipient"));
+                       sort_ids[sort_key] = col_id;
+                       sort_model_ids[sort_key] = TNY_GTK_HEADER_LIST_MODEL_FROM_COLUMN;
+                       sort_cols[sort_key] = tmp->data;
+
+                       sort_key = hildon_sort_dialog_add_sort_key (dialog, _("mcen_li_sort_subject"));
+                       sort_ids[sort_key] = col_id;
+                       sort_model_ids[sort_key] = TNY_GTK_HEADER_LIST_MODEL_SUBJECT_COLUMN;
+                       sort_cols[sort_key] = tmp->data;
+                       break;
+               case MODEST_HEADER_VIEW_COLUMN_COMPACT_RECEIVED_DATE:
+                       sort_key = hildon_sort_dialog_add_sort_key (dialog, _("mcen_li_sort_date"));
+                       sort_ids[sort_key] = col_id;
+                       sort_model_ids[sort_key] = TNY_GTK_HEADER_LIST_MODEL_DATE_RECEIVED_TIME_T_COLUMN,
+                       sort_cols[sort_key] = tmp->data;
+                       break;
+               case MODEST_HEADER_VIEW_COLUMN_COMPACT_SENT_DATE:
+                       sort_key = hildon_sort_dialog_add_sort_key (dialog, _("mcen_li_sort_date"));
+                       sort_ids[sort_key] = col_id;
+                       sort_model_ids[sort_key] = TNY_GTK_HEADER_LIST_MODEL_DATE_SENT_TIME_T_COLUMN,
+                       sort_cols[sort_key] = tmp->data;
+                       break;
+               default:
+                       return;
+               }
+       }
+       
+       /* Launch dialogs */
+       result = gtk_dialog_run (GTK_DIALOG (dialog));
+       if (result == GTK_RESPONSE_OK) {
+               sort_key = hildon_sort_dialog_get_sort_key (dialog);
+               sort_type = hildon_sort_dialog_get_sort_order (dialog);
+               if (sort_ids[sort_key] == MODEST_HEADER_VIEW_COLUMN_COMPACT_FLAG)
+                       g_object_set_data(G_OBJECT(sort_cols[sort_key]), 
+                                         MODEST_HEADER_VIEW_FLAG_SORT, 
+                                         GINT_TO_POINTER(sort_model_ids[sort_key]));
+               
+               else
+                       gtk_tree_view_column_set_sort_column_id (sort_cols[sort_key], sort_model_ids[sort_key]);
+               
+               modest_header_view_sort_by_column_id (header_view, sort_ids[sort_key], sort_type);
+       }
+       
+       /* free */
+       g_list_free(cols);      
+}
+
+
+
 gint
 modest_platform_run_new_folder_dialog (GtkWindow *parent_window,
                                       TnyFolderStore *parent_folder,
 gint
 modest_platform_run_new_folder_dialog (GtkWindow *parent_window,
                                       TnyFolderStore *parent_folder,
@@ -502,3 +606,24 @@ gboolean modest_platform_connect_and_wait (GtkWindow *parent_window)
        return TRUE;
 }
 
        return TRUE;
 }
 
+void
+modest_platform_run_sort_dialog (GtkWindow *parent_window,
+                                ModestSortDialogType type)
+{
+       GtkWidget *dialog = NULL;
+
+       /* Build dialog */
+       dialog = hildon_sort_dialog_new (parent_window);
+       gtk_window_set_modal (GTK_WINDOW(dialog), TRUE);
+       
+       /* Fill sort keys */
+       switch (type) {
+       case MODEST_SORT_HEADERS:
+               launch_sort_headers_dialog (parent_window, 
+                                           HILDON_SORT_DIALOG(dialog));
+               break;
+       }
+       
+       /* Free */
+       gtk_widget_destroy (GTK_WIDGET (dialog));
+}
index 3811cf4..ded8eea 100644 (file)
@@ -44,6 +44,10 @@ typedef enum _ModestInformationDialogType {
        MODEST_INFORMATION_DELETE_FOLDER,
 } ModestInformationDialogType;
 
        MODEST_INFORMATION_DELETE_FOLDER,
 } ModestInformationDialogType;
 
+typedef enum _ModestSortDialogType {
+       MODEST_SORT_HEADERS,
+} ModestSortDialogType;
+
 /**
  * modest_platform_platform_init:
  *
 /**
  * modest_platform_platform_init:
  *
@@ -161,6 +165,15 @@ gint      modest_platform_run_confirmation_dialog      (GtkWindow *parent_window
  **/
 void      modest_platform_run_information_dialog       (GtkWindow *parent_window,
                                                        ModestInformationDialogType type);
  **/
 void      modest_platform_run_information_dialog       (GtkWindow *parent_window,
                                                        ModestInformationDialogType type);
+/**
+ * modest_platform_run_sort_dialog:
+ * @parent_window: the parent #GtkWindow of the dialog
+ * @type: the sort dialog type.
+ * 
+ * shows a sort dialog
+ **/
+void      modest_platform_run_sort_dialog       (GtkWindow *parent_window, 
+                                                ModestSortDialogType type);
                
 /*
  * modest_platform_connect_and_wait:
                
 /*
  * modest_platform_connect_and_wait:
index 9a11cdd..66ac0b7 100644 (file)
@@ -168,7 +168,7 @@ modest_ui_actions_on_delete (GtkAction *action, ModestWindow *win)
                        /* TODO: thick grain mail operation involving
                           a list of objects. Composite pattern ??? */
                        /* TODO: add confirmation dialog */
                        /* TODO: thick grain mail operation involving
                           a list of objects. Composite pattern ??? */
                        /* TODO: add confirmation dialog */
-                       mail_op = modest_mail_operation_new ();
+                       mail_op = modest_mail_operation_new_with_id (MODEST_MAIL_OPERATION_ID_DELETE);
                        modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
                                                         mail_op);
 
                        modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
                                                         mail_op);
 
@@ -587,13 +587,18 @@ void
 modest_ui_actions_on_sort (GtkAction *action, 
                           ModestWindow *window)
 {
 modest_ui_actions_on_sort (GtkAction *action, 
                           ModestWindow *window)
 {
-       ModestWindowMgr *mgr;
-
        g_return_if_fail (MODEST_IS_WINDOW(window));
 
        g_return_if_fail (MODEST_IS_WINDOW(window));
 
-       /* Show sorting dialog */
-       mgr = modest_runtime_get_window_mgr ();
-       
+       if (MODEST_IS_MAIN_WINDOW (window)) {
+               GtkWidget *header_view;
+               header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(window),
+                                                                  MODEST_WIDGET_TYPE_HEADER_VIEW);
+               if (!header_view)
+                       return;
+
+               /* Show sorting dialog */
+               modest_platform_run_sort_dialog (GTK_WINDOW (window), MODEST_SORT_HEADERS);     
+       }
 }
 
 
 }
 
 
@@ -1100,7 +1105,7 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window)
        from = modest_account_mgr_get_from_string (account_mgr, account_name);
 
        /* Create the mail operation */         
        from = modest_account_mgr_get_from_string (account_mgr, account_name);
 
        /* Create the mail operation */         
-       mail_operation = modest_mail_operation_new ();
+       mail_operation = modest_mail_operation_new_with_id (MODEST_MAIL_OPERATION_ID_SEND);
        modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_operation);
 
        modest_mail_operation_send_new_mail (mail_operation,
        modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_operation);
 
        modest_mail_operation_send_new_mail (mail_operation,
@@ -1415,7 +1420,7 @@ delete_folder (ModestMainWindow *main_window, gboolean move_to_trash)
        g_free (message);
 
        if (response == GTK_RESPONSE_OK) {
        g_free (message);
 
        if (response == GTK_RESPONSE_OK) {
-               ModestMailOperation *mail_op = modest_mail_operation_new ();
+               ModestMailOperation *mail_op = modest_mail_operation_new_with_id (MODEST_MAIL_OPERATION_ID_DELETE);
 
                modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
                                                 mail_op);
 
                modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
                                                 mail_op);
@@ -2031,7 +2036,7 @@ modest_ui_actions_on_main_window_move_to (GtkAction *action,
                src_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view));
 
                if (TNY_IS_FOLDER (src_folder)) {
                src_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view));
 
                if (TNY_IS_FOLDER (src_folder)) {
-                       mail_op = modest_mail_operation_new ();
+                       mail_op = modest_mail_operation_new_with_id (MODEST_MAIL_OPERATION_ID_RECEIVE);
                        modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), 
                                                         mail_op);
 
                        modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), 
                                                         mail_op);
 
@@ -2128,7 +2133,7 @@ modest_ui_actions_on_msg_view_window_move_to (GtkAction *action,
                        ModestMailOperation *mail_op;
 
                        /* Create mail op */
                        ModestMailOperation *mail_op;
 
                        /* Create mail op */
-                       mail_op = modest_mail_operation_new ();
+                       mail_op = modest_mail_operation_new_with_id (MODEST_MAIL_OPERATION_ID_RECEIVE);
                        modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), 
                                                         mail_op);
                        
                        modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), 
                                                         mail_op);
                        
index 9afa6fe..6c2ab5b 100644 (file)
@@ -258,7 +258,8 @@ save_settings_header_view (ModestConf *conf, ModestHeaderView *header_view,
        TnyFolderType type;
        ModestHeaderViewStyle style;
        gint sort_colid;
        TnyFolderType type;
        ModestHeaderViewStyle style;
        gint sort_colid;
-
+       GtkSortType sort_type;
+       
        folder = modest_header_view_get_folder (header_view);
        if (!folder || modest_header_view_is_empty (header_view))
                return TRUE; /* no non-empty folder: no settings */
        folder = modest_header_view_get_folder (header_view);
        if (!folder || modest_header_view_is_empty (header_view))
                return TRUE; /* no non-empty folder: no settings */
@@ -276,6 +277,7 @@ save_settings_header_view (ModestConf *conf, ModestHeaderView *header_view,
         * are also used in modest-init.
         */
        sort_colid = modest_header_view_get_sort_column_id (header_view, type); 
         * are also used in modest-init.
         */
        sort_colid = modest_header_view_get_sort_column_id (header_view, type); 
+       sort_type = modest_header_view_get_sort_type (header_view, type); 
        while (cursor) {
 
                int col_id, width, sort;
        while (cursor) {
 
                int col_id, width, sort;
@@ -287,7 +289,7 @@ save_settings_header_view (ModestConf *conf, ModestHeaderView *header_view,
                width = gtk_tree_view_column_get_width (col);
                sort = 0;
                if (sort_colid == col_id)
                width = gtk_tree_view_column_get_width (col);
                sort = 0;
                if (sort_colid == col_id)
-                       sort = 1;
+                       sort = (sort_type == GTK_SORT_ASCENDING) ? 1:-1;
                        
                g_string_append_printf (str, "%d:%d:%d ", col_id, width, sort);
                cursor = g_list_next (cursor);
                        
                g_string_append_printf (str, "%d:%d:%d ", col_id, width, sort);
                cursor = g_list_next (cursor);
@@ -333,7 +335,7 @@ restore_settings_header_view (ModestConf *conf, ModestHeaderView *header_view,
                GtkTreeModel *sortable;
 
                cursor = data = modest_conf_get_string (conf, key, NULL);
                GtkTreeModel *sortable;
 
                cursor = data = modest_conf_get_string (conf, key, NULL);
-               while (cursor && sscanf (cursor, "%u:%u:%u ", &col, &width, &sort) == 3) {
+               while (cursor && sscanf (cursor, "%d:%d:%d ", &col, &width, &sort) == 3) {
                        cols      = g_list_append (cols, GINT_TO_POINTER(col));
                        colwidths = g_list_append (colwidths, GINT_TO_POINTER(width));
                        colsortables = g_list_append (colsortables, GINT_TO_POINTER(sort));
                        cols      = g_list_append (cols, GINT_TO_POINTER(col));
                        colwidths = g_list_append (colwidths, GINT_TO_POINTER(width));
                        colsortables = g_list_append (colsortables, GINT_TO_POINTER(sort));
@@ -355,12 +357,13 @@ restore_settings_header_view (ModestConf *conf, ModestHeaderView *header_view,
                                if (width > 0)
                                        gtk_tree_view_column_set_max_width(GTK_TREE_VIEW_COLUMN(colcursor->data),
                                                                           width);
                                if (width > 0)
                                        gtk_tree_view_column_set_max_width(GTK_TREE_VIEW_COLUMN(colcursor->data),
                                                                           width);
-                               if (sort > 0) {
+                               if (sort != 0) {
                                        int colid = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(colcursor->data), MODEST_HEADER_VIEW_COLUMN));
                                        int colid = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(colcursor->data), MODEST_HEADER_VIEW_COLUMN));
-                                       modest_header_view_set_sort_column_id (header_view, colid, type);
+                                       GtkSortType sort_type = (sort == 1) ? GTK_SORT_ASCENDING : GTK_SORT_DESCENDING; 
+                                       modest_header_view_set_sort_params (header_view, colid, sort_type, type);
                                        gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE(sortable),
                                                                              colid,
                                        gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE(sortable),
                                                                              colid,
-                                                                             GTK_SORT_DESCENDING);
+                                                                             sort_type);
                                        gtk_tree_sortable_sort_column_changed (GTK_TREE_SORTABLE(sortable));
                                }
                                colcursor = g_list_next (colcursor);
                                        gtk_tree_sortable_sort_column_changed (GTK_TREE_SORTABLE(sortable));
                                }
                                colcursor = g_list_next (colcursor);
index c677b18..0b0bdcf 100644 (file)
@@ -75,6 +75,7 @@ struct _ModestHeaderViewPrivate {
        TnyFolderMonitor     *monitor;
        GMutex               *monitor_lock;
        gint sort_colid[2][TNY_FOLDER_TYPE_NUM];
        TnyFolderMonitor     *monitor;
        GMutex               *monitor_lock;
        gint sort_colid[2][TNY_FOLDER_TYPE_NUM];
+       gint sort_type[2][TNY_FOLDER_TYPE_NUM];
 };
 
 #define MODEST_HEADER_VIEW_GET_PRIVATE(o)      (G_TYPE_INSTANCE_GET_PRIVATE((o), \
 };
 
 #define MODEST_HEADER_VIEW_GET_PRIVATE(o)      (G_TYPE_INSTANCE_GET_PRIVATE((o), \
@@ -410,9 +411,14 @@ modest_header_view_init (ModestHeaderView *obj)
 
        priv->monitor        = NULL;
        priv->monitor_lock   = g_mutex_new ();
 
        priv->monitor        = NULL;
        priv->monitor_lock   = g_mutex_new ();
-       for (j=0; j < 2; j++)
-               for (i=0; i < TNY_FOLDER_TYPE_NUM; i++) 
+
+       /* Sort parameters */
+       for (j=0; j < 2; j++) {
+               for (i=0; i < TNY_FOLDER_TYPE_NUM; i++) {
                        priv->sort_colid[j][i] = -1;
                        priv->sort_colid[j][i] = -1;
+                       priv->sort_type[j][i] = GTK_SORT_DESCENDING;
+               }                       
+       }
 
        setup_drag_and_drop (GTK_TREE_VIEW (obj));
 }
 
        setup_drag_and_drop (GTK_TREE_VIEW (obj));
 }
@@ -617,6 +623,7 @@ modest_header_view_get_columns (ModestHeaderView *self)
        return gtk_tree_view_get_columns (GTK_TREE_VIEW(self)); 
 }
 
        return gtk_tree_view_get_columns (GTK_TREE_VIEW(self)); 
 }
 
+
 gboolean
 modest_header_view_is_empty (ModestHeaderView *self)
 {
 gboolean
 modest_header_view_is_empty (ModestHeaderView *self)
 {
@@ -702,6 +709,7 @@ on_progress_changed (ModestMailOperation *mail_op,
        GList *cols, *cursor;
        TnyList *headers;
        guint sort_colid;
        GList *cols, *cursor;
        TnyList *headers;
        guint sort_colid;
+       GtkSortType sort_type;
 
        if (!modest_mail_operation_is_finished (mail_op))
                return;
 
        if (!modest_mail_operation_is_finished (mail_op))
                return;
@@ -735,9 +743,10 @@ on_progress_changed (ModestMailOperation *mail_op,
        /* Restore sort column id */
        type  = modest_tny_folder_guess_folder_type (priv->folder);
        sort_colid = modest_header_view_get_sort_column_id (self, type); 
        /* Restore sort column id */
        type  = modest_tny_folder_guess_folder_type (priv->folder);
        sort_colid = modest_header_view_get_sort_column_id (self, type); 
+       sort_type = modest_header_view_get_sort_type (self, type); 
        gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE(sortable),
                                              sort_colid,
        gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE(sortable),
                                              sort_colid,
-                                             GTK_SORT_ASCENDING);
+                                             sort_type);
 
        /* Set new model */
        modest_header_view_set_model (GTK_TREE_VIEW (self), sortable);
 
        /* Set new model */
        modest_header_view_set_model (GTK_TREE_VIEW (self), sortable);
@@ -773,6 +782,7 @@ modest_header_view_set_folder_intern (ModestHeaderView *self, TnyFolder *folder)
        GList *cols, *cursor;
        GtkTreeModel *sortable; 
        guint sort_colid;
        GList *cols, *cursor;
        GtkTreeModel *sortable; 
        guint sort_colid;
+       GtkSortType sort_type;
 
        priv = MODEST_HEADER_VIEW_GET_PRIVATE(self);
 
 
        priv = MODEST_HEADER_VIEW_GET_PRIVATE(self);
 
@@ -812,9 +822,10 @@ modest_header_view_set_folder_intern (ModestHeaderView *self, TnyFolder *folder)
        /* Restore sort column id */
        type  = modest_tny_folder_guess_folder_type (folder);
        sort_colid = modest_header_view_get_sort_column_id (self, type); 
        /* Restore sort column id */
        type  = modest_tny_folder_guess_folder_type (folder);
        sort_colid = modest_header_view_get_sort_column_id (self, type); 
+       sort_type = modest_header_view_get_sort_type (self, type); 
        gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE(sortable),
                                              sort_colid,
        gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE(sortable),
                                              sort_colid,
-                                             GTK_SORT_ASCENDING);
+                                             sort_type);
 
        /* Set new model */
        modest_header_view_set_model (GTK_TREE_VIEW (self), sortable);
 
        /* Set new model */
        modest_header_view_set_model (GTK_TREE_VIEW (self), sortable);
@@ -822,7 +833,37 @@ modest_header_view_set_folder_intern (ModestHeaderView *self, TnyFolder *folder)
 }
 
 void
 }
 
 void
-modest_header_view_set_sort_column_id (ModestHeaderView *self, guint sort_colid, TnyFolderType type)
+modest_header_view_sort_by_column_id (ModestHeaderView *self, 
+                                     guint sort_colid,
+                                     GtkSortType sort_type)
+{
+       ModestHeaderViewPrivate *priv = NULL;
+       GtkTreeModel *sortable = NULL; 
+       TnyFolderType type;
+
+       /* Get model and private data */
+       priv = MODEST_HEADER_VIEW_GET_PRIVATE(self);            
+       sortable = gtk_tree_view_get_model (GTK_TREE_VIEW (self));
+       
+       /* Sort tree model */
+       type  = modest_tny_folder_guess_folder_type (priv->folder);
+       gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE(sortable),
+                                             sort_colid,
+                                             sort_type);
+       /* Store new sort parameters */
+       modest_header_view_set_sort_params (self, sort_colid, sort_type, type);
+
+       /* Save GConf parameters */
+/*     modest_widget_memory_save (modest_runtime_get_conf(), */
+/*                                G_OBJECT(self), "header-view"); */
+       
+}
+
+void
+modest_header_view_set_sort_params (ModestHeaderView *self, 
+                                   guint sort_colid, 
+                                   GtkSortType sort_type,
+                                   TnyFolderType type)
 {
        ModestHeaderViewPrivate *priv;
        ModestHeaderViewStyle style;
 {
        ModestHeaderViewPrivate *priv;
        ModestHeaderViewStyle style;
@@ -831,10 +872,12 @@ modest_header_view_set_sort_column_id (ModestHeaderView *self, guint sort_colid,
        priv = MODEST_HEADER_VIEW_GET_PRIVATE(self);
 
        priv->sort_colid[style][type] = sort_colid;
        priv = MODEST_HEADER_VIEW_GET_PRIVATE(self);
 
        priv->sort_colid[style][type] = sort_colid;
+       priv->sort_type[style][type] = sort_type;
 }
 
 gint
 }
 
 gint
-modest_header_view_get_sort_column_id (ModestHeaderView *self, TnyFolderType type)
+modest_header_view_get_sort_column_id (ModestHeaderView *self, 
+                                      TnyFolderType type)
 {
        ModestHeaderViewPrivate *priv;
        ModestHeaderViewStyle style;
 {
        ModestHeaderViewPrivate *priv;
        ModestHeaderViewStyle style;
@@ -845,6 +888,19 @@ modest_header_view_get_sort_column_id (ModestHeaderView *self, TnyFolderType typ
        return priv->sort_colid[style][type];
 }
 
        return priv->sort_colid[style][type];
 }
 
+GtkSortType
+modest_header_view_get_sort_type (ModestHeaderView *self, 
+                                 TnyFolderType type)
+{
+       ModestHeaderViewPrivate *priv;
+       ModestHeaderViewStyle style;
+
+       style = modest_header_view_get_style   (self);
+       priv = MODEST_HEADER_VIEW_GET_PRIVATE(self);
+
+       return priv->sort_type[style][type];
+}
+
 void
 modest_header_view_set_folder (ModestHeaderView *self, TnyFolder *folder)
 {
 void
 modest_header_view_set_folder (ModestHeaderView *self, TnyFolder *folder)
 {
@@ -869,7 +925,7 @@ modest_header_view_set_folder (ModestHeaderView *self, TnyFolder *folder)
                g_signal_emit (G_OBJECT(self), signals[HEADER_SELECTED_SIGNAL], 0, NULL);
 
                /* Create the mail operation */
                g_signal_emit (G_OBJECT(self), signals[HEADER_SELECTED_SIGNAL], 0, NULL);
 
                /* Create the mail operation */
-               mail_op = modest_mail_operation_new ();
+               mail_op = modest_mail_operation_new_with_id (MODEST_MAIL_OPERATION_ID_RECEIVE);
                modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
                                                 mail_op);
 
                modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
                                                 mail_op);
 
@@ -991,6 +1047,7 @@ cmp_rows (GtkTreeModel *tree_model, GtkTreeIter *iter1, GtkTreeIter *iter2,
        gint val1, val2;
        gchar *s1, *s2;
        gint cmp;       
        gint val1, val2;
        gchar *s1, *s2;
        gint cmp;       
+       gint sort_colid;
        static int counter = 0;
 
        g_return_val_if_fail (G_IS_OBJECT(user_data), 0);
        static int counter = 0;
 
        g_return_val_if_fail (G_IS_OBJECT(user_data), 0);
@@ -1003,10 +1060,26 @@ cmp_rows (GtkTreeModel *tree_model, GtkTreeIter *iter1, GtkTreeIter *iter2,
                               signals[STATUS_UPDATE_SIGNAL],
                               0, _("Sorting..."), 0, 0);
        }       
                               signals[STATUS_UPDATE_SIGNAL],
                               0, _("Sorting..."), 0, 0);
        }       
-       switch (col_id) {
-
-               /* first one, we decide based on the time */
+       switch (col_id) {               
        case MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_IN:
        case MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_IN:
+       case MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_OUT:
+               sort_colid = gtk_tree_view_column_get_sort_column_id (GTK_TREE_VIEW_COLUMN(user_data));
+               gtk_tree_model_get (tree_model, iter1,
+                                   sort_colid, &s1,
+                                   TNY_GTK_HEADER_LIST_MODEL_DATE_SENT_TIME_T_COLUMN, &t1,
+                                   -1);
+               gtk_tree_model_get (tree_model, iter2,
+                                   sort_colid, &s2,
+                                   TNY_GTK_HEADER_LIST_MODEL_DATE_SENT_TIME_T_COLUMN, &t2,
+                                   -1);
+               cmp = modest_text_utils_utf8_strcmp (s1, s2, TRUE);
+               g_free (s1);
+               g_free (s2);
+               
+               return cmp ? cmp : t1 - t2;
+               
+               break;
+
        case MODEST_HEADER_VIEW_COLUMN_COMPACT_RECEIVED_DATE:
        case MODEST_HEADER_VIEW_COLUMN_RECEIVED_DATE:
 
        case MODEST_HEADER_VIEW_COLUMN_COMPACT_RECEIVED_DATE:
        case MODEST_HEADER_VIEW_COLUMN_RECEIVED_DATE:
 
@@ -1018,7 +1091,6 @@ cmp_rows (GtkTreeModel *tree_model, GtkTreeIter *iter1, GtkTreeIter *iter2,
                                    &t2,-1);
                return t1 - t2;
 
                                    &t2,-1);
                return t1 - t2;
 
-       case MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_OUT:
        case MODEST_HEADER_VIEW_COLUMN_COMPACT_SENT_DATE:
        case MODEST_HEADER_VIEW_COLUMN_SENT_DATE:
                gtk_tree_model_get (tree_model, iter1,
        case MODEST_HEADER_VIEW_COLUMN_COMPACT_SENT_DATE:
        case MODEST_HEADER_VIEW_COLUMN_SENT_DATE:
                gtk_tree_model_get (tree_model, iter1,
@@ -1106,6 +1178,28 @@ cmp_rows (GtkTreeModel *tree_model, GtkTreeIter *iter1, GtkTreeIter *iter2,
 
                return cmp ? cmp : t1 - t2;
 
 
                return cmp ? cmp : t1 - t2;
 
+       case MODEST_HEADER_VIEW_COLUMN_COMPACT_FLAG:
+               gtk_tree_model_get (tree_model, iter1, TNY_GTK_HEADER_LIST_MODEL_FLAGS_COLUMN, &val1,
+                                   TNY_GTK_HEADER_LIST_MODEL_DATE_SENT_TIME_T_COLUMN, &t1, -1);
+               gtk_tree_model_get (tree_model, iter2, TNY_GTK_HEADER_LIST_MODEL_FLAGS_COLUMN, &val2,
+                                   TNY_GTK_HEADER_LIST_MODEL_DATE_SENT_TIME_T_COLUMN, &t2, -1);
+
+               int flag_sort = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(user_data), MODEST_HEADER_VIEW_FLAG_SORT));
+               switch (flag_sort) {
+               case TNY_HEADER_FLAG_ATTACHMENTS:
+                       cmp = (val1 & TNY_HEADER_FLAG_ATTACHMENTS) -
+                               (val2 & TNY_HEADER_FLAG_ATTACHMENTS);
+                       break;
+               case TNY_HEADER_FLAG_PRIORITY:
+                       cmp = (val1 & TNY_HEADER_FLAG_PRIORITY) -
+                               (val2 & TNY_HEADER_FLAG_PRIORITY);
+                       break;
+               default:
+                       cmp = (val1 & TNY_HEADER_FLAG_PRIORITY) -
+                               (val2 & TNY_HEADER_FLAG_PRIORITY);
+               }
+               
+               return cmp ? cmp : t1 - t2;
        default:
                return &iter1 - &iter2; /* oughhhh  */
        }
        default:
                return &iter1 - &iter2; /* oughhhh  */
        }
index 072885e..dbfb5d9 100644 (file)
@@ -55,6 +55,7 @@ struct _ModestHeaderView {
 };
 
 #define MODEST_HEADER_VIEW_COLUMN    "header-view-column"
 };
 
 #define MODEST_HEADER_VIEW_COLUMN    "header-view-column"
+#define MODEST_HEADER_VIEW_FLAG_SORT "header-view-flags-sort"
 
 typedef enum _ModestHeaderViewColumn {
        MODEST_HEADER_VIEW_COLUMN_FROM            = 0,
 
 typedef enum _ModestHeaderViewColumn {
        MODEST_HEADER_VIEW_COLUMN_FROM            = 0,
@@ -188,7 +189,7 @@ gboolean modest_header_view_set_columns (ModestHeaderView *self,
  * with g_object_get_data MODEST_HEADER_VIEW_COLUMN (#define),
  * and which contains the corresponding ModestHeaderViewColumn
  *  
  * with g_object_get_data MODEST_HEADER_VIEW_COLUMN (#define),
  * and which contains the corresponding ModestHeaderViewColumn
  *  
- * Returns: newly allocated list of column ids, or NULL in case of no columns or error
+ * Returns: newly allocated list of #GtkTreeViewColumns objects, or NULL in case of no columns or error
  * You must free the list with g_list_free
  */
 GList*  modest_header_view_get_columns (ModestHeaderView *self);
  * You must free the list with g_list_free
  */
 GList*  modest_header_view_get_columns (ModestHeaderView *self);
@@ -278,16 +279,41 @@ gint
 modest_header_view_get_sort_column_id (ModestHeaderView *self, TnyFolderType type);
 
 /**
 modest_header_view_get_sort_column_id (ModestHeaderView *self, TnyFolderType type);
 
 /**
- * modest_header_view_get_sort_column_id:
+ * modest_header_view_get_sort_type:
+ * @self: a #ModestHeaderView
+ * @type: #TnyFolderType type
+ * 
+ * Gets the selected sort type.
+ **/
+GtkSortType
+modest_header_view_get_sort_type (ModestHeaderView *self, TnyFolderType type);
+
+/**
+ * modest_header_view_set_sort_params:
  * @self: a #ModestHeaderView
  * @sort_colid: logical column id to sort
  * @self: a #ModestHeaderView
  * @sort_colid: logical column id to sort
+ * @sort_type: #GtkSortType sort type
  * @type: #TnyFolderType type
  * 
  * @type: #TnyFolderType type
  * 
- * Sets the logical columnd id for sorting.
+ * Sets the logical columnd id and sort type for sorting operations.
  **/
 void
  **/
 void
-modest_header_view_set_sort_column_id (ModestHeaderView *self, guint sort_colid, TnyFolderType type);
+modest_header_view_set_sort_params (ModestHeaderView *self, guint sort_colid, GtkSortType sort_type, TnyFolderType type);
 
 
+/**
+ * modest_header_view_set_sort_params:
+ * @self: a #ModestHeaderView
+ * @sort_colid: logical column id to sort
+ * @sort_type: #GtkSortType sort type
+ * 
+ * Sorts headers treeview by logical column id, @sort_colid, using a 
+ * @sort_type sorting method. In addition, new headder settings will be 
+ * stored in @self object. 
+ **/
+void
+modest_header_view_sort_by_column_id (ModestHeaderView *self, 
+                                     guint sort_colid,
+                                     GtkSortType sort_type);
 
 
 G_END_DECLS
 
 
 G_END_DECLS