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
10//10//
11 11
12#include <QDebug>12#include <QDebug>
13#include <QScriptValue>
13#include <QScriptValueList>14#include <QScriptValueList>
14#include <QScriptEngine>15#include <QScriptEngine>
15 16
@@ -20,9 +21,11 @@ UndoStackScriptingInterface::UndoStackScriptingInterface(QUndoStack* undoStack) · 4 unmodified lines
20 21
21void UndoStackScriptingInterface::pushCommand(QScriptValue undoFunction, QScriptValue undoData,22void UndoStackScriptingInterface::pushCommand(QScriptValue undoFunction, QScriptValue undoData,
22 QScriptValue redoFunction, QScriptValue redoData) {23 QScriptValue redoFunction, QScriptValue redoData) {
23 ScriptUndoCommand* undoCommand = new ScriptUndoCommand(undoFunction, undoData, redoFunction, redoData);24 if (undoFunction.engine()) {
24 qDebug() << "Pushing command";25 ScriptUndoCommand* undoCommand = new ScriptUndoCommand(undoFunction, undoData, redoFunction, redoData);
25 _undoStack->push(undoCommand);26 undoCommand->moveToThread(undoFunction.engine()->thread());
27 _undoStack->push(undoCommand);
28 }
26}29}
27 30
28ScriptUndoCommand::ScriptUndoCommand(QScriptValue undoFunction, QScriptValue undoData,31ScriptUndoCommand::ScriptUndoCommand(QScriptValue undoFunction, QScriptValue undoData,
@@ -34,12 +37,21 @@ ScriptUndoCommand::ScriptUndoCommand(QScriptValue undoFunction, QScriptValue und · 5 unmodified lines
34}37}
35 38
36void ScriptUndoCommand::undo() {39void ScriptUndoCommand::undo() {
40 QMetaObject::invokeMethod(this, "doUndo");
41}
42
43void ScriptUndoCommand::redo() {
44 QMetaObject::invokeMethod(this, "doRedo");
45}
46
47void ScriptUndoCommand::doUndo() {
37 QScriptValueList args;48 QScriptValueList args;
38 args << _undoData;49 args << _undoData;
39 _undoFunction.call(QScriptValue(), args);50 _undoFunction.call(QScriptValue(), args);
40}51}
41 52
42void ScriptUndoCommand::redo() {53
54void ScriptUndoCommand::doRedo() {
43 QScriptValueList args;55 QScriptValueList args;
44 args << _redoData;56 args << _redoData;
45 _redoFunction.call(QScriptValue(), args);57 _redoFunction.call(QScriptValue(), args);