mirror of
https://github.com/overte-org/overte.git
synced 2025-04-20 03:44:02 +02:00
Update ScriptUndoCommand to run on ScriptEngine thread
This commit is contained in:
parent
14555c4534
commit
ac8d947cb1
2 changed files with 22 additions and 5 deletions
|
@ -10,6 +10,7 @@
|
|||
//
|
||||
|
||||
#include <QDebug>
|
||||
#include <QScriptValue>
|
||||
#include <QScriptValueList>
|
||||
#include <QScriptEngine>
|
||||
|
||||
|
@ -20,9 +21,11 @@ UndoStackScriptingInterface::UndoStackScriptingInterface(QUndoStack* undoStack)
|
|||
|
||||
void UndoStackScriptingInterface::pushCommand(QScriptValue undoFunction, QScriptValue undoData,
|
||||
QScriptValue redoFunction, QScriptValue redoData) {
|
||||
ScriptUndoCommand* undoCommand = new ScriptUndoCommand(undoFunction, undoData, redoFunction, redoData);
|
||||
qDebug() << "Pushing command";
|
||||
_undoStack->push(undoCommand);
|
||||
if (undoFunction.engine()) {
|
||||
ScriptUndoCommand* undoCommand = new ScriptUndoCommand(undoFunction, undoData, redoFunction, redoData);
|
||||
undoCommand->moveToThread(undoFunction.engine()->thread());
|
||||
_undoStack->push(undoCommand);
|
||||
}
|
||||
}
|
||||
|
||||
ScriptUndoCommand::ScriptUndoCommand(QScriptValue undoFunction, QScriptValue undoData,
|
||||
|
@ -34,12 +37,21 @@ ScriptUndoCommand::ScriptUndoCommand(QScriptValue undoFunction, QScriptValue und
|
|||
}
|
||||
|
||||
void ScriptUndoCommand::undo() {
|
||||
QMetaObject::invokeMethod(this, "doUndo");
|
||||
}
|
||||
|
||||
void ScriptUndoCommand::redo() {
|
||||
QMetaObject::invokeMethod(this, "doRedo");
|
||||
}
|
||||
|
||||
void ScriptUndoCommand::doUndo() {
|
||||
QScriptValueList args;
|
||||
args << _undoData;
|
||||
_undoFunction.call(QScriptValue(), args);
|
||||
}
|
||||
|
||||
void ScriptUndoCommand::redo() {
|
||||
|
||||
void ScriptUndoCommand::doRedo() {
|
||||
QScriptValueList args;
|
||||
args << _redoData;
|
||||
_redoFunction.call(QScriptValue(), args);
|
||||
|
|
|
@ -28,7 +28,8 @@ private:
|
|||
QUndoStack* _undoStack;
|
||||
};
|
||||
|
||||
class ScriptUndoCommand : public QUndoCommand {
|
||||
class ScriptUndoCommand : public QObject, public QUndoCommand {
|
||||
Q_OBJECT
|
||||
public:
|
||||
ScriptUndoCommand(QScriptValue undoFunction, QScriptValue undoData, QScriptValue redoFunction, QScriptValue redoData);
|
||||
|
||||
|
@ -37,6 +38,10 @@ public:
|
|||
virtual bool mergeWith(const QUndoCommand* command) { return false; }
|
||||
virtual int id() const { return -1; }
|
||||
|
||||
public slots:
|
||||
void doUndo();
|
||||
void doRedo();
|
||||
|
||||
private:
|
||||
QScriptValue _undoFunction;
|
||||
QScriptValue _undoData;
|
||||
|
|
Loading…
Reference in a new issue