[PATCH 2/3] propagate save errors further, don't mark divelist unchanged

Linus Torvalds torvalds at linux-foundation.org
Fri Mar 14 10:38:34 PDT 2014


From: Linus Torvalds <torvalds at linux-foundation.org>
Date: Fri, 14 Mar 2014 10:19:23 -0700
Subject: [PATCH 2/3] propagate save errors further, don't mark divelist unchanged

This at least avoids marking the dive list as unchanged on a failed
write, and propagates the error further up the stack.

We still don't show the error string in the GUI, though.  I'll start
doing that next, I think.

Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
---
 qt-ui/mainwindow.cpp | 29 +++++++++++++++++------------
 qt-ui/mainwindow.h   |  4 ++--
 2 files changed, 19 insertions(+), 14 deletions(-)

diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp
index b67de1588509..671f39cf792e 100644
--- a/qt-ui/mainwindow.cpp
+++ b/qt-ui/mainwindow.cpp
@@ -882,7 +882,7 @@ void MainWindow::recentFileTriggered(bool checked)
 	loadFiles(QStringList() << filename);
 }
 
-void MainWindow::file_save_as(void)
+int MainWindow::file_save_as(void)
 {
 	QString filename;
 	const char *default_filename;
@@ -893,20 +893,23 @@ void MainWindow::file_save_as(void)
 		default_filename = prefs.default_filename;
 	filename = QFileDialog::getSaveFileName(this, tr("Save File as"), default_filename,
 						tr("Subsurface XML files (*.ssrf *.xml *.XML)"));
-	if (!filename.isNull() && !filename.isEmpty()) {
+	if (filename.isNull() || filename.isEmpty())
+		return report_error("No filename to save into");
 
-		if (ui.InfoWidget->isEditing())
-			ui.InfoWidget->acceptChanges();
+	if (ui.InfoWidget->isEditing())
+		ui.InfoWidget->acceptChanges();
 
-		save_dives(filename.toUtf8().data());
-		set_filename(filename.toUtf8().data(), true);
-		setTitle(MWTF_FILENAME);
-		mark_divelist_changed(false);
-		addRecentFile(QStringList() << filename);
-	}
+	if (save_dives(filename.toUtf8().data()))
+		return -1;
+
+	set_filename(filename.toUtf8().data(), true);
+	setTitle(MWTF_FILENAME);
+	mark_divelist_changed(false);
+	addRecentFile(QStringList() << filename);
+	return 0;
 }
 
-void MainWindow::file_save(void)
+int MainWindow::file_save(void)
 {
 	const char *current_default;
 
@@ -924,9 +927,11 @@ void MainWindow::file_save(void)
 		if (!current_def_dir.exists())
 			current_def_dir.mkpath(current_def_dir.absolutePath());
 	}
-	save_dives(existing_filename);
+	if (save_dives(existing_filename))
+		return -1;
 	mark_divelist_changed(false);
 	addRecentFile(QStringList() << QString(existing_filename));
+	return 0;
 }
 
 void MainWindow::showError(QString message)
diff --git a/qt-ui/mainwindow.h b/qt-ui/mainwindow.h
index 8244d0a0f6e8..971bd17681cf 100644
--- a/qt-ui/mainwindow.h
+++ b/qt-ui/mainwindow.h
@@ -163,8 +163,8 @@ private:
 	static MainWindow *m_Instance;
 	bool askSaveChanges();
 	void writeSettings();
-	void file_save();
-	void file_save_as();
+	int file_save();
+	int file_save_as();
 	void beginChangeState(CurrentState s);
 	void saveSplitterSizes();
 	QString lastUsedDir();
-- 
1.9.0



More information about the subsurface mailing list