2006-10-04 Darin Adler <darin@apple.com>
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 3 Oct 2006 18:18:08 +0000 (18:18 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 3 Oct 2006 18:18:08 +0000 (18:18 +0000)
        Reviewed by Geoff.

        - fix http://bugs.webkit.org/show_bug.cgi?id=11132
          Caret disappears when you're typing

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setSelection): Remove unnecessary call to
        clearCaretRectIfNeeded. The recomputeCaretRect now takes care of this.
        (WebCore::SelectionController::recomputeCaretRect): Explicitly set m_needsLayout
        to false so we can get the old caret repaint rect. Later we need to change the
        design so getting the rect doesn't have a side effect of causing a layout without
        invalidation.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@16738 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog
WebCore/editing/SelectionController.cpp

index 09d50a37b377d634527e6b71e18212df68c48de2..80532e334638f9ac05aa5444f1d1ef6a5aa962aa 100644 (file)
@@ -1,3 +1,18 @@
+2006-10-04  Darin Adler  <darin@apple.com>
+
+        Reviewed by Geoff.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=11132
+          Caret disappears when you're typing
+
+        * editing/SelectionController.cpp:
+        (WebCore::SelectionController::setSelection): Remove unnecessary call to
+        clearCaretRectIfNeeded. The recomputeCaretRect now takes care of this.
+        (WebCore::SelectionController::recomputeCaretRect): Explicitly set m_needsLayout
+        to false so we can get the old caret repaint rect. Later we need to change the
+        design so getting the rect doesn't have a side effect of causing a layout without
+        invalidation.
+
 2006-10-03  David Harrison  <harrison@apple.com>
 
         Reviewed by Maciej.
index 2a291b4d761a95d04ad44cf11258b880957bfad3..6f23c1e5051e92f6c52144dd97fe4783058871f4 100644 (file)
@@ -103,8 +103,6 @@ void SelectionController::setSelection(const Selection& s, bool closeTyping, boo
     if (m_sel == s)
         return;
     
-    m_frame->clearCaretRectIfNeeded();
-
     Selection oldSelection = m_sel;
 
     m_sel = s;
@@ -799,8 +797,14 @@ bool SelectionController::recomputeCaretRect()
     if (!m_needsLayout)
         return false;
 
+    // Set m_needsLayout to false to get the "old" repaint rect,
+    // since caretRepaintRect currently recomputes the rect if
+    // m_needsLayout is true. It's a problem if that ever happens
+    // outside this function, so we need to change that design in
+    // the future.
+    m_needsLayout = false;
     IntRect oldRect = caretRepaintRect();
-    layout();
+    m_needsLayout = true;
     IntRect newRect = caretRepaintRect();
     if (oldRect == newRect)
         return false;