diff --git a/src/events.c b/src/events.c index fe87513806d4bb34b0a4701baf4061483c92cc58..5fa44c1b5e35622d4a4aecdffff90445718986ac 100644 --- a/src/events.c +++ b/src/events.c @@ -492,20 +492,13 @@ static void feh_event_handle_MotionNotify(XEvent * ev) while (XCheckTypedWindowEvent(disp, ev->xmotion.window, MotionNotify, ev)); winwid = winwidget_get_from_window(ev->xmotion.window); if ((winwid != NULL) && (winwid->type == WIN_TYPE_THUMBNAIL)) { - static feh_thumbnail *last_thumb = NULL; feh_thumbnail *thumbnail; int x, y; x = (ev->xbutton.x - winwid->im_x) / winwid->zoom; y = (ev->xbutton.y - winwid->im_y) / winwid->zoom; thumbnail = feh_thumbnail_get_thumbnail_from_coords(x, y); - if (thumbnail != last_thumb) { - if (thumbnail) - feh_thumbnail_mark_selected(winwid, thumbnail); - else - winwidget_render_image(winwid, 0, 0); - } - last_thumb = thumbnail; + feh_thumbnail_mark_selected(winwid, thumbnail); } } return; diff --git a/src/thumbnail.c b/src/thumbnail.c index 4dbc76f1e0d49906f5c2e32b258669a0033b7da6..e99736450772b0f60108af4276052d10d0b075e3 100644 --- a/src/thumbnail.c +++ b/src/thumbnail.c @@ -929,25 +929,34 @@ void feh_thumbnail_show_fullsize(feh_file *thumbfile) void feh_thumbnail_mark_selected(winwidget winwid, feh_thumbnail *thumbnail) { Imlib_Image origwin; - origwin = winwid->im; - winwid->im = gib_imlib_clone_image(origwin); - gib_imlib_image_fill_rectangle(winwid->im, - thumbnail->x, thumbnail->y, thumbnail->w, - thumbnail->h, 50, 50, 255, 100); - gib_imlib_image_draw_rectangle(winwid->im, - thumbnail->x, thumbnail->y, thumbnail->w, - thumbnail->h, 255, 255, 255, 255); - gib_imlib_image_draw_rectangle(winwid->im, - thumbnail->x + 1, thumbnail->y + 1, - thumbnail->w - 2, thumbnail->h - 2, - 0, 0, 0, 255); - gib_imlib_image_draw_rectangle(winwid->im, - thumbnail->x + 2, thumbnail->y + 2, - thumbnail->w - 4, thumbnail->h - 4, - 255, 255, 255, 255); - winwidget_render_image(winwid, 0, 0); - gib_imlib_free_image_and_decache(winwid->im); - winwid->im = origwin; + + if (thumbnail == td.selected) + return; + + if (thumbnail) { + origwin = winwid->im; + winwid->im = gib_imlib_clone_image(origwin); + gib_imlib_image_fill_rectangle(winwid->im, + thumbnail->x, thumbnail->y, thumbnail->w, + thumbnail->h, 50, 50, 255, 100); + gib_imlib_image_draw_rectangle(winwid->im, + thumbnail->x, thumbnail->y, thumbnail->w, + thumbnail->h, 255, 255, 255, 255); + gib_imlib_image_draw_rectangle(winwid->im, + thumbnail->x + 1, thumbnail->y + 1, + thumbnail->w - 2, thumbnail->h - 2, + 0, 0, 0, 255); + gib_imlib_image_draw_rectangle(winwid->im, + thumbnail->x + 2, thumbnail->y + 2, + thumbnail->w - 4, thumbnail->h - 4, + 255, 255, 255, 255); + winwidget_render_image(winwid, 0, 0); + gib_imlib_free_image_and_decache(winwid->im); + winwid->im = origwin; + } else + winwidget_render_image(winwid, 0, 0); + + td.selected = thumbnail; } diff --git a/src/thumbnail.h b/src/thumbnail.h index e9c3f098c94b5a5e7b3b20a58cfd678a30ccd53a..5bc2864a7e320bff341ba62682c5f39c0256894b 100644 --- a/src/thumbnail.h +++ b/src/thumbnail.h @@ -63,6 +63,7 @@ typedef struct thumbmode_data { int cache_thumbnails; /* use cached thumbnails from ~/.thumbnails */ int cache_dim; /* 128 = 128x128 ("normal"), 256 = 256x256 ("large") */ char *cache_dir; /* "normal"/"large" (.thumbnails/...) */ + feh_thumbnail *selected; /* currently selected thumbnail */ } thumbmode_data;