From e3f8e22df0178b8c471f0a4f6e57ac76d1f1c36c Mon Sep 17 00:00:00 2001 From: Ettore Perazzoli Date: Sun, 23 Jul 2000 13:55:13 +0000 Subject: Add a "Send HTML mail" toggle in the message composer. svn path=/trunk/; revision=4284 --- composer/ChangeLog | 24 ++++++ composer/e-msg-composer.c | 216 ++++++++++++++++++++++++++++++---------------- composer/e-msg-composer.h | 5 ++ mail/ChangeLog | 5 ++ mail/mail-ops.c | 37 +++++++- 5 files changed, 211 insertions(+), 76 deletions(-) diff --git a/composer/ChangeLog b/composer/ChangeLog index 184b915b65..780e111585 100644 --- a/composer/ChangeLog +++ b/composer/ChangeLog @@ -1,3 +1,27 @@ +2000-07-23 Ettore Perazzoli + + * e-msg-composer.c (menu_format_html_cb): New callback for the + "Send HTML" menu toggle item. + (create_menubar_format): New. + (create_menubar): Call it. + (create_menubar_options): Removed. + (init): Initialize `send_html' and `attachment_bar_visible' to + FALSE. + (get_signature): Add `void' to the declaration. This is C, not + C++. + (menu_file_close_cb): Renamed from `exit_cb'. + (menu_file_send_cb): Renamed from `send_cb'. + (menu_file_save_as_cb): Renamed from `save_as_cb'. + (menu_file_save_cb): Renamed from `save_cb'. + (menu_file_open_cb): Renamed from `open_cb'. + (menu_file_add_attachment_cb): Renamed from `add_attachment_cb'. + (menu_file_insert_file_cb): Renamed from `insert_file_cb'. + (e_msg_composer_set_send_html): New. + (build_message): Use the `send_html' flag instead of peeking the + `msg_format' gnome-config value directly. + + * e-msg-composer.h: New member `send_html' in `EMsgComposer'. + 2000-07-23 Ettore Perazzoli * e-msg-composer.c: Changed to use BonoboUIHandler stuff directly diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index e537d7575b..7249350d0e 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -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; @@ -580,20 +576,9 @@ exit_cb (BonoboUIHandler *uih, } static void -menu_view_attachments_activate_cb (BonoboUIHandler *uih, - void *data, - const char *path) -{ - gboolean state; - - state = bonobo_ui_handler_menu_get_toggle_state (uih, path); - e_msg_composer_show_attachments (E_MSG_COMPOSER (data), state); -} - -static void -add_attachment_cb (BonoboUIHandler *uih, - void *data, - const char *path) +menu_file_add_attachment_cb (BonoboUIHandler *uih, + void *data, + const char *path) { EMsgComposer *composer; @@ -604,6 +589,17 @@ add_attachment_cb (BonoboUIHandler *uih, NULL); } +static void +menu_view_attachments_activate_cb (BonoboUIHandler *uih, + void *data, + const char *path) +{ + gboolean state; + + state = bonobo_ui_handler_menu_get_toggle_state (uih, path); + e_msg_composer_show_attachments (E_MSG_COMPOSER (data), state); +} + 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; +} diff --git a/composer/e-msg-composer.h b/composer/e-msg-composer.h index a8abf611dc..2b802ffc19 100644 --- a/composer/e-msg-composer.h +++ b/composer/e-msg-composer.h @@ -65,6 +65,7 @@ struct _EMsgComposer { Bonobo_PersistStream persist_stream_interface; gboolean attachment_bar_visible : 1; + gboolean send_html : 1; }; struct _EMsgComposerClass { @@ -98,6 +99,10 @@ void e_msg_composer_attach (EMsgComposer *composer, CamelMimeMessage *e_msg_composer_get_message (EMsgComposer *composer); +void e_msg_composer_set_send_html (EMsgComposer *composer, + gboolean send_html); +gboolean e_msg_composer_get_send_html (EMsgComposer *composer); + #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/mail/ChangeLog b/mail/ChangeLog index b00f4e3086..5fff503a98 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,5 +1,10 @@ 2000-07-23 Ettore Perazzoli + * mail-ops.c (create_message_composer): New. + (compose_msg): Use it. + (send_to_url): Likewise. + (forward_msg): Likewise. + * folder-browser-factory.c (control_activate): Use `_()' instead of `N_()'. diff --git a/mail/mail-ops.c b/mail/mail-ops.c index 94cd42fae0..c28564aad8 100644 --- a/mail/mail-ops.c +++ b/mail/mail-ops.c @@ -568,6 +568,37 @@ free_psd (GtkWidget *composer, gpointer user_data) g_free (psd); } +static GtkWidget * +create_msg_composer (const char *url) +{ + GtkWidget *composer_widget; + gboolean send_html; + char *path; + char *string; + + path = g_strdup_printf ("=%s/config=/mail/msg_format", evolution_dir); + string = gnome_config_get_string (path); + g_free (path); + + if (string == NULL) { + send_html = FALSE; + } else { + if (!strcasecmp(string, "plain")) + send_html = FALSE; + else + send_html = TRUE; + } + + if (url != NULL) + composer_widget = e_msg_composer_new_from_url (url); + else + composer_widget = e_msg_composer_new (); + + e_msg_composer_set_send_html (E_MSG_COMPOSER (composer_widget), send_html); + + return composer_widget; +} + void compose_msg (GtkWidget *widget, gpointer user_data) { @@ -576,7 +607,7 @@ compose_msg (GtkWidget *widget, gpointer user_data) if (!check_configured ()) return; - composer = e_msg_composer_new (); + composer = create_msg_composer (NULL); gtk_signal_connect (GTK_OBJECT (composer), "send", GTK_SIGNAL_FUNC (composer_send_cb), NULL); @@ -592,7 +623,7 @@ send_to_url (const char *url) if (!check_configured ()) return; - composer = e_msg_composer_new_from_url (url); + composer = create_msg_composer (url); gtk_signal_connect (GTK_OBJECT (composer), "send", GTK_SIGNAL_FUNC (composer_send_cb), NULL); @@ -681,7 +712,7 @@ forward_msg (GtkWidget *button, gpointer user_data) if (!check_configured () || !cursor_msg) return; - composer = E_MSG_COMPOSER (e_msg_composer_new ()); + composer = E_MSG_COMPOSER (create_msg_composer (NULL)); message_list_foreach (fb->message_list, attach_msg, composer); from = camel_mime_message_get_from (cursor_msg); -- cgit v1.2.3