[gnome-todo] panel-scheduled: Change task list order



commit feb4a35d49e2fa54613b1ffe03faacb4fdb6bed9
Author: Isaque Galdino <igaldino gmail com>
Date:   Thu Feb 11 20:34:14 2016 -0200

    panel-scheduled: Change task list order
    
    All panels use the same task list order as task list view.
    
    For scheduled panel it was requested to change the order of the items
    and sort them only by due date, in descending order. In order to keep
    things a little bit more organized, it was also sorted by title.
    
    A new API was created in task list view to support it and this patch
    uses that API to implement the new sort function.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=760846

 plugins/eds/gtd-panel-scheduled.c |   40 +++++++++++++++++++++++++++++++++++++
 1 files changed, 40 insertions(+), 0 deletions(-)
---
diff --git a/plugins/eds/gtd-panel-scheduled.c b/plugins/eds/gtd-panel-scheduled.c
index 1f2957b..3e1ad8e 100644
--- a/plugins/eds/gtd-panel-scheduled.c
+++ b/plugins/eds/gtd-panel-scheduled.c
@@ -185,6 +185,42 @@ gtd_panel_scheduled_header_func (GtkListBoxRow     *row,
   g_clear_pointer (&dt, g_date_time_unref);
 }
 
+static gint
+gtd_panel_scheduled_sort_func (GtkListBoxRow     *row1,
+                               GtdTask           *row1_task,
+                               GtkListBoxRow     *row2,
+                               GtdTask           *row2_task,
+                               GtdPanelScheduled *panel)
+{
+  GDateTime *dt1;
+  GDateTime *dt2;
+  gint retval;
+
+  dt1 = dt2 = NULL;
+
+  if (row1_task)
+    dt1 = gtd_task_get_due_date (row1_task);
+  if (row2_task)
+    dt2 = gtd_task_get_due_date (row2_task);
+
+  if (!dt1 && !dt2)
+    retval = 0;
+  else if (!dt1)
+    retval = 1;
+  else if (!dt2)
+    retval = -1;
+  else
+    retval = g_date_time_compare (dt1, dt2);
+
+  g_clear_pointer (&dt1, g_date_time_unref);
+  g_clear_pointer (&dt2, g_date_time_unref);
+
+  if (retval != 0)
+    return retval;
+
+  return g_strcmp0 (gtd_task_get_title (row1_task), gtd_task_get_title (row2_task));
+}
+
 static void
 gtd_panel_scheduled_clear (GtdPanelScheduled *panel)
 {
@@ -413,6 +449,10 @@ gtd_panel_scheduled_init (GtdPanelScheduled *self)
                                       (GtdTaskListViewHeaderFunc) gtd_panel_scheduled_header_func,
                                       self);
 
+  gtd_task_list_view_set_sort_func (GTD_TASK_LIST_VIEW (self->view),
+                                    (GtdTaskListViewSortFunc) gtd_panel_scheduled_sort_func,
+                                    self);
+
   gtk_widget_show_all (GTK_WIDGET (self));
 }
 


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