From bb166e23a8400abc61589a4eef23a25483ca6ec1 Mon Sep 17 00:00:00 2001 From: Mike Conley Date: Fri, 16 Dec 2016 15:54:49 -0500 Subject: [PATCH] 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 --- widget/PuppetWidget.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/widget/PuppetWidget.cpp b/widget/PuppetWidget.cpp index 45291754379b..4c179f875e79 100644 --- a/widget/PuppetWidget.cpp +++ b/widget/PuppetWidget.cpp @@ -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); }