Merge branch 'Plasma/5.12'

This commit is contained in:
Martin Flöser 2018-02-04 15:00:31 +01:00
commit 45bdd8a342
6 changed files with 15 additions and 6 deletions

View file

@ -470,7 +470,7 @@ void QuickTilingTest::testQuickTilingPointerMoveXdgShell()
QCOMPARE(c->quickTileMode(), QuickTileMode(QuickTileFlag::None));
QCOMPARE(c->maximizeMode(), MaximizeRestore);
QVERIFY(configureRequestedSpy.wait());
QCOMPARE(configureRequestedSpy.count(), 2);
QTRY_COMPARE(configureRequestedSpy.count(), 2);
QSignalSpy quickTileChangedSpy(c, &AbstractClient::quickTileModeChanged);
QVERIFY(quickTileChangedSpy.isValid());
@ -492,9 +492,7 @@ void QuickTilingTest::testQuickTilingPointerMoveXdgShell()
QCOMPARE(quickTileChangedSpy.count(), 1);
QTEST(c->quickTileMode(), "expectedMode");
QVERIFY(configureRequestedSpy.wait());
QEXPECT_FAIL("", "BUG 388072", Continue);
QCOMPARE(configureRequestedSpy.count(), 4);
QEXPECT_FAIL("", "BUG 388072", Continue);
QCOMPARE(false, configureRequestedSpy.last().first().toSize().isEmpty());
}

View file

@ -2745,6 +2745,7 @@ bool Client::doStartMoveResize()
void AbstractClient::finishMoveResize(bool cancel)
{
GeometryUpdatesBlocker blocker(this);
const bool wasResize = isResize(); // store across leaveMoveResize
leaveMoveResize();

View file

@ -47,6 +47,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "decorations/decoratedclient.h"
#include <logging.h>
#include <KWayland/Server/buffer_interface.h>
#include <KWayland/Server/subcompositor_interface.h>
#include <KWayland/Server/surface_interface.h>
@ -1358,7 +1359,7 @@ QMatrix4x4 SceneOpenGL2Window::modelViewProjectionMatrix(int mask, const WindowP
return scene->projectionMatrix() * mvMatrix;
}
static void renderSubSurface(GLShader *shader, const QMatrix4x4 &mvp, const QMatrix4x4 &windowMatrix, OpenGLWindowPixmap *pixmap, const QRegion &region, bool hardwareClipping)
void SceneOpenGL2Window::renderSubSurface(GLShader *shader, const QMatrix4x4 &mvp, const QMatrix4x4 &windowMatrix, OpenGLWindowPixmap *pixmap, const QRegion &region, bool hardwareClipping)
{
QMatrix4x4 newWindowMatrix = windowMatrix;
newWindowMatrix.translate(pixmap->subSurface()->position().x(), pixmap->subSurface()->position().y());
@ -1369,6 +1370,7 @@ static void renderSubSurface(GLShader *shader, const QMatrix4x4 &mvp, const QMat
}
if (!pixmap->texture()->isNull()) {
setBlendEnabled(pixmap->buffer() && pixmap->buffer()->hasAlphaChannel());
// render this texture
shader->setUniform(GLShader::ModelViewProjectionMatrix, mvp * newWindowMatrix);
auto texture = pixmap->texture();
@ -1515,8 +1517,6 @@ void SceneOpenGL2Window::performPaint(int mask, QRegion region, WindowPaintData
vbo->unbindArrays();
setBlendEnabled(false);
// render sub-surfaces
auto wp = windowPixmap<OpenGLWindowPixmap>();
const auto &children = wp ? wp->children() : QVector<WindowPixmap*>();
@ -1528,6 +1528,8 @@ void SceneOpenGL2Window::performPaint(int mask, QRegion region, WindowPaintData
renderSubSurface(shader, modelViewProjection, windowMatrix, static_cast<OpenGLWindowPixmap*>(pixmap), region, m_hardwareClipping);
}
setBlendEnabled(false);
if (!data.shader)
ShaderManager::instance()->popShader();

View file

@ -173,6 +173,8 @@ protected:
bool m_hardwareClipping;
};
class OpenGLWindowPixmap;
class SceneOpenGL2Window : public SceneOpenGL::Window
{
public:
@ -209,6 +211,7 @@ protected:
virtual void performPaint(int mask, QRegion region, WindowPaintData data);
private:
void renderSubSurface(GLShader *shader, const QMatrix4x4 &mvp, const QMatrix4x4 &windowMatrix, OpenGLWindowPixmap *pixmap, const QRegion &region, bool hardwareClipping);
/**
* Whether prepareStates enabled blending and restore states should disable again.
**/

View file

@ -293,6 +293,9 @@ void ShellClient::init()
if (m_closing) {
return;
}
if (m_requestGeometryBlockCounter != 0 || areGeometryUpdatesBlocked()) {
return;
}
m_xdgShellSurface->configure(xdgSurfaceStates());
};
configure();

View file

@ -245,6 +245,8 @@ private:
if (m_client->m_requestGeometryBlockCounter == 0) {
if (m_client->m_blockedRequestGeometry.isValid()) {
m_client->requestGeometry(m_client->m_blockedRequestGeometry);
} else if (m_client->m_xdgShellSurface) {
m_client->m_xdgShellSurface->configure(m_client->xdgSurfaceStates());
}
}
}