[Xfce4-commits] r25122 - squeeze/trunk/src

Peter de Ridder peter at xfce.org
Mon Mar 5 22:55:45 CET 2007


Author: peter
Date: 2007-03-05 21:55:45 +0000 (Mon, 05 Mar 2007)
New Revision: 25122

Modified:
   squeeze/trunk/src/archive_store.c
   squeeze/trunk/src/archive_store.h
   squeeze/trunk/src/notebook.c
   squeeze/trunk/src/path_bar.c
Log:
pathbar updated archive sort columns updates


Modified: squeeze/trunk/src/archive_store.c
===================================================================
--- squeeze/trunk/src/archive_store.c	2007-03-05 21:01:11 UTC (rev 25121)
+++ squeeze/trunk/src/archive_store.c	2007-03-05 21:55:45 UTC (rev 25122)
@@ -387,7 +387,7 @@
 	if(!archive)
 		return 0;
 	
-	return lsq_archive_n_entry_properties(archive) + 1;
+	return lsq_archive_n_entry_properties(archive) + SQ_ARCHIVE_STORE_EXTRA_PROP_COUNT;
 }
 
 static GType
@@ -402,12 +402,14 @@
 	if(!archive)
 		return G_TYPE_INVALID;
 
-	index--;
-
-	if(index == -1) /* icon */
-		return G_TYPE_STRING; 
-
-	return lsq_archive_get_entry_property_type(archive, index);
+	switch(index)
+	{
+		case SQ_ARCHIVE_STORE_EXTRA_PROP_PATH:
+		case SQ_ARCHIVE_STORE_EXTRA_PROP_ICON:
+			return G_TYPE_STRING; 
+		default:
+			return lsq_archive_get_entry_property_type(archive, index - SQ_ARCHIVE_STORE_EXTRA_PROP_COUNT);
+	}
 }
 
 static gboolean
@@ -495,51 +497,62 @@
 
 	SQArchiveStore *store = SQ_ARCHIVE_STORE(tree_model);
 	LSQArchive *archive = store->archive;
-	LSQArchiveIter *entry = iter->user_data;
+	LSQArchiveIter *parent, *entry = iter->user_data;
 
 	g_return_if_fail(archive);
 
