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);
openSUSE Build Service is sponsored by