aboutsummaryrefslogtreecommitdiffstats
path: root/widgets
diff options
context:
space:
mode:
Diffstat (limited to 'widgets')
-rw-r--r--widgets/misc/e-web-view.c18
-rw-r--r--widgets/misc/e-web-view.h1
2 files changed, 18 insertions, 1 deletions
diff --git a/widgets/misc/e-web-view.c b/widgets/misc/e-web-view.c
index d227a720ad..0e90d7dff9 100644
--- a/widgets/misc/e-web-view.c
+++ b/widgets/misc/e-web-view.c
@@ -88,6 +88,7 @@ enum {
STATUS_MESSAGE,
STOP_LOADING,
UPDATE_ACTIONS,
+ PROCESS_MAILTO,
LAST_SIGNAL
};
@@ -337,6 +338,7 @@ action_send_message_cb (GtkAction *action,
{
const gchar *uri;
gpointer parent;
+ gboolean handled;
parent = gtk_widget_get_toplevel (GTK_WIDGET (web_view));
parent = gtk_widget_is_toplevel (parent) ? parent : NULL;
@@ -344,7 +346,11 @@ action_send_message_cb (GtkAction *action,
uri = e_web_view_get_selected_uri (web_view);
g_return_if_fail (uri != NULL);
- e_show_uri (parent, uri);
+ handled = FALSE;
+ g_signal_emit (web_view, signals[PROCESS_MAILTO], 0, uri, &handled);
+
+ if (!handled)
+ e_show_uri (parent, uri);
}
static void
@@ -1335,6 +1341,16 @@ e_web_view_class_init (EWebViewClass *class)
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
+
+ /* return TRUE when a signal handler processed the mailto URI */
+ signals[PROCESS_MAILTO] = g_signal_new (
+ "process-mailto",
+ G_TYPE_FROM_CLASS (class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (EWebViewClass, process_mailto),
+ NULL, NULL,
+ e_marshal_BOOLEAN__STRING,
+ G_TYPE_BOOLEAN, 1, G_TYPE_STRING);
}
static void
diff --git a/widgets/misc/e-web-view.h b/widgets/misc/e-web-view.h
index f7ffefe935..1ad87c6756 100644
--- a/widgets/misc/e-web-view.h
+++ b/widgets/misc/e-web-view.h
@@ -88,6 +88,7 @@ struct _EWebViewClass {
const gchar *status_message);
void (*stop_loading) (EWebView *web_view);
void (*update_actions) (EWebView *web_view);
+ gboolean (*process_mailto) (EWebView *web_view, const gchar *mailto_uri);
};
GType e_web_view_get_type (void);