Commit 177cbff6 authored by Sven Willner's avatar Sven Willner
Browse files

fixed inotify for thumbnail mode

parent 2a981df1
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -790,7 +790,13 @@ void feh_thumbnail_show_fullsize(feh_file *thumbfile)
		free(thumbwin->file);
		thumbwin->file = gib_list_add_front(NULL, thumbfile);
		winwidget_rename(thumbwin, s);
#ifdef HAVE_INOTIFY
        winwidget_inotify_remove(thumbwin);
#endif
		feh_reload_image(thumbwin, 1, 1);
#ifdef HAVE_INOTIFY
        winwidget_inotify_add(thumbwin, thumbfile->filename);
#endif
	}
}

+29 −21
Original line number Diff line number Diff line
@@ -764,12 +764,7 @@ void winwidget_destroy_xwin(winwidget winwid)
void winwidget_destroy(winwidget winwid)
{
#ifdef HAVE_INOTIFY
    if (winwid->inotify_wd >= 0) {
        D(("Removing inotify watch\n"));
        if (inotify_rm_watch(opt.inotify_fd, winwid->inotify_wd))
            eprintf("inotify_rm_watch failed");
        winwid->inotify_wd = -1;
    }
    winwidget_inotify_remove(winwid);
#endif
	winwidget_destroy_xwin(winwid);
	if (winwid->name)
@@ -784,6 +779,32 @@ void winwidget_destroy(winwidget winwid)
	return;
}

#ifdef HAVE_INOTIFY
void winwidget_inotify_remove(winwidget winwid)
{
    if (winwid->inotify_wd >= 0) {
        D(("Removing inotify watch\n"));
        if (inotify_rm_watch(opt.inotify_fd, winwid->inotify_wd))
            eprintf("inotify_rm_watch failed");
        winwid->inotify_wd = -1;
    }
}
#endif

#ifdef HAVE_INOTIFY
void winwidget_inotify_add(winwidget winwid, char *filename)
{
    if (opt.inotify) {
        D(("Adding inotify watch for %s\n", filename));
        winwid->inotify_wd = inotify_add_watch(opt.inotify_fd,
                                               filename,
                                               IN_CLOSE_WRITE);
        if (winwid->inotify_wd < 0)
            eprintf("inotify_add_watch failed");
    }
}
#endif

#ifdef HAVE_INOTIFY
#define INOTIFY_BUFFER_LEN (1024 * (sizeof (struct inotify_event)) + 16)
void feh_event_handle_inotify(void)
@@ -802,7 +823,6 @@ void feh_event_handle_inotify(void)
        event = (struct inotify_event *) &buf[i];
        for (int i = 0; i < window_num; i++) {
            if(windows[i]->inotify_wd == event->wd) {
                windows[i]->inotify_wd = -1;
                feh_reload_image(windows[i], 0, 1);
                break;
            }
@@ -846,24 +866,12 @@ int winwidget_loadimage(winwidget winwid, feh_file * file)
{
	D(("filename %s\n", file->filename));
#ifdef HAVE_INOTIFY
    if (winwid->inotify_wd >= 0) {
        D(("Removing inotify watch\n"));
        if (inotify_rm_watch(opt.inotify_fd, winwid->inotify_wd))
            eprintf("inotify_rm_watch failed");
        winwid->inotify_wd = -1;
    }
    winwidget_inotify_remove(winwid);
#endif
    int res = feh_load_image(&(winwid->im), file);
#ifdef HAVE_INOTIFY
    if (res) {
        if (opt.inotify) {
            D(("Adding inotify watch for %s\n", file->filename));
            winwid->inotify_wd = inotify_add_watch(opt.inotify_fd,
                                                   file->filename,
                                                   IN_CLOSE_WRITE);
            if (winwid->inotify_wd < 0)
                eprintf("inotify_add_watch failed");
        }
        winwidget_inotify_add(winwid, file->filename);
    }
#endif
	return(res);
+5 −0
Original line number Diff line number Diff line
@@ -122,6 +122,11 @@ struct __winwidget {
#endif
};

#ifdef HAVE_INOTIFY
void winwidget_inotify_remove(winwidget winwid);
void winwidget_inotify_add(winwidget winwid, char *filename);
#endif

int winwidget_loadimage(winwidget winwid, feh_file * filename);
void winwidget_show(winwidget winwid);
void winwidget_show_menu(winwidget winwid);