summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMarc Jeanmougin <marc@jeanmougin.fr>2018-10-18 15:44:16 +0000
committerMarc Jeanmougin <marc@jeanmougin.fr>2018-10-18 15:44:16 +0000
commit4deaa8e168d13b07fd56f5ff1de8a8c64df5719a (patch)
tree89b37f02a3e123bcdade0e75321dc001482e2668 /src
parentMerge branch 'master' of gitlab.com:xhorak/inkscape (diff)
parentFix bug 1789838 - Ask for confirmation before overwriting template (diff)
downloadinkscape-4deaa8e168d13b07fd56f5ff1de8a8c64df5719a.tar.gz
inkscape-4deaa8e168d13b07fd56f5ff1de8a8c64df5719a.zip
Merge branch 'bugfix-1789838-confirmation-needed-before-overwriting-template' of gitlab.com:ccrb/inkscape
Diffstat (limited to 'src')
-rw-r--r--src/file.cpp37
-rw-r--r--src/file.h2
-rw-r--r--src/ui/dialog/save-template-dialog.cpp19
-rw-r--r--src/ui/dialog/save-template-dialog.h2
4 files changed, 37 insertions, 23 deletions
diff --git a/src/file.cpp b/src/file.cpp
index 5e93fb9ce..e67c79f7b 100644
--- a/src/file.cpp
+++ b/src/file.cpp
@@ -959,13 +959,13 @@ sp_file_save_a_copy(Gtk::Window &parentWindow, gpointer /*object*/, gpointer /*d
/**
* Save a copy of a document as template.
*/
-void
+bool
sp_file_save_template(Gtk::Window &parentWindow, Glib::ustring name,
Glib::ustring author, Glib::ustring description, Glib::ustring keywords,
bool isDefault)
{
if (!SP_ACTIVE_DOCUMENT || name.length() == 0)
- return;
+ return true;
auto document = SP_ACTIVE_DOCUMENT;
@@ -1021,23 +1021,30 @@ sp_file_save_template(Gtk::Window &parentWindow, Glib::ustring name,
root->appendChild(templateinfo_node);
- if (isDefault) {
-
- auto filename = Inkscape::IO::Resource::get_path_ustring(USER,
- TEMPLATES, "default.svg");
- file_save(parentWindow, document, filename,
- Inkscape::Extension::db.get(".svg"), false, false,
- Inkscape::Extension::FILE_SAVE_METHOD_INKSCAPE_SVG);
- }
-
auto encodedName = Glib::uri_escape_string(name);
encodedName.append(".svg");
auto filename = Inkscape::IO::Resource::get_path_ustring(USER, TEMPLATES,
encodedName.c_str());
- file_save(parentWindow, document, filename,
- Inkscape::Extension::db.get(".svg"), false, false,
- Inkscape::Extension::FILE_SAVE_METHOD_INKSCAPE_SVG);
+
+ auto operation_confirmed = sp_ui_overwrite_file(filename.c_str());
+
+ if (operation_confirmed) {
+
+ file_save(parentWindow, document, filename,
+ Inkscape::Extension::db.get(".svg"), false, false,
+ Inkscape::Extension::FILE_SAVE_METHOD_INKSCAPE_SVG);
+
+ if (isDefault) {
+
+ filename = Inkscape::IO::Resource::get_path_ustring(USER,
+ TEMPLATES, "default.svg");
+
+ file_save(parentWindow, document, filename,
+ Inkscape::Extension::db.get(".svg"), false, false,
+ Inkscape::Extension::FILE_SAVE_METHOD_INKSCAPE_SVG);
+ }
+ }
auto nodeToRemove = sp_repr_lookup_name(root, "inkscape:_templateinfo");
@@ -1048,6 +1055,8 @@ sp_file_save_template(Gtk::Window &parentWindow, Glib::ustring name,
}
DocumentUndo::setUndoSensitive(document, true);
+
+ return operation_confirmed;
}
diff --git a/src/file.h b/src/file.h
index 21c412f5f..fadbb09da 100644
--- a/src/file.h
+++ b/src/file.h
@@ -106,7 +106,7 @@ bool sp_file_save_a_copy (Gtk::Window &parentWindow, void* object, void* data);
/**
* Save a copy of a document as template.
*/
-void
+bool
sp_file_save_template(Gtk::Window &parentWindow, Glib::ustring name,
Glib::ustring author, Glib::ustring description, Glib::ustring keywords,
bool isDefault);
diff --git a/src/ui/dialog/save-template-dialog.cpp b/src/ui/dialog/save-template-dialog.cpp
index 1be831ef8..e16bf45f7 100644
--- a/src/ui/dialog/save-template-dialog.cpp
+++ b/src/ui/dialog/save-template-dialog.cpp
@@ -1,10 +1,10 @@
#include "save-template-dialog.h"
#include "file.h"
+#include "io/resource.h"
+#include "ui/interface.h"
#include <glibmm/i18n.h>
-#include <iostream>
-
namespace Inkscape {
namespace UI {
namespace Dialog {
@@ -63,9 +63,9 @@ void SaveTemplate::on_name_changed() {
}
}
-void SaveTemplate::save_template(Gtk::Window &parentWindow) {
+bool SaveTemplate::save_template(Gtk::Window &parentWindow) {
- sp_file_save_template(parentWindow, name_text.get_text(),
+ return sp_file_save_template(parentWindow, name_text.get_text(),
author_text.get_text(), description_text.get_text(),
keywords_text.get_text(), is_default_template.get_active());
}
@@ -74,11 +74,16 @@ void SaveTemplate::save_document_as_template(Gtk::Window &parentWindow) {
SaveTemplate dialog;
- auto result = dialog.run();
+ auto operation_done = false;
+
+ while (operation_done == false) {
- if (result == Gtk::RESPONSE_OK){
+ auto user_response = dialog.run();
- dialog.save_template(parentWindow);
+ if (user_response == Gtk::RESPONSE_OK)
+ operation_done = dialog.save_template(parentWindow);
+ else
+ operation_done = true;
}
}
diff --git a/src/ui/dialog/save-template-dialog.h b/src/ui/dialog/save-template-dialog.h
index 9f38c499d..3f2cbddc1 100644
--- a/src/ui/dialog/save-template-dialog.h
+++ b/src/ui/dialog/save-template-dialog.h
@@ -42,7 +42,7 @@ private:
Gtk::CheckButton is_default_template;
SaveTemplate();
- void save_template(Gtk::Window &parentWindow);
+ bool save_template(Gtk::Window &parentWindow);
};
}