summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjghali <jghali@11d20701-8431-0410-a711-e3c959e3b870>2012-07-04 20:21:28 +0000
committerjghali <jghali@11d20701-8431-0410-a711-e3c959e3b870>2012-07-04 20:21:28 +0000
commit25cccfcedcf6b5e3564b1858c2544e8aad60f983 (patch)
tree4c9b09e06df5bfab19ede742c0fde7f6231610fd
parent8c6c32cca9d5761730202afbe8542b6e3343871d (diff)
downloadscribus-25cccfcedcf6b5e3564b1858c2544e8aad60f983.tar.gz
scribus-25cccfcedcf6b5e3564b1858c2544e8aad60f983.tar.xz
scribus-25cccfcedcf6b5e3564b1858c2544e8aad60f983.zip
#10804: Scribus crash opening 2 script at the same time
git-svn-id: svn://scribus.net/branches/Version14x/Scribus@17680 11d20701-8431-0410-a711-e3c959e3b870
-rw-r--r--scribus/plugins/scriptplugin/pconsole.cpp22
-rw-r--r--scribus/plugins/scriptplugin/scriptercore.cpp33
-rw-r--r--scribus/plugins/scriptplugin/scriptercore.h3
3 files changed, 56 insertions, 2 deletions
diff --git a/scribus/plugins/scriptplugin/pconsole.cpp b/scribus/plugins/scriptplugin/pconsole.cpp
index a7331b1..f68bfae 100644
--- a/scribus/plugins/scriptplugin/pconsole.cpp
+++ b/scribus/plugins/scriptplugin/pconsole.cpp
@@ -14,12 +14,13 @@ the Free Software Foundation; either version 2 of the License, or
#include "pconsole.h"
#include <QFileDialog>
-#include "scribus.h"
+#include "commonstrings.h"
#include "prefsmanager.h"
#include "prefsfile.h"
#include "prefscontext.h"
#include "scmessagebox.h"
-#include "commonstrings.h"
+#include "scribus.h"
+#include "scribuscore.h"
#include "util_icon.h"
@@ -125,6 +126,15 @@ void PythonConsole::languageChange()
void PythonConsole::slot_runScript()
{
outputEdit->clear();
+
+ //Prevent two scripts to be run concurrently or face crash!
+ if (ScCore->primaryMainWindow()->scriptIsRunning())
+ {
+ outputEdit->append( tr("Another script is already running...") );
+ outputEdit->append( tr("Please let it finish its task...") );
+ return;
+ }
+
parsePythonString();
emit runCommand();
commandEdit->textCursor().movePosition(QTextCursor::Start);
@@ -132,6 +142,14 @@ void PythonConsole::slot_runScript()
void PythonConsole::slot_runScriptAsConsole()
{
+ //Prevent two scripts to be run concurrently or face crash!
+ if (ScCore->primaryMainWindow()->scriptIsRunning())
+ {
+ outputEdit->append( tr("\n>>> Another script is already running...") );
+ outputEdit->append( tr("Please let it finish its task...") );
+ return;
+ }
+
parsePythonString();
commandEdit->clear();
// content is destroyed. This is to prevent overwriting
diff --git a/scribus/plugins/scriptplugin/scriptercore.cpp b/scribus/plugins/scriptplugin/scriptercore.cpp
index 4bd8ba3..b3f5486 100644
--- a/scribus/plugins/scriptplugin/scriptercore.cpp
+++ b/scribus/plugins/scriptplugin/scriptercore.cpp
@@ -35,6 +35,8 @@ for which a new license (GPL+exception) is in place.
ScripterCore::ScripterCore(QWidget* parent)
{
+ menuMgr = NULL;
+
pcon = new PythonConsole(parent);
scrScripterActions.clear();
scrRecentScriptActions.clear();
@@ -83,6 +85,23 @@ void ScripterCore::addToMainWindowMenu(ScribusMainWindow *mw)
buildRecentScriptsMenu();
}
+void ScripterCore::enableMainWindowMenu()
+{
+ if (!menuMgr)
+ return;
+ menuMgr->setMenuEnabled("ScribusScripts", true);
+ menuMgr->setMenuEnabled("RecentScripts", true);
+ scrScripterActions["scripterExecuteScript"]->setEnabled(true);
+}
+
+void ScripterCore::disableMainWindowMenu()
+{
+ if (!menuMgr)
+ return;
+ menuMgr->setMenuEnabled("ScribusScripts", false);
+ menuMgr->setMenuEnabled("RecentScripts", false);
+ scrScripterActions["scripterExecuteScript"]->setEnabled(false);
+}
void ScripterCore::buildScribusScriptsMenu()
{
@@ -257,6 +276,11 @@ void ScripterCore::RecentScript(QString fn)
void ScripterCore::slotRunScriptFile(QString fileName, bool inMainInterpreter)
{
+ // Prevent two scripts to be run concurrently or face crash!
+ if (ScCore->primaryMainWindow()->scriptIsRunning())
+ return;
+ disableMainWindowMenu();
+
PyThreadState *state = NULL;
QFileInfo fi(fileName);
QByteArray na = fi.fileName().toLocal8Bit();
@@ -376,10 +400,17 @@ void ScripterCore::slotRunScriptFile(QString fileName, bool inMainInterpreter)
// qApp->restoreOverrideCursor();
ScCore->primaryMainWindow()->setScriptRunning(false);
}
+
+ enableMainWindowMenu();
}
void ScripterCore::slotRunScript(const QString Script)
{
+ // Prevent two scripts to be run concurrently or face crash!
+ if (ScCore->primaryMainWindow()->scriptIsRunning())
+ return;
+ disableMainWindowMenu();
+
ScCore->primaryMainWindow()->propertiesPalette->unsetDoc();
ScCore->primaryMainWindow()->pagePalette->setView(NULL);
ScCore->primaryMainWindow()->setScriptRunning(true);
@@ -446,6 +477,8 @@ void ScripterCore::slotRunScript(const QString Script)
Py_XDECREF(result);
}
ScCore->primaryMainWindow()->setScriptRunning(false);
+
+ enableMainWindowMenu();
}
void ScripterCore::slotInteractiveScript(bool visible)
diff --git a/scribus/plugins/scriptplugin/scriptercore.h b/scribus/plugins/scriptplugin/scriptercore.h
index 1eaaf30..47e96ac 100644
--- a/scribus/plugins/scriptplugin/scriptercore.h
+++ b/scribus/plugins/scriptplugin/scriptercore.h
@@ -24,7 +24,10 @@ class ScripterCore : public QObject
public:
ScripterCore(QWidget* parent);
~ScripterCore();
+
void addToMainWindowMenu(ScribusMainWindow *);
+ void enableMainWindowMenu();
+ void disableMainWindowMenu();
/** @brief String representation of result returned by last python console command */
QString returnString;