-	column--;
-
 	if(entry)
 	{
-		if(column == -1)
+		switch(column)
 		{
-			g_value_init(value, G_TYPE_STRING);
+			case SQ_ARCHIVE_STORE_EXTRA_PROP_PATH:
+				g_value_init(value, G_TYPE_STRING);
 
-			if(store->props._show_icons)
-				g_value_set_string(value, sq_archive_store_get_icon_name_for_iter(store, entry));
-		}
-		else
-		{
-			if(store->props._show_full_path && column == LSQ_ARCHIVE_PROP_FILENAME)
-			{
+				parent = lsq_archive_iter_get_parent(entry);
+				g_value_take_string(value, lsq_archive_iter_get_path(parent));
+				lsq_archive_iter_unref(parent);
+			break;
+			case SQ_ARCHIVE_STORE_EXTRA_PROP_ICON:
 				g_value_init(value, G_TYPE_STRING);
-				g_value_take_string(value, lsq_archive_iter_get_path(entry));
-			}
-			else if(column < (gint)lsq_archive_n_entry_properties(archive))
-				lsq_archive_iter_get_prop_value(entry, column, value);
-			/* what if it isn't utf-8 */
-			if(G_VALUE_HOLDS_STRING(value) && g_value_get_string(value) && !g_utf8_validate(g_value_get_string(value), -1, NULL))
-				g_value_take_string(value, g_convert(g_value_get_string(value), -1, "UTF-8", "WINDOWS-1252", NULL, NULL, NULL));
+
+				if(store->props._show_icons)
+					g_value_set_string(value, sq_archive_store_get_icon_name_for_iter(store, entry));
+			break;
+			case LSQ_ARCHIVE_PROP_FILENAME + SQ_ARCHIVE_STORE_EXTRA_PROP_COUNT:
+				if(store->props._show_full_path)
+				{
+					g_value_init(value, G_TYPE_STRING);
+					g_value_take_string(value, lsq_archive_iter_get_path(entry));
+					if(!g_utf8_validate(g_value_get_string(value), -1, NULL))
+						g_value_take_string(value, g_convert(g_value_get_string(value), -1, "UTF-8", "WINDOWS-1252", NULL, NULL, NULL));
+					break;
+				}
+			default:
+				column -= SQ_ARCHIVE_STORE_EXTRA_PROP_COUNT;
+				if(column < (gint)lsq_archive_n_entry_properties(archive))
+					lsq_archive_iter_get_prop_value(entry, column, value);
+				/* what if it isn't utf-8 */
+				if(G_VALUE_HOLDS_STRING(value) && g_value_get_string(value) && !g_utf8_validate(g_value_get_string(value), -1, NULL))
+					g_value_take_string(value, g_convert(g_value_get_string(value), -1, "UTF-8", "WINDOWS-1252", NULL, NULL, NULL));
+			break;
 		}
 	}
 	else
 	{
 		switch(column)
 		{
-			case -1:
+			case SQ_ARCHIVE_STORE_EXTRA_PROP_ICON:
 				g_value_init(value, G_TYPE_STRING);
 				if(store->props._show_icons)
 					g_value_set_string(value, GTK_STOCK_GO_UP);
-				break;
-			case LSQ_ARCHIVE_PROP_FILENAME:
+			break;
+			case LSQ_ARCHIVE_PROP_FILENAME + SQ_ARCHIVE_STORE_EXTRA_PROP_COUNT:
 				g_value_init(value, G_TYPE_STRING);
 				g_value_set_string(value, "..");
-				break;
+			break;
 			default:
-				g_value_init(value, lsq_archive_get_entry_property_type(archive, column));
-				break;
+				g_value_init(value, lsq_archive_get_entry_property_type(archive, column - SQ_ARCHIVE_STORE_EXTRA_PROP_COUNT));
+			break;
 		}
 	}
 }
@@ -738,7 +751,7 @@
 	if(store->sort_column == sort_col_id && store->sort_order == order)
 		return;
 
-	if(sort_col_id == 0)
+	if(sort_col_id == SQ_ARCHIVE_STORE_EXTRA_PROP_PATH || sort_col_id == SQ_ARCHIVE_STORE_EXTRA_PROP_ICON)
 		return;
 
 	store->sort_column = sort_col_id;
@@ -765,7 +778,7 @@
 static gboolean
 sq_archive_store_has_default_sort_func(GtkTreeSortable *s)
 {
-	return SQ_ARCHIVE_STORE(s)->props._sort_folders_first?FALSE:TRUE;
+	return SQ_ARCHIVE_STORE(s)->props._sort_folders_first||!SQ_ARCHIVE_STORE(s)->props._sort_case_sensitive?FALSE:TRUE;
 }
 
 static gint
@@ -798,7 +811,7 @@
 	}
 
 	LSQArchive *archive = store->archive;
-	column = store->sort_column - 1;
+	column = store->sort_column - SQ_ARCHIVE_STORE_EXTRA_PROP_COUNT;
 
 	lsq_archive_iter_get_prop_value(a, column, &prop_a);
 	lsq_archive_iter_get_prop_value(b, column, &prop_b);
@@ -867,7 +880,7 @@
 	{
 		store->sort_list[i] = lsq_archive_iter_nth_child(pentry, i);
 	}
