diff --git a/rtgui/editorpanel.cc b/rtgui/editorpanel.cc index e5543105c..021333503 100644 --- a/rtgui/editorpanel.cc +++ b/rtgui/editorpanel.cc @@ -1974,6 +1974,14 @@ void EditorPanel::sendToExternal() // develop image rtengine::procparams::ProcParams pparams; ipc->getParams (&pparams); + + if (!cached_exported_filename.empty() && pparams == cached_exported_pparams && Glib::file_test(cached_exported_filename, Glib::FILE_TEST_IS_REGULAR)) { + idle_sentToGimp(nullptr, nullptr, cached_exported_filename); + return; + } + + cached_exported_pparams = pparams; + cached_exported_filename.clear(); rtengine::ProcessingJob* job = rtengine::ProcessingJob::create (ipc->getInitialImage(), pparams); ProgressConnector *ld = new ProgressConnector(); ld->startFunc (sigc::bind (sigc::ptr_fun (&rtengine::processImage), job, err, parent->getProgressListener(), false ), @@ -2112,12 +2120,18 @@ bool EditorPanel::idle_sendToGimp ( ProgressConnector *p bool EditorPanel::idle_sentToGimp (ProgressConnector *pc, rtengine::IImagefloat* img, Glib::ustring filename) { - delete img; - int errore = pc->returnValue(); + if (img) { + delete img; + cached_exported_filename = filename; + } + int errore = 0; setProgressState(false); - delete pc; + if (pc) { + errore = pc->returnValue(); + delete pc; + } - if (!errore) { + if ((!img && Glib::file_test(filename, Glib::FILE_TEST_IS_REGULAR)) || (img && !errore)) { saveimgas->set_sensitive (true); send_to_external->set_sensitive(true); parent->setProgressStr (""); diff --git a/rtgui/editorpanel.h b/rtgui/editorpanel.h index 0008786fa..1e6eaaa1f 100644 --- a/rtgui/editorpanel.h +++ b/rtgui/editorpanel.h @@ -243,6 +243,9 @@ private: Glib::RefPtr external_editor_info; std::unique_ptr app_chooser_dialog; + rtengine::procparams::ProcParams cached_exported_pparams; + Glib::ustring cached_exported_filename; + class ColorManagementToolbar; std::unique_ptr colorMgmtToolBar;