Changeset 222612 in webkit
- Timestamp:
- Sep 28, 2017 9:31:56 AM (7 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r222610 r222612 1 2017-09-28 Zalan Bujtas <zalan@apple.com> 2 3 AX: Defer RenderListBox selectionChanged event until after layout is done. 4 https://bugs.webkit.org/show_bug.cgi?id=177589 5 <rdar://problem/34705785> 6 7 Reviewed by Chris Fleizach. 8 9 Defer AX update when the selection changed event is followed by a layout. 10 11 Covered by existing tests. 12 13 * accessibility/AXObjectCache.cpp: 14 (WebCore::AXObjectCache::remove): 15 (WebCore::AXObjectCache::performDeferredCacheUpdate): 16 (WebCore::AXObjectCache::deferSelectedChildrenChangedIfNeeded): 17 * accessibility/AXObjectCache.h: 18 (WebCore::AXObjectCache::deferSelectedChildrenChangedIfNeeded): 19 * rendering/RenderListBox.cpp: 20 (WebCore::RenderListBox::selectionChanged): 21 1 22 2017-09-28 Zan Dobersek <zdobersek@igalia.com> 2 23 -
trunk/Source/WebCore/accessibility/AXObjectCache.cpp
r222594 r222612 720 720 return; 721 721 722 if (is<Element>(*node)) 722 if (is<Element>(*node)) { 723 723 m_deferredRecomputeIsIgnoredList.remove(downcast<Element>(node)); 724 m_deferredSelectedChildredChangedList.remove(downcast<Element>(node)); 725 } 724 726 m_deferredTextChangedList.remove(node); 725 727 removeNodeForUse(node); … … 2782 2784 } 2783 2785 m_deferredRecomputeIsIgnoredList.clear(); 2786 2787 for (auto* selectElement : m_deferredSelectedChildredChangedList) 2788 selectedChildrenChanged(selectElement); 2789 m_deferredSelectedChildredChangedList.clear(); 2784 2790 } 2785 2791 … … 2832 2838 } 2833 2839 textChanged(node); 2840 } 2841 2842 void AXObjectCache::deferSelectedChildrenChangedIfNeeded(Element& selectElement) 2843 { 2844 auto* renderer = selectElement.renderer(); 2845 if (renderer && renderer->beingDestroyed()) 2846 return; 2847 2848 if (renderer && rendererNeedsDeferredUpdate(*renderer)) { 2849 m_deferredSelectedChildredChangedList.add(&selectElement); 2850 return; 2851 } 2852 selectedChildrenChanged(&selectElement); 2834 2853 } 2835 2854 -
trunk/Source/WebCore/accessibility/AXObjectCache.h
r222594 r222612 333 333 void deferRecomputeIsIgnored(Element*); 334 334 void deferTextChangedIfNeeded(Node*); 335 void deferSelectedChildrenChangedIfNeeded(Element&); 335 336 void performDeferredCacheUpdate(); 336 337 … … 440 441 ListHashSet<Element*> m_deferredRecomputeIsIgnoredList; 441 442 ListHashSet<Node*> m_deferredTextChangedList; 443 ListHashSet<Element*> m_deferredSelectedChildredChangedList; 442 444 bool m_isSynchronizingSelection { false }; 443 445 bool m_performingDeferredCacheUpdate { false }; … … 491 493 inline void AXObjectCache::deferRecomputeIsIgnored(Element*) { } 492 494 inline void AXObjectCache::deferTextChangedIfNeeded(Node*) { } 495 inline void AXObjectCache::deferSelectedChildrenChangedIfNeeded(Element&) { } 493 496 inline void AXObjectCache::detachWrapper(AccessibilityObject*, AccessibilityDetachmentType) { } 494 497 inline void AXObjectCache::focusAriaModalNodeTimerFired() { } -
trunk/Source/WebCore/rendering/RenderListBox.cpp
r218615 r222612 163 163 164 164 if (AXObjectCache* cache = document().existingAXObjectCache()) 165 cache-> selectedChildrenChanged(this);165 cache->deferSelectedChildrenChangedIfNeeded(selectElement()); 166 166 } 167 167
Note: See TracChangeset
for help on using the changeset viewer.