Title: [103097] trunk/Source/WebKit2
Revision
103097
Author
commit-qu...@webkit.org
Date
2011-12-16 12:55:10 -0800 (Fri, 16 Dec 2011)

Log Message

[Qt] Eliminate dependency to QUndoStack
https://bugs.webkit.org/show_bug.cgi?id=74691

Patch by Simon Hausmann <simon.hausm...@nokia.com> on 2011-12-16
Reviewed by Kenneth Rohde Christiansen.

Replaced the QUndoStack with two vectors. When calling unapply()
on the edit command proxy, it will automatically re-register itself
in the redo stack.

* UIProcess/qt/QtWebUndoController.cpp:
(QtWebUndoController::registerEditCommand):
(QtWebUndoController::clearAllEditCommands):
(QtWebUndoController::canUndoRedo):
(QtWebUndoController::executeUndoRedo):
* UIProcess/qt/QtWebUndoController.h:

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (103096 => 103097)


--- trunk/Source/WebKit2/ChangeLog	2011-12-16 20:50:31 UTC (rev 103096)
+++ trunk/Source/WebKit2/ChangeLog	2011-12-16 20:55:10 UTC (rev 103097)
@@ -1,3 +1,21 @@
+2011-12-16  Simon Hausmann  <simon.hausm...@nokia.com>
+
+        [Qt] Eliminate dependency to QUndoStack
+        https://bugs.webkit.org/show_bug.cgi?id=74691
+
+        Reviewed by Kenneth Rohde Christiansen.
+
+        Replaced the QUndoStack with two vectors. When calling unapply()
+        on the edit command proxy, it will automatically re-register itself
+        in the redo stack.
+
+        * UIProcess/qt/QtWebUndoController.cpp:
+        (QtWebUndoController::registerEditCommand):
+        (QtWebUndoController::clearAllEditCommands):
+        (QtWebUndoController::canUndoRedo):
+        (QtWebUndoController::executeUndoRedo):
+        * UIProcess/qt/QtWebUndoController.h:
+
 2011-12-16  Rafael Brandao  <rafael.l...@openbossa.org>
 
         [Qt][WK2] Move webView.page into experimental

Modified: trunk/Source/WebKit2/UIProcess/qt/QtWebUndoController.cpp (103096 => 103097)


--- trunk/Source/WebKit2/UIProcess/qt/QtWebUndoController.cpp	2011-12-16 20:50:31 UTC (rev 103096)
+++ trunk/Source/WebKit2/UIProcess/qt/QtWebUndoController.cpp	2011-12-16 20:55:10 UTC (rev 103097)
@@ -21,96 +21,43 @@
 #include "config.h"
 #include "QtWebUndoController.h"
 
-#include "WebEditCommandProxy.h"
 #include <qglobal.h>
 #include <wtf/RefPtr.h>
 
 using namespace WebKit;
 
-class QtWebUndoCommand : public QUndoCommand {
-public:
-    QtWebUndoCommand(PassRefPtr<WebEditCommandProxy>, QUndoCommand* parent = 0);
-    ~QtWebUndoCommand();
-
-    void redo();
-    void undo();
-
-    bool inUndoRedo() const { return m_inUndoRedo; };
-
-private:
-    RefPtr<WebEditCommandProxy> m_command;
-    bool m_first;
-    bool m_inUndoRedo;
-};
-
-QtWebUndoCommand::QtWebUndoCommand(PassRefPtr<WebEditCommandProxy> command, QUndoCommand* parent)
-    : QUndoCommand(parent)
-    , m_command(command)
-    , m_first(true)
-    , m_inUndoRedo(false)
-{
-}
-
-QtWebUndoCommand::~QtWebUndoCommand()
-{
-}
-
-void QtWebUndoCommand::redo()
-{
-    m_inUndoRedo = true;
-
-    // Ignore the first redo called from QUndoStack::push().
-    if (m_first) {
-        m_first = false;
-        m_inUndoRedo = false;
-        return;
-    }
-    if (m_command)
-        m_command->reapply();
-
-    m_inUndoRedo = false;
-}
-
-void QtWebUndoCommand::undo()
-{
-    m_inUndoRedo = true;
-
-    if (m_command)
-        m_command->unapply();
-
-    m_inUndoRedo = false;
-}
-
-QtWebUndoController::QtWebUndoController()
-{
-}
-
 void QtWebUndoController::registerEditCommand(PassRefPtr<WebEditCommandProxy> command, WebPageProxy::UndoOrRedo undoOrRedo)
 {
-    if (undoOrRedo == WebPageProxy::Undo) {
-        const QtWebUndoCommand* webUndoCommand = static_cast<const QtWebUndoCommand*>(m_undoStack.command(m_undoStack.index()));
-        if (webUndoCommand && webUndoCommand->inUndoRedo())
-            return;
-        m_undoStack.push(new QtWebUndoCommand(command));
-    }
+    if (undoOrRedo == WebPageProxy::Undo)
+        m_undoStack.append(command);
+    else
+        m_redoStack.append(command);
 }
 
 void QtWebUndoController::clearAllEditCommands()
 {
     m_undoStack.clear();
+    m_redoStack.clear();
 }
 
 bool QtWebUndoController::canUndoRedo(WebPageProxy::UndoOrRedo undoOrRedo)
 {
     if (undoOrRedo == WebPageProxy::Undo)
-        return m_undoStack.canUndo();
-    return m_undoStack.canRedo();
+        return !m_undoStack.isEmpty();
+    else
+        return !m_redoStack.isEmpty();
 }
 
 void QtWebUndoController::executeUndoRedo(WebPageProxy::UndoOrRedo undoOrRedo)
 {
-    if (undoOrRedo == WebPageProxy::Undo)
-        m_undoStack.undo();
-    else
-        m_undoStack.redo();
+    RefPtr<WebEditCommandProxy> command;
+    if (undoOrRedo == WebPageProxy::Undo) {
+        command = m_undoStack.last();
+        m_undoStack.removeLast();
+        command->unapply();
+    } else {
+        command = m_redoStack.last();
+        m_redoStack.removeLast();
+        command->reapply();
+    }
 }

Modified: trunk/Source/WebKit2/UIProcess/qt/QtWebUndoController.h (103096 => 103097)


--- trunk/Source/WebKit2/UIProcess/qt/QtWebUndoController.h	2011-12-16 20:50:31 UTC (rev 103096)
+++ trunk/Source/WebKit2/UIProcess/qt/QtWebUndoController.h	2011-12-16 20:55:10 UTC (rev 103097)
@@ -22,23 +22,20 @@
 #define QtWebUndoController_h
 
 #include "PageClient.h"
+#include "WebEditCommandProxy.h"
 #include "WebPageProxy.h"
-#include <QUndoStack>
 
 class QtWebUndoController {
 public:
-    QtWebUndoController();
-
-private:
-    friend class QtPageClient;
-
     // Page Client.
     void registerEditCommand(PassRefPtr<WebKit::WebEditCommandProxy>, WebKit::WebPageProxy::UndoOrRedo);
     void clearAllEditCommands();
     bool canUndoRedo(WebKit::WebPageProxy::UndoOrRedo);
     void executeUndoRedo(WebKit::WebPageProxy::UndoOrRedo);
 
-    QUndoStack m_undoStack;
+    typedef Vector<RefPtr<WebKit::WebEditCommandProxy> > CommandVector;
+    CommandVector m_undoStack;
+    CommandVector m_redoStack;
 };
 
 #endif // QtWebUndoController_h
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to