aboutsummaryrefslogtreecommitdiffstats
path: root/mail
diff options
context:
space:
mode:
authorJon Trowbridge <trow@ximian.com>2001-03-09 07:15:20 +0800
committerJon Trowbridge <trow@src.gnome.org>2001-03-09 07:15:20 +0800
commitafe6fc18fc95f00efdbd3ea7f5ebd6c7fd64330d (patch)
treecce5d4763c2eda00558c1d6a0b38861417befc91 /mail
parenta9c279d8a69c93d00d0c8eb5c876f42e8a99682f (diff)
downloadgsoc2013-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/ChangeLog17
-rw-r--r--mail/mail-display.c33
-rw-r--r--mail/mail-format.c74
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>");