diff options
author | Jarek Kobus <jaroslaw.kobus@theqtcompany.com> | 2016-10-17 11:11:09 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2016-10-24 13:03:40 +0000 |
commit | cee4d0c0b7bcd1a412b2d4713e80a3ffb676a6e9 (patch) | |
tree | 54e1dd7d05302b607e9b41123039e934182e33e7 /src/widgets/util | |
parent | cc30177a6927ee9619710efec45dbcd9d9fd4355 (diff) |
Add a resetClean() method to the undo stack
With the current API it is not possible to reset the
index into -1. We have setClean() method, but
we are lacking setDirty(). This is needed
in case when the document has changed outside
of the editor and nothing has changed
in the undo stack history. In this case we
don't know the state of the file modified
externally so we need to mark that editor's
contents is different from the file contents
and undoing or redoing commands can't bring
the editor to the clean state.
This may also be useful to call it when
we created a new document and haven't saved
it yet or when the document was restored
from backup file.
Task-number: QTCREATORBUG-17048
Change-Id: I64e2052b3559299e0b6939831557a07a59a851b6
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/widgets/util')
-rw-r--r-- | src/widgets/util/qundostack.cpp | 27 | ||||
-rw-r--r-- | src/widgets/util/qundostack.h | 1 |
2 files changed, 27 insertions, 1 deletions
diff --git a/src/widgets/util/qundostack.cpp b/src/widgets/util/qundostack.cpp index 18f85ca505..59d517e77b 100644 --- a/src/widgets/util/qundostack.cpp +++ b/src/widgets/util/qundostack.cpp @@ -633,7 +633,7 @@ void QUndoStack::push(QUndoCommand *cmd) commands, it emits the signal cleanChanged(). This signal is also emitted when the stack leaves the clean state. - \sa isClean(), cleanIndex() + \sa isClean(), resetClean(), cleanIndex() */ void QUndoStack::setClean() @@ -648,6 +648,30 @@ void QUndoStack::setClean() } /*! + \since 5.8 + + Leaves the clean state and emits cleanChanged() if the stack was clean. + This method resets the clean index to -1. + + This is typically called in the following cases, when a document has been: + \li created basing on some template and has not been saved, + so no filename has been associated with the document yet. + \li restored from a backup file. + \li changed outside of the editor and the user did not reload it. + + \sa isClean(), setClean(), cleanIndex() +*/ + +void QUndoStack::resetClean() +{ + Q_D(QUndoStack); + const bool was_clean = isClean(); + d->clean_index = -1; + if (was_clean) + emit cleanChanged(false); +} + +/*! If the stack is in the clean state, returns \c true; otherwise returns \c false. \sa setClean(), cleanIndex() @@ -668,6 +692,7 @@ bool QUndoStack::isClean() const some commands are undone, then a new command is pushed. Since push() deletes all the undone commands before pushing the new command, the stack can't return to the clean state again. In this case, this function returns -1. + The -1 may also be returned after an explicit call to resetClean(). \sa isClean(), setClean() */ diff --git a/src/widgets/util/qundostack.h b/src/widgets/util/qundostack.h index f4db78300b..ca918b0618 100644 --- a/src/widgets/util/qundostack.h +++ b/src/widgets/util/qundostack.h @@ -128,6 +128,7 @@ public: public Q_SLOTS: void setClean(); + void resetClean(); void setIndex(int idx); void undo(); void redo(); |