зеркало из https://github.com/mozilla/gecko-dev.git
Backed out changeset a5a77d4a3cf3 (bug 1302470)
This commit is contained in:
Родитель
e78736fcec
Коммит
3e0e5a51d2
|
@ -1210,22 +1210,22 @@ nsTypeAheadFind::IsRangeVisible(nsIPresShell *aPresShell,
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
nsIFrame *frame = content->GetPrimaryFrame();
|
nsIFrame *frame = content->GetPrimaryFrame();
|
||||||
if (!frame) {
|
if (!frame)
|
||||||
return false; // No frame! Not visible then.
|
return false; // No frame! Not visible then.
|
||||||
}
|
|
||||||
|
|
||||||
if (!frame->StyleVisibility()->IsVisible()) {
|
if (!frame->StyleVisibility()->IsVisible())
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
|
|
||||||
// Detect if we are _inside_ a text control, or something else with its own
|
// Detect if we are _inside_ a text control, or something else with its own
|
||||||
// selection controller.
|
// selection controller.
|
||||||
if (aUsesIndependentSelection) {
|
if (aUsesIndependentSelection) {
|
||||||
*aUsesIndependentSelection =
|
*aUsesIndependentSelection =
|
||||||
(frame->GetStateBits() & NS_FRAME_INDEPENDENT_SELECTION);
|
(frame->GetStateBits() & NS_FRAME_INDEPENDENT_SELECTION);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---- We have a frame ----
|
// ---- We have a frame ----
|
||||||
|
if (!aMustBeInViewPort)
|
||||||
|
return true; // Don't need it to be on screen, just in rendering tree
|
||||||
|
|
||||||
// Get the next in flow frame that contains the range start
|
// Get the next in flow frame that contains the range start
|
||||||
int32_t startRangeOffset, startFrameOffset, endFrameOffset;
|
int32_t startRangeOffset, startFrameOffset, endFrameOffset;
|
||||||
|
@ -1259,22 +1259,12 @@ nsTypeAheadFind::IsRangeVisible(nsIPresShell *aPresShell,
|
||||||
minDistance);
|
minDistance);
|
||||||
|
|
||||||
if (rectVisibility != nsRectVisibility_kAboveViewport) {
|
if (rectVisibility != nsRectVisibility_kAboveViewport) {
|
||||||
// This is an early exit case, where we return true iff the range
|
return true;
|
||||||
// is actually rendered.
|
|
||||||
return IsRangeRendered(aPresShell, aPresContext, aRange);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Below this point, we know the range is not in the viewport.
|
// We know that the target range isn't usable because it's not in the
|
||||||
|
// view port. Move range forward to first visible point,
|
||||||
if (!aMustBeInViewPort) {
|
|
||||||
// This is an early exit case because we don't care that that range
|
|
||||||
// is out of viewport, so we return that the range is "visible".
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// The range isn't in the viewport, but we could scroll it into view.
|
|
||||||
// Move range forward to first visible point,
|
|
||||||
// this speeds us up a lot in long documents
|
// this speeds us up a lot in long documents
|
||||||
nsCOMPtr<nsIFrameEnumerator> frameTraversal;
|
nsCOMPtr<nsIFrameEnumerator> frameTraversal;
|
||||||
nsCOMPtr<nsIFrameTraversal> trav(do_CreateInstance(kFrameTraversalCID));
|
nsCOMPtr<nsIFrameTraversal> trav(do_CreateInstance(kFrameTraversalCID));
|
||||||
|
@ -1288,9 +1278,8 @@ nsTypeAheadFind::IsRangeVisible(nsIPresShell *aPresShell,
|
||||||
false // aSkipPopupChecks
|
false // aSkipPopupChecks
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!frameTraversal) {
|
if (!frameTraversal)
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
|
|
||||||
while (rectVisibility == nsRectVisibility_kAboveViewport) {
|
while (rectVisibility == nsRectVisibility_kAboveViewport) {
|
||||||
frameTraversal->Next();
|
frameTraversal->Next();
|
||||||
|
|
Загрузка…
Ссылка в новой задаче