[evolution-patches] 33593, the never-ending 'message is left after list is empty' bug



the old code broke a while ago because of api changes to etree that
weren't dealt with.

it might make sense just to ignore the cursor activated stuff,and just
go via selection changed for the mailer.  although we do get 2 selection
changed events each time it changes (?).


Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/evolution/mail/ChangeLog,v
retrieving revision 1.2749
diff -u -3 -r1.2749 ChangeLog
--- ChangeLog	12 Jun 2003 04:47:32 -0000	1.2749
+++ ChangeLog	16 Jun 2003 09:34:14 -0000
@@ -1,3 +1,20 @@
+2003-06-16  Not Zed  <NotZed Ximian com>
+
+	** See bug #33593
+
+	* message-list.c (on_selection_changed_cmd): also listedn to
+	selection changed events, since the etable api has changed.
+	(get_selected_cb): helper for above.
+	(message_list_construct): hook to selection change signal.
+
+	* mail-callbacks.c (composer_send_queued_cb): Unref the composer
+	to match the ref composer_send_cb();
+
+	** See bug #44519
+
+	* message-browser.c (message_browser_message_list_built): We want
+	to disconnect from the messagelist, not folderbrowser signal.
+
 2003-06-11  Jeffrey Stedfast  <fejj ximian com>
 
 	* mail-format.c (format_mime_part): We only really want to use
Index: message-list.c
===================================================================
RCS file: /cvs/gnome/evolution/mail/message-list.c,v
retrieving revision 1.341
diff -u -3 -r1.341 message-list.c
--- message-list.c	11 Jun 2003 16:19:36 -0000	1.341
+++ message-list.c	16 Jun 2003 09:34:15 -0000
@@ -131,6 +131,7 @@
 static ETreeScrolledClass *message_list_parent_class;
 
 static void on_cursor_activated_cmd (ETree *tree, int row, ETreePath path, gpointer user_data);
+static void on_selection_changed_cmd(ETree *tree, MessageList *ml);
 static gint on_click (ETree *tree, gint row, ETreePath path, gint col, GdkEvent *event, MessageList *list);
 static char *filter_date (time_t date);
 static char *filter_size (int size);
@@ -1453,6 +1454,10 @@
 	
 	g_signal_connect((message_list->tree), "click",
 			 G_CALLBACK (on_click), message_list);
+
+	g_signal_connect((message_list->tree), "selection_change",
+			 G_CALLBACK (on_selection_changed_cmd), message_list);
+
 }
 
 GtkWidget *
@@ -2235,7 +2240,7 @@
 	MessageList *message_list = data;
 	ESelectionModel *esm = e_tree_get_selection_model (message_list->tree);
 	int selected = e_selection_model_selected_count (esm);
-	
+
 	if (selected == 1 && message_list->cursor_uid) {
 		d(printf ("emitting cursor changed signal, for uid %s\n", message_list->cursor_uid));
 		g_signal_emit (message_list, message_list_signals[MESSAGE_SELECTED], 0, message_list->cursor_uid);
@@ -2252,7 +2257,7 @@
 {
 	MessageList *message_list = MESSAGE_LIST (user_data);
 	const char *new_uid;
-	
+
 	if (path == NULL)
 		new_uid = NULL;
 	else
@@ -2270,6 +2275,29 @@
 			g_idle_add_full (G_PRIORITY_LOW, on_cursor_activated_idle,
 					 message_list, NULL);
 	}
+}
+
+static void
+get_selected_cb(ETreePath path, MessageList *ml)
+{
+	g_free(ml->cursor_uid);
+	ml->cursor_uid = g_strdup(get_message_uid(ml, path));
+}
+
+static void
+on_selection_changed_cmd(ETree *tree, MessageList *ml)
+{
+	ESelectionModel *esm = e_tree_get_selection_model (ml->tree);
+	int selected = e_selection_model_selected_count (esm);
+
+	g_free(ml->cursor_uid);
+	ml->cursor_uid = NULL;
+
+	if (selected == 1)
+		e_tree_selected_path_foreach(ml->tree, (ETreeForeachFunc)get_selected_cb, ml);
+
+	if ((selected == 1 || selected == 0) && !ml->idle_id)
+		g_idle_add_full (G_PRIORITY_LOW, on_cursor_activated_idle, ml, NULL);
 }
 
 static gint


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]