X-Git-Url: http://git.claws-mail.org/?p=claws.git;a=blobdiff_plain;f=src%2Fplugins%2Flitehtml_viewer%2Flh_viewer.c;h=7fee13e4799dfcc9ca705090099abf30742dae20;hp=a567d2ccbc3d1714c5c98f5e642323f667a3d4f9;hb=HEAD;hpb=969c422ede326adee17bf5009a0c55c687ef1f6f diff --git a/src/plugins/litehtml_viewer/lh_viewer.c b/src/plugins/litehtml_viewer/lh_viewer.c index a567d2ccb..b6109fd47 100644 --- a/src/plugins/litehtml_viewer/lh_viewer.c +++ b/src/plugins/litehtml_viewer/lh_viewer.c @@ -1,5 +1,5 @@ /* - * Claws Mail -- A GTK+ based, lightweight, and fast e-mail client + * Claws Mail -- A GTK based, lightweight, and fast e-mail client * Copyright(C) 2019 the Claws Mail Team * * This program is free software; you can redistribute it and/or modify @@ -43,56 +43,37 @@ static GtkWidget *lh_get_widget(MimeViewer *_viewer) return viewer->vbox; } -static gchar *get_utf8_string(const gchar *string) { - gchar *utf8 = NULL; - gsize length; - GError *error = NULL; - gchar *locale = NULL; - - if (!g_utf8_validate(string, -1, NULL)) { - const gchar *cur_locale = conv_get_current_locale(); - gchar* split = g_strstr_len(cur_locale, -1, "."); - if (split) { - locale = ++split; - } else { - locale = (gchar *) cur_locale; - } - debug_print("Try converting to UTF-8 from %s\n", locale); - if (g_ascii_strcasecmp("utf-8", locale) != 0) { - utf8 = g_convert(string, -1, "utf-8", locale, NULL, &length, &error); - if (error) { - debug_print("Failed convertion to current locale: %s\n", error->message); - g_clear_error(&error); - } - } - if (!utf8) { - debug_print("Use iso-8859-1 as last resort\n"); - utf8 = g_convert(string, -1, "utf-8", "iso-8859-1", NULL, &length, &error); - if (error) { - debug_print("Charset detection failed. Use text as is\n"); - utf8 = g_strdup(string); - g_clear_error(&error); - } - } - } else { - utf8 = g_strdup(string); - } - - return utf8; -} - static void lh_show_mimepart(MimeViewer *_viewer, const gchar *infile, MimeInfo *partinfo) { debug_print("LH: show_mimepart\n"); LHViewer *viewer = (LHViewer *)_viewer; - gchar *utf8 = procmime_get_part_as_string(partinfo, TRUE); + gchar *string = procmime_get_part_as_string(partinfo, TRUE); + gchar *utf8 = NULL; + const gchar *charset; - if (utf8 == NULL) { - g_warning("LH: couldn't get MIME part file\n"); + if (string == NULL) { + g_warning("LH: couldn't get MIME part file"); return; } + charset = procmime_mimeinfo_get_parameter(partinfo, "charset"); + if (charset != NULL && g_ascii_strcasecmp("utf-8", charset) != 0) { + gsize length; + GError *error = NULL; + debug_print("LH: converting mimepart to UTF-8 from %s\n", charset); + utf8 = g_convert(string, -1, "utf-8", charset, NULL, &length, &error); + if (error) { + g_warning("LH: failed mimepart conversion to UTF-8: %s", error->message); + g_free(string); + g_error_free(error); + return; + } + debug_print("LH: successfully converted %" G_GSIZE_FORMAT " bytes\n", length); + } else { + utf8 = string; + } + lh_widget_set_partinfo(viewer->widget, partinfo); lh_widget_open_html(viewer->widget, utf8); g_free(utf8); @@ -113,6 +94,7 @@ static void lh_destroy_viewer(MimeViewer *_viewer) g_free(viewer); } +/* static void lh_print_viewer (MimeViewer *_viewer) { debug_print("LH: print_viewer\n"); @@ -120,6 +102,34 @@ static void lh_print_viewer (MimeViewer *_viewer) LHViewer* viewer = (LHViewer *) _viewer; lh_widget_print(viewer->widget); } +*/ + + +static gboolean lh_scroll_page(MimeViewer *_viewer, gboolean up) +{ + LHViewer *viewer = (LHViewer *)_viewer; + GtkAdjustment *vadj = NULL; + + if (!viewer || (viewer->widget == NULL)) + return FALSE; + + vadj = gtk_scrolled_window_get_vadjustment( + GTK_SCROLLED_WINDOW(lh_widget_get_widget(viewer->widget))); + return gtkutils_scroll_page(lh_widget_get_widget(viewer->widget), vadj, up); +} + +static void lh_scroll_one_line(MimeViewer *_viewer, gboolean up) +{ + LHViewer *viewer = (LHViewer *)_viewer; + GtkAdjustment *vadj = NULL; + + if (!viewer || (viewer->widget == NULL)) + return; + + vadj = gtk_scrolled_window_get_vadjustment( + GTK_SCROLLED_WINDOW(lh_widget_get_widget(viewer->widget))); + gtkutils_scroll_one_line(lh_widget_get_widget(viewer->widget), vadj, up); +} /***************************************************************/ MimeViewer *lh_viewer_create() @@ -135,10 +145,12 @@ MimeViewer *lh_viewer_create() viewer->mimeviewer.clear_viewer = lh_clear_viewer; viewer->mimeviewer.destroy_viewer = lh_destroy_viewer; - - viewer->mimeviewer.print = lh_print_viewer; - viewer->vbox = gtk_vbox_new(FALSE, 0); + viewer->mimeviewer.scroll_page = lh_scroll_page; + viewer->mimeviewer.scroll_one_line = lh_scroll_one_line; + + viewer->vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); + gtk_widget_set_name(GTK_WIDGET(viewer->vbox), "litehtml_viewer"); GtkWidget *w = lh_widget_get_widget(viewer->widget); gtk_box_pack_start(GTK_BOX(viewer->vbox), w,