mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-09-20 07:14:13 +02:00
Fix:
a) Project stayed in modified state even after undoing all changes. b) Saving the project deleted the undo stack.
This commit is contained in:
@@ -726,7 +726,10 @@ QETResult ProjectView::doSave()
|
||||
// write to file
|
||||
QETResult result = m_project -> write();
|
||||
updateWindowTitle();
|
||||
project()->undoStack()->clear();
|
||||
// This marks the stack's current index as the new "saved" point (so isClean()/cleanChanged() correctly
|
||||
// resume tracking unsaved changes from here) without discarding the undo history. Edits made before this save
|
||||
// stay undoable for the rest of the session.
|
||||
project()->undoStack()->setClean();
|
||||
return(result);
|
||||
}
|
||||
|
||||
|
||||
@@ -2840,7 +2840,7 @@ void QETDiagramEditor::updateWindowModifiedState()
|
||||
setWindowTitle(QString("%1[*] - %2").arg(
|
||||
project->pathNameTitle(),
|
||||
tr("QElectroTech", "window title")));
|
||||
setWindowModified(project->projectOptionsWereModified());
|
||||
setWindowModified(project->projectWasModified());
|
||||
} else {
|
||||
setWindowTitle(tr("QElectroTech", "window title"));
|
||||
setWindowModified(false);
|
||||
|
||||
@@ -534,7 +534,9 @@ QString QETProject::pathNameTitle() const
|
||||
)
|
||||
).arg(final_title);
|
||||
}
|
||||
if (m_modified) {
|
||||
// Same condition as projectWasModified(): project-options changeg (m_modified) OR the undo stack sitting away from
|
||||
// its clean index.
|
||||
if (m_modified || !m_undo_stack->isClean()) {
|
||||
final_title = QString(
|
||||
tr(
|
||||
"%1 [modifié]",
|
||||
|
||||
+20
-1
@@ -252,7 +252,26 @@ class QETProject : public QObject
|
||||
void updateDiagramsTitleBlockTemplate(TitleBlockTemplatesCollection *, const QString &);
|
||||
void removeDiagramsTitleBlockTemplate(TitleBlockTemplatesCollection *, const QString &);
|
||||
void usedTitleBlockTemplateChanged(const QString &);
|
||||
void undoStackChanged (bool a) {if (!a) setModified(true);}
|
||||
/* Deliberately does NOT touch m_modified: m_modified /
|
||||
* setModified() track project-OPTIONS changes only (see
|
||||
* projectOptionsWereModified()), which have no undo
|
||||
* entry and so must stay set until an explicit write().
|
||||
* Diagram-content changes are tracked by the undo
|
||||
* stack's own clean index instead, and projectWasModified()
|
||||
* already ORs the two together -- that combined value is
|
||||
* what actually answers "does this project have unsaved
|
||||
* changes", so re-derive and broadcast it here on every
|
||||
* clean/dirty transition (covering, in particular, an
|
||||
* Undo that walks the stack back to its clean index).
|
||||
* Latching m_modified itself to the undo stack's dirty
|
||||
* state, the way this slot did before, is a one-way trap:
|
||||
* cleanChanged(true) would never come back through here
|
||||
* to un-set it, so a plain content edit stayed marked as
|
||||
* unsaved even after being fully undone. */
|
||||
void undoStackChanged (bool /*a*/) {
|
||||
emit projectModified(this, projectWasModified());
|
||||
emit projectInformationsChanged(this);
|
||||
}
|
||||
|
||||
private:
|
||||
void readProjectXml(QDomDocument &xml_project);
|
||||
|
||||
Reference in New Issue
Block a user