Add a "Send HTML mail" toggle in the message composer.

svn path=/trunk/; revision=4284
This commit is contained in:
Ettore Perazzoli
2000-07-23 13:55:13 +00:00
parent a80bd46ba3
commit e3f8e22df0
5 changed files with 211 additions and 76 deletions

View File

@ -60,7 +60,7 @@
#define HTML_EDITOR_CONTROL_ID "control:html-editor"
#endif
#define DEFAULT_WIDTH 600
#define DEFAULT_HEIGHT 500
@ -74,6 +74,7 @@ static guint signals[LAST_SIGNAL] = { 0 };
static GnomeAppClass *parent_class = NULL;
static GtkWidget *
create_editor (EMsgComposer *composer)
{
@ -207,20 +208,15 @@ build_message (EMsgComposer *composer)
CamelMimePart *part;
char *html = NULL, *plain = NULL, *fmt = NULL;
int i;
char *string;
MsgFormat type = MSG_FORMAT_ALTERNATIVE;
char *path;
if (composer->persist_stream_interface == CORBA_OBJECT_NIL)
return NULL;
path = g_strdup_printf ("=%s/config=/mail/msg_format", evolution_dir);
string = gnome_config_get_string (path);
g_free (path);
if (string) {
if (!strcasecmp(string, "plain"))
type = MSG_FORMAT_PLAIN;
}
if (composer->send_html)
type = MSG_FORMAT_ALTERNATIVE;
else
type = MSG_FORMAT_PLAIN;
new = camel_mime_message_new ();
@ -310,7 +306,7 @@ build_message (EMsgComposer *composer)
}
static char *
get_signature ()
get_signature (void)
{
char *path, *sigfile, *rawsig;
static char *htmlsig = NULL;
@ -501,12 +497,12 @@ do_exit (EMsgComposer *composer)
}
/* Message composer window callbacks. */
/* Menu callbacks. */
static void
open_cb (BonoboUIHandler *uih,
void *data,
const char *path)
menu_file_open_cb (BonoboUIHandler *uih,
void *data,
const char *path)
{
EMsgComposer *composer;
char *file_name;
@ -523,9 +519,9 @@ open_cb (BonoboUIHandler *uih,
}
static void
save_cb (BonoboUIHandler *uih,
void *data,
const char *path)
menu_file_save_cb (BonoboUIHandler *uih,
void *data,
const char *path)
{
EMsgComposer *composer;
CORBA_char *file_name;
@ -548,9 +544,9 @@ save_cb (BonoboUIHandler *uih,
}
static void
save_as_cb (BonoboUIHandler *uih,
void *data,
const char *path)
menu_file_save_as_cb (BonoboUIHandler *uih,
void *data,
const char *path)
{
EMsgComposer *composer;
@ -560,18 +556,18 @@ save_as_cb (BonoboUIHandler *uih,
}
static void
send_cb (BonoboUIHandler *uih,
void *data,
const char *path)
menu_file_send_cb (BonoboUIHandler *uih,
void *data,
const char *path)
{
/* FIXME: We should really write this to Outbox in the future? */
gtk_signal_emit (GTK_OBJECT (data), signals[SEND]);
}
static void
exit_cb (BonoboUIHandler *uih,
void *data,
const char *path)
menu_file_close_cb (BonoboUIHandler *uih,
void *data,
const char *path)
{
EMsgComposer *composer;
@ -579,6 +575,20 @@ exit_cb (BonoboUIHandler *uih,
do_exit (composer);
}
static void
menu_file_add_attachment_cb (BonoboUIHandler *uih,
void *data,
const char *path)
{
EMsgComposer *composer;
composer = E_MSG_COMPOSER (data);
e_msg_composer_attachment_bar_attach
(E_MSG_COMPOSER_ATTACHMENT_BAR (composer->attachment_bar),
NULL);
}
static void
menu_view_attachments_activate_cb (BonoboUIHandler *uih,
void *data,
@ -590,20 +600,6 @@ menu_view_attachments_activate_cb (BonoboUIHandler *uih,
e_msg_composer_show_attachments (E_MSG_COMPOSER (data), state);
}
static void
add_attachment_cb (BonoboUIHandler *uih,
void *data,
const char *path)
{
EMsgComposer *composer;
composer = E_MSG_COMPOSER (data);
e_msg_composer_attachment_bar_attach
(E_MSG_COMPOSER_ATTACHMENT_BAR (composer->attachment_bar),
NULL);
}
static void
insert_file_ok_cb (GtkWidget *widget, void *user_data)
{
@ -751,7 +747,7 @@ insert_file_ok_cb (GtkWidget *widget, void *user_data)
}
static void
insert_file_cb (BonoboUIHandler *uih,
menu_file_insert_file_cb (BonoboUIHandler *uih,
void *data,
const char *path)
{
@ -773,21 +769,24 @@ insert_file_cb (BonoboUIHandler *uih,
}
static void
attachment_bar_changed_cb (EMsgComposerAttachmentBar *bar,
void *data)
menu_format_html_cb (BonoboUIHandler *uih,
void *data,
const char *path)
{
EMsgComposer *composer;
gboolean new_state;
composer = E_MSG_COMPOSER (data);
if (e_msg_composer_attachment_bar_get_num_attachments (bar) > 0)
e_msg_composer_show_attachments (composer, TRUE);
else
e_msg_composer_show_attachments (composer, FALSE);
new_state = bonobo_ui_handler_menu_get_toggle_state (uih, path);
if ((new_state && composer->send_html) || (! new_state && ! composer->send_html))
return;
e_msg_composer_set_send_html (composer, new_state);
}
/* Menu bar implementation. */
/* Menu bar creation. */
static void
create_menubar_file (EMsgComposer *composer,
@ -806,7 +805,7 @@ create_menubar_file (EMsgComposer *composer,
BONOBO_UI_HANDLER_PIXMAP_STOCK,
GNOME_STOCK_MENU_OPEN,
0, 0,
open_cb, composer);
menu_file_open_cb, composer);
bonobo_ui_handler_menu_new_item (uih, "/File/Save",
_("_Save..."),
@ -815,7 +814,7 @@ create_menubar_file (EMsgComposer *composer,
BONOBO_UI_HANDLER_PIXMAP_STOCK,
GNOME_STOCK_MENU_SAVE,
0, 0,
save_cb, composer);
menu_file_save_cb, composer);
bonobo_ui_handler_menu_new_item (uih, "/File/Save as",
_("_Save as..."),
@ -824,7 +823,7 @@ create_menubar_file (EMsgComposer *composer,
BONOBO_UI_HANDLER_PIXMAP_STOCK,
GNOME_STOCK_MENU_SAVE_AS,
0, 0,
save_as_cb, composer);
menu_file_save_as_cb, composer);
bonobo_ui_handler_menu_new_item (uih, "/File/Save in folder",
_("Save in _folder..."),
@ -842,7 +841,7 @@ create_menubar_file (EMsgComposer *composer,
-1,
BONOBO_UI_HANDLER_PIXMAP_NONE, NULL,
0, 0,
insert_file_cb, composer);
menu_file_insert_file_cb, composer);
bonobo_ui_handler_menu_new_separator (uih, "/File/Separator2", -1);
@ -853,7 +852,7 @@ create_menubar_file (EMsgComposer *composer,
BONOBO_UI_HANDLER_PIXMAP_STOCK,
GNOME_STOCK_MENU_MAIL_SND,
0, 0,
send_cb, composer);
menu_file_send_cb, composer);
bonobo_ui_handler_menu_new_separator (uih, "/File/Separator3", -1);
@ -864,7 +863,7 @@ create_menubar_file (EMsgComposer *composer,
BONOBO_UI_HANDLER_PIXMAP_STOCK,
GNOME_STOCK_MENU_CLOSE,
0, 0,
exit_cb, composer);
menu_file_close_cb, composer);
}
static void
@ -878,6 +877,26 @@ create_menubar_edit (EMsgComposer *composer,
0, 0);
}
static void
create_menubar_format (EMsgComposer *composer,
BonoboUIHandler *uih)
{
bonobo_ui_handler_menu_new_subtree (uih, "/Format",
_("_Format"),
NULL, -1,
BONOBO_UI_HANDLER_PIXMAP_NONE, NULL,
0, 0);
bonobo_ui_handler_menu_new_toggleitem (uih, "/Format/HTML",
_("HTML"),
_("Send the mail in HTML format"),
-1,
0, 0,
menu_format_html_cb, composer);
bonobo_ui_handler_menu_set_toggle_state (uih, "/Format/HTML", composer->send_html);
}
static void
create_menubar_view (EMsgComposer *composer,
BonoboUIHandler *uih)
@ -896,17 +915,6 @@ create_menubar_view (EMsgComposer *composer,
menu_view_attachments_activate_cb, composer);
}
static void
create_menubar_options (EMsgComposer *composer,
BonoboUIHandler *uih)
{
bonobo_ui_handler_menu_new_subtree (uih, "/Options",
_("_Options"),
NULL, -1,
BONOBO_UI_HANDLER_PIXMAP_NONE, NULL,
0, 0);
}
static void
create_menubar (EMsgComposer *composer)
{
@ -915,10 +923,10 @@ create_menubar (EMsgComposer *composer)
uih = composer->uih;
bonobo_ui_handler_create_menubar (uih);
create_menubar_file (composer, uih);
create_menubar_edit (composer, uih);
create_menubar_view (composer, uih);
create_menubar_options (composer, uih);
create_menubar_file (composer, uih);
create_menubar_edit (composer, uih);
create_menubar_format (composer, uih);
create_menubar_view (composer, uih);
}
@ -940,7 +948,7 @@ create_toolbar (EMsgComposer *composer)
BONOBO_UI_HANDLER_PIXMAP_STOCK,
GNOME_STOCK_PIXMAP_MAIL_SND,
0, 0,
send_cb, composer);
menu_file_send_cb, composer);
bonobo_ui_handler_toolbar_new_item (uih,
"/Toolbar/Attach",
@ -950,7 +958,24 @@ create_toolbar (EMsgComposer *composer)
BONOBO_UI_HANDLER_PIXMAP_STOCK,
GNOME_STOCK_PIXMAP_ATTACH,
0, 0,
add_attachment_cb, composer);
menu_file_add_attachment_cb, composer);
}
/* Miscellaneous callbacks. */
static void
attachment_bar_changed_cb (EMsgComposerAttachmentBar *bar,
void *data)
{
EMsgComposer *composer;
composer = E_MSG_COMPOSER (data);
if (e_msg_composer_attachment_bar_get_num_attachments (bar) > 0)
e_msg_composer_show_attachments (composer, TRUE);
else
e_msg_composer_show_attachments (composer, FALSE);
}
@ -1068,8 +1093,12 @@ init (EMsgComposer *composer)
composer->persist_file_interface = CORBA_OBJECT_NIL;
composer->persist_stream_interface = CORBA_OBJECT_NIL;
composer->attachment_bar_visible = FALSE;
composer->send_html = FALSE;
}
GtkType
e_msg_composer_get_type (void)
{
@ -1438,3 +1467,44 @@ e_msg_composer_get_message (EMsgComposer *composer)
return build_message (composer);
}
/**
* e_msg_composer_set_send_html:
* @composer: A message composer widget
* @send_html: Whether the composer should have the "Send HTML" flag set
*
* Set the status of the "Send HTML" toggle item. The user can override it.
**/
void
e_msg_composer_set_send_html (EMsgComposer *composer,
gboolean send_html)
{
g_return_if_fail (composer != NULL);
g_return_if_fail (E_IS_MSG_COMPOSER (composer));
if (composer->send_html && send_html)
return;
if (! composer->send_html && ! send_html)
return;
composer->send_html = send_html;
bonobo_ui_handler_menu_set_toggle_state (composer->uih, "/Format/HTML", send_html);
}
/**
* e_msg_composer_get_send_html:
* @composer: A message composer widget
*
* Get the status of the "Send HTML mail" flag.
*
* Return value: The status of the "Send HTML mail" flag.
**/
gboolean
e_msg_composer_get_send_html (EMsgComposer *composer)
{
g_return_val_if_fail (composer != NULL, FALSE);
g_return_val_if_fail (E_IS_MSG_COMPOSER (composer), FALSE);
return composer->send_html;
}