Changeset 108970 in webkit
- Timestamp:
- Feb 27, 2012 1:21:51 AM (12 years ago)
- Location:
- trunk
- Files:
-
- 12 added
- 17 edited
- 2 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r108969 r108970 1 2012-02-27 Mihnea Ovidenie <mihnea@adobe.com> 2 3 [CSSRegions]Implement NamedFlow::getRegionsByContentNode 4 https://bugs.webkit.org/show_bug.cgi?id=77746 5 6 Reviewed by David Hyatt. 7 8 * fast/regions/get-regions-by-content-node-expected.txt: Added. 9 * fast/regions/get-regions-by-content-node-horiz-bt-expected.txt: Added. 10 * fast/regions/get-regions-by-content-node-horiz-bt.html: Added. 11 * fast/regions/get-regions-by-content-node-horiz-tb-expected.txt: Added. 12 * fast/regions/get-regions-by-content-node-horiz-tb.html: Added. 13 * fast/regions/get-regions-by-content-node-vert-lr-expected.txt: Added. 14 * fast/regions/get-regions-by-content-node-vert-lr.html: Added. 15 * fast/regions/get-regions-by-content-node-vert-rl-expected.txt: Added. 16 * fast/regions/get-regions-by-content-node-vert-rl.html: Added. 17 * fast/regions/get-regions-by-content-node.html: Added. 18 * fast/regions/get-regions-by-content-node2-expected.txt: Added. 19 * fast/regions/get-regions-by-content-node2.html: Added. 20 1 21 2012-02-27 Kenichi Ishibashi <bashi@chromium.org> 2 22 -
trunk/Source/WebCore/CMakeLists.txt
r108959 r108970 607 607 dom/Range.cpp 608 608 dom/RangeException.cpp 609 dom/RegionNodeList.cpp 609 610 dom/RegisteredEventListener.cpp 610 611 dom/ScopedEventQueue.cpp -
trunk/Source/WebCore/ChangeLog
r108967 r108970 1 2012-02-27 Mihnea Ovidenie <mihnea@adobe.com> 2 3 [CSSRegions]Implement NamedFlow::getRegionsByContentNode 4 https://bugs.webkit.org/show_bug.cgi?id=77746 5 6 Reviewed by David Hyatt. 7 8 Tests: fast/regions/get-regions-by-content-node-horiz-bt.html 9 fast/regions/get-regions-by-content-node-horiz-tb.html 10 fast/regions/get-regions-by-content-node-vert-lr.html 11 fast/regions/get-regions-by-content-node-vert-rl.html 12 fast/regions/get-regions-by-content-node.html 13 fast/regions/get-regions-by-content-node2.html 14 15 * CMakeLists.txt: 16 * GNUmakefile.list.am: 17 * Target.pri: 18 * WebCore.gypi: 19 * WebCore.vcproj/WebCore.vcproj: 20 * WebCore.xcodeproj/project.pbxproj: 21 * dom/Node.cpp: 22 (WebCore::Node::removeCachedRegionNodeList): 23 (WebCore): 24 (WebCore::Node::getRegionsByContentNode): 25 (WebCore::NodeListsNodeData::invalidateCaches): 26 (WebCore::NodeListsNodeData::isEmpty): 27 * dom/Node.h: 28 (WebCore): 29 (Node): 30 * dom/NodeRareData.h: 31 (NodeListsNodeData): 32 * dom/RegionNodeList.cpp: 33 (WebCore): 34 (WebCore::RegionNodeList::RegionNodeList): 35 (WebCore::RegionNodeList::~RegionNodeList): 36 (WebCore::RegionNodeList::nodeMatches): 37 * dom/RegionNodeList.h: 38 (WebCore): 39 (RegionNodeList): 40 (WebCore::RegionNodeList::create): 41 * dom/WebKitNamedFlow.cpp: 42 (WebCore::WebKitNamedFlow::getRegionsByContentNode): 43 (WebCore): 44 * dom/WebKitNamedFlow.h: 45 (WebCore): 46 (WebKitNamedFlow): 47 * dom/WebKitNamedFlow.idl: 48 * rendering/RenderFlowThread.cpp: 49 (WebCore::RenderFlowThread::regionInRange): 50 (WebCore): 51 (WebCore::RenderFlowThread::objectInFlowRegion): 52 * rendering/RenderFlowThread.h: 53 * rendering/RenderRegion.h: 54 (WebCore::RenderRegion::flowThread): 55 1 56 2012-02-27 Yury Semikhatsky <yurys@chromium.org> 2 57 -
trunk/Source/WebCore/GNUmakefile.list.am
r108959 r108970 1720 1720 Source/WebCore/dom/Range.h \ 1721 1721 Source/WebCore/dom/RawDataDocumentParser.h \ 1722 Source/WebCore/dom/RegionNodeList.cpp \ 1723 Source/WebCore/dom/RegionNodeList.h \ 1722 1724 Source/WebCore/dom/RegisteredEventListener.cpp \ 1723 1725 Source/WebCore/dom/RegisteredEventListener.h \ -
trunk/Source/WebCore/Target.pri
r108959 r108970 562 562 dom/RangeException.cpp \ 563 563 dom/RawDataDocumentParser.h \ 564 dom/RegionNodeList.cpp \ 564 565 dom/RegisteredEventListener.cpp \ 565 566 dom/ScopedEventQueue.cpp \ -
trunk/Source/WebCore/WebCore.gypi
r108959 r108970 5132 5132 'dom/RangeException.cpp', 5133 5133 'dom/RangeException.h', 5134 'dom/RegionNodeList.cpp', 5135 'dom/RegionNodeList.h', 5134 5136 'dom/RawDataDocumentParser.h', 5135 5137 'dom/RegisteredEventListener.cpp', -
trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj
r108958 r108970 50851 50851 </File> 50852 50852 <File 50853 RelativePath="..\dom\RegionNodeList.cpp" 50854 > 50855 </File> 50856 <File 50857 RelativePath="..\dom\RegionNodeList.h" 50858 > 50859 </File> 50860 <File 50853 50861 RelativePath="..\dom\RegisteredEventListener.cpp" 50854 50862 > -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r108959 r108970 3012 3012 8AA61D00144D595B00F37350 /* WebKitCSSRegionRule.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AA61CFE144D595B00F37350 /* WebKitCSSRegionRule.h */; }; 3013 3013 8AB4BC77126FDB7100DEB727 /* IgnoreDestructiveWriteCountIncrementer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AB4BC76126FDB7100DEB727 /* IgnoreDestructiveWriteCountIncrementer.h */; }; 3014 8ABAFB9F14F5107500A4984B /* RegionNodeList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8ABAFB9D14F5107500A4984B /* RegionNodeList.cpp */; }; 3015 8ABAFBA014F5107500A4984B /* RegionNodeList.h in Headers */ = {isa = PBXBuildFile; fileRef = 8ABAFB9E14F5107500A4984B /* RegionNodeList.h */; }; 3014 3016 8AD0A59414C88336000D83C5 /* JSWebKitCSSRegionRule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8ACC24CD148E24B200EFCC0D /* JSWebKitCSSRegionRule.cpp */; }; 3015 3017 8AD0A59514C88336000D83C5 /* JSWebKitCSSRegionRule.h in Headers */ = {isa = PBXBuildFile; fileRef = 8ACC24CE148E24B200EFCC0D /* JSWebKitCSSRegionRule.h */; }; … … 9881 9883 8AA61CFE144D595B00F37350 /* WebKitCSSRegionRule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebKitCSSRegionRule.h; sourceTree = "<group>"; }; 9882 9884 8AB4BC76126FDB7100DEB727 /* IgnoreDestructiveWriteCountIncrementer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IgnoreDestructiveWriteCountIncrementer.h; sourceTree = "<group>"; }; 9885 8ABAFB9D14F5107500A4984B /* RegionNodeList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RegionNodeList.cpp; sourceTree = "<group>"; }; 9886 8ABAFB9E14F5107500A4984B /* RegionNodeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegionNodeList.h; sourceTree = "<group>"; }; 9883 9887 8ACC24CD148E24B200EFCC0D /* JSWebKitCSSRegionRule.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSWebKitCSSRegionRule.cpp; sourceTree = "<group>"; }; 9884 9888 8ACC24CE148E24B200EFCC0D /* JSWebKitCSSRegionRule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSWebKitCSSRegionRule.h; sourceTree = "<group>"; }; … … 20837 20841 D23CA5480AB0E983005108A5 /* RangeException.idl */, 20838 20842 A84D827B11D333ED00972990 /* RawDataDocumentParser.h */, 20843 8ABAFB9D14F5107500A4984B /* RegionNodeList.cpp */, 20844 8ABAFB9E14F5107500A4984B /* RegionNodeList.h */, 20839 20845 85031B350A44EFC700F992E0 /* RegisteredEventListener.cpp */, 20840 20846 85031B360A44EFC700F992E0 /* RegisteredEventListener.h */, … … 24367 24373 977E2E0F12F0FC9C00C13379 /* XSSAuditor.h in Headers */, 24368 24374 FD537353137B651800008DCE /* ZeroPole.h in Headers */, 24375 8ABAFBA014F5107500A4984B /* RegionNodeList.h in Headers */, 24369 24376 ); 24370 24377 runOnlyForDeploymentPostprocessing = 0; … … 27319 27326 977E2E0E12F0FC9C00C13379 /* XSSAuditor.cpp in Sources */, 27320 27327 FD537352137B651800008DCE /* ZeroPole.cpp in Sources */, 27328 8ABAFB9F14F5107500A4984B /* RegionNodeList.cpp in Sources */, 27321 27329 ); 27322 27330 runOnlyForDeploymentPostprocessing = 0; -
trunk/Source/WebCore/dom/Node.cpp
r108959 r108970 1032 1032 } 1033 1033 1034 void Node::removeCachedRegionNodeList(RegionNodeList* list, const AtomicString& flowName) 1035 { 1036 ASSERT(rareData()); 1037 ASSERT(rareData()->nodeLists()); 1038 1039 NodeListsNodeData* data = rareData()->nodeLists(); 1040 ASSERT_UNUSED(list, list == data->m_regionNodeListCache.get(flowName)); 1041 data->m_regionNodeListCache.remove(flowName); 1042 } 1043 1034 1044 void Node::removeCachedNameNodeList(NameNodeList* list, const String& nodeName) 1035 1045 { … … 1664 1674 1665 1675 RefPtr<ClassNodeList> list = ClassNodeList::create(this, classNames); 1676 result.first->second = list.get(); 1677 return list.release(); 1678 } 1679 1680 PassRefPtr<NodeList> Node::getRegionsByContentNode(const AtomicString& flowName) 1681 { 1682 pair<NodeListsNodeData::RegionNodeListCache::iterator, bool> result 1683 = ensureRareData()->ensureNodeLists(this)->m_regionNodeListCache.add(flowName, 0); 1684 if (!result.second) 1685 return PassRefPtr<NodeList>(result.first->second); 1686 1687 RefPtr<RegionNodeList> list = RegionNodeList::create(this, flowName); 1666 1688 result.first->second = list.get(); 1667 1689 return list.release(); … … 2353 2375 for (TagNodeListCacheNS::const_iterator it = m_tagNodeListCacheNS.begin(); it != tagCacheNSEnd; ++it) 2354 2376 it->second->invalidateCache(); 2377 RegionNodeListCache::const_iterator regionListCacheEnd = m_regionNodeListCache.end(); 2378 for (RegionNodeListCache::const_iterator it = m_regionNodeListCache.begin(); it != regionListCacheEnd; ++it) 2379 it->second->invalidateCache(); 2355 2380 invalidateCachesThatDependOnAttributes(); 2356 2381 } … … 2399 2424 return false; 2400 2425 #endif 2426 if (!m_regionNodeListCache.isEmpty()) 2427 return false; 2401 2428 2402 2429 if (m_labelsNodeListCache) 2403 2430 return false; 2404 2431 2405 2432 return true; 2406 2433 } -
trunk/Source/WebCore/dom/Node.h
r108809 r108970 73 73 class PlatformWheelEvent; 74 74 class QualifiedName; 75 class RegionNodeList; 75 76 class RegisteredEventListener; 76 77 class RenderArena; … … 551 552 void invalidateNodeListsCacheAfterAttributeChanged(const QualifiedName&); 552 553 void invalidateNodeListsCacheAfterChildrenChanged(); 554 void invalidateRegionListCache(); 553 555 void notifyLocalNodeListsLabelChanged(); 554 556 void removeCachedClassNodeList(ClassNodeList*, const String&); … … 558 560 void removeCachedTagNodeList(TagNodeList*, const QualifiedName&); 559 561 void removeCachedLabelsNodeList(DynamicSubtreeNodeList*); 562 void removeCachedRegionNodeList(RegionNodeList*, const AtomicString&); 560 563 561 564 void removeCachedChildNodeList(); … … 565 568 PassRefPtr<NodeList> getElementsByName(const String& elementName); 566 569 PassRefPtr<NodeList> getElementsByClassName(const String& classNames); 570 PassRefPtr<NodeList> getRegionsByContentNode(const AtomicString& flowName); 567 571 568 572 PassRefPtr<Element> querySelector(const String& selectors, ExceptionCode&); -
trunk/Source/WebCore/dom/NodeRareData.h
r107793 r108970 30 30 #include "NameNodeList.h" 31 31 #include "QualifiedName.h" 32 #include "RegionNodeList.h" 32 33 #include "TagNodeList.h" 33 34 #include "WebKitMutationObserver.h" … … 72 73 73 74 LabelsNodeList* m_labelsNodeListCache; 75 76 typedef HashMap<AtomicString, RegionNodeList*> RegionNodeListCache; 77 RegionNodeListCache m_regionNodeListCache; 74 78 75 79 static PassOwnPtr<NodeListsNodeData> create() -
trunk/Source/WebCore/dom/RegionNodeList.cpp
r108969 r108970 1 1 /* 2 * Copyright (C) 2011 Adobe Systems Incorporated. All rights reserved.2 * Copyright 2012 Adobe Systems Incorporated. All Rights Reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 29 29 30 30 #include "config.h" 31 #include "RegionNodeList.h" 32 33 #include "Document.h" 34 #include "RenderFlowThread.h" 35 #include "RenderRegion.h" 31 36 #include "WebKitNamedFlow.h" 32 33 #include "RenderFlowThread.h"34 37 35 38 namespace WebCore { 36 39 37 WebKitNamedFlow::WebKitNamedFlow(RenderFlowThread* parentFlowThread) 38 : m_parentFlowThread(parentFlowThread) 40 RegionNodeList::RegionNodeList(PassRefPtr<Node> node, const AtomicString& flowName) 41 : DynamicSubtreeNodeList(node->document()) 42 , m_contentNode(node) 43 , m_flowName(flowName) 39 44 { 40 45 } 41 46 42 WebKitNamedFlow::~WebKitNamedFlow()47 RegionNodeList::~RegionNodeList() 43 48 { 44 } 49 m_contentNode->removeCachedRegionNodeList(this, m_flowName); 50 } 45 51 46 bool WebKitNamedFlow::overflow() const52 bool RegionNodeList::nodeMatches(Element* testNode) const 47 53 { 48 m_parentFlowThread->document()->updateLayoutIgnorePendingStylesheets(); 49 return m_parentFlowThread->overflow(); 54 if (!m_contentNode->renderer()) 55 return false; 56 57 if (!testNode->renderer() || !testNode->renderer()->isRenderRegion()) 58 return false; 59 60 RenderRegion* region = toRenderRegion(testNode->renderer()); 61 if (!region->isValid() || (region->style()->regionThread() != m_flowName)) 62 return false; 63 64 return region->flowThread()->objectInFlowRegion(m_contentNode->renderer(), region); 50 65 } 51 66 52 67 } // namespace WebCore 68 -
trunk/Source/WebCore/dom/RegionNodeList.h
r108969 r108970 1 1 /* 2 * Copyright (C) 2011 Adobe Systems Incorporated. All rights reserved.2 * Copyright 2012 Adobe Systems Incorporated. All Rights Reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 28 28 */ 29 29 30 #ifndef WebKitNamedFlow_h31 #define WebKitNamedFlow_h30 #ifndef RegionNodeList_h 31 #define RegionNodeList_h 32 32 33 #include <wtf/RefCounted.h>34 #include <wtf/RefPtr.h>33 #include "DynamicNodeList.h" 34 #include "Node.h" 35 35 36 36 namespace WebCore { 37 37 38 class RenderFlowThread; 38 class RegionNodeList : public DynamicSubtreeNodeList { 39 public: 40 static PassRefPtr<RegionNodeList> create(PassRefPtr<Node> node, const AtomicString& flowName) 41 { 42 return adoptRef(new RegionNodeList(node, flowName)); 43 } 44 45 virtual ~RegionNodeList(); 39 46 40 class WebKitNamedFlow : public RefCounted<WebKitNamedFlow> { 41 public: 42 static PassRefPtr<WebKitNamedFlow> create(RenderFlowThread* parentFlowThread) 43 { 44 return adoptRef(new WebKitNamedFlow(parentFlowThread)); 45 } 47 protected: 48 virtual bool nodeMatches(Element*) const; 46 49 47 ~WebKitNamedFlow();48 49 bool overflow() const;50 50 private: 51 WebKitNamedFlow(RenderFlowThread*); 52 53 RenderFlowThread* m_parentFlowThread; 51 RegionNodeList(PassRefPtr<Node>, const AtomicString& flowName); 52 53 RefPtr<Node> m_contentNode; 54 AtomicString m_flowName; 54 55 }; 55 56 } 56 57 } // namespace WebCore 57 58 58 59 #endif 60 -
trunk/Source/WebCore/dom/WebKitNamedFlow.cpp
r108952 r108970 31 31 #include "WebKitNamedFlow.h" 32 32 33 #include "Node.h" 34 #include "NodeList.h" 33 35 #include "RenderFlowThread.h" 34 36 … … 50 52 } 51 53 54 PassRefPtr<NodeList> WebKitNamedFlow::getRegionsByContentNode(Node* contentNode) 55 { 56 if (!contentNode) 57 return 0; 58 m_parentFlowThread->document()->updateLayoutIgnorePendingStylesheets(); 59 return contentNode->getRegionsByContentNode(m_parentFlowThread->flowThread()); 60 } 61 52 62 } // namespace WebCore 63 -
trunk/Source/WebCore/dom/WebKitNamedFlow.h
r108952 r108970 36 36 namespace WebCore { 37 37 38 class Node; 39 class NodeList; 38 40 class RenderFlowThread; 39 41 … … 48 50 49 51 bool overflow() const; 52 PassRefPtr<NodeList> getRegionsByContentNode(Node*); 53 50 54 private: 51 55 WebKitNamedFlow(RenderFlowThread*); -
trunk/Source/WebCore/dom/WebKitNamedFlow.idl
r108952 r108970 33 33 ] WebKitNamedFlow { 34 34 readonly attribute boolean overflow; 35 NodeList getRegionsByContentNode(in Node contentNode); 35 36 }; 36 37 } 38 -
trunk/Source/WebCore/rendering/RenderFlowThread.cpp
r108952 r108970 14 14 * provided with the distribution. 15 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS”AND ANY16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER "AS IS" AND ANY 17 17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR … … 906 906 } 907 907 908 bool RenderFlowThread::regionInRange(const RenderRegion* targetRegion, const RenderRegion* startRegion, const RenderRegion* endRegion) const 909 { 910 ASSERT(targetRegion); 911 912 for (RenderRegionList::const_iterator it = m_regionList.find(const_cast<RenderRegion*>(startRegion)); it != m_regionList.end(); ++it) { 913 const RenderRegion* currRegion = *it; 914 if (!currRegion->isValid()) 915 continue; 916 if (targetRegion == currRegion) 917 return true; 918 if (currRegion == endRegion) 919 break; 920 } 921 922 return false; 923 } 924 925 bool RenderFlowThread::objectInFlowRegion(const RenderObject* object, const RenderRegion* region) const 926 { 927 ASSERT(object); 928 ASSERT(region); 929 930 if (!object->inRenderFlowThread()) 931 return false; 932 if (object->enclosingRenderFlowThread() != this) 933 return false; 934 if (!m_regionList.contains(const_cast<RenderRegion*>(region))) 935 return false; 936 937 RenderBox* enclosingBox = object->enclosingBox(); 938 RenderRegion* enclosingBoxStartRegion = 0; 939 RenderRegion* enclosingBoxEndRegion = 0; 940 getRegionRangeForBox(enclosingBox, enclosingBoxStartRegion, enclosingBoxEndRegion); 941 if (!regionInRange(region, enclosingBoxStartRegion, enclosingBoxEndRegion)) 942 return false; 943 944 if (object->isBox()) 945 return true; 946 947 LayoutRect objectABBRect = object->absoluteBoundingBoxRect(true); 948 if (!objectABBRect.width()) 949 objectABBRect.setWidth(1); 950 if (!objectABBRect.height()) 951 objectABBRect.setHeight(1); 952 if (objectABBRect.intersects(region->absoluteBoundingBoxRect(true))) 953 return true; 954 955 if (region == lastRegion()) { 956 // If the object does not intersect any of the enclosing box regions 957 // then the object is in last region. 958 for (RenderRegionList::const_iterator it = m_regionList.find(enclosingBoxStartRegion); it != m_regionList.end(); ++it) { 959 const RenderRegion* currRegion = *it; 960 if (!region->isValid()) 961 continue; 962 if (currRegion == region) 963 break; 964 if (objectABBRect.intersects(currRegion->absoluteBoundingBoxRect(true))) 965 return false; 966 } 967 return true; 968 } 969 970 return false; 971 } 972 908 973 } // namespace WebCore 974 -
trunk/Source/WebCore/rendering/RenderFlowThread.h
r108952 r108970 14 14 * provided with the distribution. 15 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS”AND ANY16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER "AS IS" AND ANY 17 17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR … … 137 137 138 138 bool overflow() const { return m_overflow; } 139 140 // Check if the object is in region and the region is part of this flow thread. 141 bool objectInFlowRegion(const RenderObject*, const RenderRegion*) const; 142 139 143 private: 140 144 virtual const char* renderName() const { return "RenderFlowThread"; } … … 146 150 147 151 bool shouldRepaint(const LayoutRect&) const; 152 153 bool regionInRange(const RenderRegion* targetRegion, const RenderRegion* startRegion, const RenderRegion* endRegion) const; 148 154 149 155 typedef ListHashSet<RenderObject*> FlowThreadChildList; -
trunk/Source/WebCore/rendering/RenderRegion.h
r108952 r108970 57 57 void detachRegion(); 58 58 59 RenderFlowThread* flowThread() const { return m_flowThread; } 59 60 RenderFlowThread* parentFlowThread() const { return m_parentFlowThread; } 60 61
Note: See TracChangeset
for help on using the changeset viewer.