[Xfce4-commits] r23246 - xarchiver/branches/xarchiver-psybsd/src

Stephan Arts stephan at xfce.org
Sat Sep 30 11:19:26 UTC 2006


Author: stephan
Date: 2006-09-30 11:19:24 +0000 (Sat, 30 Sep 2006)
New Revision: 23246

Modified:
   xarchiver/branches/xarchiver-psybsd/src/main_window.c
   xarchiver/branches/xarchiver-psybsd/src/main_window.h
Log:
Improve memory usage (should perhaps implement own treemodel, to decrease overhead of liststore)


Modified: xarchiver/branches/xarchiver-psybsd/src/main_window.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/main_window.c	2006-09-30 07:40:39 UTC (rev 23245)
+++ xarchiver/branches/xarchiver-psybsd/src/main_window.c	2006-09-30 11:19:24 UTC (rev 23246)
@@ -567,7 +567,7 @@
 void
 xa_main_window_archive_destroyed(LXAArchive *archive, XAMainWindow *window)
 {
-	GtkTreeModel *liststore = gtk_tree_view_get_model(GTK_TREE_VIEW(window->treeview));
+	GtkTreeModel *liststore = window->treemodel;
 	GList *columns = gtk_tree_view_get_columns(GTK_TREE_VIEW(window->treeview));
 
 	gtk_list_store_clear(GTK_LIST_STORE(liststore));
@@ -770,16 +770,20 @@
 		gtk_tree_view_set_search_column(GTK_TREE_VIEW(window->treeview), 0);
 	}
 	gtk_tree_view_set_model(GTK_TREE_VIEW(window->treeview), GTK_TREE_MODEL(liststore));
+	window->treemodel = GTK_TREE_MODEL(liststore);
 }
 
 void
 xa_main_window_set_contents(XAMainWindow *main_window, LXAArchive *archive, GTree *item_tree)
 {
 	gint i = 0;
-	GtkTreeModel *liststore = gtk_tree_view_get_model(GTK_TREE_VIEW(main_window->treeview));
+	GtkTreeModel *liststore = main_window->treemodel;
+	g_object_ref(liststore);
 	GtkTreeIter iter;
 	GValue *tmp_value;
 
+	gtk_tree_view_set_model(GTK_TREE_VIEW(main_window->treeview), NULL);
+
 	gtk_list_store_clear(GTK_LIST_STORE(liststore));
 
 
@@ -812,7 +816,7 @@
 	GValue *tmp_value;
 	gint column_number;
 	XAMainWindow *main_window= XA_MAIN_WINDOW(data);
-	GtkTreeModel *liststore = gtk_tree_view_get_model(GTK_TREE_VIEW(main_window->treeview));
+	GtkTreeModel *liststore = main_window->treemodel;
 	gtk_list_store_append(GTK_LIST_STORE(liststore), &iter);
 	if(main_window->props._show_icons)
 	{
@@ -823,12 +827,16 @@
 		else
 			g_value_set_string(tmp_value, "unknown");
 		gtk_list_store_set_value(GTK_LIST_STORE(liststore), &iter, i, tmp_value);
+		g_value_unset(tmp_value);
+		g_free(tmp_value);
 		i++;
 	}
 	tmp_value = g_new0(GValue, 1);
 	tmp_value = g_value_init(tmp_value, G_TYPE_STRING);
 	g_value_set_string(tmp_value, (gchar *)key);
 	gtk_list_store_set_value(GTK_LIST_STORE(liststore), &iter, i, tmp_value);
+	g_value_unset(tmp_value);
+	g_free(tmp_value);
 
 	props = ((LXAEntry *)value)->props;
 	if(props)
@@ -858,6 +866,7 @@
 				gtk_list_store_set_value(GTK_LIST_STORE(liststore), &iter, i+1, tmp_value);
 			else
 				gtk_list_store_set_value(GTK_LIST_STORE(liststore), &iter, i, tmp_value);
+			g_value_unset(tmp_value);
 			g_free(tmp_value);
 		}
 	}
@@ -883,7 +892,7 @@
 	else
 		gtk_tree_model_get_value(tree_model, &iter, 0, value);
 
-	const gchar *item_filename = g_value_get_string(value);
+	const gchar *item_filename = (gchar *)g_value_get_string(value);
 	if(!strcmp(item_filename, "..")) /* pop */
 	{
 		main_window->working_node = g_slist_delete_link(main_window->working_node, main_window->working_node);
@@ -910,7 +919,7 @@
 		}
 	}
 
-	g_value_reset(value);
+	g_value_unset(value);
 	g_free(value);
 }
 

Modified: xarchiver/branches/xarchiver-psybsd/src/main_window.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/main_window.h	2006-09-30 07:40:39 UTC (rev 23245)
+++ xarchiver/branches/xarchiver-psybsd/src/main_window.h	2006-09-30 11:19:24 UTC (rev 23246)
@@ -52,6 +52,7 @@
 {
 	GtkWindow parent;
 	GtkWidget *treeview;
+	GtkTreeModel *treemodel;
 	GtkWidget *scrollwindow;
 	GtkWidget *statusbar;
 	struct {



More information about the Xfce4-commits mailing list