Fix the incorrect behavior touch sound on single tap event.
authorSanghyup Lee <sh53.lee@samsung.com>
Wed, 22 May 2013 01:49:49 +0000 (10:49 +0900)
committerGerrit Code Review <gerrit2@kim11>
Fri, 24 May 2013 02:00:04 +0000 (11:00 +0900)
[Title] Fix the incorrect behavior touch sound on single tap event.
[Issue#] DCM-1690
[Problem] There is no touch sound when tapped object that has JQuery mobile's vclick event.
[Cause] Link event check that node has Atag, button, input tag or onclick event only.
[Solution] Improve checking routine to decide sound effect on link event.
- Add '!rendererIsEditaple()' for loop conditions to ignore input-text or textarea tags.
- Use supportsFocus() instead of checking Atag, button, input tags to support vclick event.
- Add mouse down, up, over event to play touch sound.
- isRoot() moved because play touch sound when root node has Atags.

Change-Id: Id15eba2895a236715da08d7c853bbbf26c4cab76

Source/WebCore/page/EventHandler.cpp

index 64ac373..087a4b1 100755 (executable)
@@ -508,19 +508,21 @@ bool EventHandler::handleMousePressEventSingleClick(const MouseEventWithHitTestR
     Node* innerNode = targetNode(event);
 
 #if ENABLE(TIZEN_LINK_EFFECT)
-    Node* node = innerNode;
-    RenderObject* renderer;
-    while (node
-        && (renderer = node->renderer())
-        && (!renderer->isRoot())) {
-        if (node->isLink()
-            || node->hasTagName(HTMLNames::aTag)
-            || node->hasTagName(HTMLNames::inputTag)
-            || (!node->hasTagName(HTMLNames::bodyTag) && node->isHTMLElement() && toHTMLElement(node)->hasAttribute(onclickAttr))) {
+    for (Node* node = innerNode; node && !node->disabled() && !node->rendererIsEditable(); node = node->parentNode()) {
+        if (node->hasTagName(HTMLNames::bodyTag))
+            continue;
+
+        if (node->supportsFocus()
+            || node->hasEventListeners(eventNames().clickEvent)
+            || node->hasEventListeners(eventNames().mousedownEvent)
+            || node->hasEventListeners(eventNames().mouseupEvent)
+            || node->hasEventListeners(eventNames().mouseoverEvent)) {
             TizenLinkEffect::playLinkEffect();
             break;
         }
-        node = node->parentNode();
+
+        if (node->renderer() && node->renderer()->isRoot())
+            break;
     }
 #endif