2007-07-04 Mitz Pettel <mitz@webkit.org>
authorbdash <bdash@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 4 Jul 2007 10:56:08 +0000 (10:56 +0000)
committerbdash <bdash@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 4 Jul 2007 10:56:08 +0000 (10:56 +0000)
        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14495
          REGRESSION: Wrong cursor is displayed during drag and drop when text is selected
          <rdar://problem/5312384>

        No test possible because DumpRenderTree cannot query the current cursor.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectCursor): Changed into a member function and
        added that if the last mouse down event could not have started a
        selection, then the cursor should not change to an I-beam unconditionally.
        (WebCore::EventHandler::handleMouseMoveEvent):
        * page/EventHandler.h:

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

WebCore/ChangeLog
WebCore/page/EventHandler.cpp
WebCore/page/EventHandler.h

index 633f28b..89533f1 100644 (file)
@@ -1,3 +1,20 @@
+2007-07-04  Mitz Pettel  <mitz@webkit.org>
+
+        Reviewed by Maciej.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=14495
+          REGRESSION: Wrong cursor is displayed during drag and drop when text is selected
+          <rdar://problem/5312384>
+
+        No test possible because DumpRenderTree cannot query the current cursor.
+
+        * page/EventHandler.cpp:
+        (WebCore::EventHandler::selectCursor): Changed into a member function and
+        added that if the last mouse down event could not have started a
+        selection, then the cursor should not change to an I-beam unconditionally.
+        (WebCore::EventHandler::handleMouseMoveEvent):
+        * page/EventHandler.h:
+
 2007-07-04  Holger Hans Peter Freyther  <zecke@selfish.org>
 
         Reviewed by Rob Buis.
index 8e56b78..af55c81 100644 (file)
@@ -636,12 +636,11 @@ static bool nodeIsNotBeingEdited(Node* node, Frame* frame)
     return frame->selectionController()->rootEditableElement() != node->rootEditableElement();
 }
 
-// FIXME: We should consider making this a member function now that we're passing in more info about the object.
-static Cursor selectCursor(const MouseEventWithHitTestResults& event, Frame* frame, bool mousePressed, PlatformScrollbar* scrollbar, bool capturingMouseEvents)
+Cursor EventHandler::selectCursor(const MouseEventWithHitTestResults& event, PlatformScrollbar* scrollbar)
 {
     // During selection, use an I-beam no matter what we're over.
     // If you're capturing mouse events for a particular node, don't treat this as a selection.
-    if (mousePressed && frame->selectionController()->isCaretOrRange() && !capturingMouseEvents)
+    if (m_mousePressed && m_mouseDownMayStartSelect && m_frame->selectionController()->isCaretOrRange() && !m_capturingMouseEventsNode)
         return iBeamCursor();
 
     Node* node = event.targetNode();
@@ -679,8 +678,8 @@ static Cursor selectCursor(const MouseEventWithHitTestResults& event, Frame* fra
 
             // If the link is editable, then we need to check the settings to see whether or not the link should be followed
             if (editable) {
-                ASSERT(frame->settings());
-                switch(frame->settings()->editableLinkBehavior()) {
+                ASSERT(m_frame->settings());
+                switch(m_frame->settings()->editableLinkBehavior()) {
                     default:
                     case EditableLinkDefaultBehavior:
                     case EditableLinkAlwaysLive:
@@ -692,7 +691,7 @@ static Cursor selectCursor(const MouseEventWithHitTestResults& event, Frame* fra
                         break;
 
                     case EditableLinkLiveWhenNotFocused:
-                        editableLinkEnabled = nodeIsNotBeingEdited(node, frame) || event.event().shiftKey();
+                        editableLinkEnabled = nodeIsNotBeingEdited(node, m_frame) || event.event().shiftKey();
                         break;
                     
                     case EditableLinkOnlyLiveWithShiftKey:
@@ -705,7 +704,7 @@ static Cursor selectCursor(const MouseEventWithHitTestResults& event, Frame* fra
                 return handCursor();
             RenderLayer* layer = renderer ? renderer->enclosingLayer() : 0;
             bool inResizer = false;
-            if (frame->view() && layer && layer->isPointInResizeControl(frame->view()->windowToContents(event.event().pos())))
+            if (m_frame->view() && layer && layer->isPointInResizeControl(m_frame->view()->windowToContents(event.event().pos())))
                 inResizer = true;
             if ((editable || (renderer && renderer->isText() && renderer->canSelect())) && !inResizer && !scrollbar)
                 return iBeamCursor();
@@ -962,7 +961,7 @@ bool EventHandler::handleMouseMoveEvent(const PlatformMouseEvent& mouseEvent)
         if (scrollbar && !m_mousePressed)
             scrollbar->handleMouseMoveEvent(mouseEvent); // Handle hover effects on platforms that support visual feedback on scrollbar hovering.
         if ((!m_resizeLayer || !m_resizeLayer->inResizeMode()) && m_frame->view())
-            m_frame->view()->setCursor(selectCursor(mev, m_frame, m_mousePressed, scrollbar, m_capturingMouseEventsNode));
+            m_frame->view()->setCursor(selectCursor(mev, scrollbar));
     }
     
     m_lastMouseMoveEventSubframe = newSubframe;
index 07313f6..94d555d 100644 (file)
@@ -48,6 +48,7 @@ namespace WebCore {
 
 class AtomicString;
 class Clipboard;
+class Cursor;
 class EventTargetNode;
 class Event;
 class FloatPoint;
@@ -187,6 +188,8 @@ private:
     bool handleMouseDraggedEvent(const MouseEventWithHitTestResults&);
     bool handleMouseReleaseEvent(const MouseEventWithHitTestResults&);
 
+    Cursor selectCursor(const MouseEventWithHitTestResults&, PlatformScrollbar*);
+
     void hoverTimerFired(Timer<EventHandler>*);
 
     static bool canMouseDownStartSelect(Node*);