Bug 1157941 - If the current PresShell is suppressed, paint the old one if it is available r=tn,Enn
This commit is contained in:
@@ -217,7 +217,14 @@ PuppetWidget::Resize(double aWidth,
|
||||
InvalidateRegion(this, dirty);
|
||||
}
|
||||
|
||||
// call WindowResized() on both the current listener, and possibly
|
||||
// also the previous one if we're in a state where we're drawing that one
|
||||
// because the current one is paint suppressed
|
||||
if (!oldBounds.IsEqualEdges(mBounds) && mAttachedWidgetListener) {
|
||||
if (GetCurrentWidgetListener() &&
|
||||
GetCurrentWidgetListener() != mAttachedWidgetListener) {
|
||||
GetCurrentWidgetListener()->WindowResized(this, mBounds.width, mBounds.height);
|
||||
}
|
||||
mAttachedWidgetListener->WindowResized(this, mBounds.width, mBounds.height);
|
||||
}
|
||||
|
||||
@@ -313,8 +320,8 @@ PuppetWidget::DispatchEvent(WidgetGUIEvent* event, nsEventStatus& aStatus)
|
||||
|
||||
aStatus = nsEventStatus_eIgnore;
|
||||
|
||||
if (mAttachedWidgetListener) {
|
||||
aStatus = mAttachedWidgetListener->HandleEvent(event, mUseAttachedEvents);
|
||||
if (GetCurrentWidgetListener()) {
|
||||
aStatus = GetCurrentWidgetListener()->HandleEvent(event, mUseAttachedEvents);
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
@@ -912,7 +919,7 @@ PuppetWidget::Paint()
|
||||
{
|
||||
MOZ_ASSERT(!mDirtyRegion.IsEmpty(), "paint event logic messed up");
|
||||
|
||||
if (!mAttachedWidgetListener)
|
||||
if (!GetCurrentWidgetListener())
|
||||
return NS_OK;
|
||||
|
||||
nsIntRegion region = mDirtyRegion;
|
||||
@@ -921,9 +928,9 @@ PuppetWidget::Paint()
|
||||
mDirtyRegion.SetEmpty();
|
||||
mPaintTask.Revoke();
|
||||
|
||||
mAttachedWidgetListener->WillPaintWindow(this);
|
||||
GetCurrentWidgetListener()->WillPaintWindow(this);
|
||||
|
||||
if (mAttachedWidgetListener) {
|
||||
if (GetCurrentWidgetListener()) {
|
||||
#ifdef DEBUG
|
||||
debug_DumpPaintEvent(stderr, this, region,
|
||||
nsAutoCString("PuppetWidget"), 0);
|
||||
@@ -940,15 +947,15 @@ PuppetWidget::Paint()
|
||||
ctx->Clip();
|
||||
AutoLayerManagerSetup setupLayerManager(this, ctx,
|
||||
BufferMode::BUFFER_NONE);
|
||||
mAttachedWidgetListener->PaintWindow(this, region);
|
||||
GetCurrentWidgetListener()->PaintWindow(this, region);
|
||||
if (mTabChild) {
|
||||
mTabChild->NotifyPainted();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (mAttachedWidgetListener) {
|
||||
mAttachedWidgetListener->DidPaintWindow();
|
||||
if (GetCurrentWidgetListener()) {
|
||||
GetCurrentWidgetListener()->DidPaintWindow();
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
@@ -1250,5 +1257,20 @@ PuppetScreenManager::GetSystemDefaultScale(float *aDefaultScale)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsIWidgetListener*
|
||||
PuppetWidget::GetCurrentWidgetListener()
|
||||
{
|
||||
if (!mPreviouslyAttachedWidgetListener ||
|
||||
!mAttachedWidgetListener) {
|
||||
return mAttachedWidgetListener;
|
||||
}
|
||||
|
||||
if (mAttachedWidgetListener->GetView()->IsPrimaryFramePaintSuppressed()) {
|
||||
return mPreviouslyAttachedWidgetListener;
|
||||
}
|
||||
|
||||
return mAttachedWidgetListener;
|
||||
}
|
||||
|
||||
} // namespace widget
|
||||
} // namespace mozilla
|
||||
|
||||
Reference in New Issue
Block a user