Bug 1393116 - Only fire resize event if size actually changed
MozReview-Commit-ID: 7ek1D9P81Gb
--- a/layout/base/PresShell.cpp
+++ b/layout/base/PresShell.cpp
@@ -1972,16 +1972,17 @@ PresShell::ResizeReflowIgnoreOverride(ns
if (wm.IsVertical()) {
targetWidth = NS_UNCONSTRAINEDSIZE;
} else {
targetHeight = NS_UNCONSTRAINEDSIZE;
}
isBSizeChanging = true;
}
+ nsRect oldVisArea = mPresContext->GetVisibleArea();
mPresContext->SetVisibleArea(nsRect(0, 0, targetWidth, targetHeight));
RefPtr<nsViewManager> viewManager = mViewManager;
nsCOMPtr<nsIPresShell> kungFuDeathGrip(this);
if (!GetPresContext()->SuppressingResizeReflow()) {
// Have to make sure that the content notifications are flushed before we
// start messing with the frame model; otherwise we can get content doubling.
@@ -2059,17 +2060,17 @@ PresShell::ResizeReflowIgnoreOverride(ns
mAsyncResizeTimerIsActive = true;
mAsyncResizeEventTimer->SetTarget(
mDocument->EventTargetFor(TaskCategory::Other));
mAsyncResizeEventTimer->InitWithNamedFuncCallback(AsyncResizeEventCallback,
this, 15,
nsITimer::TYPE_ONE_SHOT,
"AsyncResizeEventCallback");
}
- } else {
+ } else if (!mPresContext->GetVisibleArea().IsEqualEdges(oldVisArea)) {
RefPtr<nsRunnableMethod<PresShell>> event = NewRunnableMethod(
"PresShell::FireResizeEvent", this, &PresShell::FireResizeEvent);
nsresult rv = mDocument->Dispatch(TaskCategory::Other,
do_AddRef(event));
if (NS_SUCCEEDED(rv)) {
mResizeEvent = Move(event);
SetNeedStyleFlush();
}