File nautilus-226481-change-dummy-row.diff of Package nautilus
2006-12-19 Federico Mena Quintero <federico@novell.com>
Fix https://bugzilla.novell.com/show_bug.cgi?id=226481 - crash
when the dummy row gets removed.
* src/file-manager/fm-list-model.c (change_dummy_row_callback):
Merge patch from http://bugzilla.gnome.org/show_bug.cgi?id=336051.
See if the dummy row got removed before trying to update it.
--- nautilus/src/file-manager/fm-list-model.c 2006-12-19 11:15:08.000000000 -0600
+++ nautilus/src/file-manager/fm-list-model.c 2006-12-19 11:34:59.000000000 -0600
@@ -1542,33 +1542,40 @@ change_dummy_row_callback (gpointer call
struct ChangeDummyData *data;
data = callback_data;
+ model = data->model;
- if (data->model != NULL) {
- model = data->model;
-
- parent_ptr = g_hash_table_lookup (model->details->reverse_map,
- data->file);
- file_entry = g_sequence_get (parent_ptr);
+ if (model == NULL || model->details->reverse_map == NULL) {
+ goto out;
+ }
- file_entry->loaded = 1;
- files = file_entry->files;
+ parent_ptr = g_hash_table_lookup (model->details->reverse_map,
+ data->file);
+ 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 */
+ 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;
+ 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);
- }
+ 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_file_unref (data->file);
g_free (data);