History

Update ScriptUndoCommand to run on ScriptEngine thread

Ryan Huffman committed 12 years ago

Commit ac8d9471 parent 14555c42 files · +22 −5Browse files

Showing the changes to libraries/script-engine/src/UndoStackScriptingInterface.cpp (1 of 2 files). Show all

Unified · Split

libraries/script-engine/src/UndoStackScriptingInterface.cpp+16−4
@@ -10,6 +10,7 @@ · 9 unmodified lines
1010 //
1111
1212 #include <QDebug>
13+#include <QScriptValue>
1314 #include <QScriptValueList>
1415 #include <QScriptEngine>
1516
@@ -20,9 +21,11 @@ UndoStackScriptingInterface::UndoStackScriptingInterface(QUndoStack* undoStack) · 4 unmodified lines
2021
2122 void UndoStackScriptingInterface::pushCommand(QScriptValue undoFunction, QScriptValue undoData,
2223 QScriptValue redoFunction, QScriptValue redoData) {
23− ScriptUndoCommand* undoCommand = new ScriptUndoCommand(undoFunction, undoData, redoFunction, redoData);
24− qDebug() << "Pushing command";
25− _undoStack->push(undoCommand);
24+ if (undoFunction.engine()) {
25+ ScriptUndoCommand* undoCommand = new ScriptUndoCommand(undoFunction, undoData, redoFunction, redoData);
26+ undoCommand->moveToThread(undoFunction.engine()->thread());
27+ _undoStack->push(undoCommand);
28+ }
2629 }
2730
2831 ScriptUndoCommand::ScriptUndoCommand(QScriptValue undoFunction, QScriptValue undoData,
@@ -34,12 +37,21 @@ ScriptUndoCommand::ScriptUndoCommand(QScriptValue undoFunction, QScriptValue und · 5 unmodified lines
3437 }
3538
3639 void ScriptUndoCommand::undo() {
40+ QMetaObject::invokeMethod(this, "doUndo");
41+}
42+
43+void ScriptUndoCommand::redo() {
44+ QMetaObject::invokeMethod(this, "doRedo");
45+}
46+
47+void ScriptUndoCommand::doUndo() {
3748 QScriptValueList args;
3849 args << _undoData;
3950 _undoFunction.call(QScriptValue(), args);
4051 }
4152
42−void ScriptUndoCommand::redo() {
53+
54+void ScriptUndoCommand::doRedo() {
4355 QScriptValueList args;
4456 args << _redoData;
4557 _redoFunction.call(QScriptValue(), args);