-	if(psize && store->sort_column > 0)
+	if(psize && store->sort_column >= SQ_ARCHIVE_STORE_EXTRA_PROP_COUNT)
 	{
 		sq_archive_quicksort(store, 0, psize-1);
 		sq_archive_insertionsort(store, 0, psize-1);
@@ -964,7 +977,7 @@
 	tree_model->icon_theme = icon_theme;
 
 	if(tree_model->props._sort_folders_first)
-		tree_model->sort_column = 1;
+		tree_model->sort_column = SQ_ARCHIVE_STORE_EXTRA_PROP_COUNT + LSQ_ARCHIVE_PROP_FILENAME;
 
 	sq_archive_store_set_archive(tree_model, archive);
 
@@ -1005,6 +1018,7 @@
 		/* we need to add up dir .. */
 		if(store->props._show_up_dir && lsq_archive_iter_has_parent(entry))
 		{ 
+			/* use a hack like in thunar-list-model to prevent re-allocating */
 			path_ = gtk_tree_path_new();
 			gtk_tree_path_append_index(path_, 0);
 
@@ -1027,6 +1041,7 @@
 			/* notify the tree view that we have rows */
 			for(; i < new_size; ++i)
 			{
+				/* use a hack like in thunar-list-model to prevent re-allocating */
 				path_ = gtk_tree_path_new();
 				gtk_tree_path_append_index(path_, i);
 
@@ -1048,6 +1063,7 @@
 		while(i > new_size)
 		{
 			--i;
+			/* use a hack like in thunar-list-model to prevent re-allocating */
 			path_ = gtk_tree_path_new();
 			gtk_tree_path_append_index(path_, i);
 
@@ -1176,6 +1192,7 @@
 	while(i)
 	{
 		--i;
+		/* use a hack like in thunar-list-model to prevent re-allocating */
 		path_ = gtk_tree_path_new();
 		gtk_tree_path_append_index(path_, i);
 
@@ -1234,6 +1251,7 @@
 		{
 			for(i = 0; i < store->list_size; ++i)
 			{
+				/* use a hack like in thunar-list-model to prevent re-allocating */
 				path_ = gtk_tree_path_new();
 				gtk_tree_path_append_index(path_, i);
 
@@ -1373,14 +1391,15 @@
 	if(store->props._sort_case_sensitive != sort)
 	{
 		store->props._sort_case_sensitive = sort;
-		if(store->sort_column <= 0)
-			store->sort_column = 1;
+		if(!sort && store->sort_column < SQ_ARCHIVE_STORE_EXTRA_PROP_COUNT)
+			store->sort_column = SQ_ARCHIVE_STORE_EXTRA_PROP_COUNT + LSQ_ARCHIVE_PROP_FILENAME;
 
 		if(store->archive)
 		{
 			sq_archive_store_sort(store);
 			sq_archive_store_refresh(store);
 		}
+		g_object_notify(G_OBJECT(store), "sort-case-sensitive");
 	}
 }
 
@@ -1392,14 +1411,15 @@
 	if(store->props._sort_folders_first != sort)
 	{
 		store->props._sort_folders_first = sort;
-		if(store->sort_column <= 0)
-			store->sort_column = 1;
+		if(sort && store->sort_column < SQ_ARCHIVE_STORE_EXTRA_PROP_COUNT)
+			store->sort_column = SQ_ARCHIVE_STORE_EXTRA_PROP_COUNT + LSQ_ARCHIVE_PROP_FILENAME;
 
 		if(store->archive)
 		{
 			sq_archive_store_sort(store);
 			sq_archive_store_refresh(store);
 		}
+		g_object_notify(G_OBJECT(store), "sort-folders-first");
 	}
 }
 

Modified: squeeze/trunk/src/archive_store.h
===================================================================
--- squeeze/trunk/src/archive_store.h	2007-03-05 21:01:11 UTC (rev 25121)
+++ squeeze/trunk/src/archive_store.h	2007-03-05 21:55:45 UTC (rev 25122)
@@ -72,6 +72,12 @@
 	GObjectClass parent_class;
 };
 
+/* archive iter extra props columns */
+enum {
+	SQ_ARCHIVE_STORE_EXTRA_PROP_PATH = 0,
+	SQ_ARCHIVE_STORE_EXTRA_PROP_ICON,
+	SQ_ARCHIVE_STORE_EXTRA_PROP_COUNT
+};
 
 GType sq_archive_store_get_type();
 GtkTreeModel * sq_archive_store_new(LSQArchive *archive, gboolean show_icons, gboolean show_up_dir, GtkIconTheme *icon_theme);

Modified: squeeze/trunk/src/notebook.c
===================================================================
--- squeeze/trunk/src/notebook.c	2007-03-05 21:01:11 UTC (rev 25121)
+++ squeeze/trunk/src/notebook.c	2007-03-05 21:55:45 UTC (rev 25122)
@@ -636,15 +636,15 @@
 	renderer = gtk_cell_renderer_pixbuf_new();
 	g_object_set(G_OBJECT(renderer), "stock-size", GTK_ICON_SIZE_SMALL_TOOLBAR, NULL);
 	gtk_tree_view_column_pack_start(column, renderer, FALSE);
-	gtk_tree_view_column_set_attributes(column, renderer, "icon-name", 0, NULL);
+	gtk_tree_view_column_set_attributes(column, renderer, "icon-name", SQ_ARCHIVE_STORE_EXTRA_PROP_ICON, NULL);
 
 	renderer = gtk_cell_renderer_text_new();
 	gtk_tree_view_column_pack_start(column, renderer, TRUE);
-	gtk_tree_view_column_set_attributes(column, renderer, "text", LSQ_ARCHIVE_PROP_FILENAME + 1, NULL);
+	gtk_tree_view_column_set_attributes(column, renderer, "text", LSQ_ARCHIVE_PROP_FILENAME + SQ_ARCHIVE_STORE_EXTRA_PROP_COUNT, NULL);
 
 	gtk_tree_view_column_set_resizable(column, TRUE);
 	gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-	gtk_tree_view_column_set_sort_column_id(column, LSQ_ARCHIVE_PROP_FILENAME + 1);
+	gtk_tree_view_column_set_sort_column_id(column, LSQ_ARCHIVE_PROP_FILENAME + SQ_ARCHIVE_STORE_EXTRA_PROP_COUNT);
 	gtk_tree_view_column_set_title(column, lsq_archive_get_entry_property_name(archive, LSQ_ARCHIVE_PROP_FILENAME));
 	gtk_tree_view_append_column(treeview, column);
 
@@ -657,15 +657,15 @@
 				case(G_TYPE_STRING):
 				case(G_TYPE_UINT64):
 					renderer = gtk_cell_renderer_text_new();
-					column = gtk_tree_view_column_new_with_attributes(lsq_archive_get_entry_property_name(archive, x), renderer, "text", x+1, NULL);
+					column = gtk_tree_view_column_new_with_attributes(lsq_archive_get_entry_property_name(archive, x), renderer, "text", x+SQ_ARCHIVE_STORE_EXTRA_PROP_COUNT, NULL);
 					break;
 			}
 			gtk_tree_view_column_set_resizable(column, TRUE);
-			gtk_tree_view_column_set_sort_column_id(column, x+1);
+			gtk_tree_view_column_set_sort_column_id(column, x+SQ_ARCHIVE_STORE_EXTRA_PROP_COUNT);
 			gtk_tree_view_append_column(treeview, column);
 		}
 	}
-	gtk_tree_view_set_search_column(treeview, 1);
+	gtk_tree_view_set_search_column(treeview, LSQ_ARCHIVE_PROP_FILENAME + SQ_ARCHIVE_STORE_EXTRA_PROP_COUNT);
 }
 
 void

