summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Olav Tvete <paul.tvete@theqtcompany.com>2016-03-08 14:45:49 +0100
committerPaul Olav Tvete <paul.tvete@theqtcompany.com>2016-03-08 14:45:49 +0100
commit85428526fb3e5a1605e8df2e009d333193809fae (patch)
tree08ac5d72c773b2ad9cd27a87e29c5f4055fdbf35
parent95ed69bd08f424b80524414fbc0456f315353cf5 (diff)
parent19260d9846861212881e374229798b3863d1a78d (diff)
Merge remote-tracking branch 'qt/5.6' into 5.7
-rw-r--r--.gitignore2
-rw-r--r--src/client/client.pro30
-rw-r--r--src/client/qwaylandbuffer.cpp72
-rw-r--r--src/client/qwaylandbuffer_p.h18
-rw-r--r--src/client/qwaylandinputdevice.cpp5
-rw-r--r--src/client/qwaylandshmbackingstore.cpp176
-rw-r--r--src/client/qwaylandshmbackingstore_p.h10
-rw-r--r--src/client/qwaylandwindow.cpp15
-rw-r--r--src/client/qwaylandwindow_p.h1
-rw-r--r--src/compositor/compositor.pro12
-rw-r--r--src/hardwareintegration/client/xcomposite-egl/qwaylandxcompositeeglwindow.cpp1
-rw-r--r--src/hardwareintegration/client/xcomposite-egl/qwaylandxcompositeeglwindow.h1
-rw-r--r--src/hardwareintegration/client/xcomposite-glx/qwaylandxcompositeglxwindow.cpp1
-rw-r--r--src/hardwareintegration/client/xcomposite-glx/qwaylandxcompositeglxwindow.h1
-rw-r--r--src/plugins/decorations/bradient/bradient.pro5
-rw-r--r--src/plugins/hardwareintegration/client/brcm-egl/brcm-egl.pro5
-rw-r--r--src/plugins/hardwareintegration/client/drm-egl-server/drm-egl-server.pro5
-rw-r--r--src/plugins/hardwareintegration/client/libhybris-egl-server/libhybris-egl-server.pro5
-rw-r--r--src/plugins/hardwareintegration/client/wayland-egl/wayland-egl.pro5
-rw-r--r--src/plugins/hardwareintegration/client/xcomposite-egl/xcomposite-egl.pro5
-rw-r--r--src/plugins/hardwareintegration/client/xcomposite-glx/xcomposite-glx.pro5
-rw-r--r--src/plugins/hardwareintegration/compositor/brcm-egl/brcm-egl.pro6
-rw-r--r--src/plugins/hardwareintegration/compositor/drm-egl-server/drm-egl-server.pro5
-rw-r--r--src/plugins/hardwareintegration/compositor/libhybris-egl-server/libhybris-egl-server.pro5
-rw-r--r--src/plugins/hardwareintegration/compositor/wayland-egl/wayland-egl.pro6
-rw-r--r--src/plugins/hardwareintegration/compositor/xcomposite-egl/xcomposite-egl.pro6
-rw-r--r--src/plugins/hardwareintegration/compositor/xcomposite-glx/xcomposite-glx.pro6
-rw-r--r--src/plugins/platforms/qwayland-brcm-egl/qwayland-brcm-egl.pro5
-rw-r--r--src/plugins/platforms/qwayland-egl/qwayland-egl.pro5
-rw-r--r--src/plugins/platforms/qwayland-generic/qwayland-generic.pro5
-rw-r--r--src/plugins/platforms/qwayland-xcomposite-egl/qwayland-xcomposite-egl.pro5
-rw-r--r--src/plugins/platforms/qwayland-xcomposite-glx/qwayland-xcomposite-glx.pro6
32 files changed, 232 insertions, 208 deletions
diff --git a/.gitignore b/.gitignore
index 6681af4a..8ba7b05c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -43,7 +43,7 @@ examples/wayland/server-buffer/compositor/qwayland-server-*.h
examples/wayland/server-buffer/compositor/*-server-protocol.h
examples/wayland/server-buffer/compositor/*-protocol.c
examples/wayland/subsurface/subsurface
-src/client/qwayland*.cpp
+src/client/qwayland-*.cpp
src/client/*-protocol.c
src/client/QtWaylandClient.version
src/client/QtWaylandClient.version.in
diff --git a/src/client/client.pro b/src/client/client.pro
index 4ad32c12..edaff771 100644
--- a/src/client/client.pro
+++ b/src/client/client.pro
@@ -1,18 +1,9 @@
TARGET = QtWaylandClient
+MODULE = waylandclient
+
QT += core-private gui-private
QT_FOR_PRIVATE += platformsupport-private
-MODULE=waylandclient
-MODULE_PLUGIN_TYPES = \
- wayland-graphics-integration-client \
- wayland-inputdevice-integration \
- wayland-decoration-client \
- wayland-shell-integration
-
-CONFIG += generated_privates
-
-load(qt_module)
-
# We have a bunch of C code with casts, so we can't have this option
QMAKE_CXXFLAGS_WARN_ON -= -Wcast-qual
@@ -25,19 +16,19 @@ CONFIG += link_pkgconfig qpa/genericunixfontdatabase wayland-scanner
config_xkbcommon {
!contains(QT_CONFIG, no-pkg-config) {
- PKGCONFIG += xkbcommon
+ PKGCONFIG_PRIVATE += xkbcommon
} else {
- LIBS += -lxkbcommon
+ LIBS_PRIVATE += -lxkbcommon
}
} else {
DEFINES += QT_NO_WAYLAND_XKB
}
!contains(QT_CONFIG, no-pkg-config) {
- PKGCONFIG += wayland-client wayland-cursor
+ PKGCONFIG_PRIVATE += wayland-client wayland-cursor
contains(QT_CONFIG, glib): PKGCONFIG_PRIVATE += glib-2.0
} else {
- LIBS += -lwayland-client -lwayland-cursor $$QT_LIBS_GLIB
+ LIBS_PRIVATE += -lwayland-client -lwayland-cursor $$QT_LIBS_GLIB
}
INCLUDEPATH += $$PWD/../shared
@@ -82,6 +73,7 @@ SOURCES += qwaylandintegration.cpp \
qwaylandinputcontext.cpp \
qwaylanddatadevice.cpp \
qwaylandshm.cpp \
+ qwaylandbuffer.cpp \
HEADERS += qwaylandintegration_p.h \
qwaylandnativeinterface_p.h \
@@ -119,3 +111,11 @@ HEADERS += qwaylandintegration_p.h \
include(hardwareintegration/hardwareintegration.pri)
include(shellintegration/shellintegration.pri)
include(inputdeviceintegration/inputdeviceintegration.pri)
+
+CONFIG += generated_privates
+MODULE_PLUGIN_TYPES = \
+ wayland-graphics-integration-client \
+ wayland-inputdevice-integration \
+ wayland-decoration-client \
+ wayland-shell-integration
+load(qt_module)
diff --git a/src/client/qwaylandbuffer.cpp b/src/client/qwaylandbuffer.cpp
new file mode 100644
index 00000000..c6aace2c
--- /dev/null
+++ b/src/client/qwaylandbuffer.cpp
@@ -0,0 +1,72 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Copyright (C) 2015 Giulio Camuffo.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qwaylandbuffer_p.h"
+
+#include <QDebug>
+
+QT_BEGIN_NAMESPACE
+
+namespace QtWaylandClient {
+
+QWaylandBuffer::QWaylandBuffer()
+ : mBuffer(0)
+ , mBusy(false)
+{
+}
+
+QWaylandBuffer::~QWaylandBuffer()
+{
+ if (mBuffer)
+ wl_buffer_destroy(mBuffer);
+}
+
+void QWaylandBuffer::init(wl_buffer *buf)
+{
+ mBuffer = buf;
+ wl_buffer_add_listener(buf, &listener, this);
+}
+
+void QWaylandBuffer::release(void *data, wl_buffer *)
+{
+ static_cast<QWaylandBuffer *>(data)->mBusy = false;
+}
+
+const wl_buffer_listener QWaylandBuffer::listener = {
+ QWaylandBuffer::release
+};
+
+}
+
+QT_END_NAMESPACE
diff --git a/src/client/qwaylandbuffer_p.h b/src/client/qwaylandbuffer_p.h
index 631439f7..7dd920ac 100644
--- a/src/client/qwaylandbuffer_p.h
+++ b/src/client/qwaylandbuffer_p.h
@@ -65,17 +65,25 @@ namespace QtWaylandClient {
class Q_WAYLAND_CLIENT_EXPORT QWaylandBuffer {
public:
- QWaylandBuffer()
- : mBuffer(0)
- {
- }
- virtual ~QWaylandBuffer() { }
+ QWaylandBuffer();
+ virtual ~QWaylandBuffer();
+ void init(wl_buffer *buf);
+
wl_buffer *buffer() {return mBuffer;}
virtual QSize size() const = 0;
virtual int scale() const { return 1; }
+ void setBusy() { mBusy = true; }
+ bool busy() const { return mBusy; }
+
protected:
struct wl_buffer *mBuffer;
+
+private:
+ bool mBusy;
+
+ static void release(void *data, wl_buffer *);
+ static const wl_buffer_listener listener;
};
}
diff --git a/src/client/qwaylandinputdevice.cpp b/src/client/qwaylandinputdevice.cpp
index 44a21658..8f0e32f6 100644
--- a/src/client/qwaylandinputdevice.cpp
+++ b/src/client/qwaylandinputdevice.cpp
@@ -259,6 +259,8 @@ void QWaylandInputDevice::handleWindowDestroyed(QWaylandWindow *window)
mKeyboard->mFocus = 0;
mKeyboard->stopRepeat();
}
+ if (mTouch && window == mTouch->mFocus)
+ mTouch->mFocus = 0;
}
void QWaylandInputDevice::setDataDevice(QWaylandDataDevice *device)
@@ -745,6 +747,9 @@ void QWaylandInputDevice::Touch::touch_down(uint32_t serial,
wl_fixed_t x,
wl_fixed_t y)
{
+ if (!surface)
+ return;
+
mParent->mTime = time;
mParent->mSerial = serial;
mFocus = QWaylandWindow::fromWlSurface(surface);
diff --git a/src/client/qwaylandshmbackingstore.cpp b/src/client/qwaylandshmbackingstore.cpp
index 758faab6..ea1fe7ba 100644
--- a/src/client/qwaylandshmbackingstore.cpp
+++ b/src/client/qwaylandshmbackingstore.cpp
@@ -46,6 +46,7 @@
#include <QtCore/qdebug.h>
#include <QtGui/QPainter>
#include <QMutexLocker>
+#include <QLoggingCategory>
#include <wayland-client.h>
#include <wayland-client-protocol.h>
@@ -59,9 +60,14 @@ QT_BEGIN_NAMESPACE
namespace QtWaylandClient {
+Q_DECLARE_LOGGING_CATEGORY(logCategory)
+
+Q_LOGGING_CATEGORY(logCategory, "qt.qpa.wayland.backingstore")
+
QWaylandShmBuffer::QWaylandShmBuffer(QWaylandDisplay *display,
const QSize &size, QImage::Format format, int scale)
- : mShmPool(0)
+ : QWaylandBuffer()
+ , mShmPool(0)
, mMarginsImage(0)
{
int stride = size.width() * 4;
@@ -97,8 +103,8 @@ QWaylandShmBuffer::QWaylandShmBuffer(QWaylandDisplay *display,
mImage.setDevicePixelRatio(qreal(scale));
mShmPool = wl_shm_create_pool(shm->object(), fd, alloc);
- mBuffer = wl_shm_pool_create_buffer(mShmPool,0, size.width(), size.height(),
- stride, wl_format);
+ init(wl_shm_pool_create_buffer(mShmPool,0, size.width(), size.height(),
+ stride, wl_format));
close(fd);
}
@@ -107,8 +113,6 @@ QWaylandShmBuffer::~QWaylandShmBuffer(void)
delete mMarginsImage;
if (mImage.constBits())
munmap((void *) mImage.constBits(), mImage.byteCount());
- if (mBuffer)
- wl_buffer_destroy(mBuffer);
if (mShmPool)
wl_shm_pool_destroy(mShmPool);
}
@@ -146,9 +150,7 @@ QWaylandShmBackingStore::QWaylandShmBackingStore(QWindow *window)
, mDisplay(QWaylandScreen::waylandScreenFromWindow(window)->display())
, mFrontBuffer(0)
, mBackBuffer(0)
- , mFrontBufferIsDirty(false)
, mPainting(false)
- , mFrameCallback(0)
{
}
@@ -158,16 +160,10 @@ QWaylandShmBackingStore::~QWaylandShmBackingStore()
if (QWaylandWindow *w = waylandWindow())
w->setBackingStore(Q_NULLPTR);
- if (mFrameCallback)
- wl_callback_destroy(mFrameCallback);
-
// if (mFrontBuffer == waylandWindow()->attached())
// waylandWindow()->attach(0);
- if (mFrontBuffer != mBackBuffer)
- delete mFrontBuffer;
-
- delete mBackBuffer;
+ qDeleteAll(mBuffers);
}
QPaintDevice *QWaylandShmBackingStore::paintDevice()
@@ -180,16 +176,7 @@ void QWaylandShmBackingStore::beginPaint(const QRegion &)
mPainting = true;
ensureSize();
- QWaylandWindow *window = waylandWindow();
- QWaylandSubSurface *sub = window->subSurfaceWindow();
-
- bool waiting = window->attached() && mBackBuffer == window->attached() && mFrameCallback;
- bool syncSubSurface = sub && sub->isSync();
- if (waiting && !syncSubSurface) {
- window->waitForFrameSync();
- }
-
- window->setCanResize(false);
+ waylandWindow()->setCanResize(false);
}
void QWaylandShmBackingStore::endPaint()
@@ -200,11 +187,6 @@ void QWaylandShmBackingStore::endPaint()
void QWaylandShmBackingStore::hidden()
{
- QMutexLocker lock(&mMutex);
- if (mFrameCallback) {
- wl_callback_destroy(mFrameCallback);
- mFrameCallback = Q_NULLPTR;
- }
}
void QWaylandShmBackingStore::ensureSize()
@@ -231,48 +213,15 @@ void QWaylandShmBackingStore::flush(QWindow *window, const QRegion &region, cons
mFrontBuffer = mBackBuffer;
- QWaylandWindow *w = waylandWindow();
- bool synchModeSubSurface = w->subSurfaceWindow() && w->subSurfaceWindow()->isSync();
-
- if (mFrameCallback) {
- if (synchModeSubSurface) {
- wl_callback_destroy(mFrameCallback);
- mFrameCallback = Q_NULLPTR;
- } else {
- mFrontBufferIsDirty = true;
- return;
- }
- }
+ QMargins margins = windowDecorationMargins();
- // Dont acquire the frame callback as that will cause beginPaint
- // to block in waiting for frame sync since the damage will trigger
- // its own sync request
- if (!synchModeSubSurface) {
- mFrameCallback = w->frame();
- wl_callback_add_listener(mFrameCallback, &frameCallbackListener, this);
- }
+ waylandWindow()->attachOffset(mFrontBuffer);
+ mFrontBuffer->setBusy();
- QMargins margins = windowDecorationMargins();
- bool damageAll = false;
- if (w->attached() != mFrontBuffer) {
- delete w->attached();
- damageAll = true;
- }
- w->attachOffset(mFrontBuffer);
-
- if (damageAll) {
- //need to damage it all, otherwise the attach offset may screw up
- w->damage(QRect(QPoint(0,0), window->size()));
- } else {
- QVector<QRect> rects = region.rects();
- for (int i = 0; i < rects.size(); i++) {
- QRect rect = rects.at(i);
- rect.translate(margins.left(),margins.top());
- w->damage(rect);
- }
- }
- w->commit();
- mFrontBufferIsDirty = false;
+ QVector<QRect> rects = region.rects();
+ foreach (const QRect &rect, rects)
+ waylandWindow()->damage(rect.translated(margins.left(), margins.top()));
+ waylandWindow()->commit();
}
void QWaylandShmBackingStore::resize(const QSize &size, const QRegion &)
@@ -280,22 +229,65 @@ void QWaylandShmBackingStore::resize(const QSize &size, const QRegion &)
mRequestedSize = size;
}
+QWaylandShmBuffer *QWaylandShmBackingStore::getBuffer(const QSize &size)
+{
+ foreach (QWaylandShmBuffer *b, mBuffers) {
+ if (!b->busy()) {
+ if (b->size() == size) {
+ return b;
+ } else {
+ mBuffers.removeOne(b);
+ if (mBackBuffer == b)
+ mBackBuffer = 0;
+ delete b;
+ }
+ }
+ }
+
+ static const int MAX_BUFFERS = 5;
+ if (mBuffers.count() < MAX_BUFFERS) {
+ QImage::Format format = QPlatformScreen::platformScreenForWindow(window())->format();
+ QWaylandShmBuffer *b = new QWaylandShmBuffer(mDisplay, size, format, waylandWindow()->scale());
+ mBuffers.prepend(b);
+ return b;
+ }
+ return 0;
+}
+
void QWaylandShmBackingStore::resize(const QSize &size)
{
QMargins margins = windowDecorationMargins();
int scale = waylandWindow()->scale();
QSize sizeWithMargins = (size + QSize(margins.left()+margins.right(),margins.top()+margins.bottom())) * scale;
- QImage::Format format = QPlatformScreen::platformScreenForWindow(window())->format();
-
- if (mBackBuffer != NULL && mBackBuffer->size() == sizeWithMargins)
- return;
-
- if (mBackBuffer != mFrontBuffer) {
- delete mBackBuffer; //we delete the attached buffer when we flush
+ // We look for a free buffer to draw into. If the buffer is not the last buffer we used,
+ // that is mBackBuffer, and the size is the same we memcpy the old content into the new
+ // buffer so that QPainter is happy to find the stuff it had drawn before. If the new
+ // buffer has a different size it needs to be redrawn completely anyway, and if the buffer
+ // is the same the stuff is there already.
+ // You can exercise the different codepaths with weston, switching between the gl and the
+ // pixman renderer. With the gl renderer release events are sent early so we can effectively
+ // run single buffered, while with the pixman renderer we have to use two.
+ QWaylandShmBuffer *buffer = getBuffer(sizeWithMargins);
+ while (!buffer) {
+ qCDebug(logCategory, "QWaylandShmBackingStore: stalling waiting for a buffer to be released from the compositor...");
+
+ mDisplay->blockingReadEvents();
+ buffer = getBuffer(sizeWithMargins);
}
- mBackBuffer = new QWaylandShmBuffer(mDisplay, sizeWithMargins, format, scale);
+ int oldSize = mBackBuffer ? mBackBuffer->image()->byteCount() : 0;
+ // mBackBuffer may have been deleted here but if so it means its size was different so we wouldn't copy it anyway
+ if (mBackBuffer != buffer && oldSize == buffer->image()->byteCount()) {
+ memcpy(buffer->image()->bits(), mBackBuffer->image()->constBits(), buffer->image()->byteCount());
+ }
+ mBackBuffer = buffer;
+ // ensure the new buffer is at the beginning of the list so next time getBuffer() will pick
+ // it if possible
+ if (mBuffers.first() != buffer) {
+ mBuffers.removeOne(buffer);
+ mBuffers.prepend(buffer);
+ }
if (windowDecoration() && window()->isVisible())
windowDecoration()->update();
@@ -369,36 +361,6 @@ QImage QWaylandShmBackingStore::toImage() const
}
#endif // QT_NO_OPENGL
-void QWaylandShmBackingStore::done(void *data, wl_callback *callback, uint32_t time)
-{
- Q_UNUSED(time);
- QWaylandShmBackingStore *self =
- static_cast<QWaylandShmBackingStore *>(data);
- if (callback != self->mFrameCallback) // others, like QWaylandWindow, may trigger callbacks too
- return;
- QMutexLocker lock(&self->mMutex);
- QWaylandWindow *window = self->waylandWindow();
- wl_callback_destroy(self->mFrameCallback);
- self->mFrameCallback = 0;
-
-
- if (self->mFrontBufferIsDirty && !self->mPainting) {
- self->mFrontBufferIsDirty = false;
- self->mFrameCallback = wl_surface_frame(window->object());
- wl_callback_add_listener(self->mFrameCallback,&self->frameCallbackListener,self);
- if (self->mFrontBuffer != window->attached()) {
- delete window->attached();
- }
- window->attachOffset(self->mFrontBuffer);
- window->damage(QRect(QPoint(0,0),window->geometry().size()));
- window->commit();
- }
-}
-
-const struct wl_callback_listener QWaylandShmBackingStore::frameCallbackListener = {
- QWaylandShmBackingStore::done
-};
-
}
QT_END_NAMESPACE
diff --git a/src/client/qwaylandshmbackingstore_p.h b/src/client/qwaylandshmbackingstore_p.h
index 44047909..e403af31 100644
--- a/src/client/qwaylandshmbackingstore_p.h
+++ b/src/client/qwaylandshmbackingstore_p.h
@@ -57,6 +57,7 @@
#include <QtGui/QImage>
#include <qpa/qplatformwindow.h>
#include <QMutex>
+#include <QLinkedList>
QT_BEGIN_NAMESPACE
@@ -113,22 +114,17 @@ public:
private:
void updateDecorations();
+ QWaylandShmBuffer *getBuffer(const QSize &size);
QWaylandDisplay *mDisplay;
+ QLinkedList<QWaylandShmBuffer *> mBuffers;
QWaylandShmBuffer *mFrontBuffer;
QWaylandShmBuffer *mBackBuffer;
- bool mFrontBufferIsDirty;
bool mPainting;
QMutex mMutex;
QSize mRequestedSize;
Qt::WindowFlags mCurrentWindowFlags;
-
- static const struct wl_callback_listener frameCallbackListener;
- static void done(void *data,
- struct wl_callback *callback,
- uint32_t time);
- struct wl_callback *mFrameCallback;
};
}
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index 9ad90293..eebc9bda 100644
--- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp
@@ -81,7 +81,6 @@ QWaylandWindow::QWaylandWindow(QWindow *window)
, mMouseEventsInContentArea(false)
, mMousePressedInContentArea(Qt::NoButton)
, m_cursorShape(Qt::ArrowCursor)
- , mBuffer(0)
, mWaitingForFrameSync(false)
, mFrameCallback(0)
, mRequestResizeSent(false)
@@ -432,9 +431,8 @@ void QWaylandWindow::requestResize()
void QWaylandWindow::attach(QWaylandBuffer *buffer, int x, int y)
{
- mBuffer = buffer;
- if (mBuffer)
- attach(mBuffer->buffer(), x, y);
+ if (buffer)
+ attach(buffer->buffer(), x, y);
else
QtWayland::wl_surface::attach(0, 0, 0);
}
@@ -445,11 +443,6 @@ void QWaylandWindow::attachOffset(QWaylandBuffer *buffer)
mOffset = QPoint();
}
-QWaylandBuffer *QWaylandWindow::attached() const
-{
- return mBuffer;
-}
-
void QWaylandWindow::damage(const QRect &rect)
{
//We have to do sync stuff before calling damage, or we might
@@ -459,9 +452,7 @@ void QWaylandWindow::damage(const QRect &rect)
wl_callback_add_listener(mFrameCallback,&QWaylandWindow::callbackListener,this);
mWaitingForFrameSync = true;
}
- if (mBuffer) {
- damage(rect.x(), rect.y(), rect.width(), rect.height());
- }
+ damage(rect.x(), rect.y(), rect.width(), rect.height());
}
const wl_callback_listener QWaylandWindow::callbackListener = {
diff --git a/src/client/qwaylandwindow_p.h b/src/client/qwaylandwindow_p.h
index 30d158d3..c1346e66 100644
--- a/src/client/qwaylandwindow_p.h
+++ b/src/client/qwaylandwindow_p.h
@@ -214,7 +214,6 @@ protected:
Qt::MouseButtons mMousePressedInContentArea;
Qt::CursorShape m_cursorShape;
- QWaylandBuffer *mBuffer;
WId mWindowId;
bool mWaitingForFrameSync;
struct wl_callback *mFrameCallback;
diff --git a/src/compositor/compositor.pro b/src/compositor/compositor.pro
index 84f773a6..67c735f9 100644
--- a/src/compositor/compositor.pro
+++ b/src/compositor/compositor.pro
@@ -1,14 +1,12 @@
-TARGET = QtWaylandCompositor
+TARGET = QtWaylandCompositor
+MODULE = waylandcompositor
+
QT = core gui-private
qtHaveModule(quick): QT += quick
contains(QT_CONFIG, opengl):MODULE_DEFINES = QT_COMPOSITOR_WAYLAND_GL
-MODULE=waylandcompositor
-MODULE_PLUGIN_TYPES = wayland-graphics-integration-server
-load(qt_module)
-
CONFIG -= precompile_header
CONFIG += link_pkgconfig
@@ -31,4 +29,6 @@ include ($$PWD/hardware_integration/hardware_integration.pri)
include ($$PWD/compositor_api/compositor_api.pri)
include ($$PWD/extensions/extensions.pri)
-
+MODULE_PLUGIN_TYPES = \
+ wayland-graphics-integration-server
+load(qt_module)
diff --git a/src/hardwareintegration/client/xcomposite-egl/qwaylandxcompositeeglwindow.cpp b/src/hardwareintegration/client/xcomposite-egl/qwaylandxcompositeeglwindow.cpp
index b4f5ca37..f9b6fc1d 100644
--- a/src/hardwareintegration/client/xcomposite-egl/qwaylandxcompositeeglwindow.cpp
+++ b/src/hardwareintegration/client/xcomposite-egl/qwaylandxcompositeeglwindow.cpp
@@ -62,6 +62,7 @@ QWaylandXCompositeEGLWindow::QWaylandXCompositeEGLWindow(QWindow *window, QWayla
, m_xWindow(0)
, m_config(q_configFromGLFormat(glxIntegration->eglDisplay(), window->format(), true, EGL_WINDOW_BIT | EGL_PIXMAP_BIT))
, m_surface(0)
+ , mBuffer(0)
{
}
diff --git a/src/hardwareintegration/client/xcomposite-egl/qwaylandxcompositeeglwindow.h b/src/hardwareintegration/client/xcomposite-egl/qwaylandxcompositeeglwindow.h
index 817abb9a..b4993c5e 100644
--- a/src/hardwareintegration/client/xcomposite-egl/qwaylandxcompositeeglwindow.h
+++ b/src/hardwareintegration/client/xcomposite-egl/qwaylandxcompositeeglwindow.h
@@ -72,6 +72,7 @@ private:
Window m_xWindow;
EGLConfig m_config;
EGLSurface m_surface;
+ QWaylandBuffer *mBuffer;
};
}
diff --git a/src/hardwareintegration/client/xcomposite-glx/qwaylandxcompositeglxwindow.cpp b/src/hardwareintegration/client/xcomposite-glx/qwaylandxcompositeglxwindow.cpp
index a6e12071..9cca9e46 100644
--- a/src/hardwareintegration/client/xcomposite-glx/qwaylandxcompositeglxwindow.cpp
+++ b/src/hardwareintegration/client/xcomposite-glx/qwaylandxcompositeglxwindow.cpp
@@ -56,6 +56,7 @@ QWaylandXCompositeGLXWindow::QWaylandXCompositeGLXWindow(QWindow *window, QWayla
, m_glxIntegration(glxIntegration)
, m_xWindow(0)
, m_config(qglx_findConfig(glxIntegration->xDisplay(), glxIntegration->screen(), window->format(), GLX_WINDOW_BIT | GLX_PIXMAP_BIT))
+ , mBuffer(0)
{
}
diff --git a/src/hardwareintegration/client/xcomposite-glx/qwaylandxcompositeglxwindow.h b/src/hardwareintegration/client/xcomposite-glx/qwaylandxcompositeglxwindow.h
index 78dd3629..c78362d9 100644
--- a/src/hardwareintegration/client/xcomposite-glx/qwaylandxcompositeglxwindow.h
+++ b/src/hardwareintegration/client/xcomposite-glx/qwaylandxcompositeglxwindow.h
@@ -71,6 +71,7 @@ private:
Window m_xWindow;
GLXFBConfig m_config;
+ QWaylandBuffer *mBuffer;
};
}
diff --git a/src/plugins/decorations/bradient/bradient.pro b/src/plugins/decorations/bradient/bradient.pro
index fd376f4a..0f62db9c 100644
--- a/src/plugins/decorations/bradient/bradient.pro
+++ b/src/plugins/decorations/bradient/bradient.pro
@@ -1,6 +1,3 @@
-PLUGIN_TYPE = wayland-decoration-client
-load(qt_plugin)
-
QT += waylandclient-private
OTHER_FILES += \
@@ -15,3 +12,5 @@ contains(QT_CONFIG, no-pkg-config) {
PKGCONFIG += wayland-client
}
+PLUGIN_TYPE = wayland-decoration-client
+load(qt_plugin)
diff --git a/src/plugins/hardwareintegration/client/brcm-egl/brcm-egl.pro b/src/plugins/hardwareintegration/client/brcm-egl/brcm-egl.pro
index 6dbe5373..550343cf 100644
--- a/src/plugins/hardwareintegration/client/brcm-egl/brcm-egl.pro
+++ b/src/plugins/hardwareintegration/client/brcm-egl/brcm-egl.pro
@@ -1,6 +1,3 @@
-PLUGIN_TYPE = wayland-graphics-integration-client
-load(qt_plugin)
-
QT += waylandclient-private
include(../../../../hardwareintegration/client/brcm-egl/brcm-egl.pri)
@@ -10,3 +7,5 @@ OTHER_FILES += \
SOURCES += main.cpp
+PLUGIN_TYPE = wayland-graphics-integration-client
+load(qt_plugin)
diff --git a/src/plugins/hardwareintegration/client/drm-egl-server/drm-egl-server.pro b/src/plugins/hardwareintegration/client/drm-egl-server/drm-egl-server.pro
index 827228d2..29a48c9e 100644
--- a/src/plugins/hardwareintegration/client/drm-egl-server/drm-egl-server.pro
+++ b/src/plugins/hardwareintegration/client/drm-egl-server/drm-egl-server.pro
@@ -1,6 +1,3 @@
-PLUGIN_TYPE = wayland-graphics-integration-client
-load(qt_plugin)
-
# We have a bunch of C code with casts, so we can't have this option
QMAKE_CXXFLAGS_WARN_ON -= -Wcast-qual
@@ -13,3 +10,5 @@ OTHER_FILES += \
SOURCES += main.cpp
+PLUGIN_TYPE = wayland-graphics-integration-client
+load(qt_plugin)
diff --git a/src/plugins/hardwareintegration/client/libhybris-egl-server/libhybris-egl-server.pro b/src/plugins/hardwareintegration/client/libhybris-egl-server/libhybris-egl-server.pro
index 55f98415..d7bf0370 100644
--- a/src/plugins/hardwareintegration/client/libhybris-egl-server/libhybris-egl-server.pro
+++ b/src/plugins/hardwareintegration/client/libhybris-egl-server/libhybris-egl-server.pro
@@ -1,6 +1,3 @@
-PLUGIN_TYPE = wayland-graphics-integration-client
-load(qt_plugin)
-
QT += waylandclient-private
include(../../../../hardwareintegration/client/libhybris-egl-server/libhybris-egl-server.pri)
@@ -10,3 +7,5 @@ OTHER_FILES += \
SOURCES += main.cpp
+PLUGIN_TYPE = wayland-graphics-integration-client
+load(qt_plugin)
diff --git a/src/plugins/hardwareintegration/client/wayland-egl/wayland-egl.pro b/src/plugins/hardwareintegration/client/wayland-egl/wayland-egl.pro
index 38989628..076b6af2 100644
--- a/src/plugins/hardwareintegration/client/wayland-egl/wayland-egl.pro
+++ b/src/plugins/hardwareintegration/client/wayland-egl/wayland-egl.pro
@@ -1,6 +1,3 @@
-PLUGIN_TYPE = wayland-graphics-integration-client
-load(qt_plugin)
-
QT += waylandclient-private
include(../../../../hardwareintegration/client/wayland-egl/wayland-egl.pri)
@@ -10,3 +7,5 @@ OTHER_FILES += \
SOURCES += main.cpp
+PLUGIN_TYPE = wayland-graphics-integration-client
+load(qt_plugin)
diff --git a/src/plugins/hardwareintegration/client/xcomposite-egl/xcomposite-egl.pro b/src/plugins/hardwareintegration/client/xcomposite-egl/xcomposite-egl.pro
index 1af17866..031d2812 100644
--- a/src/plugins/hardwareintegration/client/xcomposite-egl/xcomposite-egl.pro
+++ b/src/plugins/hardwareintegration/client/xcomposite-egl/xcomposite-egl.pro
@@ -1,6 +1,3 @@
-PLUGIN_TYPE = wayland-graphics-integration-client
-load(qt_plugin)
-
# We have a bunch of C code with casts, so we can't have this option
QMAKE_CXXFLAGS_WARN_ON -= -Wcast-qual
@@ -13,3 +10,5 @@ OTHER_FILES += xcomposite-egl.json
SOURCES += \
main.cpp
+PLUGIN_TYPE = wayland-graphics-integration-client
+load(qt_plugin)
diff --git a/src/plugins/hardwareintegration/client/xcomposite-glx/xcomposite-glx.pro b/src/plugins/hardwareintegration/client/xcomposite-glx/xcomposite-glx.pro
index 0080150c..eb8e03c7 100644
--- a/src/plugins/hardwareintegration/client/xcomposite-glx/xcomposite-glx.pro
+++ b/src/plugins/hardwareintegration/client/xcomposite-glx/xcomposite-glx.pro
@@ -1,6 +1,3 @@
-PLUGIN_TYPE = wayland-graphics-integration-client
-load(qt_plugin)
-
QT += waylandclient-private
include(../../../../hardwareintegration/client/xcomposite-glx/xcomposite-glx.pri)
@@ -10,3 +7,5 @@ OTHER_FILES += xcomposite-glx.json
SOURCES += \
main.cpp
+PLUGIN_TYPE = wayland-graphics-integration-client
+load(qt_plugin)
diff --git a/src/plugins/hardwareintegration/compositor/brcm-egl/brcm-egl.pro b/src/plugins/hardwareintegration/compositor/brcm-egl/brcm-egl.pro
index 74da1643..e6e39572 100644
--- a/src/plugins/hardwareintegration/compositor/brcm-egl/brcm-egl.pro
+++ b/src/plugins/hardwareintegration/compositor/brcm-egl/brcm-egl.pro
@@ -1,6 +1,3 @@
-PLUGIN_TYPE = wayland-graphics-integration-server
-load(qt_plugin)
-
QT = waylandcompositor waylandcompositor-private core-private gui-private
OTHER_FILES += brcm-egl.json
@@ -9,3 +6,6 @@ SOURCES += \
main.cpp
include(../../../../hardwareintegration/compositor/brcm-egl/brcm-egl.pri)
+
+PLUGIN_TYPE = wayland-graphics-integration-server
+load(qt_plugin)
diff --git a/src/plugins/hardwareintegration/compositor/drm-egl-server/drm-egl-server.pro b/src/plugins/hardwareintegration/compositor/drm-egl-server/drm-egl-server.pro
index 806e1fac..40092a14 100644
--- a/src/plugins/hardwareintegration/compositor/drm-egl-server/drm-egl-server.pro
+++ b/src/plugins/hardwareintegration/compositor/drm-egl-server/drm-egl-server.pro
@@ -1,6 +1,3 @@
-PLUGIN_TYPE = wayland-graphics-integration-server
-load(qt_plugin)
-
QT = waylandcompositor waylandcompositor-private core-private gui-private
OTHER_FILES += drm-egl-server.json
@@ -10,3 +7,5 @@ SOURCES += \
include($PWD/../../../../../hardwareintegration/compositor/drm-egl-server/drm-egl-server.pri)
+PLUGIN_TYPE = wayland-graphics-integration-server
+load(qt_plugin)
diff --git a/src/plugins/hardwareintegration/compositor/libhybris-egl-server/libhybris-egl-server.pro b/src/plugins/hardwareintegration/compositor/libhybris-egl-server/libhybris-egl-server.pro
index 7780df50..e21bb3c5 100644
--- a/src/plugins/hardwareintegration/compositor/libhybris-egl-server/libhybris-egl-server.pro
+++ b/src/plugins/hardwareintegration/compositor/libhybris-egl-server/libhybris-egl-server.pro
@@ -1,6 +1,3 @@
-PLUGIN_TYPE = wayland-graphics-integration-server
-load(qt_plugin)
-
QT = waylandcompositor waylandcompositor-private core-private gui-private
OTHER_FILES += libhybris-egl-server.json
@@ -10,3 +7,5 @@ SOURCES += \
include($PWD/../../../../../hardwareintegration/compositor/libhybris-egl-server/libhybris-egl-server.pri)
+PLUGIN_TYPE = wayland-graphics-integration-server
+load(qt_plugin)
diff --git a/src/plugins/hardwareintegration/compositor/wayland-egl/wayland-egl.pro b/src/plugins/hardwareintegration/compositor/wayland-egl/wayland-egl.pro
index 5704663b..7374a598 100644
--- a/src/plugins/hardwareintegration/compositor/wayland-egl/wayland-egl.pro
+++ b/src/plugins/hardwareintegration/compositor/wayland-egl/wayland-egl.pro
@@ -1,6 +1,3 @@
-PLUGIN_TYPE = wayland-graphics-integration-server
-load(qt_plugin)
-
QT = waylandcompositor waylandcompositor-private core-private gui-private platformsupport-private
OTHER_FILES += wayland-egl.json
@@ -9,3 +6,6 @@ SOURCES += \
main.cpp
include(../../../../hardwareintegration/compositor/wayland-egl/wayland-egl.pri)
+
+PLUGIN_TYPE = wayland-graphics-integration-server
+load(qt_plugin)
diff --git a/src/plugins/hardwareintegration/compositor/xcomposite-egl/xcomposite-egl.pro b/src/plugins/hardwareintegration/compositor/xcomposite-egl/xcomposite-egl.pro
index 5475f204..fab000e2 100644
--- a/src/plugins/hardwareintegration/compositor/xcomposite-egl/xcomposite-egl.pro
+++ b/src/plugins/hardwareintegration/compositor/xcomposite-egl/xcomposite-egl.pro
@@ -1,6 +1,3 @@
-PLUGIN_TYPE = wayland-graphics-integration-server
-load(qt_plugin)
-
QT += waylandcompositor waylandcompositor-private core-private gui-private
OTHER_FILES += xcomposite-egl.json
@@ -9,3 +6,6 @@ SOURCES += \
main.cpp
include(../../../../hardwareintegration/compositor/xcomposite-egl/xcomposite-egl.pri)
+
+PLUGIN_TYPE = wayland-graphics-integration-server
+load(qt_plugin)
diff --git a/src/plugins/hardwareintegration/compositor/xcomposite-glx/xcomposite-glx.pro b/src/plugins/hardwareintegration/compositor/xcomposite-glx/xcomposite-glx.pro
index 3441f271..9dee1431 100644
--- a/src/plugins/hardwareintegration/compositor/xcomposite-glx/xcomposite-glx.pro
+++ b/src/plugins/hardwareintegration/compositor/xcomposite-glx/xcomposite-glx.pro
@@ -1,6 +1,3 @@
-PLUGIN_TYPE = wayland-graphics-integration-server
-load(qt_plugin)
-
QT += waylandcompositor waylandcompositor-private core-private gui-private
OTHER_FILES += xcomposite-glx.json
@@ -9,3 +6,6 @@ SOURCES += \
main.cpp
include(../../../../hardwareintegration/compositor/xcomposite-glx/xcomposite-glx.pri)
+
+PLUGIN_TYPE = wayland-graphics-integration-server
+load(qt_plugin)
diff --git a/src/plugins/platforms/qwayland-brcm-egl/qwayland-brcm-egl.pro b/src/plugins/platforms/qwayland-brcm-egl/qwayland-brcm-egl.pro
index 1e28043a..4ff61713 100644
--- a/src/plugins/platforms/qwayland-brcm-egl/qwayland-brcm-egl.pro
+++ b/src/plugins/platforms/qwayland-brcm-egl/qwayland-brcm-egl.pro
@@ -1,6 +1,3 @@
-PLUGIN_TYPE = platforms
-load(qt_plugin)
-
QT += waylandclient-private
include(../../../hardwareintegration/client/brcm-egl/brcm-egl.pri)
@@ -10,3 +7,5 @@ OTHER_FILES += \
SOURCES += main.cpp
+PLUGIN_TYPE = platforms
+load(qt_plugin)
diff --git a/src/plugins/platforms/qwayland-egl/qwayland-egl.pro b/src/plugins/platforms/qwayland-egl/qwayland-egl.pro
index 279a7c38..b64a8cc4 100644
--- a/src/plugins/platforms/qwayland-egl/qwayland-egl.pro
+++ b/src/plugins/platforms/qwayland-egl/qwayland-egl.pro
@@ -1,6 +1,3 @@
-PLUGIN_TYPE = platforms
-load(qt_plugin)
-
QT += waylandclient-private
include(../../../hardwareintegration/client/wayland-egl/wayland-egl.pri)
@@ -10,3 +7,5 @@ OTHER_FILES += \
SOURCES += main.cpp
+PLUGIN_TYPE = platforms
+load(qt_plugin)
diff --git a/src/plugins/platforms/qwayland-generic/qwayland-generic.pro b/src/plugins/platforms/qwayland-generic/qwayland-generic.pro
index cf42d1eb..5457e9df 100644
--- a/src/plugins/platforms/qwayland-generic/qwayland-generic.pro
+++ b/src/plugins/platforms/qwayland-generic/qwayland-generic.pro
@@ -1,6 +1,3 @@
-PLUGIN_TYPE = platforms
-load(qt_plugin)
-
QT += waylandclient-private
OTHER_FILES += \
@@ -8,3 +5,5 @@ OTHER_FILES += \
SOURCES += main.cpp
+PLUGIN_TYPE = platforms
+load(qt_plugin)
diff --git a/src/plugins/platforms/qwayland-xcomposite-egl/qwayland-xcomposite-egl.pro b/src/plugins/platforms/qwayland-xcomposite-egl/qwayland-xcomposite-egl.pro
index 74a71a57..7c7a3dd2 100644
--- a/src/plugins/platforms/qwayland-xcomposite-egl/qwayland-xcomposite-egl.pro
+++ b/src/plugins/platforms/qwayland-xcomposite-egl/qwayland-xcomposite-egl.pro
@@ -1,6 +1,3 @@
-PLUGIN_TYPE = platforms
-load(qt_plugin)
-
QT += waylandclient-private
include(../../../hardwareintegration/client/xcomposite-egl/xcomposite-egl.pri)
@@ -10,3 +7,5 @@ OTHER_FILES += qwayland-xcomposite-egl.json
SOURCES += \
main.cpp
+PLUGIN_TYPE = platforms
+load(qt_plugin)
diff --git a/src/plugins/platforms/qwayland-xcomposite-glx/qwayland-xcomposite-glx.pro b/src/plugins/platforms/qwayland-xcomposite-glx/qwayland-xcomposite-glx.pro
index 307ad5ed..c0c12c9d 100644
--- a/src/plugins/platforms/qwayland-xcomposite-glx/qwayland-xcomposite-glx.pro
+++ b/src/plugins/platforms/qwayland-xcomposite-glx/qwayland-xcomposite-glx.pro
@@ -1,6 +1,3 @@
-PLUGIN_TYPE = platforms
-load(qt_plugin)
-
QT += waylandclient-private
include(../../../hardwareintegration/client/xcomposite-glx/xcomposite-glx.pri)
@@ -12,3 +9,6 @@ SOURCES += \
HEADERS += \
qwaylandxcompositeglxplatformintegration.h
+
+PLUGIN_TYPE = platforms
+load(qt_plugin)