summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2006-10-18 10:43:45 +0000
committerAlexander Larsson <alexl@src.gnome.org>2006-10-18 10:43:45 +0000
commit5cd6fbd1ead2fdbd3110fe231e380fbcc86eedbd (patch)
tree83b4f11048be9eec5ccf96c5b3f1c9cc0ac6c1d4 /src
parent72f44fb060b9c41c88f4eaa4c727477c43c2656f (diff)
downloadnautilus-5cd6fbd1ead2fdbd3110fe231e380fbcc86eedbd.tar.gz
The row might have disappeared if it was removed since the timeout was
2006-10-18 Alexander Larsson <alexl@redhat.com> * src/file-manager/fm-list-model.c (change_dummy_row_callback): The row might have disappeared if it was removed since the timeout was scheduled. Protect against this. (#336051)
Diffstat (limited to 'src')
-rw-r--r--src/file-manager/fm-list-model.c50
1 files changed, 28 insertions, 22 deletions
diff --git a/src/file-manager/fm-list-model.c b/src/file-manager/fm-list-model.c
index a2076568a..8e9822f56 100644
--- a/src/file-manager/fm-list-model.c
+++ b/src/file-manager/fm-list-model.c
@@ -1681,33 +1681,39 @@ change_dummy_row_callback (gpointer callback_data)
struct ChangeDummyData *data;
data = callback_data;
+ model = data->model;
- if (data->model != NULL) {
- model = data->model;
-
- parent_ptr = g_hash_table_lookup (model->details->directory_reverse_map,
- data->directory);
- file_entry = g_sequence_get (parent_ptr);
-
- file_entry->loaded = 1;
- files = file_entry->files;
+ if (model == NULL || model->details->directory_reverse_map == NULL) {
+ goto out;
+ }
- if (g_sequence_get_length (files) == 1) {
- dummy_ptr = g_sequence_get_iter_at_pos (file_entry->files, 0);
- dummy_entry = g_sequence_get (dummy_ptr);
- if (dummy_entry->file == NULL) {
- /* was the dummy file */
-
- iter.stamp = model->details->stamp;
- iter.user_data = dummy_ptr;
-
- path = gtk_tree_model_get_path (GTK_TREE_MODEL (model), &iter);
- gtk_tree_model_row_changed (GTK_TREE_MODEL (model), path, &iter);
- gtk_tree_path_free (path);
- }
+ parent_ptr = g_hash_table_lookup (model->details->directory_reverse_map,
+ data->directory);
+ if (parent_ptr == NULL) {
+ goto out;
+ }
+
+ file_entry = g_sequence_get (parent_ptr);
+
+ file_entry->loaded = 1;
+ files = file_entry->files;
+
+ if (g_sequence_get_length (files) == 1) {
+ dummy_ptr = g_sequence_get_iter_at_pos (file_entry->files, 0);
+ dummy_entry = g_sequence_get (dummy_ptr);
+ if (dummy_entry->file == NULL) {
+ /* was the dummy file */
+
+ iter.stamp = model->details->stamp;
+ iter.user_data = dummy_ptr;
+
+ path = gtk_tree_model_get_path (GTK_TREE_MODEL (model), &iter);
+ gtk_tree_model_row_changed (GTK_TREE_MODEL (model), path, &iter);
+ gtk_tree_path_free (path);
}
}
+ out:
eel_remove_weak_pointer (&data->model);
nautilus_directory_unref (data->directory);
g_free (data);