diff options
author | Jon Trowbridge <trow@ximian.com> | 2001-03-09 07:15:20 +0800 |
---|---|---|
committer | Jon Trowbridge <trow@src.gnome.org> | 2001-03-09 07:15:20 +0800 |
commit | afe6fc18fc95f00efdbd3ea7f5ebd6c7fd64330d (patch) | |
tree | cce5d4763c2eda00558c1d6a0b38861417befc91 /mail | |
parent | a9c279d8a69c93d00d0c8eb5c876f42e8a99682f (diff) | |
download | gsoc2013-evolution-afe6fc18fc95f00efdbd3ea7f5ebd6c7fd64330d.tar.gz gsoc2013-evolution-afe6fc18fc95f00efdbd3ea7f5ebd6c7fd64330d.tar.zst gsoc2013-evolution-afe6fc18fc95f00efdbd3ea7f5ebd6c7fd64330d.zip |
Switched to use e_contact_quick_add_free_form. Removed debugging code,
2001-03-08 Jon Trowbridge <trow@ximian.com>
* gui/component/select-names/e-select-names-popup.c
(quick_add_cb): Switched to use e_contact_quick_add_free_form.
Removed debugging code, hopefully without introducing any bugs
in the process.
* gui/component/select-names/e-select-names-text-model.c
(e_select_names_text_model_insert_length): Fix bug with commas
inside of name/address combos. As long as the comma is inside of
quotes, it will be treated as part of the name rather than as a
break between addresses.
* gui/component/select-names/e-select-names-completion.c
(match_nickname): Use e_card_name_to_string for nickname match
strings.
(match_email): Use e_card_name_to_string for email match strings.
(e_select_names_completion_begin): Strip quotes out of query text,
so we don't produce malformed sexps.
Added William Blake quote easter egg.
* contact-editor/e-contact-quick-add.c: Further attempts to fix...
mostly unsuccessful.
(e_contact_quick_add_free_form): Added. Takes a single string
and tries to parse out (using some simple, loose rules) the
name and e-mail -- then calls e_contact_quick_add. An attempt to
get the computer to automatically Do The Right Thing.
* backend/ebook/e-book.c: Fixed some broken indentation. Yes, I'm
anal.
* gui/component/GNOME_Evolution_Addressbook.oafinfo: Added oaf_server
info for EAddressWidget.
* gui/component/GNOME_Evolution_Addressbook.oaf.in: Added oaf_server
info for EAddressWidget.
* gui/component/addressbook-factory.c (main): Add call to
e_address_widget_factory_init.
* gui/component/e-address-widget.h:
* gui/component/e-address-widget.c: Added. A little widget (and a
Bonobo control, BTW) for displaying addresses, with a left-click
menu. Used to display addresses in the mail viewer (as embedded
GtkHTML objects, replacing the text previously used). Still quite
incomplete.
2001-03-08 Jon Trowbridge <trow@ximian.com>
* mail-format.c (write_field_row_begin): Added. Table row HTML
broken out into its own function.
(write_subject): Added. Emits the proper HTML for the subject
line.
(write_field_to_stream): #ifdef-ed out of existence.
(write_address): Take a CamelInternetAddress and spit out an
<object> tag with the appropriate <param>s.
* mail-display.c (on_object_requested): Check for an "address"
object. If found, call...
(handle_embedded_address_object): ...this function, which creates
an AddressWidget bonobo control and passes in the necessary info.
I never really realized just quite how much GtkHTML kicks ass
until I figured out how to make this work.
svn path=/trunk/; revision=8607
Diffstat (limited to 'mail')
-rw-r--r-- | mail/ChangeLog | 17 | ||||
-rw-r--r-- | mail/mail-display.c | 33 | ||||
-rw-r--r-- | mail/mail-format.c | 74 |
3 files changed, 112 insertions, 12 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog index f6a3ef6da5..48757cd6f8 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,3 +1,20 @@ +2001-03-08 Jon Trowbridge <trow@ximian.com> + + * mail-format.c (write_field_row_begin): Added. Table row HTML + broken out into its own function. + (write_subject): Added. Emits the proper HTML for the subject + line. + (write_field_to_stream): #ifdef-ed out of existence. + (write_address): Take a CamelInternetAddress and spit out an + <object> tag with the appropriate <param>s. + + * mail-display.c (on_object_requested): Check for an "address" + object. If found, call... + (handle_embedded_address_object): ...this function, which creates + an AddressWidget bonobo control and passes in the necessary info. + I never really realized just quite how much GtkHTML kicks ass + until I figured out how to make this work. + 2001-03-08 Jeffrey Stedfast <fejj@ximian.com> * mail-vtrash.[c,h]: Removed from cvs diff --git a/mail/mail-display.c b/mail/mail-display.c index 9f599bc797..8304cbc595 100644 --- a/mail/mail-display.c +++ b/mail/mail-display.c @@ -603,6 +603,33 @@ get_embedded_for_component (const char *iid, MailDisplay *md) return embedded; } +static void +handle_embedded_address_object (GtkHTMLEmbedded *eb) +{ + const gchar *name, *email; + GtkWidget *w; + + w = bonobo_widget_new_control ("OAFIID:GNOME_Evolution_Addressbook_AddressWidget", + CORBA_OBJECT_NIL); + + name = gtk_html_embedded_get_parameter (eb, "name"); + email = gtk_html_embedded_get_parameter (eb, "email"); + + bonobo_widget_set_property (BONOBO_WIDGET (w), + "name", name, + "email", email, + /* Hackish: this is the bg color defined for the HTML table + in mail-format.c. If you change it there, you'd better + change it here as well. */ + "background_rgb", 0xeeeeee, + NULL); + + gtk_widget_show (w); + gtk_container_add (GTK_CONTAINER (eb), w); + + gtk_html_embedded_set_descent (eb, 0); +} + static gboolean on_object_requested (GtkHTML *html, GtkHTMLEmbedded *eb, gpointer data) { @@ -621,6 +648,12 @@ on_object_requested (GtkHTML *html, GtkHTMLEmbedded *eb, gpointer data) char *cid; cid = eb->classid; + + if (!strcmp (cid, "address")) { + handle_embedded_address_object (eb); + return TRUE; + } + if (!strncmp (cid, "popup:", 6)) cid += 6; if (strncmp (cid, "cid:", 4) != 0) diff --git a/mail/mail-format.c b/mail/mail-format.c index 27849d54b7..7c8fed1ff7 100644 --- a/mail/mail-format.c +++ b/mail/mail-format.c @@ -575,9 +575,42 @@ enum { }; static void +write_field_row_begin (const char *description, gint flags, GtkHTML *html, GtkHTMLStream *stream) +{ + char *encoded_desc; + int bold = (flags & WRITE_BOLD) == WRITE_BOLD; + + encoded_desc = e_utf8_from_gtk_string (GTK_WIDGET (html), description); + + mail_html_write (html, stream, "<tr><%s align=right> %s </%s>", + bold ? "th" : "td", encoded_desc, bold ? "th" : "td"); + + g_free (encoded_desc); +} + +static void +write_subject (const char *subject, int flags, GtkHTML *html, GtkHTMLStream *stream) +{ + char *encoded_subj; + + if (subject) + encoded_subj = e_text_to_html (subject, E_TEXT_TO_HTML_CONVERT_NL | E_TEXT_TO_HTML_CONVERT_URLS); + else + encoded_subj = ""; + + write_field_row_begin (_("Subject:"), flags, html, stream); + + mail_html_write (html, stream, "<td> %s </td> </tr>", encoded_subj); + + if (subject) + g_free (encoded_subj); +} + +#ifdef USE_OBSOLETE_UNUSED_STUFF_AND_GET_COMPILER_WARNINGS +static void write_field_to_stream(const char *description, const char *value, int flags, GtkHTML *html, GtkHTMLStream *stream) { - char *encoded_desc, *encoded_value; + char *encoded_desc, *encoded_value, *embedded_object; int bold = (flags&WRITE_BOLD) == WRITE_BOLD; /* The description comes from gettext... */ @@ -590,26 +623,45 @@ write_field_to_stream(const char *description, const char *value, int flags, Gtk mail_html_write(html, stream, "<tr valign=top><%s align=right>%s</%s>" - "<td>%s</td></tr>", bold ? "th" : "td", + "<td> %s </td></tr>", bold ? "th" : "td", encoded_desc, bold ? "th" : "td", encoded_value); g_free (encoded_desc); + g_free (embedded_object); if (value) g_free(encoded_value); } +#endif static void -write_address(MailDisplay *md, const CamelInternetAddress *addr, const char *name, int flags) +write_address(MailDisplay *md, const CamelInternetAddress *addr, const char *field_name, int flags) { - char *string; + const char *name, *email; + gint i; - if (addr == NULL) + if (addr == NULL || !camel_internet_address_get (addr, 0, NULL, NULL)) return; - string = camel_address_format((CamelAddress *)addr); - if (string && string[0]) { - write_field_to_stream(name, string, flags, md->html, md->stream); + write_field_row_begin (field_name, flags, md->html, md->stream); + + i = 0; + while (camel_internet_address_get (addr, i, &name, &email)) { + + if ((name && *name) || (email && *email)) { + + mail_html_write (md->html, md->stream, i ? ", " : "<td>"); + + mail_html_write (md->html, md->stream, "<object classid=\"address\">"); + if (name && *name) + mail_html_write (md->html, md->stream, "<param name=\"name\" value=\"%s\"/>", name); + if (email && *email) + mail_html_write (md->html, md->stream, "<param name=\"email\" value=\"%s\"/>", email); + mail_html_write (md->html, md->stream, "</object>"); + } + + ++i; } - g_free(string); + + mail_html_write (md->html, md->stream, "</td></tr>"); /* Finish up the table row */ } @@ -632,9 +684,7 @@ write_headers (CamelMimeMessage *message, MailDisplay *md) write_address(md, camel_mime_message_get_recipients(message, CAMEL_RECIPIENT_TYPE_CC), _("Cc:"), WRITE_BOLD); - write_field_to_stream (_("Subject:"), - camel_mime_message_get_subject (message), - TRUE, md->html, md->stream); + write_subject (camel_mime_message_get_subject (message), WRITE_BOLD, md->html, md->stream); mail_html_write (md->html, md->stream, "</table></td></tr></table></td></tr></table></font>"); |