diff options
Diffstat (limited to 'widgets')
-rw-r--r-- | widgets/misc/e-web-view.c | 18 | ||||
-rw-r--r-- | widgets/misc/e-web-view.h | 1 |
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); |