aboutsummaryrefslogtreecommitdiffstats
path: root/mail/mail-send-recv.c
diff options
context:
space:
mode:
authorIain Holmes <iain@src.gnome.org>2001-01-31 03:09:07 +0800
committerIain Holmes <iain@src.gnome.org>2001-01-31 03:09:07 +0800
commit0c8839ec4ecebc05640ce2432a09d6e04a811bac (patch)
treec75e7266482d3dc5ef69f95bec13349d60249828 /mail/mail-send-recv.c
parent5a13e823f2ea32d9a559bbb65d2fbb5b81442cad (diff)
downloadgsoc2013-evolution-0c8839ec4ecebc05640ce2432a09d6e04a811bac.tar.gz
gsoc2013-evolution-0c8839ec4ecebc05640ce2432a09d6e04a811bac.tar.zst
gsoc2013-evolution-0c8839ec4ecebc05640ce2432a09d6e04a811bac.zip
Fix bug in autodetected mboxes
Only allow one send and recv dialog at once. svn path=/trunk/; revision=7917
Diffstat (limited to 'mail/mail-send-recv.c')
-rw-r--r--mail/mail-send-recv.c98
1 files changed, 55 insertions, 43 deletions
diff --git a/mail/mail-send-recv.c b/mail/mail-send-recv.c
index dce23ad56d..aec94a7ba5 100644
--- a/mail/mail-send-recv.c
+++ b/mail/mail-send-recv.c
@@ -186,6 +186,8 @@ static struct _send_data *build_dialogue(GSList *sources, CamelFolder *outbox, c
gd = (GnomeDialog *)gnome_dialog_new(_("Send & Receive mail"), GNOME_STOCK_BUTTON_OK, GNOME_STOCK_BUTTON_CANCEL, NULL);
gnome_dialog_set_sensitive(gd, 0, FALSE);
+ gnome_window_icon_set_from_file (GTK_WINDOW (gd),
+ EVOLUTION_DATADIR "images/evolution/evolution-inbox.png");
frame= (GtkFrame *)gtk_frame_new(_("Receiving"));
gtk_box_pack_start((GtkBox *)gd->vbox, (GtkWidget *)frame, TRUE, TRUE, 0);
@@ -493,54 +495,64 @@ void mail_send_receive(void)
GSList *sources;
GList *scan;
FilterContext *fc;
+ static GtkWidget *gd = NULL;
struct _send_data *data;
extern CamelFolder *outbox_folder;
const MailConfigAccount *account;
- sources = mail_config_get_sources();
- if (!sources)
- return;
- account = mail_config_get_default_account();
- if (!account || !account->transport)
- return;
-
- fc = mail_load_filter_context();
-
- /* what to do about pop before smtp ?
- Well, probably hook into receive_done or receive_status on
- the right pop account, and when it is, then kick off the
- smtp one. */
- data = build_dialogue(sources, outbox_folder, account->transport->url);
- scan = data->infos;
- while (scan) {
- struct _send_info *info = scan->data;
-
- switch(info->type) {
- case SEND_RECEIVE:
- mail_fetch_mail(info->uri, info->keep,
- fc, FILTER_SOURCE_INCOMING,
- info->cancel,
- receive_get_folder, info,
- receive_status, info,
- receive_done, info);
- break;
- case SEND_SEND:
- /* todo, store the folder in info? */
- mail_send_queue(outbox_folder, info->uri,
- fc, FILTER_SOURCE_OUTGOING,
- info->cancel,
- receive_get_folder, info,
- receive_status, info,
- receive_done, info);
- break;
- case SEND_UPDATE:
- /* FIXME: error reporting? */
- mail_get_store(info->uri, receive_update_got_store, info);
- break;
+ if (gd != NULL) {
+ g_assert (GTK_WIDGET_REALIZED (gd));
+ gdk_window_show (gd->window);
+ gdk_window_raise (gd->window);
+ } else {
+ sources = mail_config_get_sources();
+ if (!sources)
+ return;
+ account = mail_config_get_default_account();
+ if (!account || !account->transport)
+ return;
+
+ fc = mail_load_filter_context();
+
+ /* what to do about pop before smtp ?
+ Well, probably hook into receive_done or receive_status on
+ the right pop account, and when it is, then kick off the
+ smtp one. */
+ data = build_dialogue(sources, outbox_folder, account->transport->url);
+ scan = data->infos;
+ gd = data->gd;
+ gtk_signal_connect (GTK_OBJECT (gd), "destroy",
+ GTK_SIGNAL_FUNC (gtk_widget_destroyed), &gd);
+ while (scan) {
+ struct _send_info *info = scan->data;
+
+ switch(info->type) {
+ case SEND_RECEIVE:
+ mail_fetch_mail(info->uri, info->keep,
+ fc, FILTER_SOURCE_INCOMING,
+ info->cancel,
+ receive_get_folder, info,
+ receive_status, info,
+ receive_done, info);
+ break;
+ case SEND_SEND:
+ /* todo, store the folder in info? */
+ mail_send_queue(outbox_folder, info->uri,
+ fc, FILTER_SOURCE_OUTGOING,
+ info->cancel,
+ receive_get_folder, info,
+ receive_status, info,
+ receive_done, info);
+ break;
+ case SEND_UPDATE:
+ /* FIXME: error reporting? */
+ mail_get_store(info->uri, receive_update_got_store, info);
+ break;
+ }
+ scan = scan->next;
}
- scan = scan->next;
- }
- gtk_object_unref((GtkObject *)fc);
+ gtk_object_unref((GtkObject *)fc);
+ }
}