diff options
-rw-r--r-- | vcl/source/window/event.cxx | 10 | ||||
-rw-r--r-- | vcl/source/window/status.cxx | 6 |
2 files changed, 15 insertions, 1 deletions
diff --git a/vcl/source/window/event.cxx b/vcl/source/window/event.cxx index 852cc0c56938..35c3e385fbd3 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> @@ -453,7 +454,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 e8e2aaf3fa51..76c2de3bdf27 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); |