diff --git a/src/plugins/scenes/opengl/scene_opengl.cpp b/src/plugins/scenes/opengl/scene_opengl.cpp index 0e0d78b638..1a13c8b18e 100644 --- a/src/plugins/scenes/opengl/scene_opengl.cpp +++ b/src/plugins/scenes/opengl/scene_opengl.cpp @@ -641,7 +641,7 @@ void SceneOpenGL::paint(int screenId, const QRegion &damage, const QListwindow(); if (toplevel->isOnScreen(screenId) && window->isVisible() && toplevel->opacity() > 0) { AbstractClient *c = dynamic_cast(toplevel); - if (!c || !c->isFullScreen() || !window->isOpaque()) { + if (!c || !c->isFullScreen()) { break; } auto pixmap = window->windowPixmap(); @@ -654,6 +654,10 @@ void SceneOpenGL::paint(int screenId, const QRegion &damage, const QListposition() != QPoint(0, 0)) { break; } + // and it has to be completely opaque + if (!window->isOpaque() && !pixmap->opaque().contains(QRect(0, 0, window->width(), window->height()))) { + break; + } directScanout = m_backend->scanout(screenId, pixmap->surface()); break; }