diff --git a/toolkit/content/tests/chrome/test_bug624329.xul b/toolkit/content/tests/chrome/test_bug624329.xul index 03e33002331f..db2428712885 100644 --- a/toolkit/content/tests/chrome/test_bug624329.xul +++ b/toolkit/content/tests/chrome/test_bug624329.xul @@ -55,16 +55,15 @@ function childFocused() { function childResized() { const isOSXLion = navigator.userAgent.indexOf("Mac OS X 10.7") != -1; - if (isOSXLion) { - todo_is(win.windowState, win.STATE_MAXIMIZED, - "A resize before being maximized breaks this test on 10.7"); - finish(); - return; - } is(win.windowState, win.STATE_MAXIMIZED, "window should be maximized"); + if (isOSXLion) { + finish(); + return; + } + isnot(win.innerWidth, 300, "window inner width should have changed"); diff --git a/view/src/nsViewManager.cpp b/view/src/nsViewManager.cpp index a86ece9c7551..623c2b5ab46b 100644 --- a/view/src/nsViewManager.cpp +++ b/view/src/nsViewManager.cpp @@ -341,7 +341,7 @@ void nsViewManager::Refresh(nsView *aView, const nsIntRegion& aRegion, printf("--COMPOSITE-- %p\n", mPresShell); #endif mPresShell->Paint(aView, damageRegion, nsIPresShell::PaintType_Composite, - aWillSendDidPaint); + false); #ifdef DEBUG_INVALIDATIONS printf("--ENDCOMPOSITE--\n"); #endif @@ -387,6 +387,27 @@ bool nsViewManager::ProcessPendingUpdatesForView(nsView* aView, aView->SkippedPaint(); skipped = true; } else { + // If an ancestor widget was hidden and then shown, we could + // have a delayed resize to handle. + for (nsViewManager *vm = this; vm; + vm = vm->mRootView->GetParent() + ? vm->mRootView->GetParent()->GetViewManager() + : nsnull) { + if (vm->mDelayedResize != nsSize(NSCOORD_NONE, NSCOORD_NONE) && + vm->mRootView->IsEffectivelyVisible() && + mPresShell && mPresShell->IsVisible()) { + vm->FlushDelayedResize(true); + vm->InvalidateView(vm->mRootView); + } + } + + // Flush things like reflows and plugin widget geometry updates by + // calling WillPaint on observer presShells. + nsRefPtr rootVM = RootViewManager(); + if (mPresShell) { + rootVM->CallWillPaintOnObservers(true); + } + aView->ClearSkippedPaints(); aView->SetPendingRefresh(false); widget->SetNeedsPaint(false); @@ -395,11 +416,13 @@ bool nsViewManager::ProcessPendingUpdatesForView(nsView* aView, printf("---- PAINT START ----PresShell(%p), nsView(%p), nsIWidget(%p)\n", mPresShell, aView, widget); #endif nsAutoScriptBlocker scriptBlocker; - mPresShell->Paint(aView, nsRegion(), nsIPresShell::PaintType_NoComposite, false); + mPresShell->Paint(aView, nsRegion(), nsIPresShell::PaintType_NoComposite, true); #ifdef DEBUG_INVALIDATIONS printf("---- PAINT END ----\n"); #endif SetPainting(false); + + rootVM->CallDidPaintOnObserver(); } } FlushDirtyRegionToWidget(aView); @@ -732,35 +755,6 @@ NS_IMETHODIMP nsViewManager::DispatchEvent(nsGUIEvent *aEvent, break; *aStatus = nsEventStatus_eConsumeNoDefault; - - nsPaintEvent *event = static_cast(aEvent); - - NS_ASSERTION(static_cast(aView) == - nsView::GetViewFor(event->widget), - "view/widget mismatch"); - - // If an ancestor widget was hidden and then shown, we could - // have a delayed resize to handle. - for (nsViewManager *vm = this; vm; - vm = vm->mRootView->GetParent() - ? vm->mRootView->GetParent()->GetViewManager() - : nsnull) { - if (vm->mDelayedResize != nsSize(NSCOORD_NONE, NSCOORD_NONE) && - vm->mRootView->IsEffectivelyVisible() && - mPresShell && mPresShell->IsVisible()) { - vm->FlushDelayedResize(true); - vm->InvalidateView(vm->mRootView); - } - } - - // Flush things like reflows and plugin widget geometry updates by - // calling WillPaint on observer presShells. - nsRefPtr rootVM = RootViewManager(); - if (mPresShell) { - rootVM->CallWillPaintOnObservers(event->willSendDidPaint); - } - // Flush view widget geometry updates and invalidations. - rootVM->ProcessPendingUpdates(); } break; @@ -778,17 +772,6 @@ NS_IMETHODIMP nsViewManager::DispatchEvent(nsGUIEvent *aEvent, "shouldn't be receiving paint events while painting is " "disallowed!"); - if (!event->didSendWillPaint) { - // Send NS_WILL_PAINT event ourselves. - nsPaintEvent willPaintEvent(true, NS_WILL_PAINT, event->widget); - willPaintEvent.willSendDidPaint = event->willSendDidPaint; - DispatchEvent(&willPaintEvent, view, aStatus); - - // Get the view pointer again since NS_WILL_PAINT might have - // destroyed it during CallWillPaintOnObservers (bug 378273). - view = nsView::GetViewFor(event->widget); - } - if (!view || event->region.IsEmpty()) break; @@ -799,8 +782,6 @@ NS_IMETHODIMP nsViewManager::DispatchEvent(nsGUIEvent *aEvent, } case NS_DID_PAINT: { - nsRefPtr rootVM = RootViewManager(); - rootVM->CallDidPaintOnObserver(); break; }