diff options
author | Alexander Larsson <alexl@redhat.com> | 2006-10-18 10:43:45 +0000 |
---|---|---|
committer | Alexander Larsson <alexl@src.gnome.org> | 2006-10-18 10:43:45 +0000 |
commit | 5cd6fbd1ead2fdbd3110fe231e380fbcc86eedbd (patch) | |
tree | 83b4f11048be9eec5ccf96c5b3f1c9cc0ac6c1d4 /src | |
parent | 72f44fb060b9c41c88f4eaa4c727477c43c2656f (diff) | |
download | nautilus-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.c | 50 |
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); |