Hello community, here is the log from the commit of package feh for openSUSE:Factory checked in at 2018-07-21 10:25:34 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/feh (Old) and /work/SRC/openSUSE:Factory/.feh.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "feh" Sat Jul 21 10:25:34 2018 rev:26 rq:624245 version:2.27.1 Changes: -------- --- /work/SRC/openSUSE:Factory/feh/feh.changes 2018-06-19 11:57:27.499855688 +0200 +++ /work/SRC/openSUSE:Factory/.feh.new/feh.changes 2018-07-21 10:25:36.110951935 +0200 @@ -1,0 +2,19 @@ +Fri Jul 20 10:46:33 UTC 2018 - mimi...@gmail.com + +- update to 2.27.1 +- fix boo#1101466 - specify PREFIX also for build + * Fix --keep-zoom-vp issues introduced in 2.27 + * Fix feh occasionally becoming unresponsive when asked + to terminate via SIGINT/SIGQUIT/SIGTERM + * Fix size_to_image ("w") command when both --scale-down and + --keep-zoom-vp are enabled + * Fix --auto-zoom not being triggered on window resize events + when --scale-down is enabled + * Fix --auto-zoom conflicting with manual zoom + * Prevent --zoom <percent> from blocking --scale-down in fullscreen + / fixed geometry mode + * Prevent --keep-zoom-vp from blocking the dynamic window resizing mechanism + - Prevent automatic recalculation of the zoom ratio when + --keep_zoom_vp is enabled + +------------------------------------------------------------------- Old: ---- feh-2.26.3.tar.bz2 feh-2.26.3.tar.bz2.asc New: ---- feh-2.27.1.tar.bz2 feh-2.27.1.tar.bz2.asc ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ feh.spec ++++++ --- /var/tmp/diff_new_pack.gXy8E9/_old 2018-07-21 10:25:36.854951755 +0200 +++ /var/tmp/diff_new_pack.gXy8E9/_new 2018-07-21 10:25:36.858951753 +0200 @@ -17,7 +17,7 @@ Name: feh -Version: 2.26.3 +Version: 2.27.1 Release: 0 Summary: X11 image viewer License: MIT AND LGPL-2.0-or-later @@ -65,11 +65,13 @@ %build make %{?_smp_mflags} \ + PREFIX="%{_prefix}" \ curl=1 \ help=1 \ xinerama=1 \ debug=0 \ exif=1 \ + app=1 \ OPTFLAGS="%{optflags} -Wall -Wextra" gcc %{optflags} -fwhole-program jpegexiforient.c -o jpegexiforient @@ -83,15 +85,8 @@ install -D -m0755 jpegexiforient %{buildroot}%{_bindir}/jpegexiforient -%post -%desktop_database_post -%icon_theme_cache_post - -%postun -%desktop_database_postun -%icon_theme_cache_postun - %files +%license COPYING %doc AUTHORS ChangeLog README.md TODO %{_bindir}/feh %{_bindir}/feh-cam ++++++ feh-2.26.3.tar.bz2 -> feh-2.27.1.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feh-2.26.3/ChangeLog new/feh-2.27.1/ChangeLog --- old/feh-2.26.3/ChangeLog 2018-05-18 23:00:55.000000000 +0200 +++ new/feh-2.27.1/ChangeLog 2018-07-17 17:41:02.000000000 +0200 @@ -1,3 +1,34 @@ +Tue, 17 Jul 2018 17:33:10 +0200 Daniel Friesel <derf+...@finalrewind.org> + +* Release v2.27.1 + * Fix feh occasionally becoming unresponsive when asked to terminate + via SIGINT/SIGQUIT/SIGTERM (based on a patch by + <https://github.com/giladogit>) + * Fix --keep-zoom-vp issues introduced in 2.27 + (patch by <https://github.com/ulteq>) + +Thu, 28 Jun 2018 17:26:54 +0200 Daniel Friesel <derf+...@finalrewind.org> + +* Release v2.27 + * Fix size_to_image ("w") command when both --scale-down and --keep-zoom-vp + are enabled + * Fix --auto-zoom not being triggered on window resize events when + --scale-down is enabled + * Fix --auto-zoom conflicting with manual zoom + * Fix feh_draw_checks not taking the zoom level into account properly + * Prevent --zoom <percent> from blocking --scale-down in fullscreen / fixed + geometry mode + * Prevent --keep-zoom-vp from blocking the dynamic window resizing + mechanism + * Prevent automatic recalculation of the zoom ratio when --keep_zoom_vp + is enabled + * All patches provided by <https://github.com/ulteq>. Thanks a lot! + +Tue, 26 Jun 2018 10:33:04 +0200 Daniel Friesel <derf+...@finalrewind.org> + +* Release v2.26.4 + * Correctly save --bg-max in ~/.fehbg (patch by Sebastian Bickerle) + Fri, 18 May 2018 22:58:02 +0200 Daniel Friesel <derf+...@finalrewind.org> * Release v2.26.3 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feh-2.26.3/config.mk new/feh-2.27.1/config.mk --- old/feh-2.26.3/config.mk 2018-05-18 23:00:55.000000000 +0200 +++ new/feh-2.27.1/config.mk 2018-07-17 17:41:02.000000000 +0200 @@ -1,5 +1,5 @@ PACKAGE ?= feh -VERSION ?= 2.26.3 +VERSION ?= 2.27.1 app ?= 0 cam ?= 0 @@ -87,7 +87,7 @@ MAN_EXIF = disabled endif -MAN_DATE ?= May 18, 2018 +MAN_DATE ?= July 17, 2018 # Uncomment this to use dmalloc #CFLAGS += -DWITH_DMALLOC diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feh-2.26.3/src/main.c new/feh-2.27.1/src/main.c --- old/feh-2.26.3/src/main.c 2018-05-18 23:00:55.000000000 +0200 +++ new/feh-2.27.1/src/main.c 2018-07-17 17:41:02.000000000 +0200 @@ -87,7 +87,7 @@ /* main event loop */ while (feh_main_iteration(1)); - return(0); + return(sig_exit); } /* Return 0 to stop iterating, 1 if ok to continue. */ @@ -104,7 +104,7 @@ double t1 = 0.0, t2 = 0.0; fehtimer ft; - if (window_num == 0) + if (window_num == 0 || sig_exit != 0) return(0); if (first) { @@ -137,7 +137,7 @@ if (ev_handler[ev.type]) (*(ev_handler[ev.type])) (&ev); - if (window_num == 0) + if (window_num == 0 || sig_exit != 0) return(0); } XFlush(disp); @@ -191,7 +191,7 @@ in that */ feh_handle_timer(); } - else if (count && (FD_ISSET(0, &fdset))) + else if ((count > 0) && (FD_ISSET(0, &fdset))) feh_event_handle_stdin(); } } else { @@ -204,11 +204,11 @@ && ((errno == ENOMEM) || (errno == EINVAL) || (errno == EBADF))) eprintf("Connection to X display lost"); - else if (count && (FD_ISSET(0, &fdset))) + else if ((count > 0) && (FD_ISSET(0, &fdset))) feh_event_handle_stdin(); } } - if (window_num == 0) + if (window_num == 0 || sig_exit != 0) return(0); return(1); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feh-2.26.3/src/options.c new/feh-2.27.1/src/options.c --- old/feh-2.26.3/src/options.c 2018-05-18 23:00:55.000000000 +0200 +++ new/feh-2.27.1/src/options.c 2018-07-17 17:41:02.000000000 +0200 @@ -592,6 +592,7 @@ opt.filelistfile = estrdup(optarg); break; case 'g': + opt.geom_enabled = 1; opt.geom_flags = XParseGeometry(optarg, &opt.geom_x, &opt.geom_y, &opt.geom_w, &opt.geom_h); break; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feh-2.26.3/src/options.h new/feh-2.27.1/src/options.h --- old/feh-2.26.3/src/options.h 2018-05-18 23:00:55.000000000 +0200 +++ new/feh-2.27.1/src/options.h 2018-07-17 17:41:02.000000000 +0200 @@ -106,6 +106,7 @@ int sort; int version_sort; int debug; + int geom_enabled; int geom_flags; int geom_x; int geom_y; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feh-2.26.3/src/signals.c new/feh-2.27.1/src/signals.c --- old/feh-2.26.3/src/signals.c 2018-05-18 23:00:55.000000000 +0200 +++ new/feh-2.27.1/src/signals.c 2018-07-17 17:41:02.000000000 +0200 @@ -28,6 +28,7 @@ #include "options.h" void feh_handle_signal(int); +int sig_exit = 0; void setup_signal_handlers() { @@ -86,7 +87,8 @@ case SIGQUIT: if (childpid) killpg(childpid, SIGINT); - exit(128 + signo); + sig_exit = 128 + signo; + return; } winwid = winwidget_get_first_window_of_type(WIN_TYPE_SLIDESHOW); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feh-2.26.3/src/signals.h new/feh-2.27.1/src/signals.h --- old/feh-2.26.3/src/signals.h 2018-05-18 23:00:55.000000000 +0200 +++ new/feh-2.27.1/src/signals.h 2018-07-17 17:41:02.000000000 +0200 @@ -27,5 +27,5 @@ #define SIGNALS_H void setup_signal_handlers(); - +extern int sig_exit; #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feh-2.26.3/src/slideshow.c new/feh-2.27.1/src/slideshow.c --- old/feh-2.26.3/src/slideshow.c 2018-05-18 23:00:55.000000000 +0200 +++ new/feh-2.27.1/src/slideshow.c 2018-07-17 17:41:02.000000000 +0200 @@ -143,16 +143,6 @@ Imlib_Image tmp; int old_w, old_h; - unsigned char tmode =0; - int tim_x =0; - int tim_y =0; - double tzoom =0; - - tmode = w->mode; - tim_x = w->im_x; - tim_y = w->im_y; - tzoom = w->zoom; - if (!w->file) { im_weprintf(w, "couldn't reload, this image has no file associated with it."); winwidget_render_image(w, 0, 0); @@ -217,16 +207,7 @@ w->im_w = gib_imlib_image_get_width(w->im); w->im_h = gib_imlib_image_get_height(w->im); } - if (opt.keep_zoom_vp) { - /* put back in: */ - w->mode = tmode; - w->im_x = tim_x; - w->im_y = tim_y; - w->zoom = tzoom; - winwidget_render_image(w, 0, 0); - } else { - winwidget_render_image(w, resize, 0); - } + winwidget_render_image(w, resize, 0); return; } @@ -241,11 +222,6 @@ */ int our_filelist_len = filelist_len; - unsigned char tmode =0; - int tim_x =0; - int tim_y =0; - double tzoom =0; - /* Without this, clicking a one-image slideshow reloads it. Not very * intelligent behaviour :-) */ if (filelist_len < 2 && opt.cycle_once == 0) @@ -356,14 +332,6 @@ last = NULL; } - if (opt.keep_zoom_vp) { - /* pre loadimage - record settings */ - tmode = winwid->mode; - tim_x = winwid->im_x; - tim_y = winwid->im_y; - tzoom = winwid->zoom; - } - if (winwidget_loadimage(winwid, FEH_FILE(current_file->data))) { int w = gib_imlib_image_get_width(winwid->im); int h = gib_imlib_image_get_height(winwid->im); @@ -378,19 +346,8 @@ winwidget_reset_image(winwid); winwid->im_w = w; winwid->im_h = h; - if (opt.keep_zoom_vp) { - /* put back in: */ - winwid->mode = tmode; - winwid->im_x = tim_x; - winwid->im_y = tim_y; - winwid->zoom = tzoom; - } if (render) { - if (opt.keep_zoom_vp) { - winwidget_render_image(winwid, 0, 0); - } else { - winwidget_render_image(winwid, 1, 0); - } + winwidget_render_image(winwid, 1, 0); } break; } else diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feh-2.26.3/src/wallpaper.c new/feh-2.27.1/src/wallpaper.c --- old/feh-2.26.3/src/wallpaper.c 2018-05-18 23:00:55.000000000 +0200 +++ new/feh-2.27.1/src/wallpaper.c 2018-07-17 17:41:02.000000000 +0200 @@ -467,8 +467,10 @@ fputs("center", fp); else if (scaled) fputs("scale", fp); - else if (filled) + else if (filled == 1) fputs("fill", fp); + else if (filled == 2) + fputs("max", fp); else fputs("tile", fp); if (opt.image_bg) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feh-2.26.3/src/winwidget.c new/feh-2.27.1/src/winwidget.c --- old/feh-2.26.3/src/winwidget.c 2018-05-18 23:00:55.000000000 +0200 +++ new/feh-2.27.1/src/winwidget.c 2018-07-17 17:41:02.000000000 +0200 @@ -323,11 +323,12 @@ winwidget_register(ret); /* do not scale down a thumbnail list window, only those created from it */ - if (opt.scale_down && (ret->type != WIN_TYPE_THUMBNAIL)) { + if (opt.geom_enabled && (ret->type != WIN_TYPE_THUMBNAIL)) { opt.geom_w = w; opt.geom_h = h; opt.geom_flags |= WidthValue | HeightValue; } + return; } @@ -422,165 +423,66 @@ int sx, sy, sw, sh, dx, dy, dw, dh; int calc_w, calc_h; int antialias = 0; - int need_center = winwid->had_resize; if (!winwid->full_screen && resize) { winwidget_resize(winwid, winwid->im_w, winwid->im_h, 0); winwidget_reset_image(winwid); } - /* bounds checks for panning */ - if (winwid->im_x > winwid->w) - winwid->im_x = winwid->w; - if (winwid->im_y > winwid->h) - winwid->im_y = winwid->h; - D(("winwidget_render_image resize %d force_alias %d im %dx%d\n", resize, force_alias, winwid->im_w, winwid->im_h)); - winwidget_setup_pixmaps(winwid); + /* winwidget_setup_pixmaps(winwid) resets the winwid->had_resize flag */ + int had_resize = winwid->had_resize || resize; - if (!winwid->full_screen && ((gib_imlib_image_has_alpha(winwid->im)) - || (opt.geom_flags & (WidthValue | HeightValue)) - || (winwid->im_x || winwid->im_y) || (winwid->zoom != 1.0) - || (winwid->w > winwid->im_w || winwid->h > winwid->im_h) - || (winwid->has_rotated))) - feh_draw_checks(winwid); - - if (!winwid->full_screen && opt.zoom_mode && (winwid->type != WIN_TYPE_THUMBNAIL) - && (winwid->zoom == 1.0) && ! (opt.geom_flags & (WidthValue | HeightValue)) - && (winwid->w > winwid->im_w) && (winwid->h > winwid->im_h)) - feh_calc_needed_zoom(&(winwid->zoom), winwid->im_w, winwid->im_h, winwid->w, winwid->h); - - /* - * In case of a resize, the geomflags (and im_w, im_h) get updated by - * the ConfigureNotify handler. - */ - if (need_center && !winwid->full_screen && (winwid->type != WIN_TYPE_THUMBNAIL) - && (opt.geom_flags & (WidthValue | HeightValue)) - && ((winwid->w < winwid->im_w) || (winwid->h < winwid->im_h))) - feh_calc_needed_zoom(&(winwid->zoom), winwid->im_w, winwid->im_h, winwid->w, winwid->h); - - - if (resize && (winwid->type != WIN_TYPE_THUMBNAIL) && - (winwid->full_screen || (opt.geom_flags & (WidthValue | HeightValue)))) { - int smaller; /* Is the image smaller than screen? */ - int max_w = 0, max_h = 0; - - if (winwid->full_screen) { - max_w = scr->width; - max_h = scr->height; -#ifdef HAVE_LIBXINERAMA - if (opt.xinerama && xinerama_screens) { - max_w = xinerama_screens[xinerama_screen].width; - max_h = xinerama_screens[xinerama_screen].height; - } -#endif /* HAVE_LIBXINERAMA */ - } else { - if (opt.geom_flags & WidthValue) { - max_w = opt.geom_w; - } - if (opt.geom_flags & HeightValue) { - max_h = opt.geom_h; - } - } - - D(("Calculating for fullscreen/fixed geom render\n")); - smaller = ((winwid->im_w < max_w) - && (winwid->im_h < max_h)); - - if (!smaller || opt.zoom_mode) { - /* contributed by Jens Laas <jens.l...@data.slu.se> - * What it does: - * zooms images by a fixed amount but never larger than the screen. - * - * Why: - * This is nice if you got a collection of images where some - * are small and can stand a small zoom. Large images are unaffected. - * - * When does it work, and how? - * You have to be in fullscreen mode _and_ have auto-zoom turned on. - * "feh -FZ --zoom 130 imagefile" will do the trick. - * -zoom percent - the new switch. - * 100 = orignal size, - * 130 is 30% larger. - */ - if (opt.default_zoom) { - double old_zoom = winwid->zoom; - - winwid->zoom = 0.01 * opt.default_zoom; - if (opt.default_zoom != 100) { - if ((winwid->im_h * winwid->zoom) > max_h) - winwid->zoom = old_zoom; - else if ((winwid->im_w * winwid->zoom) > max_w) - winwid->zoom = old_zoom; - } + winwidget_setup_pixmaps(winwid); - winwid->im_x = ((int) - (max_w - (winwid->im_w * winwid->zoom))) >> 1; - winwid->im_y = ((int) - (max_h - (winwid->im_h * winwid->zoom))) >> 1; - } else { - /* Image is larger than the screen (so wants shrinking), or it's - smaller but wants expanding to fill it */ - double ratio = feh_calc_needed_zoom(&(winwid->zoom), winwid->im_w, winwid->im_h, max_w, max_h); - - if (ratio > 1.0) { - /* height is the factor */ - winwid->im_x = 0; - winwid->im_y = ((int) - (max_h - (winwid->im_h * winwid->zoom))) >> 1; - } else { - /* width is the factor */ - winwid->im_x = ((int) - (max_w - (winwid->im_w * winwid->zoom))) >> 1; - winwid->im_y = 0; - } - } - } else { - /* my modification to jens hack, allow --zoom without auto-zoom mode */ - if (opt.default_zoom) { - winwid->zoom = 0.01 * opt.default_zoom; - } else { - winwid->zoom = 1.0; - } - /* Just center the image in the window */ - winwid->im_x = (int) (max_w - (winwid->im_w * winwid->zoom)) >> 1; - winwid->im_y = (int) (max_h - (winwid->im_h * winwid->zoom)) >> 1; - } - } - else if (need_center && !winwid->full_screen - && (winwid->type != WIN_TYPE_THUMBNAIL) && !opt.keep_zoom_vp) { - winwid->im_x = (int) (winwid->w - (winwid->im_w * winwid->zoom)) >> 1; - winwid->im_y = (int) (winwid->h - (winwid->im_h * winwid->zoom)) >> 1; - } - - /* - * Adjust X/Y offset if the image is larger than the window and - * --inner-geometry is set. This will cause odd behaviour when - * zooming an already large image in --inner-geometry mode, but in most - * cases this should be what the user wants. Plus, it doesn't require - * fiddling around in two or three places above, so it's the best - * solution considering a future refactoring of this function. - */ + if (had_resize && !opt.keep_zoom_vp && (winwid->type != WIN_TYPE_THUMBNAIL)) { + double required_zoom = 1.0; + feh_calc_needed_zoom(&required_zoom, winwid->im_w, winwid->im_h, winwid->w, winwid->h); + + winwid->zoom = opt.default_zoom ? (0.01 * opt.default_zoom) : 1.0; + + if ((opt.scale_down || (winwid->full_screen && !opt.default_zoom)) + && winwid->zoom > required_zoom) + winwid->zoom = required_zoom; + else if ((opt.zoom_mode && required_zoom > 1) + && (!opt.default_zoom || required_zoom < winwid->zoom)) + winwid->zoom = required_zoom; - if (need_center || resize) { - if ((opt.offset_flags & XValue) && (winwid->im_w * winwid->zoom) > winwid->w) { + if (opt.offset_flags & XValue) { if (opt.offset_flags & XNegative) { winwid->im_x = winwid->w - (winwid->im_w * winwid->zoom) - opt.offset_x; } else { winwid->im_x = - opt.offset_x * winwid->zoom; } + } else { + winwid->im_x = (int) (winwid->w - (winwid->im_w * winwid->zoom)) >> 1; } - if ((opt.offset_flags & YValue) && (winwid->im_h * winwid->zoom) > winwid->h) { + if (opt.offset_flags & YValue) { if (opt.offset_flags & YNegative) { winwid->im_y = winwid->h - (winwid->im_h * winwid->zoom) - opt.offset_y; } else { winwid->im_y = - opt.offset_y * winwid->zoom; } + } else { + winwid->im_y = (int) (winwid->h - (winwid->im_h * winwid->zoom)) >> 1; } } + winwid->had_resize = 0; + + if (opt.keep_zoom_vp) + winwidget_sanitise_offsets(winwid); + + if (!winwid->full_screen && ((gib_imlib_image_has_alpha(winwid->im)) + || (opt.geom_flags & (WidthValue | HeightValue)) + || (winwid->im_x || winwid->im_y) + || (winwid->w > winwid->im_w * winwid->zoom) + || (winwid->h > winwid->im_h * winwid->zoom) + || (winwid->has_rotated))) + feh_draw_checks(winwid); + /* Now we ensure only to render the area we're looking at */ dx = winwid->im_x; dy = winwid->im_y; @@ -732,13 +634,6 @@ return(checks_pmap); } -void winwidget_clear_background(winwidget w) -{ - XSetWindowBackgroundPixmap(disp, w->win, feh_create_checks()); - /* XClearWindow(disp, w->win); */ - return; -} - void feh_draw_checks(winwidget win) { static GC gc = None; @@ -898,24 +793,30 @@ D((" x %d y %d w %d h %d\n", attributes.x, attributes.y, winwid->w, winwid->h)); - if ((opt.geom_flags & (WidthValue | HeightValue)) && !force_resize) { - winwid->had_resize = 1; - return; - } + if ((opt.geom_flags & (WidthValue | HeightValue)) && !force_resize) { + winwid->had_resize = 1; + return; + } if (winwid && ((winwid->w != w) || (winwid->h != h))) { - /* winwidget_clear_background(winwid); */ if (opt.screen_clip) { - winwid->w = (w > scr_width) ? scr_width : w; - winwid->h = (h > scr_height) ? scr_height : h; + double required_zoom = winwid->zoom; + if (opt.scale_down && !opt.keep_zoom_vp) { + int max_w = (w > scr_width) ? scr_width : w; + int max_h = (h > scr_height) ? scr_height : h; + feh_calc_needed_zoom(&required_zoom, winwid->im_w, winwid->im_h, max_w, max_h); + } + int desired_w = winwid->im_w * required_zoom; + int desired_h = winwid->im_h * required_zoom; + winwid->w = (desired_w > scr_width) ? scr_width : desired_w; + winwid->h = (desired_h > scr_height) ? scr_height : desired_h; } if (winwid->full_screen) { - XTranslateCoordinates(disp, winwid->win, attributes.root, - -attributes.border_width - - attributes.x, - -attributes.border_width - attributes.y, &tc_x, &tc_y, &dw); - winwid->x = tc_x; - winwid->y = tc_y; - XMoveResizeWindow(disp, winwid->win, tc_x, tc_y, winwid->w, winwid->h); + XTranslateCoordinates(disp, winwid->win, attributes.root, + -attributes.border_width - attributes.x, + -attributes.border_width - attributes.y, &tc_x, &tc_y, &dw); + winwid->x = tc_x; + winwid->y = tc_y; + XMoveResizeWindow(disp, winwid->win, tc_x, tc_y, winwid->w, winwid->h); } else XResizeWindow(disp, winwid->win, winwid->w, winwid->h); @@ -1043,10 +944,12 @@ void winwidget_reset_image(winwidget winwid) { - winwid->zoom = 1.0; - winwid->old_zoom = 1.0; - winwid->im_x = 0; - winwid->im_y = 0; + if (!opt.keep_zoom_vp) { + winwid->zoom = 1.0; + winwid->old_zoom = 1.0; + winwid->im_x = 0; + winwid->im_y = 0; + } winwid->im_angle = 0.0; winwid->has_rotated = 0; return; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feh-2.26.3/src/winwidget.h new/feh-2.27.1/src/winwidget.h --- old/feh-2.26.3/src/winwidget.h 2018-05-18 23:00:55.000000000 +0200 +++ new/feh-2.27.1/src/winwidget.h 2018-07-17 17:41:02.000000000 +0200 @@ -146,7 +146,6 @@ void winwidget_rename(winwidget winwid, char *newname); void winwidget_destroy(winwidget winwid); void winwidget_create_window(winwidget ret, int w, int h); -void winwidget_clear_background(winwidget w); Pixmap feh_create_checks(void); double feh_calc_needed_zoom(double *zoom, int orig_w, int orig_h, int dest_w, int dest_h); void feh_debug_print_winwid(winwidget winwid);