Mercurial > dwindows
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); |