src/gui/text/qtextdocument.cpp
branchGCC_SURGE
changeset 31 5daf16870df6
parent 30 5dc02b23752f
child 33 3e2da88830cd
--- a/src/gui/text/qtextdocument.cpp	Mon Jun 21 22:38:13 2010 +0100
+++ b/src/gui/text/qtextdocument.cpp	Thu Jul 22 16:41:55 2010 +0100
@@ -61,6 +61,7 @@
 #include <qapplication.h>
 #include "qtextcontrol_p.h"
 #include "private/qtextedit_p.h"
+#include "private/qdataurl_p.h"
 
 #include "qtextdocument_p.h"
 #include <private/qprinter_p.h>
@@ -434,6 +435,30 @@
     }
 }
 
+/*! \enum QTextDocument::Stacks
+  
+  \value UndoStack              The undo stack.
+  \value RedoStack              The redo stack.
+  \value UndoAndRedoStacks      Both the undo and redo stacks.
+*/
+        
+/*!
+    \since 4.7
+    Clears the stacks specified by \a stacksToClear.
+
+    This method clears any commands on the undo stack, the redo stack,
+    or both (the default). If commands are cleared, the appropriate
+    signals are emitted, QTextDocument::undoAvailable() or
+    QTextDocument::redoAvailable().
+
+    \sa QTextDocument::undoAvailable() QTextDocument::redoAvailable()
+*/
+void QTextDocument::clearUndoRedoStacks(Stacks stacksToClear)
+{
+    Q_D(QTextDocument);
+    d->clearUndoRedoStacks(stacksToClear, true);
+}
+
 /*!
     \overload
 
@@ -1679,7 +1704,7 @@
         return;
 
     const QTextDocument *doc = this;
-    QTextDocument *clonedDoc = 0;
+    QScopedPointer<QTextDocument> clonedDoc;
     (void)doc->documentLayout(); // make sure that there is a layout
 
     QRectF body = QRectF(QPointF(0, 0), d->pageSize);
@@ -1712,7 +1737,7 @@
                 printerPageSize.height() / scaledPageSize.height());
     } else {
         doc = clone(const_cast<QTextDocument *>(this));
-        clonedDoc = const_cast<QTextDocument *>(doc);
+        clonedDoc.reset(const_cast<QTextDocument *>(doc));
 
         for (QTextBlock srcBlock = firstBlock(), dstBlock = clonedDoc->firstBlock();
              srcBlock.isValid() && dstBlock.isValid();
@@ -1749,9 +1774,9 @@
     int pageCopies;
     if (printer->collateCopies() == true){
         docCopies = 1;
-        pageCopies = printer->numCopies();
+        pageCopies = printer->supportsMultipleCopies() ? 1 : printer->copyCount();
     } else {
-        docCopies = printer->numCopies();
+        docCopies = printer->supportsMultipleCopies() ? 1 : printer->copyCount();
         pageCopies = 1;
     }
 
@@ -1787,7 +1812,7 @@
             for (int j = 0; j < pageCopies; ++j) {
                 if (printer->printerState() == QPrinter::Aborted
                     || printer->printerState() == QPrinter::Error)
-                    goto UserCanceled;
+                    return;
                 printPage(page, &p, doc, body, pageNumberPos);
                 if (j < pageCopies - 1)
                     printer->newPage();
@@ -1807,9 +1832,6 @@
         if ( i < docCopies - 1)
             printer->newPage();
     }
-
-UserCanceled:
-    delete clonedDoc;
 }
 #endif
 
@@ -1924,6 +1946,10 @@
     }
 #endif
 
+    // handle data: URLs
+    if (r.isNull() && name.scheme().compare(QLatin1String("data"), Qt::CaseInsensitive) == 0)
+        r = qDecodeDataUrl(name).second;
+
     // if resource was not loaded try to load it here
     if (!doc && r.isNull() && name.isRelative()) {
         QUrl currentURL = d->url;