diff options
author | jghali <jghali@11d20701-8431-0410-a711-e3c959e3b870> | 2012-07-04 20:21:28 +0000 |
---|---|---|
committer | jghali <jghali@11d20701-8431-0410-a711-e3c959e3b870> | 2012-07-04 20:21:28 +0000 |
commit | 25cccfcedcf6b5e3564b1858c2544e8aad60f983 (patch) | |
tree | 4c9b09e06df5bfab19ede742c0fde7f6231610fd | |
parent | 8c6c32cca9d5761730202afbe8542b6e3343871d (diff) | |
download | scribus-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.cpp | 22 | ||||
-rw-r--r-- | scribus/plugins/scriptplugin/scriptercore.cpp | 33 | ||||
-rw-r--r-- | scribus/plugins/scriptplugin/scriptercore.h | 3 |
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; |