gnome-utils r8316 - trunk/logview



Author: cosimoc
Date: Tue Dec 23 13:28:14 2008
New Revision: 8316
URL: http://svn.gnome.org/viewvc/gnome-utils?rev=8316&view=rev

Log:
Keep the whole store in order.

Modified:
   trunk/logview/logview-loglist.c

Modified: trunk/logview/logview-loglist.c
==============================================================================
--- trunk/logview/logview-loglist.c	(original)
+++ trunk/logview/logview-loglist.c	Tue Dec 23 13:28:14 2008
@@ -90,8 +90,7 @@
                         LOG_NAME, "", -1);
     do {
       gtk_tree_store_remove (loglist->priv->model, &iter);
-    } while (gtk_tree_model_iter_next (GTK_TREE_MODEL (loglist->priv->model),
-                                       &iter));
+    } while (gtk_tree_store_iter_is_valid (loglist->priv->model, &iter));
   }
 
   for (i = 1, l = days; l; l = l->next) {
@@ -320,6 +319,45 @@
   g_object_unref (log);
 }
 
+static int
+loglist_sort_func (GtkTreeModel *model,
+                   GtkTreeIter *a,
+                   GtkTreeIter *b,
+                   gpointer user_data)
+{
+  LogviewLoglist *list = user_data;
+  char *name_a, *name_b;
+  Day *day_a, *day_b;
+  int retval = 0;
+
+  switch (gtk_tree_store_iter_depth (GTK_TREE_STORE (model), a)) {
+    case 0:
+      gtk_tree_model_get (model, a, LOG_NAME, &name_a, -1);
+      gtk_tree_model_get (model, b, LOG_NAME, &name_b, -1);
+      retval = g_strcmp0 (name_a, name_b);
+      g_free (name_a);
+      g_free (name_b);
+
+      break;
+    case 1:
+      gtk_tree_model_get (model, a, LOG_DAY, &day_a, -1);
+      gtk_tree_model_get (model, b, LOG_DAY, &day_b, -1);
+      if (day_a && day_b) {
+        retval = days_compare (day_a, day_b);
+      } else {
+        retval = 0;
+      }
+
+      break;
+    default:
+      g_assert_not_reached ();
+
+      break;
+  }
+
+  return retval;
+}
+
 static void
 do_finalize (GObject *obj)
 {
@@ -361,6 +399,10 @@
                                        NULL);
 
   gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (list->priv->model), LOG_NAME, GTK_SORT_ASCENDING);
+  gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (list->priv->model),
+                                   LOG_NAME,
+                                   (GtkTreeIterCompareFunc) loglist_sort_func,
+                                   list, NULL);
   gtk_tree_view_append_column (GTK_TREE_VIEW (list), column);
   gtk_tree_view_set_search_column (GTK_TREE_VIEW (list), -1);
 



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