Setup the SAVE_DRAFT signal. (menu_file_save_draft_cb): Emit the
2001-12-14 Jeffrey Stedfast <fejj@ximian.com> * e-msg-composer.c (class_init): Setup the SAVE_DRAFT signal. (menu_file_save_draft_cb): Emit the SAVE_DRAFT signal. (exit_dialog_cb): Same here. (save_draft): Removed. This code is now a signal that mail-callbacks will connect to. svn path=/trunk/; revision=15079
This commit is contained in:

committed by
Jeffrey Stedfast

parent
5b050b30a9
commit
3abfba882b
@ -1,3 +1,11 @@
|
|||||||
|
2001-12-14 Jeffrey Stedfast <fejj@ximian.com>
|
||||||
|
|
||||||
|
* e-msg-composer.c (class_init): Setup the SAVE_DRAFT signal.
|
||||||
|
(menu_file_save_draft_cb): Emit the SAVE_DRAFT signal.
|
||||||
|
(exit_dialog_cb): Same here.
|
||||||
|
(save_draft): Removed. This code is now a signal that
|
||||||
|
mail-callbacks will connect to.
|
||||||
|
|
||||||
2001-12-11 Jeffrey Stedfast <fejj@ximian.com>
|
2001-12-11 Jeffrey Stedfast <fejj@ximian.com>
|
||||||
|
|
||||||
* e-msg-composer-attachment.c (e_msg_composer_attachment_edit):
|
* e-msg-composer-attachment.c (e_msg_composer_attachment_edit):
|
||||||
|
@ -104,6 +104,7 @@
|
|||||||
enum {
|
enum {
|
||||||
SEND,
|
SEND,
|
||||||
POSTPONE,
|
POSTPONE,
|
||||||
|
SAVE_DRAFT,
|
||||||
LAST_SIGNAL
|
LAST_SIGNAL
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1002,96 +1003,6 @@ load (EMsgComposer *composer, const char *file_name)
|
|||||||
CORBA_exception_free (&ev);
|
CORBA_exception_free (&ev);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Exit dialog. (Displays a "Save composition to 'Drafts' before exiting?" warning before actually exiting.) */
|
|
||||||
|
|
||||||
enum { REPLY_YES = 0, REPLY_NO, REPLY_CANCEL };
|
|
||||||
|
|
||||||
struct _save_info {
|
|
||||||
EMsgComposer *composer;
|
|
||||||
int quitok;
|
|
||||||
};
|
|
||||||
|
|
||||||
static void
|
|
||||||
save_done (CamelFolder *folder, CamelMimeMessage *msg, CamelMessageInfo *info, int ok, void *data)
|
|
||||||
{
|
|
||||||
struct _save_info *si = data;
|
|
||||||
|
|
||||||
if (ok && si->quitok)
|
|
||||||
gtk_widget_destroy (GTK_WIDGET (si->composer));
|
|
||||||
else
|
|
||||||
gtk_object_unref (GTK_OBJECT (si->composer));
|
|
||||||
|
|
||||||
g_free (info);
|
|
||||||
g_free (si);
|
|
||||||
}
|
|
||||||
|
|
||||||
extern CamelFolder *drafts_folder;
|
|
||||||
extern char *default_drafts_folder_uri;
|
|
||||||
|
|
||||||
static void
|
|
||||||
use_default_drafts_cb (gint reply, gpointer data)
|
|
||||||
{
|
|
||||||
CamelFolder **folder = data;
|
|
||||||
|
|
||||||
if (reply == 0)
|
|
||||||
*folder = drafts_folder;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
save_folder (char *uri, CamelFolder *folder, gpointer data)
|
|
||||||
{
|
|
||||||
CamelFolder **save = data;
|
|
||||||
|
|
||||||
if (folder) {
|
|
||||||
*save = folder;
|
|
||||||
camel_object_ref (CAMEL_OBJECT (folder));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
save_draft (EMsgComposer *composer, int quitok)
|
|
||||||
{
|
|
||||||
CamelMimeMessage *msg;
|
|
||||||
CamelMessageInfo *info;
|
|
||||||
const MailConfigAccount *account;
|
|
||||||
struct _save_info *si;
|
|
||||||
CamelFolder *folder = NULL;
|
|
||||||
|
|
||||||
account = e_msg_composer_get_preferred_account (composer);
|
|
||||||
if (account && account->drafts_folder_uri &&
|
|
||||||
strcmp (account->drafts_folder_uri, default_drafts_folder_uri) != 0) {
|
|
||||||
int id;
|
|
||||||
|
|
||||||
id = mail_get_folder (account->drafts_folder_uri, 0, save_folder, &folder, mail_thread_new);
|
|
||||||
mail_msg_wait (id);
|
|
||||||
|
|
||||||
if (!folder) {
|
|
||||||
GtkWidget *dialog;
|
|
||||||
|
|
||||||
dialog = gnome_ok_cancel_dialog_parented (_("Unable to open the drafts folder for this account.\n"
|
|
||||||
"Would you like to use the default drafts folder?"),
|
|
||||||
use_default_drafts_cb, &folder, GTK_WINDOW (composer));
|
|
||||||
gnome_dialog_run_and_close (GNOME_DIALOG (dialog));
|
|
||||||
if (!folder)
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
folder = drafts_folder;
|
|
||||||
|
|
||||||
msg = e_msg_composer_get_message_draft (composer);
|
|
||||||
|
|
||||||
info = g_new0 (CamelMessageInfo, 1);
|
|
||||||
info->flags = CAMEL_MESSAGE_DRAFT | CAMEL_MESSAGE_SEEN;
|
|
||||||
|
|
||||||
si = g_malloc (sizeof (*si));
|
|
||||||
si->composer = composer;
|
|
||||||
gtk_object_ref (GTK_OBJECT (composer));
|
|
||||||
si->quitok = quitok;
|
|
||||||
|
|
||||||
mail_append_mail (folder, msg, info, save_done, si);
|
|
||||||
camel_object_unref (CAMEL_OBJECT (msg));
|
|
||||||
}
|
|
||||||
|
|
||||||
#define AUTOSAVE_SEED ".evolution-composer.autosave-XXXXXX"
|
#define AUTOSAVE_SEED ".evolution-composer.autosave-XXXXXX"
|
||||||
#define AUTOSAVE_INTERVAL 60000
|
#define AUTOSAVE_INTERVAL 60000
|
||||||
|
|
||||||
@ -1377,17 +1288,20 @@ autosave_manager_unregister (AutosaveManager *am, EMsgComposer *composer)
|
|||||||
static void
|
static void
|
||||||
menu_file_save_draft_cb (BonoboUIComponent *uic, void *data, const char *path)
|
menu_file_save_draft_cb (BonoboUIComponent *uic, void *data, const char *path)
|
||||||
{
|
{
|
||||||
save_draft (E_MSG_COMPOSER (data), FALSE);
|
gtk_signal_emit (GTK_OBJECT (data), signals[SAVE_DRAFT], FALSE);
|
||||||
e_msg_composer_unset_changed (E_MSG_COMPOSER (data));
|
e_msg_composer_unset_changed (E_MSG_COMPOSER (data));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Exit dialog. (Displays a "Save composition to 'Drafts' before exiting?" warning before actually exiting.) */
|
||||||
|
|
||||||
|
enum { REPLY_YES = 0, REPLY_NO, REPLY_CANCEL };
|
||||||
|
|
||||||
static void
|
static void
|
||||||
exit_dialog_cb (int reply, EMsgComposer *composer)
|
exit_dialog_cb (int reply, EMsgComposer *composer)
|
||||||
{
|
{
|
||||||
switch (reply) {
|
switch (reply) {
|
||||||
case REPLY_YES:
|
case REPLY_YES:
|
||||||
/* this has to be done async */
|
gtk_signal_emit (GTK_OBJECT (composer), signals[SAVE_DRAFT], TRUE);
|
||||||
save_draft (composer, TRUE);
|
|
||||||
e_msg_composer_unset_changed (composer);
|
e_msg_composer_unset_changed (composer);
|
||||||
break;
|
break;
|
||||||
case REPLY_NO:
|
case REPLY_NO:
|
||||||
@ -2202,6 +2116,17 @@ drag_data_received (EMsgComposer *composer, GdkDragContext *context,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typedef void (*GtkSignal_NONE__NONE_INT) (GtkObject *, int, gpointer);
|
||||||
|
|
||||||
|
static void marshal_NONE__NONE_INT (GtkObject *object, GtkSignalFunc func,
|
||||||
|
gpointer func_data, GtkArg *args)
|
||||||
|
{
|
||||||
|
GtkSignal_NONE__NONE_INT rfunc;
|
||||||
|
|
||||||
|
rfunc = (GtkSignal_NONE__NONE_INT) func;
|
||||||
|
(*rfunc)(object, GTK_VALUE_INT (args[0]), func_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
class_init (EMsgComposerClass *klass)
|
class_init (EMsgComposerClass *klass)
|
||||||
@ -2235,6 +2160,14 @@ class_init (EMsgComposerClass *klass)
|
|||||||
gtk_marshal_NONE__NONE,
|
gtk_marshal_NONE__NONE,
|
||||||
GTK_TYPE_NONE, 0);
|
GTK_TYPE_NONE, 0);
|
||||||
|
|
||||||
|
signals[SAVE_DRAFT] =
|
||||||
|
gtk_signal_new ("save-draft",
|
||||||
|
GTK_RUN_LAST,
|
||||||
|
object_class->type,
|
||||||
|
GTK_SIGNAL_OFFSET (EMsgComposerClass, save_draft),
|
||||||
|
marshal_NONE__NONE_INT,
|
||||||
|
GTK_TYPE_NONE, 1);
|
||||||
|
|
||||||
gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL);
|
gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -104,6 +104,7 @@ struct _EMsgComposerClass {
|
|||||||
|
|
||||||
void (* send) (EMsgComposer *composer);
|
void (* send) (EMsgComposer *composer);
|
||||||
void (* postpone) (EMsgComposer *composer);
|
void (* postpone) (EMsgComposer *composer);
|
||||||
|
void (* save_draft) (EMsgComposer *composer, int quit);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user