From 11cfd1c842a7e9aded3a5723f2a0d4d4948d9322 Mon Sep 17 00:00:00 2001
From: Juraj Fedel <wtxnh-scribus@yahoo.com.au>
Date: Sun, 24 Aug 2014 20:20:45 +0200
Subject: [PATCH 13/13] Do not show messagebox when python script raise an error

If app.useGUI is false and error occur while running python script
error message is printed on stderr and no user intervention is needed
to close messagebox with error message.

As a plus mainApp() function is almost as it should be. If we manage to
change app.init() function to do reasonable job even if useGUI is false
than we can dispose of three line around it and change

bool runApplication = app.useGUI;
app.useGUI = true;
int appRetVal=app.init();
app.useGUI = runApplication;

into

int appRetVal=app.init();
---
 scribus/main_nix.cpp                          |    3 ++-
 scribus/main_win32.cpp                        |    3 ++-
 scribus/plugins/scriptplugin/scriptercore.cpp |   10 ++++------
 3 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/scribus/main_nix.cpp b/scribus/main_nix.cpp
index f5ce6e2..dc698b2 100644
--- a/scribus/main_nix.cpp
+++ b/scribus/main_nix.cpp
@@ -82,6 +82,7 @@ int mainApp(int argc, char **argv)
 	bool runApplication = app.useGUI;
 	app.useGUI = true;
 	int appRetVal=app.init();
+	app.useGUI = runApplication;
 	if (appRetVal==EXIT_FAILURE)
 		return(EXIT_FAILURE);
 	if (!app.pythonScript.isNull())
@@ -89,7 +90,7 @@ int mainApp(int argc, char **argv)
 		if (ScCore->primaryMainWindow()->scrActions.contains("scripterRunPythonScript"))
 			ScCore->primaryMainWindow()->scrActions.value("scripterRunPythonScript")->trigger();
 	}
-	if (runApplication)
+	if (app.useGUI)
 		return app.exec();
 	return EXIT_SUCCESS;	
 }
diff --git a/scribus/main_win32.cpp b/scribus/main_win32.cpp
index bd6339e..25f6a39 100644
--- a/scribus/main_win32.cpp
+++ b/scribus/main_win32.cpp
@@ -118,6 +118,7 @@ int mainApp(ScribusQApp& app)
 		bool runApplication = app.useGUI;
 		app.useGUI = true;
 		appRetVal = app.init();
+		app.useGUI = runApplication;
 		if (appRetVal != EXIT_FAILURE)
 		{
 			if (!app.pythonScript.isNull())
@@ -125,7 +126,7 @@ int mainApp(ScribusQApp& app)
 				if (ScCore->primaryMainWindow()->scrActions.contains("scripterRunPythonScript"))
 					ScCore->primaryMainWindow()->scrActions.value("scripterRunPythonScript")->trigger();
 			}
-			if (runApplication)
+			if (app.useGUI)
 				appRetVal = app.exec();
 		}
 #ifndef _DEBUG
diff --git a/scribus/plugins/scriptplugin/scriptercore.cpp b/scribus/plugins/scriptplugin/scriptercore.cpp
index 3218341..c2b10fe 100644
--- a/scribus/plugins/scriptplugin/scriptercore.cpp
+++ b/scribus/plugins/scriptplugin/scriptercore.cpp
@@ -297,11 +297,9 @@ void ScripterCore::slotRunScriptFile(QString fileName, bool inMainInterpreter)
 		// into a StringIO buffer for later extraction.
 		cm        += QString("except:\n");
 		cm        += QString("    import traceback\n");
-		cm        += QString("    import scribus\n");                  // we stash our working vars here
-		cm        += QString("    scribus._f=cStringIO.StringIO()\n");
-		cm        += QString("    traceback.print_exc(file=scribus._f)\n");
-		cm        += QString("    _errorMsg = scribus._f.getvalue()\n");
-		cm        += QString("    del(scribus._f)\n");
+		cm        += QString("    _errorMsg = traceback.format_exc()\n");
+		if (!ScQApp->useGUI)
+			cm += QString("    traceback.print_exc()\n");
 		// We re-raise the exception so the return value of PyRun_StringFlags reflects
 		// the fact that an exception has ocurred.
 		cm        += QString("    raise\n");
@@ -326,7 +324,7 @@ void ScripterCore::slotRunScriptFile(QString fileName, bool inMainInterpreter)
 				qDebug("Exception was:");
 				PyErr_Print();
 			}
-			else
+			else if (ScQApp->useGUI)
 			{
 				QString errorMsg = PyString_AsString(errorMsgPyStr);
 				// Display a dialog to the user with the exception
-- 
1.7.2.3

