Mercurial > geeqie.yaz
diff src/view_file_list.c @ 801:9b676bb76a2e
various refresh and notification fixes
author | nadvornik |
---|---|
date | Sat, 07 Jun 2008 22:44:17 +0000 |
parents | a25b228978a0 |
children | 3cfc54c77b30 |
line wrap: on
line diff
--- a/src/view_file_list.c Sat Jun 07 15:08:33 2008 +0000 +++ b/src/view_file_list.c Sat Jun 07 22:44:17 2008 +0000 @@ -142,6 +142,21 @@ return i; } +static gboolean vflist_store_clear_cb(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) +{ + FileData *fd; + gtk_tree_model_get(model, iter, FILE_COLUMN_POINTER, &fd, -1); + file_data_unref(fd); + return FALSE; +} + +static void vflist_store_clear(ViewFile *vf) +{ + GtkTreeModel *store; + store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview)); + gtk_tree_model_foreach(store, vflist_store_clear_cb, NULL); + gtk_tree_store_clear(GTK_TREE_STORE(store)); +} void vflist_color_set(ViewFile *vf, FileData *fd, gint color_set) { @@ -793,7 +808,7 @@ gtk_tree_store_append(store, &new, parent_iter); } - vflist_setup_iter(vf, store, &new, fd); + vflist_setup_iter(vf, store, &new, file_data_ref(fd)); vflist_setup_iter_recursive(vf, store, &new, fd->sidecar_files, selected); if (g_list_find(selected, fd)) @@ -808,6 +823,7 @@ } else if (match > 0) { + file_data_unref(old_fd); valid = gtk_tree_store_remove(store, &iter); } else @@ -828,6 +844,10 @@ while (valid) { + FileData *old_fd; + gtk_tree_model_get(GTK_TREE_MODEL(store), &iter, FILE_COLUMN_POINTER, &old_fd, -1); + file_data_unref(old_fd); + valid = gtk_tree_store_remove(store, &iter); } } @@ -1514,7 +1534,7 @@ if (!vf->list) { - gtk_tree_store_clear(store); + vflist_store_clear(vf); vf_send_update(vf); return; } @@ -1748,8 +1768,6 @@ gint vflist_set_fd(ViewFile *vf, FileData *dir_fd) { - GtkTreeStore *store; - if (!dir_fd) return FALSE; if (vf->dir_fd == dir_fd) return TRUE; @@ -1757,8 +1775,7 @@ vf->dir_fd = file_data_ref(dir_fd); /* force complete reload */ - store = GTK_TREE_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview))); - gtk_tree_store_clear(store); + vflist_store_clear(vf); filelist_free(vf->list); vf->list = NULL;