[addressbook] [mailer] Fix for Bug #326652

Devashish <[email protected]>
Newsgroups gmane.comp.gnome.evolution.patches
Organization Novell
Message-ID <[email protected]>
Hi, 

The attached Patch fixes the bug 326652 – Selecting Users From Address
Sources Causes Crash.

Thanks
Devashish Sharma

_______________________________________________
Evolution-patches mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/evolution-patches
crash.diff (text/x-patch, 4.2 KB)
Index: libedataserverui/e-name-selector-dialog.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/libedataserverui/e-name-selector-dialog.c,v
retrieving revision 1.25
diff -u -p -r1.25 e-name-selector-dialog.c
--- libedataserverui/e-name-selector-dialog.c	16 Jan 2006 14:49:19 -0000	1.25
+++ libedataserverui/e-name-selector-dialog.c	1 Feb 2006 07:17:49 -0000
@@ -777,7 +777,7 @@ contact_selection_changed (ENameSelector
 	GtkTreeSelection *contact_selection;
 	gboolean          have_selection = FALSE;
 	gint              i;
-
+	
 	contact_selection = gtk_tree_view_get_selection (name_selector_dialog->contact_view);
 	if (gtk_tree_selection_count_selected_rows (contact_selection))
 		have_selection = TRUE;
@@ -794,10 +794,9 @@ contact_activated (ENameSelectorDialog *
 	EContactStore     *contact_store;
 	EDestinationStore *destination_store;
 	EContact          *contact;
+	GtkTreeIter       iter;
 	Section           *section;
 	gint               email_n;
-	GList		  *rows, *l;
-	GtkTreeSelection  *contact_selection;
 
 	/* When a contact is activated, we transfer it to the first destination on our list */
 
@@ -807,6 +806,21 @@ contact_activated (ENameSelectorDialog *
 	if (name_selector_dialog->sections->len == 0) 
 		return;
 
+	/* Get the contact to be transferred */
+
+	if (!gtk_tree_model_get_iter (GTK_TREE_MODEL (name_selector_dialog->contact_sort),
+				      &iter, path))
+		g_assert_not_reached ();
+
+	sort_iter_to_contact_store_iter (name_selector_dialog, &iter, &email_n);
+
+	contact = e_contact_store_get_contact (contact_store, &iter);
+	if (!contact) {
+		g_warning ("ENameSelectorDialog could not get selected contact!");
+		return;
+	}
+
+
 	section = &g_array_index (name_selector_dialog->sections, Section, 0);
 	if (!e_name_selector_model_peek_section (name_selector_dialog->name_selector_model,
 						 section->name, NULL, &destination_store)) {
@@ -814,31 +828,7 @@ contact_activated (ENameSelectorDialog *
 		return;
 	}
 
-	contact_selection = gtk_tree_view_get_selection (name_selector_dialog->contact_view);
-	rows = gtk_tree_selection_get_selected_rows (contact_selection, NULL);
-	rows = g_list_reverse (rows);
-
-	/* Get the contacts to be transferred */
-
-	for (l=rows; l; l=g_list_next(l)) {
-		GtkTreeIter iter;
-
-		if (!gtk_tree_model_get_iter (GTK_TREE_MODEL (name_selector_dialog->contact_sort),
-				      &iter, path))
-			g_assert_not_reached ();
-
-		gtk_tree_path_free (path);
-		sort_iter_to_contact_store_iter (name_selector_dialog, &iter, &email_n);
-		
-		contact = e_contact_store_get_contact (contact_store, &iter);
-		if (!contact) {
-			g_warning ("ENameSelectorDialog could not get selected contact!");
-			g_list_free (rows);
-			return;
-		}
-		add_destination (destination_store, contact, email_n);
-	}
-	g_list_free (rows);
+	add_destination (destination_store, contact, email_n);
 }
 
 static void
@@ -849,8 +839,7 @@ destination_activated (ENameSelectorDial
 	EDestinationStore *destination_store;
 	EDestination      *destination;
 	Section           *section;
-	GList		  *rows, *l;
-	GtkTreeSelection  *selection;
+	GtkTreeIter        iter;
 
 	/* When a destination is activated, we remove it from the section */
 
@@ -867,25 +856,13 @@ destination_activated (ENameSelectorDial
 		return;
 	}
 
-	rows = gtk_tree_selection_get_selected_rows (selection, NULL);
-	rows = g_list_reverse (rows);
-
-	for (l = rows; l; l = g_list_next(l)) {
-		GtkTreeIter iter;
-		GtkTreePath *path = l->data;
-
-		if (!gtk_tree_model_get_iter (GTK_TREE_MODEL (destination_store),
-				      	      &iter, path))
-			g_assert_not_reached ();
+	if (!gtk_tree_model_get_iter (GTK_TREE_MODEL (destination_store), &iter, path))
+		g_assert_not_reached ();
 
-		gtk_tree_path_free (path);
+	destination = e_destination_store_get_destination (destination_store, &iter);
+	g_assert (destination);
 
-		destination = e_destination_store_get_destination (destination_store, &iter);
-		g_assert (destination);
-
-		e_destination_store_remove_destination (destination_store, destination);
-	}
-	g_list_free (rows);
+	e_destination_store_remove_destination (destination_store, destination);
 }
 
 static gboolean
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.