diff --git a/widget/src/gtk2/nsWindow.cpp b/widget/src/gtk2/nsWindow.cpp index bd48ab068922..d0cf7959612b 100644 --- a/widget/src/gtk2/nsWindow.cpp +++ b/widget/src/gtk2/nsWindow.cpp @@ -1488,29 +1488,35 @@ nsWindow::OnExposeEvent(GtkWidget *aWidget, GdkEventExpose *aEvent) DispatchEvent(&event, status); #ifdef MOZ_CAIRO_GFX - ctx->SetOperator(gfxContext::OPERATOR_SOURCE); - if (!translucent) { - ctx->PopGroupToSource(); - ctx->Paint(); - } else { - nsRefPtr pattern = ctx->PopGroup(); - ctx->SetPattern(pattern); - ctx->Paint(); + if (status != nsEventStatus_eIgnore) { + ctx->SetOperator(gfxContext::OPERATOR_SOURCE); + if (!translucent) { + ctx->PopGroupToSource(); + ctx->Paint(); + } else { + nsRefPtr pattern = ctx->PopGroup(); + ctx->SetPattern(pattern); + ctx->Paint(); - nsRefPtr img = - new gfxImageSurface(gfxImageSurface::ImageFormatA8, - collapsedRect.width, collapsedRect.height); - img->SetDeviceOffset(-collapsedRect.x, -collapsedRect.y); + nsRefPtr img = + new gfxImageSurface(gfxImageSurface::ImageFormatA8, + collapsedRect.width, collapsedRect.height); + img->SetDeviceOffset(-collapsedRect.x, -collapsedRect.y); + + nsRefPtr imgCtx = new gfxContext(img); + imgCtx->SetPattern(pattern); + imgCtx->SetOperator(gfxContext::OPERATOR_SOURCE); + imgCtx->Paint(); - nsRefPtr imgCtx = new gfxContext(img); - imgCtx->SetPattern(pattern); - imgCtx->SetOperator(gfxContext::OPERATOR_SOURCE); - imgCtx->Paint(); - - UpdateTranslucentWindowAlphaInternal(nsRect(collapsedRect.x, collapsedRect.y, - collapsedRect.width, collapsedRect.height), - img->Data(), img->Stride()); + UpdateTranslucentWindowAlphaInternal(nsRect(collapsedRect.x, collapsedRect.y, + collapsedRect.width, collapsedRect.height), + img->Data(), img->Stride()); + } + } else { + // ignore + ctx->PopGroup(); } + ctx->Restore(); #endif