OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2006, 2007 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2007 Apple Inc. All rights reserved. |
3 * Copyright (C) 2008 Nuanti Ltd. | 3 * Copyright (C) 2008 Nuanti Ltd. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 598 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
609 return; | 609 return; |
610 | 610 |
611 if (Node* mousePressNode = newFocusedFrame->eventHandler().mousePressNode())
{ | 611 if (Node* mousePressNode = newFocusedFrame->eventHandler().mousePressNode())
{ |
612 if (mousePressNode->renderer() && !mousePressNode->canStartSelection())
{ | 612 if (mousePressNode->renderer() && !mousePressNode->canStartSelection())
{ |
613 // Don't clear the selection for contentEditable elements, but do cl
ear it for input and textarea. See bug 38696. | 613 // Don't clear the selection for contentEditable elements, but do cl
ear it for input and textarea. See bug 38696. |
614 Node* root = selection.rootEditableElement(); | 614 Node* root = selection.rootEditableElement(); |
615 if (!root) | 615 if (!root) |
616 return; | 616 return; |
617 | 617 |
618 if (Node* shadowAncestorNode = root->deprecatedShadowAncestorNode())
{ | 618 if (Node* shadowAncestorNode = root->deprecatedShadowAncestorNode())
{ |
619 if (!shadowAncestorNode->hasTagName(inputTag) && !shadowAncestor
Node->hasTagName(textareaTag)) | 619 if (!isHTMLInputElement(*shadowAncestorNode) && !isHTMLTextAreaE
lement(*shadowAncestorNode)) |
620 return; | 620 return; |
621 } | 621 } |
622 } | 622 } |
623 } | 623 } |
624 | 624 |
625 selection.clear(); | 625 selection.clear(); |
626 } | 626 } |
627 | 627 |
628 bool FocusController::setFocusedElement(Element* element, PassRefPtr<LocalFrame>
newFocusedFrame, FocusType type) | 628 bool FocusController::setFocusedElement(Element* element, PassRefPtr<LocalFrame>
newFocusedFrame, FocusType type) |
629 { | 629 { |
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
884 | 884 |
885 if (container->isDocumentNode()) | 885 if (container->isDocumentNode()) |
886 toDocument(container)->updateLayoutIgnorePendingStylesheets(); | 886 toDocument(container)->updateLayoutIgnorePendingStylesheets(); |
887 | 887 |
888 // Figure out the starting rect. | 888 // Figure out the starting rect. |
889 LayoutRect startingRect; | 889 LayoutRect startingRect; |
890 if (focusedElement) { | 890 if (focusedElement) { |
891 if (!hasOffscreenRect(focusedElement)) { | 891 if (!hasOffscreenRect(focusedElement)) { |
892 container = scrollableEnclosingBoxOrParentFrameForNodeInDirection(ty
pe, focusedElement); | 892 container = scrollableEnclosingBoxOrParentFrameForNodeInDirection(ty
pe, focusedElement); |
893 startingRect = nodeRectInAbsoluteCoordinates(focusedElement, true /*
ignore border */); | 893 startingRect = nodeRectInAbsoluteCoordinates(focusedElement, true /*
ignore border */); |
894 } else if (focusedElement->hasTagName(areaTag)) { | 894 } else if (isHTMLAreaElement(*focusedElement)) { |
895 HTMLAreaElement* area = toHTMLAreaElement(focusedElement); | 895 HTMLAreaElement& area = toHTMLAreaElement(*focusedElement); |
896 container = scrollableEnclosingBoxOrParentFrameForNodeInDirection(ty
pe, area->imageElement()); | 896 container = scrollableEnclosingBoxOrParentFrameForNodeInDirection(ty
pe, area.imageElement()); |
897 startingRect = virtualRectForAreaElementAndDirection(area, type); | 897 startingRect = virtualRectForAreaElementAndDirection(area, type); |
898 } | 898 } |
899 } | 899 } |
900 | 900 |
901 bool consumed = false; | 901 bool consumed = false; |
902 do { | 902 do { |
903 consumed = advanceFocusDirectionallyInContainer(container, startingRect,
type); | 903 consumed = advanceFocusDirectionallyInContainer(container, startingRect,
type); |
904 startingRect = nodeRectInAbsoluteCoordinates(container, true /* ignore b
order */); | 904 startingRect = nodeRectInAbsoluteCoordinates(container, true /* ignore b
order */); |
905 container = scrollableEnclosingBoxOrParentFrameForNodeInDirection(type,
container); | 905 container = scrollableEnclosingBoxOrParentFrameForNodeInDirection(type,
container); |
906 if (container && container->isDocumentNode()) | 906 if (container && container->isDocumentNode()) |
907 toDocument(container)->updateLayoutIgnorePendingStylesheets(); | 907 toDocument(container)->updateLayoutIgnorePendingStylesheets(); |
908 } while (!consumed && container); | 908 } while (!consumed && container); |
909 | 909 |
910 return consumed; | 910 return consumed; |
911 } | 911 } |
912 | 912 |
913 } // namespace WebCore | 913 } // namespace WebCore |
OLD | NEW |