diff --git a/src/feh.h b/src/feh.h index 2b0369f29c175af5b1fec3b4457829c0a2c24b9e..22026174c36ff7b1ea6b02bde0e0bbec9dc9ba76 100644 --- a/src/feh.h +++ b/src/feh.h @@ -158,6 +158,8 @@ void real_loadables_mode(int loadable); void feh_reload_image(winwidget w, int resize, int force_new); void feh_filelist_image_remove(winwidget winwid, char do_delete); void slideshow_save_image(winwidget win); +void ungib_imlib_save_image_with_error_return(Imlib_Image im, char *file, + Imlib_Load_Error * error_return); void feh_edit_inplace(winwidget w, int orientation); void feh_edit_inplace_lossless(winwidget w, int orientation); gib_list *feh_wrap_string(char *text, int wrap_width, Imlib_Font fn, gib_style * style); diff --git a/src/imlib.c b/src/imlib.c index af7acdd8ccaad18eb573df6be910c07ac46002ca..5e423f3694ea1bafd27898482b4850c814eae638 100644 --- a/src/imlib.c +++ b/src/imlib.c @@ -129,6 +129,32 @@ int feh_load_image_char(Imlib_Image * im, char *filename) return(i); } +/* + * XXX gib_imlib_save_image_with_error_return breaks with *.END and + * similar because it tries to set the image format, which only works + * with .end . + * So we leave that part out. + */ +void ungib_imlib_save_image_with_error_return(Imlib_Image im, char *file, + Imlib_Load_Error * error_return) +{ + char *tmp; + imlib_context_set_image(im); + tmp = strrchr(file, '.'); + if (tmp) { + char *p, *pp; + p = gib_estrdup(tmp + 1); + pp = p; + while(*pp) { + *pp = tolower(*pp); + pp++; + } + imlib_image_set_format(p); + gib_efree(p); + } + imlib_save_image_with_error_return(file, error_return); +} + int feh_load_image(Imlib_Image * im, feh_file * file) { Imlib_Load_Error err; diff --git a/src/slideshow.c b/src/slideshow.c index cec146c3efe03e1fad61220001430da432fcef04..2e9c417f58a35557262dd83dae952fa1e0ea3fd2 100644 --- a/src/slideshow.c +++ b/src/slideshow.c @@ -594,13 +594,7 @@ void slideshow_save_image(winwidget win) if (opt.verbose) printf("saving image to filename '%s'\n", tmpname); - /* XXX gib_imlib_save_image_with_error_return breaks with *.XXX and - * similar because it tries to set the image format, which only works - * with .xxx . - * So we leave that part out. - */ - imlib_context_set_image(win->im); - imlib_save_image_with_error_return(tmpname, &err); + ungib_imlib_save_image_with_error_return(win->im, tmpname, &err); if (err) im_weprintf(win, "Can't save image %s:", tmpname);