浏览代码

Use page()->undoStack() for detect is document modified

Kandrashin Denis 13 年之前
父节点
当前提交
f1a080213e
共有 4 个文件被更改,包括 23 次插入5 次删除
  1. 2 0
      source/fb2code.hpp
  2. 16 4
      source/fb2main.cpp
  3. 1 0
      source/fb2main.hpp
  4. 4 1
      source/fb2view.cpp

+ 2 - 0
source/fb2code.hpp

@@ -127,6 +127,8 @@ public:
 
 
     bool findText(const QString &exp, QTextDocument::FindFlags options = 0);
     bool findText(const QString &exp, QTextDocument::FindFlags options = 0);
 
 
+    bool isModified() const { return document()->isModified(); }
+
 public slots:
 public slots:
     void find();
     void find();
     void zoomIn();
     void zoomIn();

+ 16 - 4
source/fb2main.cpp

@@ -178,12 +178,24 @@ void Fb2MainWindow::about()
 
 
 void Fb2MainWindow::documentWasModified()
 void Fb2MainWindow::documentWasModified()
 {
 {
-    if (isWindowModified()) return;
+    bool modified = false;
+    if (codeEdit) modified = codeEdit->isModified();
     QFileInfo info = windowFilePath();
     QFileInfo info = windowFilePath();
     QString title = info.fileName();
     QString title = info.fileName();
-    title += QString("[*]") += appTitle();
+    if (modified) title += QString("[*]");
+    title += appTitle();
+    setWindowTitle(title);
+    setWindowModified(modified);
+}
+
+void Fb2MainWindow::cleanChanged(bool clean)
+{
+    QFileInfo info = windowFilePath();
+    QString title = info.fileName();
+    if (!clean) title += QString("[*]");
+    title += appTitle();
     setWindowTitle(title);
     setWindowTitle(title);
-    setWindowModified(true);
+    setWindowModified(!clean);
 }
 }
 
 
 void Fb2MainWindow::createActions()
 void Fb2MainWindow::createActions()
@@ -641,7 +653,7 @@ void Fb2MainWindow::viewText()
     textEdit->setFocus();
     textEdit->setFocus();
     viewTree();
     viewTree();
 
 
-    connect(textEdit->page(), SIGNAL(contentsChanged()), SLOT(documentWasModified()));
+    connect(textEdit->page()->undoStack(), SIGNAL(cleanChanged(bool)), SLOT(cleanChanged(bool)));
     connect(textEdit->page(), SIGNAL(selectionChanged()), SLOT(selectionChanged()));
     connect(textEdit->page(), SIGNAL(selectionChanged()), SLOT(selectionChanged()));
 
 
     connect(textEdit->pageAction(QWebPage::Undo), SIGNAL(changed()), SLOT(undoChanged()));
     connect(textEdit->pageAction(QWebPage::Undo), SIGNAL(changed()), SLOT(undoChanged()));

+ 1 - 0
source/fb2main.hpp

@@ -51,6 +51,7 @@ private slots:
     void viewHead();
     void viewHead();
     void viewTree();
     void viewTree();
 
 
+    void cleanChanged(bool clean);
     void status(const QString &text);
     void status(const QString &text);
     void clipboardDataChanged();
     void clipboardDataChanged();
     void selectionChanged();
     void selectionChanged();

+ 4 - 1
source/fb2view.cpp

@@ -11,6 +11,7 @@
 #include <QFileDialog>
 #include <QFileDialog>
 #include <QNetworkRequest>
 #include <QNetworkRequest>
 #include <QToolTip>
 #include <QToolTip>
+#include <QUndoStack>
 #include <QWebElement>
 #include <QWebElement>
 #include <QWebInspector>
 #include <QWebInspector>
 #include <QWebFrame>
 #include <QWebFrame>
@@ -203,7 +204,9 @@ bool Fb2WebView::save(QIODevice *device, const QString &codec)
 {
 {
     Fb2SaveWriter writer(*this, device);
     Fb2SaveWriter writer(*this, device);
     if (!codec.isEmpty()) writer.setCodec(codec.toLatin1());
     if (!codec.isEmpty()) writer.setCodec(codec.toLatin1());
-    return Fb2SaveHandler(writer).save();
+    bool ok = Fb2SaveHandler(writer).save();
+    if (ok) page()->undoStack()->setClean();
+    return ok;
 }
 }
 
 
 bool Fb2WebView::save(QByteArray *array)
 bool Fb2WebView::save(QByteArray *array)