Modified: squeeze/trunk/src/path_bar.c
===================================================================
--- squeeze/trunk/src/path_bar.c	2007-03-05 21:01:11 UTC (rev 25121)
+++ squeeze/trunk/src/path_bar.c	2007-03-05 21:55:45 UTC (rev 25122)
@@ -524,7 +524,7 @@
 {
 	SQPathBar *path_bar = SQ_PATH_BAR(bar);
 	GSList *buttons = path_bar->path_button->next;
-	LSQArchiveIter *iter, *parent;
+	LSQArchiveIter *iter;
 	GtkRadioButton *button;
 
 	SQ_PATH_BAR(bar)->updating = TRUE;
@@ -534,6 +534,7 @@
 	while(buttons)
 	{
 		gtk_container_remove(GTK_CONTAINER(path_bar), GTK_WIDGET(buttons->data));
+		lsq_archive_iter_unref(g_object_get_data(G_OBJECT(buttons->data), SQ_PATH_BAR_PATH_BUTTON_ITER));
 		gtk_widget_unref(GTK_WIDGET(buttons->data));
 		buttons = buttons->next;
 	}
@@ -541,6 +542,7 @@
 	path_bar->path_button->next = NULL;
 
 	gtk_widget_set_sensitive(GTK_WIDGET(path_bar->home_button), (store&&store->archive));
+	lsq_archive_iter_unref(g_object_get_data(G_OBJECT(path_bar->home_button), SQ_PATH_BAR_PATH_BUTTON_ITER));
 	g_object_set_data(G_OBJECT(path_bar->home_button), SQ_PATH_BAR_PATH_BUTTON_ITER, NULL);
 	if(path_bar->trailing)
 		lsq_archive_iter_unref(path_bar->trailing);
@@ -563,13 +565,10 @@
 				gtk_container_add(GTK_CONTAINER(path_bar), GTK_WIDGET(button));
 				gtk_widget_show(GTK_WIDGET(button));
 
-				parent = lsq_archive_iter_get_parent(iter);
-				lsq_archive_iter_unref(iter);
-				iter = parent;
+				iter = lsq_archive_iter_get_parent(iter);
 			}
 
 			g_object_set_data(G_OBJECT(path_bar->home_button), SQ_PATH_BAR_PATH_BUTTON_ITER, iter);
