Changeset 160966 in webkit
- Timestamp:
- Dec 21, 2013, 10:51:04 AM (11 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 51 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r160961 r160966 1 2013-12-21 Antti Koivisto <antti@apple.com> 2 3 Figure out if node is focusable without requiring renderer 4 https://bugs.webkit.org/show_bug.cgi?id=126118 5 6 Reviewed by Andreas Kling. 7 8 * dom/Element.cpp: 9 (WebCore::Element::computedStyle): 10 11 Use inDocument() test instead of the attached() test. We can compute style for anything that 12 is in document. 13 14 * dom/Node.cpp: 15 (WebCore::Node::isContentEditable): 16 (WebCore::Node::isContentRichlyEditable): 17 (WebCore::Node::hasEditableStyle): 18 19 Use computedStyle instead of getting the style from renderer. Computed style gets constructed 20 on demand if renderer does not exist. If it does then the existing style is used. 21 22 (WebCore::Node::isEditableToAccessibility): 23 (WebCore::Node::canStartSelection): 24 (WebCore::Node::isRootEditableElement): 25 (WebCore::Node::rootEditableElement): 26 * dom/Node.h: 27 (WebCore::Node::hasEditableStyle): 28 (WebCore::Node::hasRichlyEditableStyle): 29 30 Renamed from rendererIsEditable since these no longer require renderer. 31 32 (WebCore::HTMLElement::supportsFocus): 33 34 Stop calling updateStyleIfNeeded() and forcing render tree construction. 35 1 36 2013-12-21 Carlos Garcia Campos <cgarcia@igalia.com> 2 37 -
trunk/Source/WebCore/accessibility/AccessibilityNodeObject.cpp
r160789 r160966 151 151 152 152 // If this element is an ARIA text control, notify the AT of changes. 153 if (parent->isARIATextControl() && !parent->isNativeTextControl() && !parent->node()-> rendererIsEditable())153 if (parent->isARIATextControl() && !parent->isNativeTextControl() && !parent->node()->hasEditableStyle()) 154 154 axObjectCache()->postNotification(parent, parent->document(), AXObjectCache::AXValueChanged); 155 155 } … … 738 738 } 739 739 740 return !node-> rendererIsEditable();740 return !node->hasEditableStyle(); 741 741 } 742 742 … … 2049 2049 } 2050 2050 2051 // If you call node-> rendererIsEditable() since that will return true if an ancestor is editable.2051 // If you call node->hasEditableStyle() since that will return true if an ancestor is editable. 2052 2052 // This only returns true if this is the element that actually has the contentEditable attribute set. 2053 2053 bool AccessibilityNodeObject::hasContentEditableAttributeSet() const -
trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp
r160916 r160966 543 543 if (isWebArea()) { 544 544 if (HTMLElement* body = m_renderer->document().body()) { 545 if (body-> rendererIsEditable())545 if (body->hasEditableStyle()) 546 546 return false; 547 547 } 548 548 549 return !m_renderer->document(). rendererIsEditable();549 return !m_renderer->document().hasEditableStyle(); 550 550 } 551 551 … … 1256 1256 1257 1257 // Anything that is content editable should not be ignored. 1258 // However, one cannot just call node-> rendererIsEditable() since that will ask if its parents1258 // However, one cannot just call node->hasEditableStyle() since that will ask if its parents 1259 1259 // are also editable. Only the top level content editable region should be exposed. 1260 1260 if (hasContentEditableAttributeSet()) … … 2745 2745 cache->postNotification(renderParent, AXObjectCache::AXLiveRegionChanged); 2746 2746 2747 if (parent->isARIATextControl() && !parent->isNativeTextControl() && !parent->node()-> rendererIsEditable())2747 if (parent->isARIATextControl() && !parent->isNativeTextControl() && !parent->node()->hasEditableStyle()) 2748 2748 cache->postNotification(renderParent, AXObjectCache::AXValueChanged); 2749 2749 } -
trunk/Source/WebCore/accessibility/AccessibilityTable.cpp
r160598 r160966 103 103 // treated as data tables, otherwise users may not be able to work with rich 104 104 // text editors that allow creating and editing tables. 105 if (node() && node()-> rendererIsEditable())105 if (node() && node()->hasEditableStyle()) 106 106 return true; 107 107 -
trunk/Source/WebCore/dom/Document.cpp
r160908 r160966 329 329 { 330 330 ASSERT(node); 331 ASSERT(node-> rendererIsEditable());331 ASSERT(node->hasEditableStyle()); 332 332 333 333 Node* root = node->rootEditableElement(); -
trunk/Source/WebCore/dom/Element.cpp
r160908 r160966 2149 2149 } 2150 2150 2151 if (! attached()) {2151 if (!inDocument()) { 2152 2152 // FIXME: Try to do better than this. Ensure that styleForElement() works for elements that are not in the 2153 2153 // document tree and figure out when to destroy the computed style for such elements. -
trunk/Source/WebCore/dom/Node.cpp
r160908 r160966 57 57 #include "Logging.h" 58 58 #include "MutationEvent.h" 59 #include "NodeRenderStyle.h" 59 60 #include "PlatformMouseEvent.h" 60 61 #include "PlatformWheelEvent.h" … … 544 545 { 545 546 document().updateStyleIfNeeded(); 546 return rendererIsEditable(Editable, treatment);547 return hasEditableStyle(Editable, treatment); 547 548 } 548 549 … … 550 551 { 551 552 document().updateStyleIfNeeded(); 552 return rendererIsEditable(RichlyEditable, UserSelectAllIsAlwaysNonEditable);553 return hasEditableStyle(RichlyEditable, UserSelectAllIsAlwaysNonEditable); 553 554 } 554 555 … … 561 562 } 562 563 563 bool Node::rendererIsEditable(EditableLevel editableLevel, UserSelectAllTreatment treatment) const 564 { 564 bool Node::hasEditableStyle(EditableLevel editableLevel, UserSelectAllTreatment treatment) const 565 { 566 if (!document().hasLivingRenderTree()) 567 return false; 565 568 if (document().frame() && document().frame()->page() && document().frame()->page()->isEditable() && !containingShadowRoot()) 566 569 return true; … … 574 577 575 578 for (const Node* node = this; node; node = node->parentNode()) { 576 if ((node->isHTMLElement() || node->isDocumentNode()) && node->renderer()) { 579 RenderStyle* style = node->isDocumentNode() ? node->renderStyle() : const_cast<Node*>(node)->computedStyle(); 580 if (!style) 581 continue; 582 if (style->display() == NONE) 583 continue; 577 584 #if ENABLE(USERSELECT_ALL) 578 579 580 if (treatment == UserSelectAllIsAlwaysNonEditable && node->renderer()->style().userSelect() == SELECT_ALL)581 585 // Elements with user-select: all style are considered atomic 586 // therefore non editable. 587 if (treatment == UserSelectAllIsAlwaysNonEditable && style->userSelect() == SELECT_ALL) 588 return false; 582 589 #else 583 UNUSED_PARAM(treatment); 584 #endif 585 switch (node->renderer()->style().userModify()) { 586 case READ_ONLY: 587 return false; 588 case READ_WRITE: 589 return true; 590 case READ_WRITE_PLAINTEXT_ONLY: 591 return editableLevel != RichlyEditable; 592 } 593 ASSERT_NOT_REACHED(); 590 UNUSED_PARAM(treatment); 591 #endif 592 switch (style->userModify()) { 593 case READ_ONLY: 594 594 return false; 595 } 596 } 597 595 case READ_WRITE: 596 return true; 597 case READ_WRITE_PLAINTEXT_ONLY: 598 return editableLevel != RichlyEditable; 599 } 600 ASSERT_NOT_REACHED(); 601 return false; 602 } 598 603 return false; 599 604 } … … 601 606 bool Node::isEditableToAccessibility(EditableLevel editableLevel) const 602 607 { 603 if ( rendererIsEditable(editableLevel))608 if (hasEditableStyle(editableLevel)) 604 609 return true; 605 610 … … 922 927 bool Node::canStartSelection() const 923 928 { 924 if ( rendererIsEditable())929 if (hasEditableStyle()) 925 930 return true; 926 931 … … 1018 1023 bool Node::isRootEditableElement() const 1019 1024 { 1020 return rendererIsEditable() && isElementNode() && (!parentNode() || !parentNode()->rendererIsEditable()1025 return hasEditableStyle() && isElementNode() && (!parentNode() || !parentNode()->hasEditableStyle() 1021 1026 || !parentNode()->isElementNode() || hasTagName(bodyTag)); 1022 1027 } … … 1035 1040 { 1036 1041 Element* result = 0; 1037 for (Node* n = const_cast<Node*>(this); n && n-> rendererIsEditable(); n = n->parentNode()) {1042 for (Node* n = const_cast<Node*>(this); n && n->hasEditableStyle(); n = n->parentNode()) { 1038 1043 if (n->isElementNode()) 1039 1044 result = toElement(n); -
trunk/Source/WebCore/dom/Node.h
r160928 r160966 342 342 void inspect(); 343 343 344 bool rendererIsEditable(EditableType editableType = ContentIsEditable, UserSelectAllTreatment treatment = UserSelectAllIsAlwaysNonEditable) const344 bool hasEditableStyle(EditableType editableType = ContentIsEditable, UserSelectAllTreatment treatment = UserSelectAllIsAlwaysNonEditable) const 345 345 { 346 346 switch (editableType) { 347 347 case ContentIsEditable: 348 return rendererIsEditable(Editable, treatment);348 return hasEditableStyle(Editable, treatment); 349 349 case HasEditableAXRole: 350 350 return isEditableToAccessibility(Editable); … … 354 354 } 355 355 356 bool rendererIsRichlyEditable(EditableType editableType = ContentIsEditable) const356 bool hasRichlyEditableStyle(EditableType editableType = ContentIsEditable) const 357 357 { 358 358 switch (editableType) { 359 359 case ContentIsEditable: 360 return rendererIsEditable(RichlyEditable, UserSelectAllIsAlwaysNonEditable);360 return hasEditableStyle(RichlyEditable, UserSelectAllIsAlwaysNonEditable); 361 361 case HasEditableAXRole: 362 362 return isEditableToAccessibility(RichlyEditable); … … 655 655 656 656 enum EditableLevel { Editable, RichlyEditable }; 657 bool rendererIsEditable(EditableLevel, UserSelectAllTreatment = UserSelectAllIsAlwaysNonEditable) const;657 bool hasEditableStyle(EditableLevel, UserSelectAllTreatment = UserSelectAllIsAlwaysNonEditable) const; 658 658 bool isEditableToAccessibility(EditableLevel) const; 659 659 -
trunk/Source/WebCore/dom/Position.cpp
r158842 r160966 68 68 while ((node = nextLeafNode(node))) { 69 69 RenderObject* renderer = node->renderer(); 70 if (!renderer || !node-> rendererIsEditable())70 if (!renderer || !node->hasEditableStyle()) 71 71 continue; 72 72 if (hasInlineBoxWrapper(*renderer)) … … 80 80 while ((node = previousLeafNode(node))) { 81 81 RenderObject* renderer = node->renderer(); 82 if (!renderer || !node-> rendererIsEditable())82 if (!renderer || !node->hasEditableStyle()) 83 83 continue; 84 84 if (hasInlineBoxWrapper(*renderer)) … … 435 435 { 436 436 Position nextPosition = downstream(CanCrossEditingBoundary); 437 if (atFirstEditingPositionForNode() && nextPosition.isNotNull() && !nextPosition.deprecatedNode()-> rendererIsEditable())437 if (atFirstEditingPositionForNode() && nextPosition.isNotNull() && !nextPosition.deprecatedNode()->hasEditableStyle()) 438 438 return true; 439 439 440 440 Position prevPosition = upstream(CanCrossEditingBoundary); 441 if (atLastEditingPositionForNode() && prevPosition.isNotNull() && !prevPosition.deprecatedNode()-> rendererIsEditable())441 if (atLastEditingPositionForNode() && prevPosition.isNotNull() && !prevPosition.deprecatedNode()->hasEditableStyle()) 442 442 return true; 443 443 444 return nextPosition.isNotNull() && !nextPosition.deprecatedNode()-> rendererIsEditable()445 && prevPosition.isNotNull() && !prevPosition.deprecatedNode()-> rendererIsEditable();444 return nextPosition.isNotNull() && !nextPosition.deprecatedNode()->hasEditableStyle() 445 && prevPosition.isNotNull() && !prevPosition.deprecatedNode()->hasEditableStyle(); 446 446 } 447 447 … … 456 456 457 457 Node* boundary = m_anchorNode.get(); 458 while (boundary != documentElement && boundary->nonShadowBoundaryParentNode() && m_anchorNode-> rendererIsEditable() == boundary->parentNode()->rendererIsEditable())458 while (boundary != documentElement && boundary->nonShadowBoundaryParentNode() && m_anchorNode->hasEditableStyle() == boundary->parentNode()->hasEditableStyle()) 459 459 boundary = boundary->nonShadowBoundaryParentNode(); 460 460 … … 591 591 PositionIterator lastVisible = m_anchorType == PositionIsAfterAnchor ? createLegacyEditingPosition(m_anchorNode.get(), caretMaxOffset(m_anchorNode.get())) : *this; 592 592 PositionIterator currentPos = lastVisible; 593 bool startEditable = startNode-> rendererIsEditable();593 bool startEditable = startNode->hasEditableStyle(); 594 594 Node* lastNode = startNode; 595 595 bool boundaryCrossed = false; … … 598 598 599 599 // Don't check for an editability change if we haven't moved to a different node, 600 // to avoid the expense of computing rendererIsEditable().600 // to avoid the expense of computing hasEditableStyle(). 601 601 if (currentNode != lastNode) { 602 602 // Don't change editability. 603 bool currentEditable = currentNode-> rendererIsEditable();603 bool currentEditable = currentNode->hasEditableStyle(); 604 604 if (startEditable != currentEditable) { 605 605 if (rule == CannotCrossEditingBoundary) … … 718 718 PositionIterator lastVisible = m_anchorType == PositionIsAfterAnchor ? createLegacyEditingPosition(m_anchorNode.get(), caretMaxOffset(m_anchorNode.get())) : *this; 719 719 PositionIterator currentPos = lastVisible; 720 bool startEditable = startNode-> rendererIsEditable();720 bool startEditable = startNode->hasEditableStyle(); 721 721 Node* lastNode = startNode; 722 722 bool boundaryCrossed = false; … … 725 725 726 726 // Don't check for an editability change if we haven't moved to a different node, 727 // to avoid the expense of computing rendererIsEditable().727 // to avoid the expense of computing hasEditableStyle(). 728 728 if (currentNode != lastNode) { 729 729 // Don't change editability. 730 bool currentEditable = currentNode-> rendererIsEditable();730 bool currentEditable = currentNode->hasEditableStyle(); 731 731 if (startEditable != currentEditable) { 732 732 if (rule == CannotCrossEditingBoundary) … … 943 943 if (!Position::hasRenderedNonAnonymousDescendantsWithHeight(block)) 944 944 return atFirstEditingPositionForNode() && !Position::nodeIsUserSelectNone(deprecatedNode()); 945 return m_anchorNode-> rendererIsEditable() && !Position::nodeIsUserSelectNone(deprecatedNode()) && atEditingBoundary();945 return m_anchorNode->hasEditableStyle() && !Position::nodeIsUserSelectNone(deprecatedNode()) && atEditingBoundary(); 946 946 } 947 947 } else 948 return m_anchorNode-> rendererIsEditable() && !Position::nodeIsUserSelectNone(deprecatedNode()) && atEditingBoundary();948 return m_anchorNode->hasEditableStyle() && !Position::nodeIsUserSelectNone(deprecatedNode()) && atEditingBoundary(); 949 949 950 950 return false; -
trunk/Source/WebCore/dom/PositionIterator.cpp
r158617 r160966 166 166 if (!Position::hasRenderedNonAnonymousDescendantsWithHeight(block)) 167 167 return atStartOfNode() && !Position::nodeIsUserSelectNone(m_anchorNode); 168 return m_anchorNode-> rendererIsEditable() && !Position::nodeIsUserSelectNone(m_anchorNode) && Position(*this).atEditingBoundary();168 return m_anchorNode->hasEditableStyle() && !Position::nodeIsUserSelectNone(m_anchorNode) && Position(*this).atEditingBoundary(); 169 169 } 170 170 } -
trunk/Source/WebCore/editing/AppendNodeCommand.cpp
r160908 r160966 43 43 ASSERT(!m_node->parentNode()); 44 44 45 ASSERT(m_parent-> rendererIsEditable() || !m_parent->attached());45 ASSERT(m_parent->hasEditableStyle() || !m_parent->attached()); 46 46 } 47 47 … … 59 59 void AppendNodeCommand::doApply() 60 60 { 61 if (!m_parent-> rendererIsEditable() && m_parent->attached())61 if (!m_parent->hasEditableStyle() && m_parent->attached()) 62 62 return; 63 63 … … 70 70 void AppendNodeCommand::doUnapply() 71 71 { 72 if (!m_parent-> rendererIsEditable())72 if (!m_parent->hasEditableStyle()) 73 73 return; 74 74 -
trunk/Source/WebCore/editing/ApplyStyleCommand.cpp
r160598 r160966 712 712 static bool containsNonEditableRegion(Node* node) 713 713 { 714 if (!node-> rendererIsEditable())714 if (!node->hasEditableStyle()) 715 715 return true; 716 716 717 717 Node* sibling = NodeTraversal::nextSkippingChildren(node); 718 718 for (Node* descendent = node->firstChild(); descendent && descendent != sibling; descendent = NodeTraversal::next(descendent)) { 719 if (!descendent-> rendererIsEditable())719 if (!descendent->hasEditableStyle()) 720 720 return true; 721 721 } … … 758 758 next = NodeTraversal::next(node.get()); 759 759 760 if (!node->renderer() || !node-> rendererIsEditable())760 if (!node->renderer() || !node->hasEditableStyle()) 761 761 continue; 762 762 763 if (!node-> rendererIsRichlyEditable() && node->isHTMLElement()) {763 if (!node->hasRichlyEditableStyle() && node->isHTMLElement()) { 764 764 // This is a plaintext-only region. Only proceed if it's fully selected. 765 765 // pastEndNode is the node after the last fully selected node, so if it's inside node then … … 781 781 782 782 if (node->childNodeCount()) { 783 if (node->contains(pastEndNode.get()) || containsNonEditableRegion(node.get()) || !node->parentNode()-> rendererIsEditable())783 if (node->contains(pastEndNode.get()) || containsNonEditableRegion(node.get()) || !node->parentNode()->hasEditableStyle()) 784 784 continue; 785 785 if (editingIgnoresContent(node.get())) { … … 1361 1361 RefPtr<Node> nextSibling = element->nextSibling(); 1362 1362 RefPtr<Node> previousSibling = element->previousSibling(); 1363 if (nextSibling && nextSibling->isElementNode() && nextSibling-> rendererIsEditable()1363 if (nextSibling && nextSibling->isElementNode() && nextSibling->hasEditableStyle() 1364 1364 && areIdenticalElements(element.get(), toElement(nextSibling.get()))) 1365 1365 mergeIdenticalElements(element.get(), toElement(nextSibling.get())); 1366 1366 1367 if (previousSibling && previousSibling->isElementNode() && previousSibling-> rendererIsEditable()) {1367 if (previousSibling && previousSibling->isElementNode() && previousSibling->hasEditableStyle()) { 1368 1368 Node* mergedElement = previousSibling->nextSibling(); 1369 if (mergedElement->isElementNode() && mergedElement-> rendererIsEditable()1369 if (mergedElement->isElementNode() && mergedElement->hasEditableStyle() 1370 1370 && areIdenticalElements(toElement(previousSibling.get()), toElement(mergedElement))) 1371 1371 mergeIdenticalElements(toElement(previousSibling.get()), toElement(mergedElement)); -
trunk/Source/WebCore/editing/CompositeEditCommand.cpp
r160908 r160966 1279 1279 if (!listNode 1280 1280 || (!listNode->hasTagName(ulTag) && !listNode->hasTagName(olTag)) 1281 || !listNode-> rendererIsEditable()1281 || !listNode->hasEditableStyle() 1282 1282 || listNode == emptyListItem->rootEditableElement()) 1283 1283 return false; -
trunk/Source/WebCore/editing/DeleteButtonController.cpp
r160596 r160966 62 62 static bool isDeletableElement(const Node* node) 63 63 { 64 if (!node || !node->isHTMLElement() || !node->inDocument() || !node-> rendererIsEditable())64 if (!node || !node->isHTMLElement() || !node->inDocument() || !node->hasEditableStyle()) 65 65 return false; 66 66 … … 153 153 // The enclosingNodeOfType function only works on nodes that are editable 154 154 // (which is strange, given its name). 155 if (!container-> rendererIsEditable())155 if (!container->hasEditableStyle()) 156 156 return 0; 157 157 -
trunk/Source/WebCore/editing/DeleteFromTextNodeCommand.cpp
r154938 r160966 68 68 ASSERT(m_node); 69 69 70 if (!m_node-> rendererIsEditable())70 if (!m_node->hasEditableStyle()) 71 71 return; 72 72 -
trunk/Source/WebCore/editing/DeleteSelectionCommand.cpp
r158815 r160966 341 341 ASSERT(node); 342 342 Node* next = node; 343 while (next && !next-> rendererIsEditable())343 while (next && !next->hasEditableStyle()) 344 344 next = NodeTraversal::next(next, node); 345 345 return next ? firstPositionInOrBeforeNode(next) : Position(); … … 353 353 if (m_startRoot != m_endRoot && !(node->isDescendantOf(m_startRoot.get()) && node->isDescendantOf(m_endRoot.get()))) { 354 354 // If a node is not in both the start and end editable roots, remove it only if its inside an editable region. 355 if (!node->parentNode()-> rendererIsEditable()) {355 if (!node->parentNode()->hasEditableStyle()) { 356 356 // Don't remove non-editable atomic nodes. 357 357 if (!node->firstChild()) -
trunk/Source/WebCore/editing/EditingStyle.cpp
r159856 r160966 689 689 bool nodeIsStart = true; 690 690 for (Node* node = selection.start().deprecatedNode(); node; node = NodeTraversal::next(node)) { 691 if (node->renderer() && node-> rendererIsEditable()) {691 if (node->renderer() && node->hasEditableStyle()) { 692 692 ComputedStyleExtractor computedStyle(node); 693 693 TriState nodeState = triStateOfStyle(&computedStyle, node->isTextNode() ? EditingStyle::DoNotIgnoreTextOnlyProperties : EditingStyle::IgnoreTextOnlyProperties); -
trunk/Source/WebCore/editing/Editor.cpp
r160045 r160966 313 313 return false; 314 314 315 if (!startContainer-> rendererIsEditable() || !endContainer->rendererIsEditable())315 if (!startContainer->hasEditableStyle() || !endContainer->hasEditableStyle()) 316 316 return false; 317 317 … … 2075 2075 // If we're not in an editable node, bail. 2076 2076 Node* editableNode = searchRange->startContainer(); 2077 if (!editableNode || !editableNode-> rendererIsEditable())2077 if (!editableNode || !editableNode->hasEditableStyle()) 2078 2078 return; 2079 2079 … … 2144 2144 // If we're not in an editable node, bail. 2145 2145 Node* editableNode = spellingRange->startContainer(); 2146 if (!editableNode || !editableNode-> rendererIsEditable())2146 if (!editableNode || !editableNode->hasEditableStyle()) 2147 2147 return; 2148 2148 -
trunk/Source/WebCore/editing/EditorCommand.cpp
r159856 r160966 256 256 return 0; 257 257 const RenderStyle& style = renderer->style(); 258 if (!(style.overflowY() == OSCROLL || style.overflowY() == OAUTO || focusedElement-> rendererIsEditable()))258 if (!(style.overflowY() == OSCROLL || style.overflowY() == OAUTO || focusedElement->hasEditableStyle())) 259 259 return 0; 260 260 int height = std::min<int>(toRenderBox(renderer)->clientHeight(), frame.view()->visibleHeight()); -
trunk/Source/WebCore/editing/FormatBlockCommand.cpp
r157018 r160966 150 150 Node* lastBlock = startNode; 151 151 for (Node* n = startNode; n; n = n->parentNode()) { 152 if (!n-> rendererIsEditable())152 if (!n->hasEditableStyle()) 153 153 return lastBlock; 154 if (isTableCell(n) || n->hasTagName(bodyTag) || !n->parentNode() || !n->parentNode()-> rendererIsEditable() || isElementForFormatBlock(n))154 if (isTableCell(n) || n->hasTagName(bodyTag) || !n->parentNode() || !n->parentNode()->hasEditableStyle() || isElementForFormatBlock(n)) 155 155 return n; 156 156 if (isBlock(n)) 157 157 lastBlock = n; 158 158 if (isListElement(n)) 159 return n->parentNode()-> rendererIsEditable() ? n->parentNode() : n;159 return n->parentNode()->hasEditableStyle() ? n->parentNode() : n; 160 160 } 161 161 return lastBlock; -
trunk/Source/WebCore/editing/FrameSelection.cpp
r160599 r160966 1590 1590 1591 1591 // This method's purpose is it to make it easier to select iframes (in order to delete them). Don't do anything if the iframe isn't deletable. 1592 if (!ownerElementParent-> rendererIsEditable())1592 if (!ownerElementParent->hasEditableStyle()) 1593 1593 return; 1594 1594 … … 2025 2025 Document* document = m_frame->document(); 2026 2026 bool caretBrowsing = m_frame->settings().caretBrowsingEnabled(); 2027 if (!isNone() || !(document-> rendererIsEditable() || caretBrowsing))2027 if (!isNone() || !(document->hasEditableStyle() || caretBrowsing)) 2028 2028 return; 2029 2029 -
trunk/Source/WebCore/editing/FrameSelection.h
r160067 r160966 134 134 Element* rootEditableElementOrDocumentElement() const; 135 135 136 bool rendererIsEditable() const { return m_selection.rendererIsEditable(); }136 bool hasEditableStyle() const { return m_selection.hasEditableStyle(); } 137 137 bool isContentEditable() const { return m_selection.isContentEditable(); } 138 138 bool isContentRichlyEditable() const { return m_selection.isContentRichlyEditable(); } -
trunk/Source/WebCore/editing/IndentOutdentCommand.cpp
r158719 r160966 126 126 127 127 Node* enclosingNode = enclosingNodeOfType(visibleStartOfParagraph.deepEquivalent(), &isListOrIndentBlockquote); 128 if (!enclosingNode || !enclosingNode->parentNode()-> rendererIsEditable()) // We can't outdent if there is no place to go!128 if (!enclosingNode || !enclosingNode->parentNode()->hasEditableStyle()) // We can't outdent if there is no place to go! 129 129 return; 130 130 … … 157 157 if (splitPointParent->hasTagName(blockquoteTag) 158 158 && !splitPoint->hasTagName(blockquoteTag) 159 && splitPointParent->parentNode()-> rendererIsEditable()) // We can't outdent if there is no place to go!159 && splitPointParent->parentNode()->hasEditableStyle()) // We can't outdent if there is no place to go! 160 160 splitElement(toElement(splitPointParent), splitPoint); 161 161 } -
trunk/Source/WebCore/editing/InsertIntoTextNodeCommand.cpp
r157373 r160966 54 54 document().updateLayoutIgnorePendingStylesheets(); 55 55 56 if (!m_node-> rendererIsEditable())56 if (!m_node->hasEditableStyle()) 57 57 return; 58 58 … … 71 71 void InsertIntoTextNodeCommand::doUnapply() 72 72 { 73 if (!m_node-> rendererIsEditable())73 if (!m_node->hasEditableStyle()) 74 74 return; 75 75 -
trunk/Source/WebCore/editing/InsertNodeBeforeCommand.cpp
r160908 r160966 46 46 ASSERT(m_refChild->parentNode()); 47 47 48 ASSERT(m_refChild->parentNode()-> rendererIsEditable() || !m_refChild->parentNode()->attached());48 ASSERT(m_refChild->parentNode()->hasEditableStyle() || !m_refChild->parentNode()->attached()); 49 49 } 50 50 -
trunk/Source/WebCore/editing/MergeIdenticalElementsCommand.cpp
r157653 r160966 43 43 void MergeIdenticalElementsCommand::doApply() 44 44 { 45 if (m_element1->nextSibling() != m_element2 || !m_element1-> rendererIsEditable() || !m_element2->rendererIsEditable())45 if (m_element1->nextSibling() != m_element2 || !m_element1->hasEditableStyle() || !m_element2->hasEditableStyle()) 46 46 return; 47 47 … … 67 67 68 68 ContainerNode* parent = m_element2->parentNode(); 69 if (!parent || !parent-> rendererIsEditable())69 if (!parent || !parent->hasEditableStyle()) 70 70 return; 71 71 -
trunk/Source/WebCore/editing/RemoveNodeCommand.cpp
r154938 r160966 60 60 RefPtr<ContainerNode> parent = m_parent.release(); 61 61 RefPtr<Node> refChild = m_refChild.release(); 62 if (!parent || !parent-> rendererIsEditable())62 if (!parent || !parent->hasEditableStyle()) 63 63 return; 64 64 -
trunk/Source/WebCore/editing/ReplaceSelectionCommand.cpp
r159856 r160966 161 161 // FIXME: Remove these checks once textareas and textfields actually register an event handler. 162 162 !(shadowAncestorNode && shadowAncestorNode->renderer() && shadowAncestorNode->renderer()->isTextControl()) && 163 editableRoot-> rendererIsRichlyEditable()) {163 editableRoot->hasRichlyEditableStyle()) { 164 164 removeInterchangeNodes(m_fragment.get()); 165 165 return; … … 182 182 RefPtr<BeforeTextInsertedEvent> evt = BeforeTextInsertedEvent::create(text); 183 183 editableRoot->dispatchEvent(evt, ASSERT_NO_EXCEPTION); 184 if (text != evt->text() || !editableRoot-> rendererIsRichlyEditable()) {184 if (text != evt->text() || !editableRoot->hasRichlyEditableStyle()) { 185 185 restoreAndRemoveTestRenderingNodesToFragment(holder.get()); 186 186 … … 534 534 } 535 535 536 if (element->parentNode()-> rendererIsRichlyEditable())536 if (element->parentNode()->hasRichlyEditableStyle()) 537 537 removeNodeAttribute(element, contenteditableAttr); 538 538 -
trunk/Source/WebCore/editing/SplitElementCommand.cpp
r157653 r160966 55 55 56 56 ContainerNode* parent = m_element2->parentNode(); 57 if (!parent || !parent-> rendererIsEditable())57 if (!parent || !parent->hasEditableStyle()) 58 58 return; 59 59 parent->insertBefore(m_element1.get(), m_element2.get(), ec); … … 78 78 void SplitElementCommand::doUnapply() 79 79 { 80 if (!m_element1 || !m_element1-> rendererIsEditable() || !m_element2->rendererIsEditable())80 if (!m_element1 || !m_element1->hasEditableStyle() || !m_element2->hasEditableStyle()) 81 81 return; 82 82 -
trunk/Source/WebCore/editing/SplitTextNodeCommand.cpp
r155808 r160966 52 52 { 53 53 ContainerNode* parent = m_text2->parentNode(); 54 if (!parent || !parent-> rendererIsEditable())54 if (!parent || !parent->hasEditableStyle()) 55 55 return; 56 56 … … 68 68 void SplitTextNodeCommand::doUnapply() 69 69 { 70 if (!m_text1 || !m_text1-> rendererIsEditable())70 if (!m_text1 || !m_text1->hasEditableStyle()) 71 71 return; 72 72 … … 87 87 88 88 ContainerNode* parent = m_text2->parentNode(); 89 if (!parent || !parent-> rendererIsEditable())89 if (!parent || !parent->hasEditableStyle()) 90 90 return; 91 91 -
trunk/Source/WebCore/editing/SplitTextNodeContainingElementCommand.cpp
r156144 r160966 51 51 52 52 Element* parent = m_text->parentElement(); 53 if (!parent || !parent->parentElement() || !parent->parentElement()-> rendererIsEditable())53 if (!parent || !parent->parentElement() || !parent->parentElement()->hasEditableStyle()) 54 54 return; 55 55 -
trunk/Source/WebCore/editing/VisiblePosition.cpp
r157018 r160966 537 537 // The new position must be in the same editable element. Enforce that first. 538 538 // Unless the descent is from a non-editable html element to an editable body. 539 if (node && node->hasTagName(htmlTag) && !node-> rendererIsEditable() && node->document().body() && node->document().body()->rendererIsEditable())539 if (node && node->hasTagName(htmlTag) && !node->hasEditableStyle() && node->document().body() && node->document().body()->hasEditableStyle()) 540 540 return next.isNotNull() ? next : prev; 541 541 -
trunk/Source/WebCore/editing/VisibleSelection.cpp
r158350 r160966 627 627 } 628 628 629 bool VisibleSelection:: rendererIsEditable() const629 bool VisibleSelection::hasEditableStyle() const 630 630 { 631 631 return isEditablePosition(start(), ContentIsEditable, DoNotUpdateStyle); -
trunk/Source/WebCore/editing/VisibleSelection.h
r121526 r160966 100 100 Element* rootEditableElement() const; 101 101 bool isContentEditable() const; 102 bool rendererIsEditable() const;102 bool hasEditableStyle() const; 103 103 bool isContentRichlyEditable() const; 104 104 // Returns a shadow tree node for legacy shadow trees, a child of the -
trunk/Source/WebCore/editing/VisibleUnits.cpp
r160526 r160966 49 49 static Node* previousLeafWithSameEditability(Node* node, EditableType editableType) 50 50 { 51 bool editable = node-> rendererIsEditable(editableType);51 bool editable = node->hasEditableStyle(editableType); 52 52 node = previousLeafNode(node); 53 53 while (node) { 54 if (editable == node-> rendererIsEditable(editableType))54 if (editable == node->hasEditableStyle(editableType)) 55 55 return node; 56 56 node = previousLeafNode(node); … … 64 64 return 0; 65 65 66 bool editable = node-> rendererIsEditable(editableType);66 bool editable = node->hasEditableStyle(editableType); 67 67 node = nextLeafNode(node); 68 68 while (node) { 69 if (editable == node-> rendererIsEditable(editableType))69 if (editable == node->hasEditableStyle(editableType)) 70 70 return node; 71 71 node = nextLeafNode(node); … … 965 965 // Move to the start of the content in this block, which effectively moves us 966 966 // to the start of the line we're on. 967 Element* rootElement = node-> rendererIsEditable(editableType) ? node->rootEditableElement(editableType) : node->document().documentElement();967 Element* rootElement = node->hasEditableStyle(editableType) ? node->rootEditableElement(editableType) : node->document().documentElement(); 968 968 if (!rootElement) 969 969 return VisiblePosition(); … … 1023 1023 // Move to the end of the content in this block, which effectively moves us 1024 1024 // to the end of the line we're on. 1025 Element* rootElement = node-> rendererIsEditable(editableType) ? node->rootEditableElement(editableType) : node->document().documentElement();1025 Element* rootElement = node->hasEditableStyle(editableType) ? node->rootEditableElement(editableType) : node->document().documentElement(); 1026 1026 if (!rootElement) 1027 1027 return VisiblePosition(); … … 1104 1104 while (n) { 1105 1105 #if ENABLE(USERSELECT_ALL) 1106 if (boundaryCrossingRule == CannotCrossEditingBoundary && !Position::nodeIsUserSelectAll(n) && n-> rendererIsEditable() != startNode->rendererIsEditable())1106 if (boundaryCrossingRule == CannotCrossEditingBoundary && !Position::nodeIsUserSelectAll(n) && n->hasEditableStyle() != startNode->hasEditableStyle()) 1107 1107 #else 1108 if (boundaryCrossingRule == CannotCrossEditingBoundary && n-> rendererIsEditable() != startNode->rendererIsEditable())1108 if (boundaryCrossingRule == CannotCrossEditingBoundary && n->hasEditableStyle() != startNode->hasEditableStyle()) 1109 1109 #endif 1110 1110 break; 1111 1111 if (boundaryCrossingRule == CanSkipOverEditingBoundary) { 1112 while (n && n-> rendererIsEditable() != startNode->rendererIsEditable())1112 while (n && n->hasEditableStyle() != startNode->hasEditableStyle()) 1113 1113 n = NodeTraversal::previousPostOrder(n, startBlock); 1114 1114 if (!n || !n->isDescendantOf(highestRoot)) … … 1184 1184 while (n) { 1185 1185 #if ENABLE(USERSELECT_ALL) 1186 if (boundaryCrossingRule == CannotCrossEditingBoundary && !Position::nodeIsUserSelectAll(n) && n-> rendererIsEditable() != startNode->rendererIsEditable())1186 if (boundaryCrossingRule == CannotCrossEditingBoundary && !Position::nodeIsUserSelectAll(n) && n->hasEditableStyle() != startNode->hasEditableStyle()) 1187 1187 #else 1188 if (boundaryCrossingRule == CannotCrossEditingBoundary && n-> rendererIsEditable() != startNode->rendererIsEditable())1188 if (boundaryCrossingRule == CannotCrossEditingBoundary && n->hasEditableStyle() != startNode->hasEditableStyle()) 1189 1189 #endif 1190 1190 break; 1191 1191 if (boundaryCrossingRule == CanSkipOverEditingBoundary) { 1192 while (n && n-> rendererIsEditable() != startNode->rendererIsEditable())1192 while (n && n->hasEditableStyle() != startNode->hasEditableStyle()) 1193 1193 n = NodeTraversal::next(n, stayInsideBlock); 1194 1194 if (!n || !n->isDescendantOf(highestRoot)) -
trunk/Source/WebCore/editing/WrapContentsInDummySpanCommand.cpp
r158350 r160966 63 63 ASSERT(m_element); 64 64 65 if (!m_dummySpan || !m_element-> rendererIsEditable())65 if (!m_dummySpan || !m_element->hasEditableStyle()) 66 66 return; 67 67 … … 81 81 ASSERT(m_element); 82 82 83 if (!m_dummySpan || !m_element-> rendererIsEditable())83 if (!m_dummySpan || !m_element->hasEditableStyle()) 84 84 return; 85 85 -
trunk/Source/WebCore/editing/htmlediting.cpp
r158350 r160966 117 117 if (!node) 118 118 break; 119 if (node-> rendererIsEditable(editableType))119 if (node->hasEditableStyle(editableType)) 120 120 highestEditableRoot = node; 121 121 } … … 130 130 131 131 while (node) { 132 if (node-> rendererIsEditable())132 if (node->hasEditableStyle()) 133 133 return node->rootEditableElement(); 134 134 if (node->hasTagName(bodyTag)) … … 153 153 node = node->parentNode(); 154 154 155 return node-> rendererIsEditable(editableType);155 return node->hasEditableStyle(editableType); 156 156 } 157 157 … … 172 172 node = node->parentNode(); 173 173 174 return node-> rendererIsRichlyEditable(editableType);174 return node->hasRichlyEditableStyle(editableType); 175 175 } 176 176 … … 250 250 { 251 251 // position falls before highestRoot. 252 if (comparePositions(position, firstPositionInNode(highestRoot)) == -1 && highestRoot-> rendererIsEditable())252 if (comparePositions(position, firstPositionInNode(highestRoot)) == -1 && highestRoot->hasEditableStyle()) 253 253 return firstPositionInNode(highestRoot); 254 254 … … 549 549 Node* root = highestEditableRoot(p); 550 550 for (Node* n = p.deprecatedNode(); n; n = n->parentNode()) { 551 if (root && !n-> rendererIsEditable())551 if (root && !n->hasEditableStyle()) 552 552 continue; 553 553 if (n->hasTagName(tagName)) … … 571 571 // Don't return a non-editable node if the input position was editable, since 572 572 // the callers from editing will no doubt want to perform editing inside the returned node. 573 if (root && !n-> rendererIsEditable())573 if (root && !n->hasEditableStyle()) 574 574 continue; 575 575 if (nodeIsOfType(n)) … … 587 587 Node* root = rule == CannotCrossEditingBoundary ? highestEditableRoot(p) : 0; 588 588 for (Node* n = p.containerNode(); n && n != stayWithin; n = n->parentNode()) { 589 if (root && !n-> rendererIsEditable())589 if (root && !n->hasEditableStyle()) 590 590 continue; 591 591 if (nodeIsOfType(n)) … … 744 744 745 745 return firstList->hasTagName(secondList->tagQName()) // make sure the list types match (ol vs. ul) 746 && firstList-> rendererIsEditable() && secondList->rendererIsEditable() // both lists are editable746 && firstList->hasEditableStyle() && secondList->hasEditableStyle() // both lists are editable 747 747 && firstList->rootEditableElement() == secondList->rootEditableElement() // don't cross editing boundaries 748 748 && isVisiblyAdjacent(positionInParentAfterNode(firstList), positionInParentBeforeNode(secondList)); -
trunk/Source/WebCore/html/HTMLAnchorElement.cpp
r159188 r160966 87 87 bool HTMLAnchorElement::supportsFocus() const 88 88 { 89 if ( rendererIsEditable())89 if (hasEditableStyle()) 90 90 return HTMLElement::supportsFocus(); 91 91 // If not a link we should still be able to focus the element if it has tabIndex. … … 192 192 } 193 193 194 if ( rendererIsEditable()) {194 if (hasEditableStyle()) { 195 195 // This keeps track of the editable block that the selection was in (if it was in one) just before the link was clicked 196 196 // for the LiveWhenNotFocused editable link behavior … … 212 212 void HTMLAnchorElement::setActive(bool down, bool pause) 213 213 { 214 if ( rendererIsEditable()) {214 if (hasEditableStyle()) { 215 215 EditableLinkBehavior editableLinkBehavior = EditableLinkDefaultBehavior; 216 216 if (Settings* settings = document().settings()) … … 280 280 if (!isLink()) 281 281 return HTMLElement::canStartSelection(); 282 return rendererIsEditable();282 return hasEditableStyle(); 283 283 } 284 284 … … 562 562 bool HTMLAnchorElement::treatLinkAsLiveForEventType(EventType eventType) const 563 563 { 564 if (! rendererIsEditable())564 if (!hasEditableStyle()) 565 565 return true; 566 566 -
trunk/Source/WebCore/html/HTMLBodyElement.cpp
r160733 r160966 186 186 bool HTMLBodyElement::supportsFocus() const 187 187 { 188 return rendererIsEditable() || HTMLElement::supportsFocus();188 return hasEditableStyle() || HTMLElement::supportsFocus(); 189 189 } 190 190 -
trunk/Source/WebCore/html/HTMLElement.cpp
r160914 r160966 663 663 bool HTMLElement::supportsFocus() const 664 664 { 665 if (!document().view()->isInLayout() && !document().view()->isPainting()) 666 document().updateStyleIfNeeded(); 667 return Element::supportsFocus() || (rendererIsEditable() && parentNode() && !parentNode()->rendererIsEditable()); 665 return Element::supportsFocus() || (hasEditableStyle() && parentNode() && !parentNode()->hasEditableStyle()); 668 666 } 669 667 -
trunk/Source/WebCore/page/DragController.cpp
r160152 r160966 406 406 } 407 407 408 if (doc && (m_didInitiateDrag || (doc->isPluginDocument() && !pluginDocumentAcceptsDrags) || doc-> rendererIsEditable()))408 if (doc && (m_didInitiateDrag || (doc->isPluginDocument() && !pluginDocumentAcceptsDrags) || doc->hasEditableStyle())) 409 409 return DragOperationNone; 410 410 return dragOperation(dragData); … … 554 554 555 555 if (result.innerNonSharedNode()->isPluginElement()) { 556 if (!toHTMLPlugInElement(result.innerNonSharedNode())->canProcessDrag() && !result.innerNonSharedNode()-> rendererIsEditable())556 if (!toHTMLPlugInElement(result.innerNonSharedNode())->canProcessDrag() && !result.innerNonSharedNode()->hasEditableStyle()) 557 557 return false; 558 } else if (!result.innerNonSharedNode()-> rendererIsEditable())558 } else if (!result.innerNonSharedNode()->hasEditableStyle()) 559 559 return false; 560 560 -
trunk/Source/WebCore/page/EventHandler.cpp
r159921 r160966 938 938 Node* node = event.targetNode(); 939 939 bool caretBrowsing = m_frame.settings().caretBrowsingEnabled(); 940 if (node && node->renderer() && (caretBrowsing || node-> rendererIsEditable())) {940 if (node && node->renderer() && (caretBrowsing || node->hasEditableStyle())) { 941 941 VisiblePosition pos = node->renderer()->positionForPoint(event.localPoint()); 942 942 newSelection = VisibleSelection(pos); … … 1195 1195 return false; 1196 1196 1197 bool editable = node-> rendererIsEditable();1197 bool editable = node->hasEditableStyle(); 1198 1198 bool editableLinkEnabled = false; 1199 1199 … … 1344 1344 switch (style ? style->cursor() : CURSOR_AUTO) { 1345 1345 case CURSOR_AUTO: { 1346 bool editable = node-> rendererIsEditable();1346 bool editable = node->hasEditableStyle(); 1347 1347 1348 1348 if (useHandCursor(node, result.isOverLink(), shiftKey)) -
trunk/Source/WebCore/page/FocusController.cpp
r159027 r160966 537 537 { 538 538 ASSERT(node); 539 ASSERT(node-> rendererIsEditable());539 ASSERT(node->hasEditableStyle()); 540 540 541 541 Node* root = node->rootEditableElement(); -
trunk/Source/WebCore/rendering/HitTestResult.cpp
r158163 r160966 579 579 return toHTMLInputElement(m_innerNonSharedNode.get())->isTextField(); 580 580 581 return m_innerNonSharedNode-> rendererIsEditable();581 return m_innerNonSharedNode->hasEditableStyle(); 582 582 } 583 583 -
trunk/Source/WebCore/rendering/RenderBlock.cpp
r160847 r160966 2484 2484 if (type == CursorCaret) { 2485 2485 caretPainter = frame().selection().caretRenderer(); 2486 isContentEditable = frame().selection(). rendererIsEditable();2486 isContentEditable = frame().selection().hasEditableStyle(); 2487 2487 } else { 2488 2488 caretPainter = frame().page()->dragCaretController().caretRenderer(); … … 3539 3539 ASSERT(child.nonPseudoNode()); 3540 3540 return !ancestor || !ancestor->parent() || (ancestor->hasLayer() && ancestor->parent()->isRenderView()) 3541 || ancestor->nonPseudoElement()-> rendererIsEditable() == child.nonPseudoNode()->rendererIsEditable();3541 || ancestor->nonPseudoElement()->hasEditableStyle() == child.nonPseudoNode()->hasEditableStyle(); 3542 3542 } 3543 3543 -
trunk/Source/WebCore/rendering/RenderBox.cpp
r160599 r160966 822 822 return true; 823 823 824 return element() && element()-> rendererIsEditable();824 return element() && element()->hasEditableStyle(); 825 825 } 826 826 -
trunk/Source/WebCore/rendering/RenderButton.cpp
r160599 r160966 57 57 bool RenderButton::canBeSelectionLeaf() const 58 58 { 59 return formControlElement(). rendererIsEditable();59 return formControlElement().hasEditableStyle(); 60 60 } 61 61 -
trunk/Source/WebCore/rendering/RenderObject.cpp
r160599 r160966 2355 2355 // If this is a non-anonymous renderer in an editable area, then it's simple. 2356 2356 if (Node* node = nonPseudoNode()) { 2357 if (!node-> rendererIsEditable()) {2357 if (!node->hasEditableStyle()) { 2358 2358 // If it can be found, we prefer a visually equivalent position that is editable. 2359 2359 Position position = createLegacyEditingPosition(node, offset); 2360 2360 Position candidate = position.downstream(CanCrossEditingBoundary); 2361 if (candidate.deprecatedNode()-> rendererIsEditable())2361 if (candidate.deprecatedNode()->hasEditableStyle()) 2362 2362 return VisiblePosition(candidate, affinity); 2363 2363 candidate = position.upstream(CanCrossEditingBoundary); 2364 if (candidate.deprecatedNode()-> rendererIsEditable())2364 if (candidate.deprecatedNode()->hasEditableStyle()) 2365 2365 return VisiblePosition(candidate, affinity); 2366 2366 } -
trunk/Source/WebCore/rendering/RenderTextFragment.cpp
r160598 r160966 61 61 bool RenderTextFragment::canBeSelectionLeaf() const 62 62 { 63 return textNode() && textNode()-> rendererIsEditable();63 return textNode() && textNode()->hasEditableStyle(); 64 64 } 65 65 -
trunk/Source/WebCore/rendering/RootInlineBox.cpp
r160957 r160966 694 694 static bool isEditableLeaf(InlineBox* leaf) 695 695 { 696 return leaf && leaf->renderer().node() && leaf->renderer().node()-> rendererIsEditable();696 return leaf && leaf->renderer().node() && leaf->renderer().node()->hasEditableStyle(); 697 697 } 698 698 -
trunk/Source/WebCore/svg/SVGAElement.cpp
r160668 r160966 190 190 bool SVGAElement::supportsFocus() const 191 191 { 192 if ( rendererIsEditable())192 if (hasEditableStyle()) 193 193 return SVGGraphicsElement::supportsFocus(); 194 194 return true;
Note:
See TracChangeset
for help on using the changeset viewer.