From bfd2c7b4ccce0a13671c566b22b42719417458ab Mon Sep 17 00:00:00 2001 From: Rodrigo Arias Mallo Date: Sun, 8 Dec 2024 16:34:26 +0100 Subject: [PATCH] Allow image formats to be disabled from dillorc Makes disabling certain formats posible without the need to rebuild Dillo from source. See: https://github.com/dillo-browser/dillo/pull/312 --- ChangeLog | 1 + dillorc | 6 ++++++ src/dicache.c | 28 ++++++++++++++++++++++++++-- src/prefs.c | 1 + src/prefs.h | 1 + src/prefsparser.cc | 1 + 6 files changed, 36 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2bd57426..4f1d23ac 100644 --- a/ChangeLog +++ b/ChangeLog @@ -28,6 +28,7 @@ dillo-3.2.0 [Not released yet] - Improve image resize logic to always try to preserve the aspect ratio. - Reload current page on SIGUSR1 signal - Print library versions and enabled features with dillo -v. + - Allow image formats to be ignored with the "ignore_image_formats" option. Patches: Rodrigo Arias Mallo +- Add primitive support for SVG using the nanosvg.h library. - Add support for ch, rem, vw, vh, vmin and vmax CSS units. diff --git a/dillorc b/dillorc index 70695781..2b46eb47 100644 --- a/dillorc +++ b/dillorc @@ -19,6 +19,12 @@ # menu.) #load_images=YES +# A space separated list of image formats that will be ignored (not viewed). +# Instead, an option to download the image will be offered instead. Available +# formats: gif, png, webp, jpg and svg. +# ignore_image_formats="webp svg" +#ignore_image_formats="" + # Change this if you want background images to be loaded initially. # (While browsing, this can be changed from the tools/settings menu.) #load_background_images=NO diff --git a/src/dicache.c b/src/dicache.c index e86f5655..e53fb011 100644 --- a/src/dicache.c +++ b/src/dicache.c @@ -25,13 +25,23 @@ #include "dsvg.h" enum { - DIC_Gif, + DIC_Gif = 0, DIC_Png, DIC_Webp, DIC_Jpeg, - DIC_Svg + DIC_Svg, + DIC_MAX }; +static const char *format_name[DIC_MAX] = { + [DIC_Gif] = "gif", + [DIC_Png] = "png", + [DIC_Webp] = "webp", + [DIC_Jpeg] = "jpeg", + [DIC_Svg] = "svg" +}; + +static int disabled_formats[DIC_MAX] = { 0 }; /** * List of DICacheEntry. May hold several versions of the same image, @@ -67,6 +77,15 @@ void a_Dicache_init(void) { CachedIMGs = dList_new(256); dicache_size_total = 0; + + if (prefs.ignore_image_formats) { + for (int i = 0; i < DIC_MAX; i++) { + if (dStriAsciiStr(prefs.ignore_image_formats, format_name[i])) { + disabled_formats[i] = 1; + _MSG("Image format %s disabled\n", format_name[i]); + } + } + } } /** @@ -372,6 +391,11 @@ static void *Dicache_image(int ImgType, const char *MimeType, void *Ptr, dReturn_val_if_fail(MimeType && Ptr, NULL); + if (ImgType >= 0 && ImgType < DIC_MAX && disabled_formats[ImgType]) { + _MSG("Ignoring image format %s\n", format_name[ImgType]); + return NULL; + } + if (!web->Image) { web->Image = a_Image_new_with_dw(web->bw->render_layout, NULL, web->bgColor, 0); diff --git a/src/prefs.c b/src/prefs.c index d6a3ff12..4a68e4c9 100644 --- a/src/prefs.c +++ b/src/prefs.c @@ -76,6 +76,7 @@ void a_Prefs_init(void) prefs.adjust_min_width = TRUE; prefs.adjust_table_min_width = TRUE; prefs.load_images=TRUE; + prefs.ignore_image_formats = NULL; prefs.load_background_images=FALSE; prefs.load_stylesheets=TRUE; prefs.middle_click_drags_page = TRUE; diff --git a/src/prefs.h b/src/prefs.h index 5f8f393d..03bc1e56 100644 --- a/src/prefs.h +++ b/src/prefs.h @@ -97,6 +97,7 @@ typedef struct { bool_t show_quit_dialog; bool_t fullwindow_start; bool_t load_images; + char *ignore_image_formats; bool_t load_background_images; bool_t load_stylesheets; bool_t parse_embedded_css; diff --git a/src/prefsparser.cc b/src/prefsparser.cc index 482e79ab..ee1d9d02 100644 --- a/src/prefsparser.cc +++ b/src/prefsparser.cc @@ -186,6 +186,7 @@ void PrefsParser::parse(FILE *fp) { "adjust_min_width", &prefs.adjust_min_width, PREFS_BOOL, 0 }, { "adjust_table_min_width", &prefs.adjust_table_min_width, PREFS_BOOL, 0 }, { "load_images", &prefs.load_images, PREFS_BOOL, 0 }, + { "ignore_image_formats", &prefs.ignore_image_formats, PREFS_STRING, 0 }, { "load_background_images", &prefs.load_background_images, PREFS_BOOL, 0 }, { "load_stylesheets", &prefs.load_stylesheets, PREFS_BOOL, 0 }, { "middle_click_drags_page", &prefs.middle_click_drags_page,