Bug 1323586 - Drop reference to previous widget listener in PuppetWidget when showing after having been hidden. r=tnikkel

The previously attached widget listener is used mainly so that we can
continue to show the previous page until the next one is ready enough
to display properly (to avoid a "flashing" effect). When the PuppetWidget
is made visible after having been hidden (perhaps during a tab switch),
the previously attached widget listener is not useful. It's actually
harmful, since PuppetWidget::Paint will attempt to paint that old
widget listener, which is not possible, since it's detatched from
a widget, so we end up not painting a frame.

MozReview-Commit-ID: LJfKzepqguE

--HG--
extra : rebase_source : 60596bf63ad5fd8c2e1f1e84cb7d3dc1be8e0887
This commit is contained in:
Mike Conley 2016-12-16 15:54:49 -05:00
parent 9edb28857f
commit bb166e23a8

View File

@ -204,6 +204,15 @@ PuppetWidget::Show(bool aState)
}
if (!wasVisible && mVisible) {
// The previously attached widget listener is handy if
// we're transitioning from page to page without dropping
// layers (since we'll continue to show the old layers
// associated with that old widget listener). If the
// PuppetWidget was hidden, those layers are dropped,
// so the previously attached widget listener is really
// of no use anymore (and is actually actively harmful - see
// bug 1323586).
mPreviouslyAttachedWidgetListener = nullptr;
Resize(mBounds.width, mBounds.height, false);
Invalidate(mBounds);
}