comparison gtk/dw.c @ 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 3bc712d2c362
comparison
equal deleted inserted replaced
483:1cb1b87bbd30 484:f18c70cb3e38
2365 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); 2365 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
2366 2366
2367 gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", (gpointer)id); 2367 gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", (gpointer)id);
2368 gtk_widget_show(tmp); 2368 gtk_widget_show(tmp);
2369 #if GTK_MAJOR_VERSION > 1 2369 #if GTK_MAJOR_VERSION > 1
2370 store = gtk_tree_store_new(5, G_TYPE_STRING, GDK_TYPE_PIXBUF, G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_POINTER); 2370 store = gtk_tree_store_new(4, G_TYPE_STRING, GDK_TYPE_PIXBUF, G_TYPE_POINTER, G_TYPE_POINTER);
2371 tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); 2371 tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
2372 gtk_object_set_data(GTK_OBJECT(tree), "_dw_tree_store", (gpointer)store); 2372 gtk_object_set_data(GTK_OBJECT(tree), "_dw_tree_store", (gpointer)store);
2373 col = gtk_tree_view_column_new(); 2373 col = gtk_tree_view_column_new();
2374 2374
2375 rend = gtk_cell_renderer_pixbuf_new(); 2375 rend = gtk_cell_renderer_pixbuf_new();
3932 iter = (GtkTreeIter *)malloc(sizeof(GtkTreeIter)); 3932 iter = (GtkTreeIter *)malloc(sizeof(GtkTreeIter));
3933 3933
3934 pixbuf = _find_pixbuf(icon); 3934 pixbuf = _find_pixbuf(icon);
3935 3935
3936 gtk_tree_store_insert_after(store, iter, (GtkTreeIter *)parent, (GtkTreeIter *)item); 3936 gtk_tree_store_insert_after(store, iter, (GtkTreeIter *)parent, (GtkTreeIter *)item);
3937 gtk_tree_store_set (store, iter, 0, title, 1, pixbuf, 2, itemdata, 3, iter, 4, parent, -1); 3937 gtk_tree_store_set (store, iter, 0, title, 1, pixbuf, 2, itemdata, 3, iter, -1);
3938 if(pixbuf && !(icon & (1 << 31))) 3938 if(pixbuf && !(icon & (1 << 31)))
3939 g_object_unref(pixbuf); 3939 g_object_unref(pixbuf);
3940 retval = (HTREEITEM)iter; 3940 retval = (HTREEITEM)iter;
3941 } 3941 }
3942 DW_MUTEX_UNLOCK; 3942 DW_MUTEX_UNLOCK;
4085 iter = (GtkTreeIter *)malloc(sizeof(GtkTreeIter)); 4085 iter = (GtkTreeIter *)malloc(sizeof(GtkTreeIter));
4086 4086
4087 pixbuf = _find_pixbuf(icon); 4087 pixbuf = _find_pixbuf(icon);
4088 4088
4089 gtk_tree_store_append (store, iter, (GtkTreeIter *)parent); 4089 gtk_tree_store_append (store, iter, (GtkTreeIter *)parent);
4090 gtk_tree_store_set (store, iter, 0, title, 1, pixbuf, 2, itemdata, 3, iter, 4, parent, -1); 4090 gtk_tree_store_set (store, iter, 0, title, 1, pixbuf, 2, itemdata, 3, iter, -1);
4091 if(pixbuf && !(icon & (1 << 31))) 4091 if(pixbuf && !(icon & (1 << 31)))
4092 g_object_unref(pixbuf); 4092 g_object_unref(pixbuf);
4093 retval = (HTREEITEM)iter; 4093 retval = (HTREEITEM)iter;
4094 } 4094 }
4095 DW_MUTEX_UNLOCK; 4095 DW_MUTEX_UNLOCK;
4351 GtkTreeModel *store; 4351 GtkTreeModel *store;
4352 4352
4353 if(tree && GTK_IS_TREE_VIEW(tree) && 4353 if(tree && GTK_IS_TREE_VIEW(tree) &&
4354 (store = (GtkTreeModel *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_store"))) 4354 (store = (GtkTreeModel *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_store")))
4355 { 4355 {
4356 gtk_tree_model_get(store, (GtkTreeIter *)item, 4, &parent, -1); 4356 GtkTreeIter *p = malloc(sizeof(GtkTreeIter));
4357
4358 if(gtk_tree_model_iter_parent(store, p, (GtkTreeIter *)item))
4359 parent = p;
4360 else
4361 free(p);
4357 } 4362 }
4358 #else 4363 #else
4359 parent = (HTREEITEM)gtk_object_get_data(GTK_OBJECT(item), "_dw_parent"); 4364 parent = (HTREEITEM)gtk_object_get_data(GTK_OBJECT(item), "_dw_parent");
4360 #endif 4365 #endif
4361 DW_MUTEX_UNLOCK; 4366 DW_MUTEX_UNLOCK;
7794 7799
7795 if((hdir = opendir(path))) 7800 if((hdir = opendir(path)))
7796 { 7801 {
7797 while((dent = readdir(hdir))) 7802 while((dent = readdir(hdir)))
7798 { 7803 {
7799 struct stat bleah; 7804 if(strcmp(dent->d_name, ".") && strcmp(dent->d_name, ".."))
7800
7801 stat(dent->d_name, &bleah);
7802
7803 if(S_ISDIR(bleah.st_mode) && strcmp(dent->d_name, ".") && strcmp(dent->d_name, ".."))
7804 { 7805 {
7805 int len = strlen(path); 7806 int len = strlen(path);
7806 char *folder = malloc(len + strlen(dent->d_name) + 2); 7807 char *folder = malloc(len + strlen(dent->d_name) + 2);
7808 struct stat bleah;
7807 HTREEITEM tempitem; 7809 HTREEITEM tempitem;
7808 7810
7809 strcpy(folder, path); 7811 strcpy(folder, path);
7810 strcpy(&folder[len-1], dent->d_name); 7812 strcpy(&folder[len], dent->d_name);
7811 7813
7812 item = dw_tree_insert(tree, dent->d_name, 0, parent, (void *)parent); 7814 stat(folder, &bleah);
7813 tempitem = dw_tree_insert(tree, "", 0, item, 0); 7815
7814 dw_tree_set_data(tree, item, (void *)tempitem); 7816 if(S_IFDIR & bleah.st_mode)
7815 7817 {
7816 strcat(folder, "/"); 7818 item = dw_tree_insert(tree, dent->d_name, 0, parent, (void *)parent);
7819 tempitem = dw_tree_insert(tree, "", 0, item, 0);
7820 dw_tree_set_data(tree, item, (void *)tempitem);
7821 }
7817 7822
7818 free(folder); 7823 free(folder);
7819 } 7824 }
7820 } 7825 }
7821 closedir(hdir); 7826 closedir(hdir);