Changeset 74048 in webkit
- Timestamp:
- Dec 14, 2010 11:58:38 AM (13 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r74047 r74048 1 2010-12-14 David Hyatt <hyatt@apple.com> 2 3 Reviewed by Tim Hatcher. 4 5 https://bugs.webkit.org/show_bug.cgi?id=46422 6 7 Rename pageHeight variables and members in WebCore to pageLogicalHeight in preparation for 8 making printing and pagination work with vertical writing modes. 9 10 * page/FrameView.cpp: 11 (WebCore::FrameView::forceLayoutForPagination): 12 * rendering/LayoutState.cpp: 13 (WebCore::LayoutState::LayoutState): 14 (WebCore::LayoutState::clearPaginationInformation): 15 * rendering/LayoutState.h: 16 (WebCore::LayoutState::LayoutState): 17 (WebCore::LayoutState::isPaginated): 18 (WebCore::LayoutState::pageLogicalHeight): 19 (WebCore::LayoutState::pageLogicalHeightChanged): 20 * rendering/RenderBlock.cpp: 21 (WebCore::RenderBlock::layoutBlock): 22 (WebCore::RenderBlock::markForPaginationRelayoutIfNeeded): 23 (WebCore::RenderBlock::insertFloatingObject): 24 (WebCore::RenderBlock::layoutColumns): 25 (WebCore::RenderBlock::nextPageTop): 26 (WebCore::RenderBlock::applyBeforeBreak): 27 (WebCore::RenderBlock::applyAfterBreak): 28 (WebCore::RenderBlock::adjustForUnsplittableChild): 29 (WebCore::RenderBlock::adjustLinePositionForPagination): 30 * rendering/RenderBlock.h: 31 * rendering/RenderBox.cpp: 32 (WebCore::RenderBox::computeLogicalHeight): 33 * rendering/RenderFlexibleBox.cpp: 34 (WebCore::RenderFlexibleBox::layoutBlock): 35 * rendering/RenderTable.cpp: 36 (WebCore::RenderTable::layout): 37 * rendering/RenderTableRow.cpp: 38 (WebCore::RenderTableRow::layout): 39 * rendering/RenderTableSection.cpp: 40 (WebCore::RenderTableSection::layoutRows): 41 * rendering/RenderView.cpp: 42 (WebCore::RenderView::RenderView): 43 (WebCore::RenderView::layout): 44 * rendering/RenderView.h: 45 (WebCore::RenderView::pageLogicalHeight): 46 (WebCore::RenderView::setPageLogicalHeight): 47 1 48 2010-12-14 Dimitri Glazkov <dglazkov@chromium.org> 2 49 -
trunk/WebCore/page/FrameView.cpp
r73941 r74048 2232 2232 int pageW = ceilf(pageSize.width()); 2233 2233 root->setWidth(pageW); 2234 root->setPage Height(pageSize.height());2234 root->setPageLogicalHeight(pageSize.height()); 2235 2235 root->setNeedsLayoutAndPrefWidthsRecalc(); 2236 2236 forceLayout(); … … 2244 2244 pageW = std::min<int>(docWidth, ceilf(pageSize.width() * maximumShrinkFactor)); 2245 2245 if (pageSize.height()) 2246 root->setPage Height(pageW / pageSize.width() * pageSize.height());2246 root->setPageLogicalHeight(pageW / pageSize.width() * pageSize.height()); 2247 2247 root->setWidth(pageW); 2248 2248 root->setNeedsLayoutAndPrefWidthsRecalc(); -
trunk/WebCore/rendering/LayoutState.cpp
r69628 r74048 35 35 namespace WebCore { 36 36 37 LayoutState::LayoutState(LayoutState* prev, RenderBox* renderer, const IntSize& offset, int page Height, bool pageHeightChanged, ColumnInfo* columnInfo)37 LayoutState::LayoutState(LayoutState* prev, RenderBox* renderer, const IntSize& offset, int pageLogicalHeight, bool pageLogicalHeightChanged, ColumnInfo* columnInfo) 38 38 : m_columnInfo(columnInfo) 39 39 , m_next(prev) … … 83 83 // If we establish a new page height, then cache the offset to the top of the first page. 84 84 // We can compare this later on to figure out what part of the page we're actually on, 85 if (page Height || m_columnInfo) {86 m_page Height = pageHeight;85 if (pageLogicalHeight || m_columnInfo) { 86 m_pageLogicalHeight = pageLogicalHeight; 87 87 m_pageOffset = IntSize(m_layoutOffset.width() + renderer->borderLeft() + renderer->paddingLeft(), 88 88 m_layoutOffset.height() + renderer->borderTop() + renderer->paddingTop()); 89 m_page HeightChanged = pageHeightChanged;89 m_pageLogicalHeightChanged = pageLogicalHeightChanged; 90 90 } else { 91 91 // If we don't establish a new page height, then propagate the old page height and offset down. 92 m_page Height = m_next->m_pageHeight;93 m_page HeightChanged = m_next->m_pageHeightChanged;92 m_pageLogicalHeight = m_next->m_pageLogicalHeight; 93 m_pageLogicalHeightChanged = m_next->m_pageLogicalHeightChanged; 94 94 m_pageOffset = m_next->m_pageOffset; 95 95 96 96 // Disable pagination for objects we don't support. For now this includes overflow:scroll/auto and inline blocks. 97 97 if (renderer->isReplaced() || renderer->scrollsOverflow()) 98 m_page Height = 0;98 m_pageLogicalHeight = 0; 99 99 } 100 100 … … 109 109 LayoutState::LayoutState(RenderObject* root) 110 110 : m_clipped(false) 111 , m_page Height(0)112 , m_page HeightChanged(false)111 , m_pageLogicalHeight(0) 112 , m_pageLogicalHeightChanged(false) 113 113 , m_columnInfo(0) 114 114 , m_next(0) … … 158 158 void LayoutState::clearPaginationInformation() 159 159 { 160 m_page Height = m_next->m_pageHeight;160 m_pageLogicalHeight = m_next->m_pageLogicalHeight; 161 161 m_pageOffset = m_next->m_pageOffset; 162 162 m_columnInfo = m_next->m_columnInfo; -
trunk/WebCore/rendering/LayoutState.h
r69628 r74048 42 42 LayoutState() 43 43 : m_clipped(false) 44 , m_page Height(0)45 , m_page HeightChanged(false)44 , m_pageLogicalHeight(0) 45 , m_pageLogicalHeightChanged(false) 46 46 , m_columnInfo(0) 47 47 , m_next(0) … … 65 65 void clearPaginationInformation(); 66 66 bool isPaginatingColumns() const { return m_columnInfo; } 67 bool isPaginated() const { return m_page Height || m_columnInfo; }67 bool isPaginated() const { return m_pageLogicalHeight || m_columnInfo; } 68 68 int pageY(int childY) const; 69 69 void addForcedColumnBreak(int childY); 70 70 71 bool page Height() const { return m_pageHeight; }72 bool page HeightChanged() const { return m_pageHeightChanged; }71 bool pageLogicalHeight() const { return m_pageLogicalHeight; } 72 bool pageLogicalHeightChanged() const { return m_pageLogicalHeightChanged; } 73 73 74 74 private: … … 85 85 // This is a total delta accumulated from the root. 86 86 87 int m_page Height; // The current page height for the pagination model that encloses us.88 bool m_page HeightChanged; // If our page height has changed, this will force all blocks to relayout.87 int m_pageLogicalHeight; // The current page height for the pagination model that encloses us. 88 bool m_pageLogicalHeightChanged; // If our page height has changed, this will force all blocks to relayout. 89 89 IntSize m_pageOffset; // The offset of the start of the first page in the nearest enclosing pagination model. 90 90 ColumnInfo* m_columnInfo; // If the enclosing pagination model is a column model, then this will store column information for easy retrieval/manipulation. -
trunk/WebCore/rendering/RenderBlock.cpp
r73385 r74048 1110 1110 } 1111 1111 1112 void RenderBlock::layoutBlock(bool relayoutChildren, int page Height)1112 void RenderBlock::layoutBlock(bool relayoutChildren, int pageLogicalHeight) 1113 1113 { 1114 1114 ASSERT(needsLayout()); … … 1137 1137 int previousHeight = logicalHeight(); 1138 1138 setLogicalHeight(0); 1139 bool hasSpecifiedPage Height = false;1140 bool page HeightChanged = false;1139 bool hasSpecifiedPageLogicalHeight = false; 1140 bool pageLogicalHeightChanged = false; 1141 1141 ColumnInfo* colInfo = columnInfo(); 1142 1142 if (hasColumns()) { 1143 if (!page Height) {1143 if (!pageLogicalHeight) { 1144 1144 // We need to go ahead and set our explicit page height if one exists, so that we can 1145 1145 // avoid doing two layout passes. … … 1147 1147 int columnHeight = contentLogicalHeight(); 1148 1148 if (columnHeight > 0) { 1149 page Height = columnHeight;1150 hasSpecifiedPage Height = true;1149 pageLogicalHeight = columnHeight; 1150 hasSpecifiedPageLogicalHeight = true; 1151 1151 } 1152 1152 setLogicalHeight(0); 1153 1153 } 1154 if (colInfo->columnHeight() != page Height && m_everHadLayout) {1155 colInfo->setColumnHeight(page Height);1156 page HeightChanged = true;1154 if (colInfo->columnHeight() != pageLogicalHeight && m_everHadLayout) { 1155 colInfo->setColumnHeight(pageLogicalHeight); 1156 pageLogicalHeightChanged = true; 1157 1157 } 1158 1158 1159 if (!hasSpecifiedPage Height && !pageHeight)1159 if (!hasSpecifiedPageLogicalHeight && !pageLogicalHeight) 1160 1160 colInfo->clearForcedBreaks(); 1161 1161 } 1162 1162 1163 LayoutStateMaintainer statePusher(view(), this, IntSize(x(), y()), hasColumns() || hasTransform() || hasReflection() || style()->isFlippedBlocksWritingMode(), page Height, pageHeightChanged, colInfo);1163 LayoutStateMaintainer statePusher(view(), this, IntSize(x(), y()), hasColumns() || hasTransform() || hasReflection() || style()->isFlippedBlocksWritingMode(), pageLogicalHeight, pageLogicalHeightChanged, colInfo); 1164 1164 1165 1165 // We use four values, maxTopPos, maxTopNeg, maxBottomPos, and maxBottomNeg, to track … … 1213 1213 setLogicalHeight(lowestFloatLogicalBottom() + toAdd); 1214 1214 1215 if (layoutColumns(hasSpecifiedPage Height, pageHeight, statePusher))1215 if (layoutColumns(hasSpecifiedPageLogicalHeight, pageLogicalHeight, statePusher)) 1216 1216 return; 1217 1217 … … 1244 1244 statePusher.pop(); 1245 1245 1246 if (view()->layoutState()->m_page Height)1246 if (view()->layoutState()->m_pageLogicalHeight) 1247 1247 setPageY(view()->layoutState()->pageY(y())); 1248 1248 … … 2137 2137 return; 2138 2138 2139 if (view()->layoutState()->page HeightChanged() || (view()->layoutState()->pageHeight() && view()->layoutState()->pageY(y()) != pageY()))2139 if (view()->layoutState()->pageLogicalHeightChanged() || (view()->layoutState()->pageLogicalHeight() && view()->layoutState()->pageY(y()) != pageY())) 2140 2140 setChildNeedsLayout(true, false); 2141 2141 } … … 3033 3033 // Just go ahead and lay out the float. 3034 3034 bool isChildRenderBlock = o->isRenderBlock(); 3035 if (isChildRenderBlock && !o->needsLayout() && view()->layoutState()->page HeightChanged())3035 if (isChildRenderBlock && !o->needsLayout() && view()->layoutState()->pageLogicalHeightChanged()) 3036 3036 o->setChildNeedsLayout(true, false); 3037 3037 3038 bool affectedByPagination = isChildRenderBlock && view()->layoutState()->m_page Height;3038 bool affectedByPagination = isChildRenderBlock && view()->layoutState()->m_pageLogicalHeight; 3039 3039 if (!affectedByPagination || isWritingModeRoot()) // We are unsplittable if we're a block flow root. 3040 3040 o->layoutIfNeeded(); … … 4222 4222 } 4223 4223 4224 bool RenderBlock::layoutColumns(bool hasSpecifiedPage Height, int pageHeight, LayoutStateMaintainer& statePusher)4224 bool RenderBlock::layoutColumns(bool hasSpecifiedPageLogicalHeight, int pageLogicalHeight, LayoutStateMaintainer& statePusher) 4225 4225 { 4226 4226 if (!hasColumns()) … … 4231 4231 ColumnInfo* colInfo = columnInfo(); 4232 4232 int desiredColumnCount = colInfo->desiredColumnCount(); 4233 if (!hasSpecifiedPage Height) {4234 int columnHeight = page Height;4233 if (!hasSpecifiedPageLogicalHeight) { 4234 int columnHeight = pageLogicalHeight; 4235 4235 int minColumnCount = colInfo->forcedBreaks() + 1; 4236 4236 if (minColumnCount >= desiredColumnCount) { 4237 4237 // The forced page breaks are in control of the balancing. Just set the column height to the 4238 4238 // maximum page break distance. 4239 if (!page Height) {4239 if (!pageLogicalHeight) { 4240 4240 int distanceBetweenBreaks = max(colInfo->maximumDistanceBetweenForcedBreaks(), 4241 4241 view()->layoutState()->pageY(borderTop() + paddingTop() + contentHeight()) - colInfo->forcedBreakOffset()); 4242 4242 columnHeight = max(colInfo->minimumColumnHeight(), distanceBetweenBreaks); 4243 4243 } 4244 } else if (contentHeight() > page Height * desiredColumnCount) {4244 } else if (contentHeight() > pageLogicalHeight * desiredColumnCount) { 4245 4245 // Now that we know the intrinsic height of the columns, we have to rebalance them. 4246 4246 columnHeight = max(colInfo->minimumColumnHeight(), (int)ceilf((float)contentHeight() / desiredColumnCount)); 4247 4247 } 4248 4248 4249 if (columnHeight && columnHeight != page Height) {4249 if (columnHeight && columnHeight != pageLogicalHeight) { 4250 4250 statePusher.pop(); 4251 4251 m_everHadLayout = true; … … 4255 4255 } 4256 4256 4257 if (page Height) // FIXME: Should we use lowestPosition (excluding our positioned objects) instead of contentHeight()?4258 colInfo->setColumnCountAndHeight(ceilf((float)contentHeight() / page Height), pageHeight);4257 if (pageLogicalHeight) 4258 colInfo->setColumnCountAndHeight(ceilf((float)contentHeight() / pageLogicalHeight), pageLogicalHeight); 4259 4259 4260 4260 if (columnCount(colInfo)) { … … 5728 5728 { 5729 5729 LayoutState* layoutState = view()->layoutState(); 5730 if (!layoutState->m_page Height)5730 if (!layoutState->m_pageLogicalHeight) 5731 5731 return yPos; 5732 5732 5733 5733 // The yPos is in our coordinate space. We can add in our pushed offset. 5734 int page Height = layoutState->m_pageHeight;5735 int remainingHeight = (page Height - ((layoutState->m_layoutOffset - layoutState->m_pageOffset).height() + yPos) % pageHeight) % pageHeight;5734 int pageLogicalHeight = layoutState->m_pageLogicalHeight; 5735 int remainingHeight = (pageLogicalHeight - ((layoutState->m_layoutOffset - layoutState->m_pageOffset).height() + yPos) % pageLogicalHeight) % pageLogicalHeight; 5736 5736 return yPos + remainingHeight; 5737 5737 } … … 5755 5755 // FIXME: Add page break checking here when we support printing. 5756 5756 bool checkColumnBreaks = view()->layoutState()->isPaginatingColumns(); 5757 bool checkPageBreaks = !checkColumnBreaks && view()->layoutState()->m_page Height; // FIXME: Once columns can print we have to check this.5757 bool checkPageBreaks = !checkColumnBreaks && view()->layoutState()->m_pageLogicalHeight; // FIXME: Once columns can print we have to check this. 5758 5758 bool checkBeforeAlways = (checkColumnBreaks && child->style()->columnBreakBefore() == PBALWAYS) || (checkPageBreaks && child->style()->pageBreakBefore() == PBALWAYS); 5759 5759 if (checkBeforeAlways && inNormalFlow(child)) { … … 5769 5769 // FIXME: Add page break checking here when we support printing. 5770 5770 bool checkColumnBreaks = view()->layoutState()->isPaginatingColumns(); 5771 bool checkPageBreaks = !checkColumnBreaks && view()->layoutState()->m_page Height; // FIXME: Once columns can print we have to check this.5771 bool checkPageBreaks = !checkColumnBreaks && view()->layoutState()->m_pageLogicalHeight; // FIXME: Once columns can print we have to check this. 5772 5772 bool checkAfterAlways = (checkColumnBreaks && child->style()->columnBreakAfter() == PBALWAYS) || (checkPageBreaks && child->style()->pageBreakAfter() == PBALWAYS); 5773 5773 if (checkAfterAlways && inNormalFlow(child)) { … … 5789 5789 if (layoutState->m_columnInfo) 5790 5790 layoutState->m_columnInfo->updateMinimumColumnHeight(childHeight); 5791 int page Height = layoutState->m_pageHeight;5792 if (!page Height || childHeight > pageHeight)5791 int pageLogicalHeight = layoutState->m_pageLogicalHeight; 5792 if (!pageLogicalHeight || childHeight > pageLogicalHeight) 5793 5793 return yPos; 5794 int remainingHeight = (page Height - ((layoutState->m_layoutOffset - layoutState->m_pageOffset).height() + yPos) % pageHeight) % pageHeight;5794 int remainingHeight = (pageLogicalHeight - ((layoutState->m_layoutOffset - layoutState->m_pageOffset).height() + yPos) % pageLogicalHeight) % pageLogicalHeight; 5795 5795 if (remainingHeight < childHeight) 5796 5796 return yPos + remainingHeight; … … 5817 5817 // line and all following lines. 5818 5818 LayoutState* layoutState = view()->layoutState(); 5819 int page Height = layoutState->m_pageHeight;5819 int pageLogicalHeight = layoutState->m_pageLogicalHeight; 5820 5820 int yPos = lineBox->topVisualOverflow(); 5821 5821 int lineHeight = lineBox->bottomVisualOverflow() - yPos; … … 5824 5824 yPos += delta; 5825 5825 lineBox->setPaginationStrut(0); 5826 if (!page Height || lineHeight > pageHeight)5826 if (!pageLogicalHeight || lineHeight > pageLogicalHeight) 5827 5827 return; 5828 int remainingHeight = page Height - ((layoutState->m_layoutOffset - layoutState->m_pageOffset).height() + yPos) % pageHeight;5828 int remainingHeight = pageLogicalHeight - ((layoutState->m_layoutOffset - layoutState->m_pageOffset).height() + yPos) % pageLogicalHeight; 5829 5829 if (remainingHeight < lineHeight) { 5830 5830 int totalHeight = lineHeight + max(0, yPos); 5831 if (lineBox == firstRootBox() && totalHeight < page Height && !isPositioned() && !isTableCell())5831 if (lineBox == firstRootBox() && totalHeight < pageLogicalHeight && !isPositioned() && !isTableCell()) 5832 5832 setPaginationStrut(remainingHeight + max(0, yPos)); 5833 5833 else { -
trunk/WebCore/rendering/RenderBlock.h
r73385 r74048 72 72 virtual void removeChild(RenderObject*); 73 73 74 virtual void layoutBlock(bool relayoutChildren, int page Height = 0);74 virtual void layoutBlock(bool relayoutChildren, int pageLogicalHeight = 0); 75 75 76 76 void insertPositionedObject(RenderBox*); … … 568 568 569 569 void calcColumnWidth(); 570 bool layoutColumns(bool hasSpecifiedPage Height, int pageHeight, LayoutStateMaintainer&);570 bool layoutColumns(bool hasSpecifiedPageLogicalHeight, int pageLogicalHeight, LayoutStateMaintainer&); 571 571 void makeChildrenAnonymousColumnBlocks(RenderObject* beforeChild, RenderBlock* newBlockBox, RenderObject* newChild); 572 572 -
trunk/WebCore/rendering/RenderBox.cpp
r73941 r74048 1753 1753 int visHeight; 1754 1754 if (document()->printing()) 1755 visHeight = static_cast<int>(view()->page Height());1755 visHeight = static_cast<int>(view()->pageLogicalHeight()); 1756 1756 else { 1757 1757 if (style()->isHorizontalWritingMode()) -
trunk/WebCore/rendering/RenderFlexibleBox.cpp
r73385 r74048 279 279 updateLayerTransform(); 280 280 281 if (view()->layoutState()-> m_pageHeight)281 if (view()->layoutState()->pageLogicalHeight()) 282 282 setPageY(view()->layoutState()->pageY(y())); 283 283 -
trunk/WebCore/rendering/RenderTable.cpp
r73385 r74048 391 391 statePusher.pop(); 392 392 393 if (view()->layoutState()-> m_pageHeight)393 if (view()->layoutState()->pageLogicalHeight()) 394 394 setPageY(view()->layoutState()->pageY(y())); 395 395 -
trunk/WebCore/rendering/RenderTableRow.cpp
r72850 r74048 123 123 if (child->isTableCell()) { 124 124 RenderTableCell* cell = toRenderTableCell(child); 125 if (!cell->needsLayout() && paginated && view()->layoutState()-> m_pageHeight&& view()->layoutState()->pageY(cell->y()) != cell->pageY())125 if (!cell->needsLayout() && paginated && view()->layoutState()->pageLogicalHeight() && view()->layoutState()->pageY(cell->y()) != cell->pageY()) 126 126 cell->setChildNeedsLayout(true, false); 127 127 -
trunk/WebCore/rendering/RenderTableSection.cpp
r73484 r74048 615 615 cell->setNeedsLayout(true, false); 616 616 617 if (!cell->needsLayout() && view()->layoutState()-> m_pageHeight&& view()->layoutState()->pageY(cell->y()) != cell->pageY())617 if (!cell->needsLayout() && view()->layoutState()->pageLogicalHeight() && view()->layoutState()->pageY(cell->y()) != cell->pageY()) 618 618 cell->setChildNeedsLayout(true, false); 619 619 … … 621 621 622 622 // FIXME: Make pagination work with vertical tables. 623 if (style()->isHorizontalWritingMode() && view()->layoutState()-> m_pageHeight&& cell->height() != rHeight)623 if (style()->isHorizontalWritingMode() && view()->layoutState()->pageLogicalHeight() && cell->height() != rHeight) 624 624 cell->setHeight(rHeight); // FIXME: Pagination might have made us change size. For now just shrink or grow the cell to fit without doing a relayout. 625 625 -
trunk/WebCore/rendering/RenderView.cpp
r73729 r74048 50 50 , m_selectionEndPos(-1) 51 51 , m_maximalOutlineSize(0) 52 , m_page Height(0)53 , m_page HeightChanged(false)52 , m_pageLogicalHeight(0) 53 , m_pageLogicalHeightChanged(false) 54 54 , m_layoutState(0) 55 55 , m_layoutStateDisableCount(0) … … 103 103 { 104 104 if (!document()->paginated()) 105 setPage Height(0);105 setPageLogicalHeight(0); 106 106 107 107 if (printing()) … … 122 122 // FIXME: May be better to push a clip and avoid issuing offscreen repaints. 123 123 state.m_clipped = false; 124 state.m_page Height = m_pageHeight;125 state.m_page HeightChanged = m_pageHeightChanged;126 m_page HeightChanged = false;124 state.m_pageLogicalHeight = m_pageLogicalHeight; 125 state.m_pageLogicalHeightChanged = m_pageLogicalHeightChanged; 126 m_pageLogicalHeightChanged = false; 127 127 m_layoutState = &state; 128 128 -
trunk/WebCore/rendering/RenderView.h
r73972 r74048 133 133 virtual void updateHitTestResult(HitTestResult&, const IntPoint&); 134 134 135 unsigned page Height() const { return m_pageHeight; }136 void setPage Height(unsigned height)137 { 138 if (m_page Height != height) {139 m_page Height = height;140 m_page HeightChanged = true;135 unsigned pageLogicalHeight() const { return m_pageLogicalHeight; } 136 void setPageLogicalHeight(unsigned height) 137 { 138 if (m_pageLogicalHeight != height) { 139 m_pageLogicalHeight = height; 140 m_pageLogicalHeightChanged = true; 141 141 } 142 142 } … … 234 234 235 235 private: 236 unsigned m_page Height;237 bool m_page HeightChanged;236 unsigned m_pageLogicalHeight; 237 bool m_pageLogicalHeightChanged; 238 238 LayoutState* m_layoutState; 239 239 unsigned m_layoutStateDisableCount;
Note: See TracChangeset
for help on using the changeset viewer.