diff options
author | pawel <pawel@FreeBSD.org> | 2017-06-17 02:46:44 +0800 |
---|---|---|
committer | pawel <pawel@FreeBSD.org> | 2017-06-17 02:46:44 +0800 |
commit | 379fdf262a2b9d7fb58cb9f4906b2183d896ba6b (patch) | |
tree | 9ac439d91c50259467272cd31698c3aabe8035a2 /mail | |
parent | 13c94d0debd155ba011a393c469103c27cadbe37 (diff) | |
download | freebsd-ports-gnome-379fdf262a2b9d7fb58cb9f4906b2183d896ba6b.tar.gz freebsd-ports-gnome-379fdf262a2b9d7fb58cb9f4906b2183d896ba6b.tar.zst freebsd-ports-gnome-379fdf262a2b9d7fb58cb9f4906b2183d896ba6b.zip |
Add upstream patch fixing htmlview display regressions. Due to webkit
internal changes htmlview can show blank page or contents of previous
email html part.
Diffstat (limited to 'mail')
-rw-r--r-- | mail/claws-mail-fancy/Makefile | 2 | ||||
-rw-r--r-- | mail/claws-mail-fancy/files/patch-prev-htmlview-fix | 236 |
2 files changed, 237 insertions, 1 deletions
diff --git a/mail/claws-mail-fancy/Makefile b/mail/claws-mail-fancy/Makefile index fa8ebc0aea90..f45b6457a305 100644 --- a/mail/claws-mail-fancy/Makefile +++ b/mail/claws-mail-fancy/Makefile @@ -2,7 +2,7 @@ # $FreeBSD$ PORTNAME= fancy -PORTREVISION= 0 +PORTREVISION= 1 COMMENT= Webkit based HTML renderer plugin for Claws Mail diff --git a/mail/claws-mail-fancy/files/patch-prev-htmlview-fix b/mail/claws-mail-fancy/files/patch-prev-htmlview-fix new file mode 100644 index 000000000000..555297172ab7 --- /dev/null +++ b/mail/claws-mail-fancy/files/patch-prev-htmlview-fix @@ -0,0 +1,236 @@ +diff --git src/plugins/fancy/fancy_viewer.c src/plugins/fancy/fancy_viewer.c +index 3e818f884..079a18e63 100644 +--- src/plugins/fancy/fancy_viewer.c ++++ src/plugins/fancy/fancy_viewer.c +@@ -42,12 +42,9 @@ static void + over_link_cb (WebKitWebView *view, const gchar *wtf, const gchar *link, + FancyViewer *viewer, void *wtfa); + +-static void +-load_progress_cb (WebKitWebView *view, gint progress, FancyViewer *viewer); + +-static WebKitNavigationResponse +-navigation_requested_cb (WebKitWebView *view, WebKitWebFrame *frame, +- WebKitNetworkRequest *netreq, FancyViewer *viewer); ++static void ++load_progress_cb(WebKitWebView *view, GParamSpec* pspec, FancyViewer *viewer); + + static MimeViewerFactory fancy_viewer_factory; + +@@ -199,15 +196,6 @@ static void fancy_set_defaults(FancyViewer *viewer) + fancy_apply_prefs(viewer); + } + +-static void fancy_load_uri(FancyViewer *viewer, const gchar *uri) +-{ +-#if WEBKIT_CHECK_VERSION(1,1,1) +- webkit_web_view_load_uri(viewer->view, uri); +-#else +- webkit_web_view_open(viewer->view, uri); +-#endif +-} +- + static gboolean fancy_show_mimepart_real(MimeViewer *_viewer) + { + FancyViewer *viewer = (FancyViewer *) _viewer; +@@ -240,6 +228,7 @@ static gboolean fancy_show_mimepart_real(MimeViewer *_viewer) + } + else { + const gchar *charset = NULL; ++ gchar *contents = NULL; + if (messageview && messageview->forced_charset) + charset = _viewer->mimeview->messageview->forced_charset; + else +@@ -248,14 +237,20 @@ static gboolean fancy_show_mimepart_real(MimeViewer *_viewer) + charset = conv_get_locale_charset_str(); + debug_print("using %s charset\n", charset); + g_object_set(viewer->settings, "default-encoding", charset, NULL); +- gchar *tmp = g_filename_to_uri(viewer->filename, NULL, NULL); ++ ++ contents = file_read_to_str_no_recode(viewer->filename); ++ + debug_print("zoom_level: %i\n", fancy_prefs.zoom_level); + webkit_web_view_set_zoom_level(viewer->view, (fancy_prefs.zoom_level / 100.0)); + + fancy_set_defaults(viewer); +- fancy_load_uri(viewer, tmp); + +- g_free(tmp); ++ webkit_web_view_load_string(viewer->view, ++ contents, ++ "text/html", ++ charset, ++ NULL); ++ g_free(contents); + } + viewer->loading = FALSE; + return FALSE; +@@ -349,7 +344,7 @@ static void fancy_clear_viewer(MimeViewer *_viewer) + viewer->cur_link = NULL; + fancy_set_defaults(viewer); + +- fancy_load_uri(viewer, "about:blank"); ++ webkit_web_view_load_uri(viewer->view, "about:blank"); + + debug_print("fancy_clear_viewer\n"); + fancy_prefs.zoom_level = webkit_web_view_get_zoom_level(viewer->view) * 100; +@@ -368,25 +363,35 @@ static void fancy_destroy_viewer(MimeViewer *_viewer) + g_free(viewer); + } + +-static WebKitNavigationResponse +-navigation_requested_cb(WebKitWebView *view, WebKitWebFrame *frame, +- WebKitNetworkRequest *netreq, FancyViewer *viewer) ++static gboolean ++navigation_policy_cb (WebKitWebView *web_view, ++ WebKitWebFrame *frame, ++ WebKitNetworkRequest *request, ++ WebKitWebNavigationAction *navigation_action, ++ WebKitWebPolicyDecision *policy_decision, ++ FancyViewer *viewer) + { +- const gchar *uri = webkit_network_request_get_uri(netreq); ++ const gchar *uri = webkit_network_request_get_uri(request); + + debug_print("navigation requested to %s\n", uri); + + if (!strncmp(uri, "mailto:", 7)) { ++ debug_print("Opening message window\n"); + compose_new(NULL, uri + 7, NULL); +- return WEBKIT_NAVIGATION_RESPONSE_IGNORE; +- } else if (!strncmp(uri, "file://", 7)) { +- return WEBKIT_NAVIGATION_RESPONSE_ACCEPT; +- } else if (viewer->override_prefs_remote_content) +- return WEBKIT_NAVIGATION_RESPONSE_ACCEPT; +- else { ++ webkit_web_policy_decision_ignore(policy_decision); ++ } else if (!strncmp(uri, "file://", 7) || !strcmp(uri, "about:blank")) { ++ debug_print("local navigation request ACCEPTED\n"); ++ webkit_web_policy_decision_use(policy_decision); ++ } else if (viewer->override_prefs_remote_content) { ++ debug_print("remote navigation request ACCEPTED\n"); ++ webkit_web_policy_decision_use(policy_decision); ++ } else { ++ debug_print("remote navigation request IGNORED\n"); + fancy_show_notice(viewer, _("Remote content loading is disabled.")); +- return WEBKIT_NAVIGATION_RESPONSE_IGNORE; ++ webkit_web_policy_decision_ignore(policy_decision); + } ++ ++ return true; + } + + static void resource_request_starting_cb(WebKitWebView *view, +@@ -560,17 +565,33 @@ static void over_link_cb(WebKitWebView *view, const gchar *wtf, + } + } + +-static void load_progress_cb(WebKitWebView *view, gint progress, ++static void load_progress_cb(WebKitWebView *view, GParamSpec* pspec, + FancyViewer *viewer) + { +- gdouble pbar; +- gchar *label = g_strdup_printf("%d%% Loading...", progress); +- pbar = (gdouble) progress / 100; ++ WebKitLoadStatus status = webkit_web_view_get_load_status(viewer->view); ++ gdouble pbar = webkit_web_view_get_progress(viewer->view); ++ const gchar *uri = webkit_web_view_get_uri(viewer->view); ++ ++ gchar *label = g_strdup_printf("%d%% Loading...", (gint)(pbar * 100)); + gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(viewer->progress), pbar); + gtk_progress_bar_set_text(GTK_PROGRESS_BAR(viewer->progress), + (const gchar*)label); + g_free(label); ++ ++ switch (status) { ++ case WEBKIT_LOAD_PROVISIONAL: ++ case WEBKIT_LOAD_COMMITTED: ++ case WEBKIT_LOAD_FIRST_VISUALLY_NON_EMPTY_LAYOUT: ++ break; ++ case WEBKIT_LOAD_FAILED: ++ debug_print("Load failed: %s\n", uri); ++ break; ++ case WEBKIT_LOAD_FINISHED: ++ debug_print("Load finished: %s\n", uri); ++ break; ++ } + } ++ + static void stop_loading_cb(GtkWidget *widget, GdkEvent *ev, + FancyViewer *viewer) + { +@@ -594,11 +615,8 @@ static void search_the_web_cb(GtkWidget *widget, FancyViewer *viewer) + gchar *tmp = webkit_web_view_get_selected_text(viewer->view); + #endif + search = g_strconcat(GOOGLE_SEARCH, tmp, NULL); +-#if WEBKIT_CHECK_VERSION(1,1,1) ++ + webkit_web_view_load_uri(viewer->view, search); +-#else +- webkit_web_view_open(viewer->view, search); +-#endif + g_free(search); + g_free(tmp); + } +@@ -893,6 +911,17 @@ static void zoom_out_cb(GtkWidget *widget, GdkEvent *ev, FancyViewer *viewer) + webkit_web_view_zoom_out(viewer->view); + } + ++#if WEBKIT_CHECK_VERSION (1,7,5) ++static void resource_load_failed_cb(WebKitWebView *web_view, ++ WebKitWebFrame *web_frame, ++ WebKitWebResource *web_resource, ++ GError *error, ++ FancyViewer *viewer) ++{ ++ debug_print("Loading error: %s\n", error->message); ++} ++#endif ++ + static MimeViewer *fancy_viewer_create(void) + { + FancyViewer *viewer; +@@ -1009,10 +1038,15 @@ static MimeViewer *fancy_viewer_create(void) + G_CALLBACK(load_finished_cb), viewer); + g_signal_connect(G_OBJECT(viewer->view), "hovering-over-link", + G_CALLBACK(over_link_cb), viewer); +- g_signal_connect(G_OBJECT(viewer->view), "load-progress-changed", ++ ++ g_signal_connect(G_OBJECT(viewer->view), "notify::progress", ++ G_CALLBACK(load_progress_cb), viewer); ++ g_signal_connect(G_OBJECT(viewer->view), "notify::load-status", + G_CALLBACK(load_progress_cb), viewer); +- g_signal_connect(G_OBJECT(viewer->view), "navigation-requested", +- G_CALLBACK(navigation_requested_cb), viewer); ++ ++ g_signal_connect(G_OBJECT(viewer->view), "navigation-policy-decision-requested", ++ G_CALLBACK(navigation_policy_cb), viewer); ++ + g_signal_connect(G_OBJECT(viewer->view), "resource-request-starting", + G_CALLBACK(resource_request_starting_cb), viewer); + g_signal_connect(G_OBJECT(viewer->view), "populate-popup", +@@ -1034,6 +1068,11 @@ static MimeViewer *fancy_viewer_create(void) + g_signal_connect(G_OBJECT(viewer->view), "key_press_event", + G_CALLBACK(keypress_events_cb), viewer); + ++#if WEBKIT_CHECK_VERSION (1,7,5) ++ g_signal_connect(G_OBJECT(viewer->view), "resource-load-failed", ++ G_CALLBACK(resource_load_failed_cb), viewer); ++#endif ++ + viewer->filename = NULL; + return (MimeViewer *) viewer; + } +diff --git src/plugins/fancy/fancy_viewer.h src/plugins/fancy/fancy_viewer.h +index 4d751b712..952b33717 100644 +--- src/plugins/fancy/fancy_viewer.h ++++ src/plugins/fancy/fancy_viewer.h +@@ -33,6 +33,8 @@ + #include <webkit/webkitversion.h> + #include <webkit/webkitwebframe.h> + #include <webkit/webkitnetworkrequest.h> ++#include <webkit/webkitwebnavigationaction.h> ++#include <webkit/webkitwebpolicydecision.h> + #if WEBKIT_CHECK_VERSION (1,3,10) + #include <webkit/webkitglobals.h> + #endif |