aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mail/ChangeLog10
-rw-r--r--mail/message-browser.c128
2 files changed, 74 insertions, 64 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog
index 85a6f46c08..1b1bac282f 100644
--- a/mail/ChangeLog
+++ b/mail/ChangeLog
@@ -1,5 +1,15 @@
2003-03-26 Jeffrey Stedfast <fejj@ximian.com>
+ Fixes for bug #39870
+
+ * message-browser.c (transfer_msg_done): Close the
+ message-browser. Since the message doesn't exist anymore, we
+ should close it.
+ (message_browser_delete): New callback to handle deletion in the
+ message-browser window.
+
+2003-03-26 Jeffrey Stedfast <fejj@ximian.com>
+
* subscribe-dialog.c (fe_got_children): If the CamelFolderInfo
node doesn't have \NoInferriors set, then check for
subfolders. Fixes bug #40314.
diff --git a/mail/message-browser.c b/mail/message-browser.c
index b53f278a34..bac9abb7d2 100644
--- a/mail/message-browser.c
+++ b/mail/message-browser.c
@@ -70,8 +70,8 @@ message_browser_destroy (GtkObject *object)
message_browser = MESSAGE_BROWSER (object);
if (message_browser->fb) {
- g_signal_handlers_disconnect_matched(message_browser->fb, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, message_browser);
- g_object_unref((message_browser->fb));
+ g_signal_handlers_disconnect_matched (message_browser->fb, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, message_browser);
+ g_object_unref (message_browser->fb);
message_browser->fb = NULL;
}
@@ -84,7 +84,7 @@ message_browser_class_init (GObjectClass *object_class)
{
((GtkObjectClass *)object_class)->destroy = message_browser_destroy;
- message_browser_parent_class = g_type_class_ref(PARENT_TYPE);
+ message_browser_parent_class = g_type_class_ref (PARENT_TYPE);
}
static void
@@ -97,28 +97,8 @@ static void
transfer_msg_done (gboolean ok, void *data)
{
MessageBrowser *mb = data;
- gboolean hide_deleted;
- GConfClient *gconf;
- int row;
-
-#warning "GTK_OBJECT_DESTROYED"
- /*if (ok && !GTK_OBJECT_DESTROYED (mb)) {*/
- if (ok) {
- gconf = gconf_client_get_default ();
- hide_deleted = !gconf_client_get_bool (gconf, "/apps/evolution/mail/display/show_deleted", NULL);
-
- row = e_tree_row_of_node (mb->fb->message_list->tree,
- e_tree_get_cursor (mb->fb->message_list->tree));
-
- /* If this is the last message and deleted messages
- are hidden, select the previous */
- if ((row + 1 == e_tree_row_count (mb->fb->message_list->tree)) && hide_deleted)
- message_list_select (mb->fb->message_list, MESSAGE_LIST_SELECT_PREVIOUS,
- 0, CAMEL_MESSAGE_DELETED, FALSE);
- else
- message_list_select (mb->fb->message_list, MESSAGE_LIST_SELECT_NEXT,
- 0, 0, FALSE);
- }
+
+ gtk_widget_destroy ((GtkWidget *) mb);
g_object_unref (mb);
}
@@ -132,7 +112,7 @@ transfer_msg (MessageBrowser *mb, int del)
static char *last_uri = NULL;
GPtrArray *uids;
char *desc;
-
+
/* if (GTK_OBJECT_DESTROYED(mb))
return;*/
@@ -159,7 +139,7 @@ transfer_msg (MessageBrowser *mb, int del)
message_list_foreach (mb->fb->message_list, enumerate_msg, uids);
if (del) {
- g_object_ref((mb));
+ g_object_ref (mb);
mail_transfer_messages (mb->fb->folder, uids, del,
folder->physicalUri, 0, transfer_msg_done, mb);
} else {
@@ -182,13 +162,37 @@ message_browser_close (BonoboUIComponent *uih, void *user_data, const char *path
static void
message_browser_move (BonoboUIComponent *uih, void *user_data, const char *path)
{
- transfer_msg(user_data, TRUE);
+ transfer_msg (user_data, TRUE);
}
static void
message_browser_copy (BonoboUIComponent *uih, void *user_data, const char *path)
{
- transfer_msg(user_data, FALSE);
+ transfer_msg (user_data, FALSE);
+}
+
+static void
+message_browser_delete (BonoboUIComponent *uih, void *user_data, const char *path)
+{
+ MessageBrowser *mb = user_data;
+ GPtrArray *uids;
+ int i;
+
+ uids = g_ptr_array_new ();
+ message_list_foreach (mb->fb->message_list, enumerate_msg, uids);
+ camel_folder_freeze (mb->fb->folder);
+ for (i = 0; i < uids->len; i++) {
+ camel_folder_set_message_flags (mb->fb->folder, uids->pdata[i],
+ CAMEL_MESSAGE_DELETED | CAMEL_MESSAGE_SEEN,
+ CAMEL_MESSAGE_DELETED | CAMEL_MESSAGE_SEEN);
+ g_free (uids->pdata[i]);
+ }
+
+ camel_folder_thaw (mb->fb->folder);
+
+ g_ptr_array_free (uids, TRUE);
+
+ gtk_widget_destroy ((GtkWidget *) mb);
}
static BonoboUIVerb
@@ -196,6 +200,7 @@ browser_verbs [] = {
BONOBO_UI_UNSAFE_VERB ("MessageBrowserClose", message_browser_close),
BONOBO_UI_UNSAFE_VERB ("MessageMove", message_browser_move),
BONOBO_UI_UNSAFE_VERB ("MessageCopy", message_browser_copy),
+ BONOBO_UI_UNSAFE_VERB ("MessageDelete", message_browser_delete),
BONOBO_UI_VERB_END
};
@@ -229,17 +234,17 @@ static void
message_browser_message_list_built (MessageList *ml, MessageBrowser *mb)
{
const char *uid = g_object_get_data (G_OBJECT (mb), "uid");
-
- g_signal_handlers_disconnect_matched(mb->fb, G_SIGNAL_MATCH_DATA|G_SIGNAL_MATCH_FUNC, 0, 0, NULL,
- message_browser_message_list_built, mb);
+
+ g_signal_handlers_disconnect_matched (mb->fb, G_SIGNAL_MATCH_DATA|G_SIGNAL_MATCH_FUNC, 0, 0, NULL,
+ message_browser_message_list_built, mb);
message_list_select_uid (ml, uid);
}
static void
message_browser_folder_loaded (FolderBrowser *fb, const char *uri, MessageBrowser *mb)
{
- g_signal_connect(fb->message_list, "message_list_built",
- G_CALLBACK(message_browser_message_list_built), mb);
+ g_signal_connect (fb->message_list, "message_list_built",
+ G_CALLBACK (message_browser_message_list_built), mb);
}
static void
@@ -268,26 +273,26 @@ set_bonobo_ui (GtkWidget *widget, FolderBrowser *fb)
BonoboUIContainer *uicont;
BonoboUIComponent *uic;
CORBA_Environment ev;
-
- uicont = bonobo_window_get_ui_container(BONOBO_WINDOW(widget));
-
+
+ uicont = bonobo_window_get_ui_container (BONOBO_WINDOW (widget));
+
uic = bonobo_ui_component_new_default ();
bonobo_ui_component_set_container (uic, BONOBO_OBJREF (uicont), NULL);
folder_browser_set_ui_component (fb, uic);
-
+
/* Load our UI */
-
+
/*bonobo_ui_component_freeze (uic, NULL);*/
bonobo_ui_util_set_ui (uic, EVOLUTION_DATADIR,
EVOLUTION_UIDIR "/evolution-mail-messagedisplay.xml",
"evolution-mail", NULL);
-
+
/* Load the appropriate UI stuff from the folder browser */
-
+
folder_browser_ui_add_message (fb);
-
+
/* We just opened the message! We don't need to open it again. */
-
+
CORBA_exception_init (&ev);
/* remove the broken menus and toolbar items */
bonobo_ui_component_rm (uic, "/menu/File/FileOps/MessageOpen", &ev);
@@ -295,17 +300,18 @@ set_bonobo_ui (GtkWidget *widget, FolderBrowser *fb)
bonobo_ui_component_rm (uic, "/menu/Tools", &ev);
bonobo_ui_component_rm (uic, "/Toolbar/MailNextButtons", &ev);
CORBA_exception_free (&ev);
-
- /* Hack around the move/copy commands api's */
+
+ /* Hack around the move/copy/delete commands api's */
bonobo_ui_component_remove_listener (uic, "MessageCopy");
bonobo_ui_component_remove_listener (uic, "MessageMove");
-
- /* Add the Close & Move/Copy items */
-
+ bonobo_ui_component_remove_listener (uic, "MessageDelete");
+
+ /* Add the Close & Move/Copy/Delete items */
+
bonobo_ui_component_add_verb_list_with_data (uic, browser_verbs, widget);
-
+
/* Done */
-
+
/*bonobo_ui_component_thaw (uic, NULL);*/
}
@@ -316,19 +322,14 @@ message_browser_new (const GNOME_Evolution_Shell shell, const char *uri, const c
MessageBrowser *new;
FolderBrowser *fb;
- new = g_object_new (MESSAGE_BROWSER_TYPE,
- "title", "Ximian Evolution", NULL);
- if (!new) {
- g_warning ("Failed to construct Bonobo window!");
- return NULL;
- }
+ new = g_object_new (MESSAGE_BROWSER_TYPE, "title", "Ximian Evolution", NULL);
- g_object_set_data_full(G_OBJECT(new), "uid", g_strdup (uid), g_free);
+ g_object_set_data_full (G_OBJECT (new), "uid", g_strdup (uid), g_free);
fb = FOLDER_BROWSER (folder_browser_new (shell, uri));
- g_object_ref(fb);
- gtk_object_sink((GtkObject *)fb);
-
+ g_object_ref (fb);
+ gtk_object_sink ((GtkObject *) fb);
+
new->fb = fb;
set_bonobo_ui (GTK_WIDGET (new), fb);
@@ -344,8 +345,7 @@ message_browser_new (const GNOME_Evolution_Shell shell, const char *uri, const c
gtk_widget_show (GTK_WIDGET (fb->mail_display));
gtk_widget_show (vbox);
- g_signal_connect(new, "size_allocate",
- G_CALLBACK (message_browser_size_allocate_cb), NULL);
+ g_signal_connect (new, "size-allocate", G_CALLBACK (message_browser_size_allocate_cb), NULL);
bonobo_window_set_contents (BONOBO_WINDOW (new), vbox);
gtk_widget_grab_focus (GTK_WIDGET (MAIL_DISPLAY (fb->mail_display)->html));
@@ -353,8 +353,8 @@ message_browser_new (const GNOME_Evolution_Shell shell, const char *uri, const c
set_default_size (GTK_WIDGET (new));
/* more evil hackery... */
- g_signal_connect(fb, "folder_loaded", G_CALLBACK(message_browser_folder_loaded), new);
- g_signal_connect(fb, "message_loaded", G_CALLBACK(message_browser_message_loaded), new);
+ g_signal_connect (fb, "folder_loaded", G_CALLBACK (message_browser_folder_loaded), new);
+ g_signal_connect (fb, "message_loaded", G_CALLBACK (message_browser_message_loaded), new);
return GTK_WIDGET (new);
}