diff --git a/rtdata/languages/Francais b/rtdata/languages/Francais index 0a22f1148..cc9aa18f1 100644 --- a/rtdata/languages/Francais +++ b/rtdata/languages/Francais @@ -523,6 +523,7 @@ MAIN_MSG_JOBSINQUEUE;travail(aux) en file d'attente MAIN_MSG_NAVIGATOR;Navigateur MAIN_MSG_PLACES;Emplacement MAIN_MSG_QOVERWRITE;Voulez-vous l'écraser? +MAIN_MSG_WRITEFAILED;Échec de l'enregistrement du fichier\n\n"%1"\n\nAssurez-vous que le dossier existe et qu'il est permis d'y écrire. MAIN_TAB_BASIC;Basique MAIN_TAB_COLOR;Couleur MAIN_TAB_COLOR_TOOLTIP;Alt-c diff --git a/rtdata/languages/default b/rtdata/languages/default index bd7121f9d..ae3d369a9 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -523,6 +523,7 @@ MAIN_MSG_JOBSINQUEUE;job(s) in the queue MAIN_MSG_NAVIGATOR;Navigator MAIN_MSG_PLACES;Places MAIN_MSG_QOVERWRITE;Do you want to overwrite it? +MAIN_MSG_WRITEFAILED;Failed to write\n\n"%1"\n\nMake sure that the folder exists and that you have write permission to it. MAIN_TAB_BASIC;Basic MAIN_TAB_COLOR;Color MAIN_TAB_COLOR_TOOLTIP;Shortcut: Alt-C diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 272d5176d..f81e9fde3 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -856,8 +856,13 @@ int ProcParams::save (Glib::ustring fname, Glib::ustring fname2, ParamsEdited* p int error1, error2; error1 = write (fname , sPParams); - error2 = write (fname2, sPParams); - return error1 & error2; + if (fname2.length()) { + error2 = write (fname2, sPParams); + // If at least one file has been saved, it's a success + return error1 & error2; + } + else + return error1; } int ProcParams::write (Glib::ustring &fname, Glib::ustring &content) const { diff --git a/rtgui/guiutils.cc b/rtgui/guiutils.cc index 611398297..0ed52e6b0 100644 --- a/rtgui/guiutils.cc +++ b/rtgui/guiutils.cc @@ -115,6 +115,12 @@ bool confirmOverwrite (Gtk::Window& parent, const std::string& filename) { return safe; } +void writeFailed (Gtk::Window& parent, const std::string& filename) { + Glib::ustring msg_ = Glib::ustring::compose(M("MAIN_MSG_WRITEFAILED"), filename); + Gtk::MessageDialog msgd (parent, msg_, true, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); + msgd.run (); +} + void drawCrop (Cairo::RefPtr cr, int imx, int imy, int imw, int imh, int startx, int starty, double scale, const rtengine::procparams::CropParams& cparams) { cr->set_line_width (0.); diff --git a/rtgui/guiutils.h b/rtgui/guiutils.h index 1eed7274b..c2f400419 100644 --- a/rtgui/guiutils.h +++ b/rtgui/guiutils.h @@ -28,6 +28,7 @@ void thumbInterp (const unsigned char* src, int sw, int sh, unsigned char* dst, Glib::ustring removeExtension (const Glib::ustring& filename); Glib::ustring getExtension (const Glib::ustring& filename); bool confirmOverwrite (Gtk::Window& parent, const std::string& filename); +void writeFailed (Gtk::Window& parent, const std::string& filename); void drawCrop (Cairo::RefPtr cr, int imx, int imy, int imw, int imh, int startx, int starty, double scale, const rtengine::procparams::CropParams& cparams); /** diff --git a/rtgui/profilepanel.cc b/rtgui/profilepanel.cc index 182fc8f9a..bec6349bd 100644 --- a/rtgui/profilepanel.cc +++ b/rtgui/profilepanel.cc @@ -186,17 +186,29 @@ void ProfilePanel::save_clicked (GdkEventButton* event) { // saving the partial profile PartialProfile ppTemp(true); partialProfileDlg->applyPaste (ppTemp.pparams, ppTemp.pedited, toSave->pparams, toSave->pedited); - ppTemp.pparams->save (fname, "", ppTemp.pedited); + int retCode = ppTemp.pparams->save (fname, "", ppTemp.pedited); ppTemp.deleteInstance(); + if (retCode) + writeFailed(dialog, fname); + else { + done=true; + refreshProfileList (); + } } else { // saving a full profile - toSave->pparams->save (fname); + int retCode = toSave->pparams->save (fname); + if (retCode) + writeFailed(dialog, fname); + else { + done=true; + refreshProfileList (); + } } - refreshProfileList (); } + else done = true; } - done = true; + else done = true; } while (!done); return; }