2007-12-17 Tony Chang <idealisms@gmail.com>
authoralp@webkit.org <alp@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 20 Dec 2007 18:09:31 +0000 (18:09 +0000)
committeralp@webkit.org <alp@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 20 Dec 2007 18:09:31 +0000 (18:09 +0000)
        Reviewed by Darin.

        - Fix for http://bugs.webkit.org/show_bug.cgi?id=16479
          text selection does not always begin at mouse down point
          Reset the m_dragSrc object on mouse down on all platforms.

        Test: fast/text/reset-drag-on-mouse-down.html

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

LayoutTests/ChangeLog
LayoutTests/fast/text/reset-drag-on-mouse-down-expected.txt [new file with mode: 0644]
LayoutTests/fast/text/reset-drag-on-mouse-down.html [new file with mode: 0644]
WebCore/ChangeLog
WebCore/page/EventHandler.cpp
WebCore/page/mac/EventHandlerMac.mm

index b656d6ade2e1a9a038c48be4d9b7d2d47ef7911c..15c19a10b5f1849311a424ce166c7b2bc4f005e1 100644 (file)
@@ -1,3 +1,13 @@
+2007-12-17  Tony Chang  <idealisms@gmail.com>
+
+        Reviewed by Darin.
+
+        Test for http://bugs.webkit.org/show_bug.cgi?id=16479
+        Reset the drag state on non-mac platforms.
+
+        * fast/text/reset-drag-on-mouse-down.html: Added.
+        * platform/mac/fast/text/reset-drag-on-mouse-down-expected.txt: Added.
+
 2007-12-19  Geoffrey Garen  <ggaren@apple.com>
 
         Reviewed by Oliver Hunt.
diff --git a/LayoutTests/fast/text/reset-drag-on-mouse-down-expected.txt b/LayoutTests/fast/text/reset-drag-on-mouse-down-expected.txt
new file mode 100644 (file)
index 0000000..26f9721
--- /dev/null
@@ -0,0 +1,7 @@
+Test for bug 16479: text selection does not always begin at mouse down point. To run test manually, click on test link and then try to select some text below. The selected region should start where the mouse down starts.
+
+test link
+
+TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT
+
+SUCCESS
diff --git a/LayoutTests/fast/text/reset-drag-on-mouse-down.html b/LayoutTests/fast/text/reset-drag-on-mouse-down.html
new file mode 100644 (file)
index 0000000..736c5ed
--- /dev/null
@@ -0,0 +1,80 @@
+<script>
+window.onload = function(evt) {
+  if (!window.layoutTestController)
+    return;
+
+  window.layoutTestController.dumpAsText();
+
+  if (-1 == document.location.href.indexOf("?second")) {
+    firstLoad();
+  } else {
+    secondLoad();
+  }
+}
+
+function firstLoad() {
+  window.layoutTestController.waitUntilDone();
+
+  var link_x = document.getElementById("link").offsetLeft;
+  var link_y = document.getElementById("link").offsetTop;
+
+  eventSender.mouseMoveTo(link_x, link_y);
+  eventSender.mouseDown();
+  // The mouse move event causes us to consider starting a drag.
+  eventSender.mouseMoveTo(link_x, link_y + 1);
+  // But we don't move far before mouseup so it counts as a click.
+  eventSender.mouseUp();
+}
+
+function secondLoad() {
+  var text_x = document.getElementById("text").offsetLeft;
+  var text_y = document.getElementById("text").offsetTop;
+
+  eventSender.mouseMoveTo(text_x, text_y);
+  eventSender.mouseDown();
+
+  // Start the selection
+  eventSender.mouseMoveTo(text_x, text_y + 1);
+
+  // Create the selection
+  eventSender.mouseMoveTo(text_x + 100, text_y + 100);
+  eventSender.mouseUp();
+
+  var range = window.getSelection().getRangeAt(0);
+  var result = range.toString().length > 0 ? "SUCCESS" : "FAILED";
+  document.getElementById("result").innerHTML = result;
+
+  window.layoutTestController.notifyDone();
+}
+</script>
+<p>Test for <a href="http://bugs.webkit.org/show_bug.cgi?id=16479">bug
+16479</a>: text selection does not always begin at mouse down point.  To run
+test manually, click on test link and then try to select some text below.  The
+selected region should start where the mouse down starts.</p>
+
+<p><a id="link" href="reset-drag-on-mouse-down.html?second" title="title">test link</a></p>
+
+<p id="text">
+TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT
+TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT
+TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT
+TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT
+TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT
+TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT
+TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT
+TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT
+TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT
+TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT
+TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT
+TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT
+TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT
+TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT
+TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT
+TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT
+TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT
+TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT
+TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT
+TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT
+</p>
+
+<p id="result"></p>
index f246f4708d3bbf62147709f6d77a277e2fd1f622..27cfef8232b6af5ad8b154e00152239dafd426a1 100644 (file)
@@ -1,3 +1,18 @@
+2007-12-17  Tony Chang  <idealisms@gmail.com>
+
+        Reviewed by Darin.
+
+        - Fix for http://bugs.webkit.org/show_bug.cgi?id=16479
+          text selection does not always begin at mouse down point
+          Reset the m_dragSrc object on mouse down on all platforms.
+
+        Test: fast/text/reset-drag-on-mouse-down.html
+
+        * page/EventHandler.cpp:
+        (WebCore::EventHandler::handleMousePressEvent):
+        * page/mac/EventHandlerMac.mm:
+        (WebCore::EventHandler::mouseDown):
+
 2007-12-19  Geoffrey Garen  <ggaren@apple.com>
 
         Reviewed by Oliver Hunt.
index 066116a7c4ffacc7a3cb3e75b538ec8742891e6f..fdbdf76abcffbe115179d496d37ec67337f4b189 100644 (file)
@@ -292,6 +292,9 @@ bool EventHandler::handleMousePressEventSingleClick(const MouseEventWithHitTestR
 
 bool EventHandler::handleMousePressEvent(const MouseEventWithHitTestResults& event)
 {
+    // Reset drag state.
+    dragState().m_dragSrc = 0;
+
     bool singleClick = event.event().clickCount() <= 1;
 
     // If we got the event back, that must mean it wasn't prevented,
index 2e37b74e68d39df6701202dda2f33e1479b92527..ca2f94c7230b4308f90634de9b5cb21351f1cffe 100644 (file)
@@ -470,7 +470,6 @@ void EventHandler::mouseDown(NSEvent *event)
     m_frame->loader()->resetMultipleFormSubmissionProtection();
 
     m_mouseDownView = nil;
-    dragState().m_dragSrc = 0;
     
     RetainPtr<NSEvent> oldCurrentEvent = currentEvent();
     currentEvent() = event;