tdf#94213 - calc re-size flicker turns out to be the status bar.

Using vdev's associated with old contexts, is un-necessary and a
recipe for context switching & hence flicker.

Change-Id: I37ed967a7816e5ca0240908ab4793ce1e68570ee
Reviewed-on: https://gerrit.libreoffice.org/18602
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Michael Meeks <michael.meeks@collabora.com>
diff --git a/vcl/source/window/event.cxx b/vcl/source/window/event.cxx
index d2ac5b7..5bef687 100644
--- a/vcl/source/window/event.cxx
+++ b/vcl/source/window/event.cxx
@@ -21,6 +21,7 @@
#include <vcl/window.hxx>
#include <vcl/dockwin.hxx>
#include <vcl/layout.hxx>
#include <vcl/opengl/OpenGLWrapper.hxx>

#include <window.h>
#include <svdata.hxx>
@@ -452,7 +453,14 @@ void Window::ImplCallResize()
{
    mpWindowImpl->mbCallResize = false;

    if( GetBackground().IsGradient() )
    // OpenGL has a charming feature of black clearing the whole window
    // some legacy code eg. the app-menu has the beautiful feature of
    // avoiding re-paints when width doesn't change => invalidate all.
    if( OpenGLWrapper::isVCLOpenGLEnabled() )
        Invalidate();

    // Normally we avoid blanking on re-size unless people might notice:
    else if( GetBackground().IsGradient() )
        Invalidate();

    Resize();
diff --git a/vcl/source/window/status.cxx b/vcl/source/window/status.cxx
index ca48fcd..472c837 100644
--- a/vcl/source/window/status.cxx
+++ b/vcl/source/window/status.cxx
@@ -27,6 +27,7 @@
#include <vcl/status.hxx>
#include <vcl/virdev.hxx>
#include <vcl/settings.hxx>
#include <vcl/opengl/OpenGLWrapper.hxx>

#include <svdata.hxx>
#include <window.h>
@@ -731,6 +732,11 @@ void StatusBar::Paint(vcl::RenderContext& rRenderContext, const Rectangle&)
            // Do offscreen only when we are not recording layout..
            bool bOffscreen = !rRenderContext.ImplIsRecordLayout();

            // tdf#94213 - un-necessary virtual-device in GL mode
            // causes context switch & hence flicker during sizing.
            if( OpenGLWrapper::isVCLOpenGLEnabled() )
                bOffscreen = false;

            for (sal_uInt16 i = 0; i < nItemCount; i++)
            {
                ImplDrawItem(rRenderContext, bOffscreen, i, true, true);