[plugins/qpa] Do not replace a valid FBO with an invalid one

Summary:
With the TabBox I observed the following issue:
 1: trigger TabBox through screen edge
 2: exit TabBox
 3: trigger TabBox again through screen edge

Actual behavior: in step 3 the GUI does not show. If now using Alt+Tab
to show the TabBox the gui shows, but through screen edge it stays
broken.

Investigation showed that the difference is a direct show in screen edge
case and a delayed show in Alt+Tab case. Futher investigation shows that
an invalid geometry gets requested in the broken case. While this might
indicate an issue in another area it makes sense to protect KWin
internally against it and not to break rendering.

Thus this change ensures that a valid FBO does not get replaced by an
invalid sized FBO.

Test Plan:
Tested that Alt+Tab works correctly when triggered through
edge

Reviewers: #kwin, #plasma

Subscribers: plasma-devel, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D5438
This commit is contained in:
Martin Gräßlin 2017-04-13 21:23:40 +02:00
parent e9a44a275e
commit ac08c5ac9d

View file

@ -151,6 +151,9 @@ QSharedPointer<QOpenGLFramebufferObject> Window::swapFBO()
void Window::createFBO() void Window::createFBO()
{ {
const QRect &r = geometry(); const QRect &r = geometry();
if (m_contentFBO && r.size().isEmpty()) {
return;
}
m_contentFBO.reset(new QOpenGLFramebufferObject(r.width(), r.height(), QOpenGLFramebufferObject::CombinedDepthStencil)); m_contentFBO.reset(new QOpenGLFramebufferObject(r.width(), r.height(), QOpenGLFramebufferObject::CombinedDepthStencil));
if (!m_contentFBO->isValid()) { if (!m_contentFBO->isValid()) {
qCWarning(KWIN_QPA) << "Content FBO is not valid"; qCWarning(KWIN_QPA) << "Content FBO is not valid";