diff src/gtklog.c @ 9435:5635f71aa5db

[gaim-migrate @ 10256] this patch had some little discussion, so the original comments about it don't make too much sense now. it makes the log viewwer further collapse things into months for things older than the current month. for relatively short logs this might not be wonderful, but it should help with very long logs. see patch #963827 oh and thanks to Cole Kowalski for this committer: Tailor Script <tailor@pidgin.im>
author Luke Schierer <lschiere@pidgin.im>
date Thu, 01 Jul 2004 15:57:38 +0000
parents 5655dcd94d0f
children abacf29577b2
line wrap: on
line diff
--- a/src/gtklog.c	Wed Jun 30 20:38:41 2004 +0000
+++ b/src/gtklog.c	Thu Jul 01 15:57:38 2004 +0000
@@ -210,20 +210,40 @@
      /* Logs are made from trees in real life. 
         This is a tree made from logs */
 {
+	char month[30];
 	char title[64];
-	char *title_utf8; /* temporary variable for utf8 conversion */
-	GtkTreeIter iter;
+	char prev_top_month[30];
+	char *utf8_tmp; /* temporary variable for utf8 conversion */
+	GtkTreeIter toplevel, child;
 	GList *logs = lv->logs;
 	while (logs) {
 		GaimLog *log = logs->data;
+		
+		strftime(month, sizeof(month), "%B %Y", localtime(&log->time));
 		strftime(title, sizeof(title), "%c", localtime(&log->time));
-		title_utf8 = gaim_utf8_try_convert(title);
-		strncpy(title, title_utf8, sizeof(title));
-		g_free(title_utf8);
-		gtk_tree_store_append (lv->treestore, &iter, NULL);
-		gtk_tree_store_set(lv->treestore, &iter,
-				   0, title,
-				   1, log, -1);
+		
+		/* do utf8 conversions */
+		utf8_tmp = gaim_utf8_try_convert(month);
+		strncpy(month, utf8_tmp, sizeof(month));
+		utf8_tmp = gaim_utf8_try_convert(title);
+		strncpy(title, utf8_tmp, sizeof(title));
+		g_free(utf8_tmp);
+		
+		if (strncmp(month, prev_top_month, sizeof(month)) != 0) {
+			/* top level */
+			gtk_tree_store_append(lv->treestore, &toplevel, NULL);
+			gtk_tree_store_set(lv->treestore, &toplevel, 0, month, 1, NULL, -1);
+			
+			/* sub */
+			gtk_tree_store_append(lv->treestore, &child, &toplevel);
+			gtk_tree_store_set(lv->treestore, &child, 0, title, 1, log, -1);
+			
+			strncpy(prev_top_month, month, sizeof(prev_top_month));
+		} else {
+			gtk_tree_store_append(lv->treestore, &child, &toplevel);
+			gtk_tree_store_set(lv->treestore, &child, 0, title, 1, log, -1);
+		}
+		   
 		logs = logs->next;
 	}
 }