aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mail/ChangeLog11
-rw-r--r--mail/mail-display.c5
-rw-r--r--mail/mail-format.c5
-rw-r--r--mail/mail-format.h3
4 files changed, 23 insertions, 1 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog
index 769d19d4b7..3addafc3e2 100644
--- a/mail/ChangeLog
+++ b/mail/ChangeLog
@@ -1,3 +1,14 @@
+2003-03-17 Jeffrey Stedfast <fejj@ximian.com>
+
+ * mail-display.c (do_external_viewer): Lookup the handler for the
+ type. If we don't have a registered handler or if the registered
+ handler is not meant to be handled via a bonobo component, don't
+ use a bonobo component.
+
+ * mail-format.c (mail_lookup_handler): If we register a new
+ handler that is to be handled by a bonobo component, set
+ handler->is_bonobo to TRUE.
+
2003-03-14 Dan Winship <danw@ximian.com>
* component-factory.c (storage_connect, storage_connected): Update
diff --git a/mail/mail-display.c b/mail/mail-display.c
index 83387bde92..9ac15b4672 100644
--- a/mail/mail-display.c
+++ b/mail/mail-display.c
@@ -1081,6 +1081,11 @@ do_external_viewer (GtkHTML *html, GtkHTMLEmbedded *eb,
CORBA_Environment ev;
CamelStreamMem *cstream;
BonoboStream *bstream;
+ MailMimeHandler *handler;
+
+ handler = mail_lookup_handler (eb->type);
+ if (!handler || !handler->is_bonobo)
+ return FALSE;
component = gnome_vfs_mime_get_default_component (eb->type);
if (!component)
diff --git a/mail/mail-format.c b/mail/mail-format.c
index 67a4604b2c..9d4423c1af 100644
--- a/mail/mail-format.c
+++ b/mail/mail-format.c
@@ -419,6 +419,7 @@ mail_lookup_handler (const char *mime_type)
if (handler->builtin) {
handler->generic = FALSE;
+ handler->is_bonobo = FALSE;
goto reg;
}
@@ -429,6 +430,7 @@ mail_lookup_handler (const char *mime_type)
for (iter = components; iter; iter = iter->next) {
if (component_supports (iter->data, mime_type)) {
handler->generic = FALSE;
+ handler->is_bonobo = TRUE;
handler->builtin = handle_via_bonobo;
handler->component = Bonobo_ServerInfo_duplicate (iter->data);
gnome_vfs_mime_component_list_free (components);
@@ -451,6 +453,7 @@ mail_lookup_handler (const char *mime_type)
if (handler->builtin) {
handler->generic = TRUE;
+ handler->is_bonobo = FALSE;
if (handler->component) {
CORBA_free (handler->component);
handler->component = NULL;
@@ -461,6 +464,7 @@ mail_lookup_handler (const char *mime_type)
/* Try for a generic component match. */
if (handler->component) {
handler->generic = TRUE;
+ handler->is_bonobo = TRUE;
handler->builtin = handle_via_bonobo;
goto reg;
}
@@ -468,6 +472,7 @@ mail_lookup_handler (const char *mime_type)
/* If we at least got an application, use that. */
if (handler->applications) {
handler->generic = TRUE;
+ handler->is_bonobo = FALSE;
goto reg;
}
diff --git a/mail/mail-format.h b/mail/mail-format.h
index fffae641ba..2bc9016879 100644
--- a/mail/mail-format.h
+++ b/mail/mail-format.h
@@ -52,10 +52,11 @@ gboolean mail_content_loaded (CamelDataWrapper *wrapper,
typedef gboolean (*MailMimeHandlerFn) (CamelMimePart *part, const char *mime_type,
MailDisplay *md, MailDisplayStream *stream);
typedef struct {
- gboolean generic;
Bonobo_ServerInfo *component;
GList *applications;
MailMimeHandlerFn builtin;
+ guint generic : 1;
+ guint is_bonobo : 1;
} MailMimeHandler;
MailMimeHandler *mail_lookup_handler (const char *mime_type);