-			lsq_archive_iter_unref(iter);
 		}
 	}
 
@@ -581,15 +580,17 @@
 {
 	SQPathBar *path_bar = SQ_PATH_BAR(bar);
 	LSQArchiveIter *iter = sq_archive_store_get_trailing(store);
-	LSQArchiveIter *parent;
 	GSList *buttons = path_bar->path_button->next;
 	GtkRadioButton *button;
 
 	path_bar->updating = TRUE;
 
+	/* TODO: check if the trailings match, save making new buttons */
+
 	while(buttons)
 	{
 		gtk_container_remove(GTK_CONTAINER(path_bar), GTK_WIDGET(buttons->data));
+		lsq_archive_iter_unref(g_object_get_data(G_OBJECT(buttons->data), SQ_PATH_BAR_PATH_BUTTON_ITER));
 		gtk_widget_unref(GTK_WIDGET(buttons->data));
 		buttons = buttons->next;
 	}
@@ -597,6 +598,7 @@
 	path_bar->path_button->next = NULL;
 
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(path_bar->home_button), TRUE);
+	lsq_archive_iter_unref(g_object_get_data(G_OBJECT(path_bar->home_button), SQ_PATH_BAR_PATH_BUTTON_ITER));
 	g_object_set_data(G_OBJECT(path_bar->home_button), SQ_PATH_BAR_PATH_BUTTON_ITER, NULL);
 	if(path_bar->trailing)
 		lsq_archive_iter_unref(path_bar->trailing);
@@ -620,13 +622,10 @@
 			gtk_container_add(GTK_CONTAINER(path_bar), GTK_WIDGET(button));
 			gtk_widget_show(GTK_WIDGET(button));
 
-			parent = lsq_archive_iter_get_parent(iter);
-			lsq_archive_iter_unref(iter);
-			iter = parent;
+			iter = lsq_archive_iter_get_parent(iter);
 		}
 
 		g_object_set_data(G_OBJECT(path_bar->home_button), SQ_PATH_BAR_PATH_BUTTON_ITER, iter);
-		lsq_archive_iter_unref(iter);
 	}
 
 	path_bar->first_button = g_slist_last(path_bar->path_button);



More information about the Xfce4-commits mailing list