diff --git a/rtgui/filecatalog.cc b/rtgui/filecatalog.cc index b01300d95..058236733 100644 --- a/rtgui/filecatalog.cc +++ b/rtgui/filecatalog.cc @@ -1783,7 +1783,7 @@ void FileCatalog::reparseDirectory () return; } - // check if a thumbnailed file has been deleted + // check if a thumbnailed file has been deleted or is not in a directory of interest const std::vector& t = fileBrowser->getEntries(); std::vector fileNamesToDel; std::vector fileNamesToRemove; @@ -1832,8 +1832,10 @@ void FileCatalog::reparseDirectory () void FileCatalog::on_dir_changed (const Glib::RefPtr& file, const Glib::RefPtr& other_file, Gio::FileMonitorEvent event_type, bool internal) { - if (options.has_retained_extention(file->get_parse_name()) - && (event_type == Gio::FILE_MONITOR_EVENT_CREATED || event_type == Gio::FILE_MONITOR_EVENT_DELETED || event_type == Gio::FILE_MONITOR_EVENT_CHANGED)) { + if ((options.has_retained_extention(file->get_parse_name()) + && (event_type == Gio::FILE_MONITOR_EVENT_CREATED || event_type == Gio::FILE_MONITOR_EVENT_DELETED || event_type == Gio::FILE_MONITOR_EVENT_CHANGED)) + || (event_type == Gio::FILE_MONITOR_EVENT_CREATED && Glib::file_test(file->get_path(), Glib::FileTest::FILE_TEST_IS_DIR)) + || (event_type == Gio::FILE_MONITOR_EVENT_DELETED && std::find_if(dirMonitors.cbegin(), dirMonitors.cend(), [&file](const FileMonitorInfo &monitor) { return monitor.filePath == file->get_path(); }) != dirMonitors.cend())) { if (!internal) { GThreadLock lock; reparseDirectory ();