diff --git a/view/src/nsView.cpp b/view/src/nsView.cpp index 8b46d0db40c2..e99941b4aa00 100644 --- a/view/src/nsView.cpp +++ b/view/src/nsView.cpp @@ -539,6 +539,7 @@ NS_IMETHODIMP nsView::GetBounds(nsRect &aBounds) const NS_IMETHODIMP nsView::SetVisibility(nsViewVisibility aVisibility) { + mVis = aVisibility; if (aVisibility == nsViewVisibility_kHide) @@ -546,10 +547,7 @@ NS_IMETHODIMP nsView::SetVisibility(nsViewVisibility aVisibility) DropMouseGrabbing(); } - // Don't show or hide the widget if the view manager is batching - // updates. Showing/Hiding the view's widget will cause widget's to - // be invalidated. When batching all invalidates must be deferred. - if ((nsnull != mWindow) && (! mViewManager->IsBatchingUpdates())) + if (nsnull != mWindow) { #ifndef HIDE_ALL_WIDGETS if (mVis == nsViewVisibility_kShow) diff --git a/view/src/nsViewManager.cpp b/view/src/nsViewManager.cpp index 041ded059461..888845371f14 100644 --- a/view/src/nsViewManager.cpp +++ b/view/src/nsViewManager.cpp @@ -1545,27 +1545,14 @@ void nsViewManager::ProcessPendingUpdates(nsView* aView) if (nsnull == aView) { return; } - PRBool hasWidget; aView->HasWidget(&hasWidget); if (hasWidget) { - // Check to see if the visibility matches between the view and widget. - // If they dont match then showing/hiding the widget was deferred. - nsViewVisibility viewVisibility = aView->GetVisibility(); - nsCOMPtr widget; - aView->GetWidget(*getter_AddRefs(widget)); - if (widget) { - PRBool widgetVisibility; - widget->IsVisible(widgetVisibility); - if (((viewVisibility == nsViewVisibility_kShow) != widgetVisibility)) { - // Process the deferred show/hide of the view's widget - widget->Show(viewVisibility == nsViewVisibility_kShow); - } - } - nsCOMPtr dirtyRegion; aView->GetDirtyRegion(*getter_AddRefs(dirtyRegion)); if (dirtyRegion != nsnull && !dirtyRegion->IsEmpty()) { + nsCOMPtr widget; + aView->GetWidget(*getter_AddRefs(widget)); if (widget) { widget->InvalidateRegion(dirtyRegion, PR_FALSE); } @@ -1668,6 +1655,16 @@ PRBool nsViewManager::UpdateWidgetArea(nsView *aWidgetView, const nsRect &aDamag nsViewVisibility visible; aWidgetView->GetVisibility(visible); if (nsViewVisibility_kHide == visible) { +#ifdef DEBUG + // Assert if view is hidden but widget is visible + nsCOMPtr widget; + GetWidgetForView(aWidgetView, getter_AddRefs(widget)); + if (widget) { + PRBool visible; + widget->IsVisible(visible); + NS_ASSERTION(!visible, "View is hidden but widget is visible!"); + } +#endif return PR_FALSE; } @@ -3318,12 +3315,6 @@ NS_IMETHODIMP nsViewManager::EnableRefresh(PRUint32 aUpdateFlags) return NS_OK; } -PRBool nsViewManager::IsBatchingUpdates(void) -{ - return mUpdateBatchCnt > 0; -} - - NS_IMETHODIMP nsViewManager::BeginUpdateViewBatch(void) { nsresult result = NS_OK; diff --git a/view/src/nsViewManager.h b/view/src/nsViewManager.h index 37f486a0c9b3..26df759ffe15 100644 --- a/view/src/nsViewManager.h +++ b/view/src/nsViewManager.h @@ -235,11 +235,6 @@ public: PRUint16 aMinTwips, nsRectVisibility *aRectVisibility); - /* Determine if invalidates are being batched through the use - * of BeginUpdateViewBatch - * @returns PR_TRUE if current batching updates, PR_FALSE otherwise - */ - PRBool IsBatchingUpdates(void); protected: virtual ~nsViewManager(); void ProcessPendingUpdates(nsView *aView);