diff --git a/rtgui/options.cc b/rtgui/options.cc index af40595aa..a6756d37d 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -1269,30 +1269,24 @@ void Options::readFromFile(Glib::ustring fname) } // check and add extensions that are missing from config - static const std::vector extensions_known = { - "3fr", "arw", "arq", "cr2", "cr3", "crf", "crw", "dcr", "dng", - "fff", "iiq", "jpg", "jpeg", "jxl", "kdc", "mef", "mos", "mrw", - "nef", "nrw", "orf", "ori", "pef", "png", "raf", "raw", "rw2", - "rwl", "rwz", "sr2", "srf", "srw", "tif", "tiff", "x3f"}; - - std::map extensions_checked; + std::map checkedExtensions; if (parseExtensions.size() == parseExtensionsEnabled.size()) { for (auto i = 0; i < parseExtensions.size(); ++i) { - extensions_checked[parseExtensions[i]] = parseExtensionsEnabled[i]; + checkedExtensions[parseExtensions[i]] = parseExtensionsEnabled[i]; } } parseExtensions.clear(); parseExtensionsEnabled.clear(); - for (auto const &i : extensions_known) { - if (extensions_checked.count(i) == 0) { - extensions_checked[i] = 1; + for (auto const &i : knownExtensions) { + if (checkedExtensions.count(i) == 0) { + checkedExtensions[i] = 1; } } - for (auto const &x : extensions_checked) { + for (auto const &x : checkedExtensions) { parseExtensions.emplace_back(x.first); parseExtensionsEnabled.emplace_back(x.second); } diff --git a/rtgui/options.h b/rtgui/options.h index 38f4fe896..6a2b0c35d 100644 --- a/rtgui/options.h +++ b/rtgui/options.h @@ -310,6 +310,13 @@ public: int maxThumbnailWidth; std::size_t maxCacheEntries; int thumbInterp; // 0: nearest, 1: bilinear + + std::vector knownExtensions = { + "3fr", "arw", "arq", "cr2", "cr3", "crf", "crw", "dcr", "dng", + "fff", "iiq", "jpg", "jpeg", "jxl", "kdc", "mef", "mos", "mrw", + "nef", "nrw", "orf", "ori", "pef", "png", "raf", "raw", "rw2", + "rwl", "rwz", "sr2", "srf", "srw", "tif", "tiff", "x3f"}; + std::vector parseExtensions; // List containing all extensions type std::vector parseExtensionsEnabled; // List of bool to retain extension or not std::vector parsedExtensions; // List containing all retained extensions (lowercase) diff --git a/rtgui/preferences.cc b/rtgui/preferences.cc index 04a9ece60..97bfb92b6 100644 --- a/rtgui/preferences.cc +++ b/rtgui/preferences.cc @@ -2687,8 +2687,29 @@ void Preferences::addExtPressed() void Preferences::delExtPressed() { + const Glib::RefPtr selection = extensions->get_selection(); - extensionModel->erase(extensions->get_selection()->get_selected()); + if (!selection) { + return; + } + + const Gtk::TreeModel::iterator selected = selection->get_selected(); + + if (!selected) { + return; + } + + bool delOkay = true; + for (auto const &x : moptions.knownExtensions) { + if (x == (*selected)[extensionColumns.ext]) { + delOkay = false; + break; + } + } + + if (delOkay) { + extensionModel->erase(selected); + } } void Preferences::moveExtUpPressed()