changeset 484:f18c70cb3e38

Fixes for GTK 2.x, and correctly check for the directory bit. NOTE: GTK 2.x dw_tree_get_parent() may currently leak memory. FIXME.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Thu, 16 Oct 2003 07:51:36 +0000
parents 1cb1b87bbd30
children 469ff8133ed3
files gtk/dw.c
diffstat 1 files changed, 21 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/gtk/dw.c	Thu Oct 16 06:25:59 2003 +0000
+++ b/gtk/dw.c	Thu Oct 16 07:51:36 2003 +0000
@@ -2367,7 +2367,7 @@
 	gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", (gpointer)id);
 	gtk_widget_show(tmp);
 #if GTK_MAJOR_VERSION > 1
-	store = gtk_tree_store_new(5, G_TYPE_STRING, GDK_TYPE_PIXBUF, G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_POINTER);
+	store = gtk_tree_store_new(4, G_TYPE_STRING, GDK_TYPE_PIXBUF, G_TYPE_POINTER, G_TYPE_POINTER);
 	tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
 	gtk_object_set_data(GTK_OBJECT(tree), "_dw_tree_store", (gpointer)store);
 	col = gtk_tree_view_column_new();
@@ -3934,7 +3934,7 @@
 		pixbuf = _find_pixbuf(icon);
 
 		gtk_tree_store_insert_after(store, iter, (GtkTreeIter *)parent, (GtkTreeIter *)item);
-		gtk_tree_store_set (store, iter, 0, title, 1, pixbuf, 2, itemdata, 3, iter, 4, parent, -1);
+		gtk_tree_store_set (store, iter, 0, title, 1, pixbuf, 2, itemdata, 3, iter, -1);
 		if(pixbuf && !(icon & (1 << 31)))
 			g_object_unref(pixbuf);
 		retval = (HTREEITEM)iter;
@@ -4087,7 +4087,7 @@
 		pixbuf = _find_pixbuf(icon);
 
 		gtk_tree_store_append (store, iter, (GtkTreeIter *)parent);
-		gtk_tree_store_set (store, iter, 0, title, 1, pixbuf, 2, itemdata, 3, iter, 4, parent, -1);
+		gtk_tree_store_set (store, iter, 0, title, 1, pixbuf, 2, itemdata, 3, iter, -1);
 		if(pixbuf && !(icon & (1 << 31)))
 			g_object_unref(pixbuf);
 		retval = (HTREEITEM)iter;
@@ -4353,7 +4353,12 @@
 	if(tree && GTK_IS_TREE_VIEW(tree) &&
 	   (store = (GtkTreeModel *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_store")))
 	{
-		gtk_tree_model_get(store, (GtkTreeIter *)item, 4, &parent, -1);
+		GtkTreeIter *p = malloc(sizeof(GtkTreeIter));
+
+		if(gtk_tree_model_iter_parent(store, p, (GtkTreeIter *)item))
+			parent = p;
+		else
+			free(p);
 	}
 #else
 	parent = (HTREEITEM)gtk_object_get_data(GTK_OBJECT(item), "_dw_parent");
@@ -7796,24 +7801,24 @@
 	{
 		while((dent = readdir(hdir)))
 		{
-			struct stat bleah;
-
-			stat(dent->d_name, &bleah);
-
-			if(S_ISDIR(bleah.st_mode) && strcmp(dent->d_name, ".") && strcmp(dent->d_name, ".."))
+			if(strcmp(dent->d_name, ".") && strcmp(dent->d_name, ".."))
 			{
 				int len = strlen(path);
 				char *folder = malloc(len + strlen(dent->d_name) + 2);
+				struct stat bleah;
 				HTREEITEM tempitem;
 
 				strcpy(folder, path);
-				strcpy(&folder[len-1], dent->d_name);
-
-				item = dw_tree_insert(tree, dent->d_name, 0, parent, (void *)parent);
-				tempitem = dw_tree_insert(tree, "", 0, item, 0);
-				dw_tree_set_data(tree, item, (void *)tempitem);
-
-				strcat(folder, "/");
+				strcpy(&folder[len], dent->d_name);
+
+				stat(folder, &bleah);
+
+				if(S_IFDIR & bleah.st_mode)
+				{
+					item = dw_tree_insert(tree, dent->d_name, 0, parent, (void *)parent);
+					tempitem = dw_tree_insert(tree, "", 0, item, 0);
+					dw_tree_set_data(tree, item, (void *)tempitem);
+				}
 
 				free(folder);
 			}