diff options
-rw-r--r-- | addressbook/gui/merging/Makefile.am | 3 | ||||
-rw-r--r-- | addressbook/gui/widgets/eab-contact-display.c | 63 | ||||
-rw-r--r-- | calendar/gui/e-cal-component-preview.c | 6 | ||||
-rw-r--r-- | modules/addressbook/e-book-shell-content.c | 7 | ||||
-rw-r--r-- | modules/mail/e-mail-shell-view-private.c | 19 | ||||
-rw-r--r-- | widgets/misc/e-web-view.c | 85 | ||||
-rw-r--r-- | widgets/misc/e-web-view.h | 5 |
7 files changed, 109 insertions, 79 deletions
diff --git a/addressbook/gui/merging/Makefile.am b/addressbook/gui/merging/Makefile.am index e10c3ef765..01af6b2534 100644 --- a/addressbook/gui/merging/Makefile.am +++ b/addressbook/gui/merging/Makefile.am @@ -7,7 +7,8 @@ libeabbookmerging_la_CPPFLAGS = \ -I$(top_srcdir) \ -I$(top_srcdir)/widgets \ -I$(top_srcdir)/addressbook \ - $(EVOLUTION_ADDRESSBOOK_CFLAGS) + $(EVOLUTION_ADDRESSBOOK_CFLAGS) \ + $(GNOME_PLATFORM_CFLAGS) libeabbookmerging_la_SOURCES = \ eab-contact-compare.c \ diff --git a/addressbook/gui/widgets/eab-contact-display.c b/addressbook/gui/widgets/eab-contact-display.c index dda6081137..8c0e37fccc 100644 --- a/addressbook/gui/widgets/eab-contact-display.c +++ b/addressbook/gui/widgets/eab-contact-display.c @@ -984,31 +984,11 @@ contact_display_url_requested (GtkHTML *html, } static void -contact_display_link_clicked (GtkHTML *html, - const gchar *uri) -{ - EABContactDisplay *display; - gsize length; - - display = EAB_CONTACT_DISPLAY (html); - - length = strlen ("internal-mailto:"); - if (g_ascii_strncasecmp (uri, "internal-mailto:", length) == 0) { - gint index; - - index = atoi (uri + length); - contact_display_emit_send_message (display, index); - return; - } - - /* Chain up to parent's link_clicked() method. */ - GTK_HTML_CLASS (parent_class)->link_clicked (html, uri); -} - -static void -contact_display_on_url (GtkHTML *html, - const gchar *uri) +contact_display_hovering_over_link (EWebView *web_view, + const gchar *title, + const gchar *uri) { + EWebViewClass *web_view_class; EABContactDisplay *display; EContact *contact; const gchar *name; @@ -1020,7 +1000,7 @@ contact_display_on_url (GtkHTML *html, if (!g_str_has_prefix (uri, "internal-mailto:")) goto chainup; - display = EAB_CONTACT_DISPLAY (html); + display = EAB_CONTACT_DISPLAY (web_view); contact = eab_contact_display_get_contact (display); name = e_contact_get_const (contact, E_CONTACT_FILE_AS); @@ -1029,14 +1009,37 @@ contact_display_on_url (GtkHTML *html, g_return_if_fail (name != NULL); message = g_strdup_printf (_("Click to mail %s"), name); - e_web_view_status_message (E_WEB_VIEW (html), message); + e_web_view_status_message (web_view, message); g_free (message); return; chainup: - /* Chain up to parent's on_url() method. */ - GTK_HTML_CLASS (parent_class)->on_url (html, uri); + /* Chain up to parent's hovering_over_link() method. */ + web_view_class = E_WEB_VIEW_CLASS (parent_class); + web_view_class->hovering_over_link (web_view, title, uri); +} + +static void +contact_display_link_clicked (EWebView *web_view, + const gchar *uri) +{ + EABContactDisplay *display; + gsize length; + + display = EAB_CONTACT_DISPLAY (web_view); + + length = strlen ("internal-mailto:"); + if (g_ascii_strncasecmp (uri, "internal-mailto:", length) == 0) { + gint index; + + index = atoi (uri + length); + contact_display_emit_send_message (display, index); + return; + } + + /* Chain up to parent's link_clicked() method. */ + E_WEB_VIEW_CLASS (parent_class)->link_clicked (web_view, uri); } static void @@ -1086,10 +1089,10 @@ eab_contact_display_class_init (EABContactDisplayClass *class) html_class = GTK_HTML_CLASS (class); html_class->url_requested = contact_display_url_requested; - html_class->link_clicked = contact_display_link_clicked; - html_class->on_url = contact_display_on_url; web_view_class = E_WEB_VIEW_CLASS (class); + web_view_class->hovering_over_link = contact_display_hovering_over_link; + web_view_class->link_clicked = contact_display_link_clicked; web_view_class->update_actions = contact_display_update_actions; g_object_class_install_property ( diff --git a/calendar/gui/e-cal-component-preview.c b/calendar/gui/e-cal-component-preview.c index 77fa25c995..dbc0fc884f 100644 --- a/calendar/gui/e-cal-component-preview.c +++ b/calendar/gui/e-cal-component-preview.c @@ -401,14 +401,8 @@ cal_component_preview_class_init (ECalComponentPreviewClass *class) static void cal_component_preview_init (ECalComponentPreview *preview) { - GtkHTML *html; - preview->priv = E_CAL_COMPONENT_PREVIEW_GET_PRIVATE (preview); - html = GTK_HTML (preview); - gtk_html_set_default_content_type (html, "charset=utf-8"); - gtk_html_load_empty (html); - preview->priv->zone = icaltimezone_get_utc_timezone (); } diff --git a/modules/addressbook/e-book-shell-content.c b/modules/addressbook/e-book-shell-content.c index e83658a248..4a48677d13 100644 --- a/modules/addressbook/e-book-shell-content.c +++ b/modules/addressbook/e-book-shell-content.c @@ -189,6 +189,7 @@ book_shell_content_constructed (GObject *object) EShellView *shell_view; EShellWindow *shell_window; EShellContent *shell_content; + EShellTaskbar *shell_taskbar; GConfBridge *bridge; GtkWidget *container; GtkWidget *widget; @@ -202,6 +203,7 @@ book_shell_content_constructed (GObject *object) shell_content = E_SHELL_CONTENT (object); shell_view = e_shell_content_get_shell_view (shell_content); shell_window = e_shell_view_get_shell_window (shell_view); + shell_taskbar = e_shell_view_get_shell_taskbar (shell_view); shell = e_shell_window_get_shell (shell_window); container = GTK_WIDGET (object); @@ -233,6 +235,11 @@ book_shell_content_constructed (GObject *object) widget, "send-message", G_CALLBACK (book_shell_content_send_message_cb), object); + g_signal_connect_swapped ( + widget, "status-message", + G_CALLBACK (e_shell_taskbar_set_message), + shell_taskbar); + widget = e_preview_pane_new (E_WEB_VIEW (widget)); gtk_paned_pack2 (GTK_PANED (container), widget, FALSE, FALSE); priv->preview_pane = g_object_ref (widget); diff --git a/modules/mail/e-mail-shell-view-private.c b/modules/mail/e-mail-shell-view-private.c index 00dcb2ff1d..55765f34f6 100644 --- a/modules/mail/e-mail-shell-view-private.c +++ b/modules/mail/e-mail-shell-view-private.c @@ -257,19 +257,6 @@ mail_shell_view_reader_changed_cb (EMailShellView *mail_shell_view, } static void -mail_shell_view_reader_status_message_cb (EMailShellView *mail_shell_view, - const gchar *status_message) -{ - EShellView *shell_view; - EShellTaskbar *shell_taskbar; - - shell_view = E_SHELL_VIEW (mail_shell_view); - shell_taskbar = e_shell_view_get_shell_taskbar (shell_view); - - e_shell_taskbar_set_message (shell_taskbar, status_message); -} - -static void mail_shell_view_scroll_cb (EMailShellView *mail_shell_view, GtkOrientation orientation, GtkScrollType scroll_type, @@ -426,6 +413,7 @@ e_mail_shell_view_private_constructed (EMailShellView *mail_shell_view) EShellContent *shell_content; EShellSettings *shell_settings; EShellSidebar *shell_sidebar; + EShellTaskbar *shell_taskbar; EShellWindow *shell_window; EShellSearchbar *searchbar; EMFormatHTMLDisplay *html_display; @@ -447,6 +435,7 @@ e_mail_shell_view_private_constructed (EMailShellView *mail_shell_view) shell_backend = e_shell_view_get_shell_backend (shell_view); shell_content = e_shell_view_get_shell_content (shell_view); shell_sidebar = e_shell_view_get_shell_sidebar (shell_view); + shell_taskbar = e_shell_view_get_shell_taskbar (shell_view); shell_window = e_shell_view_get_shell_window (shell_view); ui_manager = e_shell_window_get_ui_manager (shell_window); @@ -573,8 +562,8 @@ e_mail_shell_view_private_constructed (EMailShellView *mail_shell_view) g_signal_connect_swapped ( web_view, "status-message", - G_CALLBACK (mail_shell_view_reader_status_message_cb), - mail_shell_view); + G_CALLBACK (e_shell_taskbar_set_message), + shell_taskbar); /* Need to keep the handler ID so we can disconnect it in * dispose(). The shell outlives us and we don't want it diff --git a/widgets/misc/e-web-view.c b/widgets/misc/e-web-view.c index d245437e84..7a0dc6de56 100644 --- a/widgets/misc/e-web-view.c +++ b/widgets/misc/e-web-view.c @@ -767,30 +767,71 @@ web_view_url_requested (GtkHTML *html, } static void -web_view_link_clicked (GtkHTML *html, - const gchar *uri) +web_view_gtkhtml_link_clicked (GtkHTML *html, + const gchar *uri) { - gpointer parent; + EWebViewClass *class; + EWebView *web_view; - parent = gtk_widget_get_toplevel (GTK_WIDGET (html)); - parent = gtk_widget_is_toplevel (parent) ? parent : NULL; + web_view = E_WEB_VIEW (html); - e_show_uri (parent, uri); + class = E_WEB_VIEW_GET_CLASS (web_view); + g_return_if_fail (class->link_clicked != NULL); + + class->link_clicked (web_view, uri); } static void web_view_on_url (GtkHTML *html, const gchar *uri) { + EWebViewClass *class; EWebView *web_view; + + web_view = E_WEB_VIEW (html); + + class = E_WEB_VIEW_GET_CLASS (web_view); + g_return_if_fail (class->hovering_over_link != NULL); + + /* XXX WebKit would supply a title here. */ + class->hovering_over_link (web_view, NULL, uri); +} + +static void +web_view_iframe_created (GtkHTML *html, + GtkHTML *iframe) +{ + g_signal_connect_swapped ( + iframe, "button-press-event", + G_CALLBACK (web_view_button_press_event_cb), html); +} + +static gchar * +web_view_extract_uri (EWebView *web_view, + GdkEventButton *event, + GtkHTML *html) +{ + gchar *uri; + + if (event != NULL) + uri = gtk_html_get_url_at (html, event->x, event->y); + else + uri = gtk_html_get_cursor_url (html); + + return uri; +} + +static void +web_view_hovering_over_link (EWebView *web_view, + const gchar *title, + const gchar *uri) +{ CamelInternetAddress *address; CamelURL *curl; const gchar *format = NULL; gchar *message = NULL; gchar *who; - web_view = E_WEB_VIEW (html); - if (uri == NULL || *uri == '\0') goto exit; @@ -833,27 +874,15 @@ exit: } static void -web_view_iframe_created (GtkHTML *html, - GtkHTML *iframe) -{ - g_signal_connect_swapped ( - iframe, "button-press-event", - G_CALLBACK (web_view_button_press_event_cb), html); -} - -static gchar * -web_view_extract_uri (EWebView *web_view, - GdkEventButton *event, - GtkHTML *html) +web_view_link_clicked (EWebView *web_view, + const gchar *uri) { - gchar *uri; + gpointer parent; - if (event != NULL) - uri = gtk_html_get_url_at (html, event->x, event->y); - else - uri = gtk_html_get_cursor_url (html); + parent = gtk_widget_get_toplevel (GTK_WIDGET (web_view)); + parent = gtk_widget_is_toplevel (parent) ? parent : NULL; - return uri; + e_show_uri (parent, uri); } static void @@ -1083,11 +1112,13 @@ e_web_view_class_init (EWebViewClass *class) html_class = GTK_HTML_CLASS (class); html_class->url_requested = web_view_url_requested; - html_class->link_clicked = web_view_link_clicked; + html_class->link_clicked = web_view_gtkhtml_link_clicked; html_class->on_url = web_view_on_url; html_class->iframe_created = web_view_iframe_created; class->extract_uri = web_view_extract_uri; + class->hovering_over_link = web_view_hovering_over_link; + class->link_clicked = web_view_link_clicked; class->load_string = web_view_load_string; class->copy_clipboard = web_view_copy_clipboard; class->cut_clipboard = web_view_cut_clipboard; diff --git a/widgets/misc/e-web-view.h b/widgets/misc/e-web-view.h index 7d8eb4c8d0..56477ef257 100644 --- a/widgets/misc/e-web-view.h +++ b/widgets/misc/e-web-view.h @@ -69,6 +69,11 @@ struct _EWebViewClass { gchar * (*extract_uri) (EWebView *web_view, GdkEventButton *event, GtkHTML *frame); + void (*hovering_over_link) (EWebView *web_view, + const gchar *title, + const gchar *uri); + void (*link_clicked) (EWebView *web_view, + const gchar *uri); void (*load_string) (EWebView *web_view, const gchar *load_string); |