From 18d0f87b87c288ed4ab43f09932045b34c641604 Mon Sep 17 00:00:00 2001 From: Johan Klokkhammer Helsing Date: Mon, 2 Jan 2017 13:15:36 +0100 Subject: [PATCH 01/15] Fix crash when starting clients Don't send wl_surface::set_input_region requests before the wl_surface has been initialized. The shapedclock example used to crash in wl_proxy_marshal prior to this fix. Task-number: QTBUG-57757 Change-Id: I0a459d374bfb88fb22d048eda3722a41112d67a4 Reviewed-by: Paul Olav Tvete --- src/plugins/platforms/wayland/qwaylandwindow.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/plugins/platforms/wayland/qwaylandwindow.cpp b/src/plugins/platforms/wayland/qwaylandwindow.cpp index d16746bac2c..0e3c0b285e4 100644 --- a/src/plugins/platforms/wayland/qwaylandwindow.cpp +++ b/src/plugins/platforms/wayland/qwaylandwindow.cpp @@ -350,8 +350,11 @@ void QWaylandWindow::setMask(const QRegion &mask) mMask = mask; + if (!isInitialized()) + return; + if (mMask.isEmpty()) { - set_input_region(0); + set_input_region(nullptr); } else { struct ::wl_region *region = mDisplay->createRegion(mMask); set_input_region(region); From c2d22c4ab8f59360ba26053c66ba95d74b57267a Mon Sep 17 00:00:00 2001 From: Johan Klokkhammer Helsing Date: Tue, 3 Jan 2017 12:10:52 +0100 Subject: [PATCH 02/15] Don't call wl_surface::destroy if the surface was never initialized Task-number: QTBUG-57757 Change-Id: I85b74a3445c8d9df1a89b16760ce57e45204d2c6 Reviewed-by: Pier Luigi Fiorini Reviewed-by: Paul Olav Tvete --- src/plugins/platforms/wayland/qwaylandwindow.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/platforms/wayland/qwaylandwindow.cpp b/src/plugins/platforms/wayland/qwaylandwindow.cpp index 0e3c0b285e4..c8be9c14956 100644 --- a/src/plugins/platforms/wayland/qwaylandwindow.cpp +++ b/src/plugins/platforms/wayland/qwaylandwindow.cpp @@ -222,7 +222,8 @@ void QWaylandWindow::reset() mShellSurface = 0; delete mSubSurfaceWindow; mSubSurfaceWindow = 0; - destroy(); + if (isInitialized()) + destroy(); if (mFrameCallback) wl_callback_destroy(mFrameCallback); From d2d84ab958758108305f96090952ccf992bd9f4e Mon Sep 17 00:00:00 2001 From: Pier Luigi Fiorini Date: Sat, 28 Jan 2017 17:03:22 +0100 Subject: [PATCH 03/15] Deduplicate xcomposite-egl and xcomposite-glx plugin class name In 81f80fa1 was set a wrong PLUGIN_CLASS_NAME for xcomposite-egl and xcomposite-glx client integration plugins that collides with the one for the compositor counterpart. Task-number: QTBUG-58491 Change-Id: I23d141adf988942ac8c4c55f421cf763c0e4faff Reviewed-by: Paul Olav Tvete --- .../plugins/hardwareintegration/xcomposite-egl/main.cpp | 4 ++-- .../hardwareintegration/xcomposite-egl/xcomposite-egl.pro | 2 +- .../plugins/hardwareintegration/xcomposite-glx/main.cpp | 4 ++-- .../hardwareintegration/xcomposite-glx/xcomposite-glx.pro | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/plugins/platforms/wayland/plugins/hardwareintegration/xcomposite-egl/main.cpp b/src/plugins/platforms/wayland/plugins/hardwareintegration/xcomposite-egl/main.cpp index 07222f2374c..585285fae05 100644 --- a/src/plugins/platforms/wayland/plugins/hardwareintegration/xcomposite-egl/main.cpp +++ b/src/plugins/platforms/wayland/plugins/hardwareintegration/xcomposite-egl/main.cpp @@ -44,7 +44,7 @@ QT_BEGIN_NAMESPACE namespace QtWaylandClient { -class QWaylandXCompositeEglClientBufferIntegrationPlugin : public QWaylandClientBufferIntegrationPlugin +class QWaylandXCompositeEglClientBufferPlugin : public QWaylandClientBufferIntegrationPlugin { Q_OBJECT Q_PLUGIN_METADATA(IID QWaylandClientBufferIntegrationFactoryInterface_iid FILE "xcomposite-egl.json") @@ -52,7 +52,7 @@ public: QWaylandClientBufferIntegration *create(const QString&, const QStringList&) override; }; -QWaylandClientBufferIntegration *QWaylandXCompositeEglClientBufferIntegrationPlugin::create(const QString& system, const QStringList& paramList) +QWaylandClientBufferIntegration *QWaylandXCompositeEglClientBufferPlugin::create(const QString& system, const QStringList& paramList) { Q_UNUSED(paramList); Q_UNUSED(system); diff --git a/src/plugins/platforms/wayland/plugins/hardwareintegration/xcomposite-egl/xcomposite-egl.pro b/src/plugins/platforms/wayland/plugins/hardwareintegration/xcomposite-egl/xcomposite-egl.pro index c8734084b0c..83bd4fe8d84 100644 --- a/src/plugins/platforms/wayland/plugins/hardwareintegration/xcomposite-egl/xcomposite-egl.pro +++ b/src/plugins/platforms/wayland/plugins/hardwareintegration/xcomposite-egl/xcomposite-egl.pro @@ -11,5 +11,5 @@ SOURCES += \ main.cpp PLUGIN_TYPE = wayland-graphics-integration-client -PLUGIN_CLASS_NAME = QWaylandXCompositeEglClientBufferIntegrationPlugin +PLUGIN_CLASS_NAME = QWaylandXCompositeEglClientBufferPlugin load(qt_plugin) diff --git a/src/plugins/platforms/wayland/plugins/hardwareintegration/xcomposite-glx/main.cpp b/src/plugins/platforms/wayland/plugins/hardwareintegration/xcomposite-glx/main.cpp index 00fa255b52e..f7b878d96c2 100644 --- a/src/plugins/platforms/wayland/plugins/hardwareintegration/xcomposite-glx/main.cpp +++ b/src/plugins/platforms/wayland/plugins/hardwareintegration/xcomposite-glx/main.cpp @@ -44,7 +44,7 @@ QT_BEGIN_NAMESPACE namespace QtWaylandClient { -class QWaylandXCompositeGlxClientBufferIntegrationPlugin : public QWaylandClientBufferIntegrationPlugin +class QWaylandXCompositeGlxClientBufferPlugin : public QWaylandClientBufferIntegrationPlugin { Q_OBJECT Q_PLUGIN_METADATA(IID QWaylandClientBufferIntegrationFactoryInterface_iid FILE "xcomposite-glx.json") @@ -52,7 +52,7 @@ public: QWaylandClientBufferIntegration *create(const QString&, const QStringList&) override; }; -QWaylandClientBufferIntegration *QWaylandXCompositeGlxClientBufferIntegrationPlugin::create(const QString& system, const QStringList& paramList) +QWaylandClientBufferIntegration *QWaylandXCompositeGlxClientBufferPlugin::create(const QString& system, const QStringList& paramList) { Q_UNUSED(paramList); Q_UNUSED(system); diff --git a/src/plugins/platforms/wayland/plugins/hardwareintegration/xcomposite-glx/xcomposite-glx.pro b/src/plugins/platforms/wayland/plugins/hardwareintegration/xcomposite-glx/xcomposite-glx.pro index fb5ad15f84a..804ca386197 100644 --- a/src/plugins/platforms/wayland/plugins/hardwareintegration/xcomposite-glx/xcomposite-glx.pro +++ b/src/plugins/platforms/wayland/plugins/hardwareintegration/xcomposite-glx/xcomposite-glx.pro @@ -8,5 +8,5 @@ SOURCES += \ main.cpp PLUGIN_TYPE = wayland-graphics-integration-client -PLUGIN_CLASS_NAME = QWaylandXCompositeGlxClientBufferIntegrationPlugin +PLUGIN_CLASS_NAME = QWaylandXCompositeGlxClientBufferPlugin load(qt_plugin) From 83f3b32872ee2f1ae6e5071a34bb4e9af684c773 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Thu, 9 Feb 2017 19:33:33 +0100 Subject: [PATCH 04/15] fix typos in "Raspberry Pi" Change-Id: I92938ad834999ceabe0b360ab733a2c54335004c Reviewed-by: Laszlo Agocs --- src/plugins/platforms/wayland/configure.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/platforms/wayland/configure.json b/src/plugins/platforms/wayland/configure.json index b2a8fbc0b3e..ea0bbe22ccc 100644 --- a/src/plugins/platforms/wayland/configure.json +++ b/src/plugins/platforms/wayland/configure.json @@ -82,7 +82,7 @@ "output": [ "privateFeature" ] }, "wayland-brcm": { - "label": "Rasberry Pi", + "label": "Raspberry Pi", "condition": "features.wayland-client && features.eglfs_brcm", "output": [ "privateFeature" ] }, From efce1fa6e4fce96266dfd3d336ed21135f2ec53b Mon Sep 17 00:00:00 2001 From: Giulio Camuffo Date: Fri, 3 Feb 2017 17:04:03 +0100 Subject: [PATCH 05/15] Fix crash when running without shell integration Change-Id: Ia480913fd9986cbd306858d1fb497e1fb70551f0 Reviewed-by: Jan Arne Petersen Reviewed-by: Pier Luigi Fiorini --- src/plugins/platforms/wayland/qwaylanddisplay.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/plugins/platforms/wayland/qwaylanddisplay.cpp b/src/plugins/platforms/wayland/qwaylanddisplay.cpp index 851d715b77f..8e4c8d67c83 100644 --- a/src/plugins/platforms/wayland/qwaylanddisplay.cpp +++ b/src/plugins/platforms/wayland/qwaylanddisplay.cpp @@ -421,7 +421,14 @@ void QWaylandDisplay::handleKeyboardFocusChanged(QWaylandInputDevice *inputDevic if (mLastKeyboardFocus == keyboardFocus) return; - mWaylandIntegration->mShellIntegration->handleKeyboardFocusChanged(keyboardFocus, mLastKeyboardFocus); + if (mWaylandIntegration->mShellIntegration) { + mWaylandIntegration->mShellIntegration->handleKeyboardFocusChanged(keyboardFocus, mLastKeyboardFocus); + } else { + if (keyboardFocus) + handleWindowActivated(keyboardFocus); + if (mLastKeyboardFocus) + handleWindowDeactivated(mLastKeyboardFocus); + } mLastKeyboardFocus = keyboardFocus; } From b109d2e848136673ced915627bbb62ee14da8a6c Mon Sep 17 00:00:00 2001 From: Johan Klokkhammer Helsing Date: Wed, 1 Feb 2017 15:25:13 +0100 Subject: [PATCH 06/15] Initialize the first wl_surface in the constructor of QWaylandWindow This makes it possible to get a pointer to a wl_surface immediately after platform window creation. Task-number: QTBUG-58423 Change-Id: I2e62380af8b34d05ae31baacc071766493633022 Reviewed-by: Marco Martin Reviewed-by: Giulio Camuffo --- src/plugins/platforms/wayland/qwaylandwindow.cpp | 8 +++++++- src/plugins/platforms/wayland/qwaylandwindow_p.h | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/plugins/platforms/wayland/qwaylandwindow.cpp b/src/plugins/platforms/wayland/qwaylandwindow.cpp index 58848096aab..83e5f7c7a66 100644 --- a/src/plugins/platforms/wayland/qwaylandwindow.cpp +++ b/src/plugins/platforms/wayland/qwaylandwindow.cpp @@ -95,6 +95,7 @@ QWaylandWindow::QWaylandWindow(QWindow *window) { static WId id = 1; mWindowId = id++; + initializeWlSurface(); } QWaylandWindow::~QWaylandWindow() @@ -127,7 +128,7 @@ void QWaylandWindow::initWindow() return; if (!isInitialized()) - init(mDisplay->createSurface(static_cast(this))); + initializeWlSurface(); if (shouldCreateSubSurface()) { Q_ASSERT(!mSubSurfaceWindow); @@ -200,6 +201,11 @@ void QWaylandWindow::initWindow() mFlags = window()->flags(); } +void QWaylandWindow::initializeWlSurface() +{ + init(mDisplay->createSurface(static_cast(this))); +} + bool QWaylandWindow::shouldCreateShellSurface() const { if (shouldCreateSubSurface()) diff --git a/src/plugins/platforms/wayland/qwaylandwindow_p.h b/src/plugins/platforms/wayland/qwaylandwindow_p.h index d5d6e3a315f..ce1a07604e0 100644 --- a/src/plugins/platforms/wayland/qwaylandwindow_p.h +++ b/src/plugins/platforms/wayland/qwaylandwindow_p.h @@ -248,6 +248,7 @@ private: bool setWindowStateInternal(Qt::WindowState flags); void setGeometry_helper(const QRect &rect); void initWindow(); + void initializeWlSurface(); bool shouldCreateShellSurface() const; bool shouldCreateSubSurface() const; void reset(); From 44577f8cfb4cebd0d2b205fc04cb2326d7a4e9d3 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Wed, 1 Mar 2017 14:20:37 +0100 Subject: [PATCH 07/15] Remove QRegularExpression dependency Fix build error with -no-feature-regularexpression. Change-Id: I6d3d0228548d832abea74b8e1145dc5b09f77b1b Reviewed-by: Jan Arne Petersen Reviewed-by: Giulio Camuffo Reviewed-by: Pier Luigi Fiorini --- src/plugins/platforms/wayland/qwaylandwindow.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/plugins/platforms/wayland/qwaylandwindow.cpp b/src/plugins/platforms/wayland/qwaylandwindow.cpp index a42c4796deb..dec4d1157dc 100644 --- a/src/plugins/platforms/wayland/qwaylandwindow.cpp +++ b/src/plugins/platforms/wayland/qwaylandwindow.cpp @@ -160,7 +160,9 @@ void QWaylandWindow::initWindow() // when available. if (!QGuiApplication::desktopFileName().isEmpty()) { QString name = QGuiApplication::desktopFileName(); - mShellSurface->setAppId(name.replace(QRegularExpression(QLatin1String("\\.desktop$")), QString())); + if (name.endsWith(QLatin1String(".desktop"))) + name.chop(8); + mShellSurface->setAppId(name); } else { QFileInfo fi = QCoreApplication::instance()->applicationFilePath(); QStringList domainName = From 501aeedb54c312c9e3890a393138c55d400f4405 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Mon, 6 Mar 2017 13:19:15 +0100 Subject: [PATCH 08/15] Code cleanup (fixing -no-feature-cursor) Move QWaylandDisplay member functions into the correct .cpp file. Change-Id: Ie3915d2bd0d191900ad2fd306564bb732e40221a Reviewed-by: Johan Helsing Reviewed-by: Pier Luigi Fiorini --- .../platforms/wayland/qwaylandcursor.cpp | 25 ----------------- .../platforms/wayland/qwaylanddisplay.cpp | 27 +++++++++++++++++++ .../platforms/wayland/qwaylanddisplay_p.h | 4 +-- 3 files changed, 29 insertions(+), 27 deletions(-) diff --git a/src/plugins/platforms/wayland/qwaylandcursor.cpp b/src/plugins/platforms/wayland/qwaylandcursor.cpp index e3e3469be3c..7caa247e52f 100644 --- a/src/plugins/platforms/wayland/qwaylandcursor.cpp +++ b/src/plugins/platforms/wayland/qwaylandcursor.cpp @@ -143,31 +143,6 @@ void QWaylandCursor::changeCursor(QCursor *cursor, QWindow *window) mDisplay->setCursor(buffer, image); } -void QWaylandDisplay::setCursor(struct wl_buffer *buffer, struct wl_cursor_image *image) -{ - /* Qt doesn't tell us which input device we should set the cursor - * for, so set it for all devices. */ - for (int i = 0; i < mInputDevices.count(); i++) { - QWaylandInputDevice *inputDevice = mInputDevices.at(i); - inputDevice->setCursor(buffer, image); - } -} - -void QWaylandDisplay::setCursor(const QSharedPointer &buffer, const QPoint &hotSpot) -{ - /* Qt doesn't tell us which input device we should set the cursor - * for, so set it for all devices. */ - for (int i = 0; i < mInputDevices.count(); i++) { - QWaylandInputDevice *inputDevice = mInputDevices.at(i); - inputDevice->setCursor(buffer, hotSpot); - } -} - -QWaylandInputDevice *QWaylandDisplay::defaultInputDevice() const -{ - return mInputDevices.isEmpty() ? 0 : mInputDevices.first(); -} - void QWaylandCursor::pointerEvent(const QMouseEvent &event) { mLastPos = event.globalPos(); diff --git a/src/plugins/platforms/wayland/qwaylanddisplay.cpp b/src/plugins/platforms/wayland/qwaylanddisplay.cpp index 8e4c8d67c83..83a69483f50 100644 --- a/src/plugins/platforms/wayland/qwaylanddisplay.cpp +++ b/src/plugins/platforms/wayland/qwaylanddisplay.cpp @@ -468,6 +468,33 @@ void QWaylandDisplay::requestWaylandSync() wl_callback_add_listener(mSyncCallback, &syncCallbackListener, this); } +QWaylandInputDevice *QWaylandDisplay::defaultInputDevice() const +{ + return mInputDevices.isEmpty() ? 0 : mInputDevices.first(); +} + +#if QT_CONFIG(cursor) +void QWaylandDisplay::setCursor(struct wl_buffer *buffer, struct wl_cursor_image *image) +{ + /* Qt doesn't tell us which input device we should set the cursor + * for, so set it for all devices. */ + for (int i = 0; i < mInputDevices.count(); i++) { + QWaylandInputDevice *inputDevice = mInputDevices.at(i); + inputDevice->setCursor(buffer, image); + } +} + +void QWaylandDisplay::setCursor(const QSharedPointer &buffer, const QPoint &hotSpot) +{ + /* Qt doesn't tell us which input device we should set the cursor + * for, so set it for all devices. */ + for (int i = 0; i < mInputDevices.count(); i++) { + QWaylandInputDevice *inputDevice = mInputDevices.at(i); + inputDevice->setCursor(buffer, hotSpot); + } +} +#endif // QT_CONFIG(cursor) + } QT_END_NAMESPACE diff --git a/src/plugins/platforms/wayland/qwaylanddisplay_p.h b/src/plugins/platforms/wayland/qwaylanddisplay_p.h index e96a89176ba..9268d9f1e67 100644 --- a/src/plugins/platforms/wayland/qwaylanddisplay_p.h +++ b/src/plugins/platforms/wayland/qwaylanddisplay_p.h @@ -123,10 +123,10 @@ public: QWaylandClientBufferIntegration *clientBufferIntegration() const; QWaylandWindowManagerIntegration *windowManagerIntegration() const; - +#if QT_CONFIG(cursor) void setCursor(struct wl_buffer *buffer, struct wl_cursor_image *image); void setCursor(const QSharedPointer &buffer, const QPoint &hotSpot); - +#endif struct wl_display *wl_display() const { return mDisplay; } struct ::wl_registry *wl_registry() { return object(); } From 4e319b514165882d95a5ce8ecb9dc639f0e274e3 Mon Sep 17 00:00:00 2001 From: Giulio Camuffo Date: Wed, 1 Mar 2017 12:12:55 +0100 Subject: [PATCH 09/15] Fix build when xkbcommon is disabled Change-Id: I0ec7a5aa8300e796b015c0d995e71ebf77727bbd Task-number: QTBUG-58839 Reviewed-by: Jan Arne Petersen Reviewed-by: Yong Bakos Reviewed-by: Paul Olav Tvete --- .../platforms/wayland/shared/qwaylandxkb.cpp | 18 ++++++++++++++++++ .../platforms/wayland/shared/qwaylandxkb_p.h | 7 +++++++ 2 files changed, 25 insertions(+) diff --git a/src/plugins/platforms/wayland/shared/qwaylandxkb.cpp b/src/plugins/platforms/wayland/shared/qwaylandxkb.cpp index 3e04467deb3..a0e388a1c9b 100644 --- a/src/plugins/platforms/wayland/shared/qwaylandxkb.cpp +++ b/src/plugins/platforms/wayland/shared/qwaylandxkb.cpp @@ -43,10 +43,13 @@ #include #include +#if QT_CONFIG(xkbcommon_evdev) #include +#endif QT_BEGIN_NAMESPACE +#if QT_CONFIG(xkbcommon_evdev) static const uint32_t KeyTbl[] = { XKB_KEY_Escape, Qt::Key_Escape, XKB_KEY_Tab, Qt::Key_Tab, @@ -290,9 +293,11 @@ static xkb_keysym_t toKeysymFromTable(uint32_t key) return 0; } +#endif std::pair QWaylandXkb::keysymToQtKey(xkb_keysym_t keysym, Qt::KeyboardModifiers &modifiers) { +#if QT_CONFIG(xkbcommon_evdev) QString text; uint utf32 = xkb_keysym_to_utf32(keysym); if (utf32) @@ -326,10 +331,15 @@ std::pair QWaylandXkb::keysymToQtKey(xkb_keysym_t keysym, Qt::Keyb } return { code, text }; +#else + Q_UNUSED(modifiers) + return { keysym, "" }; +#endif } Qt::KeyboardModifiers QWaylandXkb::modifiers(struct xkb_state *state) { +#if QT_CONFIG(xkbcommon_evdev) Qt::KeyboardModifiers modifiers = Qt::NoModifier; xkb_state_component cstate = static_cast(XKB_STATE_DEPRESSED | XKB_STATE_LATCHED | XKB_STATE_LOCKED); @@ -344,6 +354,10 @@ Qt::KeyboardModifiers QWaylandXkb::modifiers(struct xkb_state *state) modifiers |= Qt::MetaModifier; return modifiers; +#else + Q_UNUSED(state) + return Qt::NoModifier; +#endif } QEvent::Type QWaylandXkb::toQtEventType(uint32_t state) @@ -353,6 +367,7 @@ QEvent::Type QWaylandXkb::toQtEventType(uint32_t state) QVector QWaylandXkb::toKeysym(QKeyEvent *event) { +#if QT_CONFIG(xkbcommon_evdev) QVector keysyms; if (event->key() >= Qt::Key_F1 && event->key() <= Qt::Key_F35) { keysyms.append(XKB_KEY_F1 + (event->key() - Qt::Key_F1)); @@ -372,6 +387,9 @@ QVector QWaylandXkb::toKeysym(QKeyEvent *event) keysyms.append(toKeysymFromTable(event->key())); } return keysyms; +#else + return QVector() << event->nativeScanCode(); +#endif } QT_END_NAMESPACE diff --git a/src/plugins/platforms/wayland/shared/qwaylandxkb_p.h b/src/plugins/platforms/wayland/shared/qwaylandxkb_p.h index 230159fbb77..6fa1ea45b8e 100644 --- a/src/plugins/platforms/wayland/shared/qwaylandxkb_p.h +++ b/src/plugins/platforms/wayland/shared/qwaylandxkb_p.h @@ -41,9 +41,16 @@ #ifndef QWAYLANDXKB_H #define QWAYLANDXKB_H +#include #include #include + +#if QT_CONFIG(xkbcommon_evdev) #include +#else +typedef quint32 xkb_keysym_t; +struct xkb_state; +#endif #include From 086b0a9a268d4cdd6bd0229cd00fc735cdee10af Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Thu, 16 Mar 2017 13:59:20 +0100 Subject: [PATCH 10/15] Clean up draganddrop and clipboard features Don't assume that no-draganddrop implies no-clipboard. Introduce a new private feature wayland-datadevice which contains the common functionality. This feature cannot be controlled independently, but is automatically disabled when both clipboard and draganddrop are disabled. Change-Id: I6aac09c7ee524e3b11f0a1caa4a6c62fc3f1d10f Reviewed-by: Oswald Buddenhagen Reviewed-by: Johan Helsing --- src/plugins/platforms/wayland/client.pro | 26 ++++++++++++------- src/plugins/platforms/wayland/configure.json | 4 +++ .../platforms/wayland/qwaylandclipboard.cpp | 4 --- .../platforms/wayland/qwaylandclipboard_p.h | 5 ++-- .../platforms/wayland/qwaylanddatadevice.cpp | 10 ++++--- .../platforms/wayland/qwaylanddatadevice_p.h | 16 +++++++++--- .../wayland/qwaylanddatadevicemanager.cpp | 4 --- .../wayland/qwaylanddatadevicemanager_p.h | 6 ++--- .../platforms/wayland/qwaylanddataoffer.cpp | 4 --- .../platforms/wayland/qwaylanddataoffer_p.h | 6 ++--- .../platforms/wayland/qwaylanddatasource.cpp | 4 --- .../platforms/wayland/qwaylanddatasource_p.h | 6 ++--- .../platforms/wayland/qwaylanddisplay.cpp | 8 +++--- .../platforms/wayland/qwaylanddisplay_p.h | 6 ++--- .../platforms/wayland/qwaylandinputdevice.cpp | 8 +++++- .../platforms/wayland/qwaylandinputdevice_p.h | 4 +++ .../platforms/wayland/qwaylandwindow.cpp | 8 ++++-- 17 files changed, 72 insertions(+), 57 deletions(-) diff --git a/src/plugins/platforms/wayland/client.pro b/src/plugins/platforms/wayland/client.pro index 824c715b05c..015bfcd4bcb 100644 --- a/src/plugins/platforms/wayland/client.pro +++ b/src/plugins/platforms/wayland/client.pro @@ -40,9 +40,6 @@ SOURCES += qwaylandintegration.cpp \ qwaylandwindow.cpp \ qwaylandscreen.cpp \ qwaylandshmwindow.cpp \ - qwaylanddataoffer.cpp \ - qwaylanddatadevicemanager.cpp \ - qwaylanddatasource.cpp \ qwaylandshellsurface.cpp \ qwaylandwlshellsurface.cpp \ qwaylandwlshellintegration.cpp \ @@ -76,9 +73,6 @@ HEADERS += qwaylandintegration_p.h \ qwaylandinputdevice_p.h \ qwaylandbuffer_p.h \ qwaylandshmwindow_p.h \ - qwaylanddataoffer_p.h \ - qwaylanddatadevicemanager_p.h \ - qwaylanddatasource_p.h \ qwaylandshellsurface_p.h \ qwaylandwlshellsurface_p.h \ qwaylandwlshellintegration_p.h \ @@ -123,13 +117,25 @@ qtConfig(cursor) { SOURCES += \ qwaylandcursor.cpp } + +qtConfig(wayland-datadevice) { + HEADERS += \ + qwaylanddatadevice_p.h \ + qwaylanddatadevicemanager_p.h \ + qwaylanddataoffer_p.h \ + qwaylanddatasource_p.h + SOURCES += \ + qwaylanddatadevice.cpp \ + qwaylanddatadevicemanager.cpp \ + qwaylanddataoffer.cpp \ + qwaylanddatasource.cpp +} + qtConfig(draganddrop) { HEADERS += \ - qwaylanddnd_p.h \ - qwaylanddatadevice_p.h + qwaylanddnd_p.h SOURCES += \ - qwaylanddnd.cpp \ - qwaylanddatadevice.cpp + qwaylanddnd.cpp } CONFIG += generated_privates diff --git a/src/plugins/platforms/wayland/configure.json b/src/plugins/platforms/wayland/configure.json index ea0bbe22ccc..c29a8b609d8 100644 --- a/src/plugins/platforms/wayland/configure.json +++ b/src/plugins/platforms/wayland/configure.json @@ -76,6 +76,10 @@ "condition": "!config.win32 && libs.wayland-client && libs.wayland-cursor && tests.wayland-scanner", "output": [ "privateFeature" ] }, + "wayland-datadevice": { + "condition": "features.draganddrop || features.clipboard", + "output": [ "privateFeature" ] + }, "wayland-egl": { "label": "EGL", "condition": "features.wayland-client && features.opengl && features.egl && libs.wayland-egl", diff --git a/src/plugins/platforms/wayland/qwaylandclipboard.cpp b/src/plugins/platforms/wayland/qwaylandclipboard.cpp index 68fb737ccb0..5da1202687e 100644 --- a/src/plugins/platforms/wayland/qwaylandclipboard.cpp +++ b/src/plugins/platforms/wayland/qwaylandclipboard.cpp @@ -44,8 +44,6 @@ #include "qwaylanddatasource_p.h" #include "qwaylanddatadevice_p.h" -#if QT_CONFIG(draganddrop) - QT_BEGIN_NAMESPACE namespace QtWaylandClient { @@ -117,5 +115,3 @@ bool QWaylandClipboard::ownsMode(QClipboard::Mode mode) const } QT_END_NAMESPACE - -#endif // draganddrop diff --git a/src/plugins/platforms/wayland/qwaylandclipboard_p.h b/src/plugins/platforms/wayland/qwaylandclipboard_p.h index 211a969420b..28336202241 100644 --- a/src/plugins/platforms/wayland/qwaylandclipboard_p.h +++ b/src/plugins/platforms/wayland/qwaylandclipboard_p.h @@ -57,7 +57,8 @@ #include -#if QT_CONFIG(draganddrop) +QT_REQUIRE_CONFIG(clipboard); + QT_BEGIN_NAMESPACE namespace QtWaylandClient { @@ -85,6 +86,4 @@ private: QT_END_NAMESPACE -#endif // draganddrop - #endif // QWAYLANDCLIPBOARD_H diff --git a/src/plugins/platforms/wayland/qwaylanddatadevice.cpp b/src/plugins/platforms/wayland/qwaylanddatadevice.cpp index ebd3ce1bff1..33068c5e97a 100644 --- a/src/plugins/platforms/wayland/qwaylanddatadevice.cpp +++ b/src/plugins/platforms/wayland/qwaylanddatadevice.cpp @@ -58,8 +58,6 @@ #include #include -#if QT_CONFIG(draganddrop) - QT_BEGIN_NAMESPACE namespace QtWaylandClient { @@ -103,6 +101,7 @@ void QWaylandDataDevice::setSelectionSource(QWaylandDataSource *source) m_selectionSource.reset(source); } +#if QT_CONFIG(draganddrop) QWaylandDataOffer *QWaylandDataDevice::dragOffer() const { return m_dragOffer.data(); @@ -124,12 +123,14 @@ void QWaylandDataDevice::cancelDrag() { m_dragSource.reset(); } +#endif void QWaylandDataDevice::data_device_data_offer(struct ::wl_data_offer *id) { new QWaylandDataOffer(m_display, id); } +#if QT_CONFIG(draganddrop) void QWaylandDataDevice::data_device_drop() { QDrag *drag = static_cast(QGuiApplicationPrivate::platformIntegration()->drag())->currentDrag(); @@ -229,6 +230,7 @@ void QWaylandDataDevice::data_device_motion(uint32_t time, wl_fixed_t x, wl_fixe wl_data_offer_accept(m_dragOffer->object(), m_enterSerial, 0); } } +#endif // QT_CONFIG(draganddrop) void QWaylandDataDevice::data_device_selection(wl_data_offer *id) { @@ -250,6 +252,7 @@ void QWaylandDataDevice::selectionSourceCancelled() #endif } +#if QT_CONFIG(draganddrop) void QWaylandDataDevice::dragSourceCancelled() { m_dragSource.reset(); @@ -272,9 +275,8 @@ QPoint QWaylandDataDevice::calculateDragPosition(int x, int y, QWindow *wnd) con } return pnt; } +#endif // QT_CONFIG(draganddrop) } QT_END_NAMESPACE - -#endif // draganddrop diff --git a/src/plugins/platforms/wayland/qwaylanddatadevice_p.h b/src/plugins/platforms/wayland/qwaylanddatadevice_p.h index 1ec8761b913..7fb0003b4dd 100644 --- a/src/plugins/platforms/wayland/qwaylanddatadevice_p.h +++ b/src/plugins/platforms/wayland/qwaylanddatadevice_p.h @@ -52,14 +52,14 @@ // We mean it. // -#include +#include #include #include #include #include -#if QT_CONFIG(draganddrop) +QT_REQUIRE_CONFIG(wayland_datadevice); QT_BEGIN_NAMESPACE @@ -87,25 +87,35 @@ public: QWaylandDataSource *selectionSource() const; void setSelectionSource(QWaylandDataSource *source); +#if QT_CONFIG(draganddrop) QWaylandDataOffer *dragOffer() const; void startDrag(QMimeData *mimeData, QWaylandWindow *icon); void cancelDrag(); +#endif protected: void data_device_data_offer(struct ::wl_data_offer *id) override; + +#if QT_CONFIG(draganddrop) void data_device_drop() override; void data_device_enter(uint32_t serial, struct ::wl_surface *surface, wl_fixed_t x, wl_fixed_t y, struct ::wl_data_offer *id) override; void data_device_leave() override; void data_device_motion(uint32_t time, wl_fixed_t x, wl_fixed_t y) override; +#endif void data_device_selection(struct ::wl_data_offer *id) override; private Q_SLOTS: void selectionSourceCancelled(); + +#if QT_CONFIG(draganddrop) void dragSourceCancelled(); void dragSourceTargetChanged(const QString &mimeType); +#endif private: +#if QT_CONFIG(draganddrop) QPoint calculateDragPosition(int x, int y, QWindow *wnd) const; +#endif QWaylandDisplay *m_display; QWaylandInputDevice *m_inputDevice; @@ -123,6 +133,4 @@ private: QT_END_NAMESPACE -#endif // draganddrop - #endif // QWAYLANDDATADEVICE_H diff --git a/src/plugins/platforms/wayland/qwaylanddatadevicemanager.cpp b/src/plugins/platforms/wayland/qwaylanddatadevicemanager.cpp index c398b86fd5f..35d67307fc3 100644 --- a/src/plugins/platforms/wayland/qwaylanddatadevicemanager.cpp +++ b/src/plugins/platforms/wayland/qwaylanddatadevicemanager.cpp @@ -46,8 +46,6 @@ #include -#if QT_CONFIG(draganddrop) - QT_BEGIN_NAMESPACE namespace QtWaylandClient { @@ -82,5 +80,3 @@ QWaylandDisplay *QWaylandDataDeviceManager::display() const } QT_END_NAMESPACE - -#endif // draganddrop diff --git a/src/plugins/platforms/wayland/qwaylanddatadevicemanager_p.h b/src/plugins/platforms/wayland/qwaylanddatadevicemanager_p.h index e7fc2113a35..3daf780aaa9 100644 --- a/src/plugins/platforms/wayland/qwaylanddatadevicemanager_p.h +++ b/src/plugins/platforms/wayland/qwaylanddatadevicemanager_p.h @@ -51,10 +51,10 @@ // We mean it. // -#include +#include #include -#if QT_CONFIG(draganddrop) +QT_REQUIRE_CONFIG(wayland_datadevice); QT_BEGIN_NAMESPACE @@ -83,6 +83,4 @@ private: QT_END_NAMESPACE -#endif // draganddrop - #endif // QWAYLANDDATADEVICEMANAGER_H diff --git a/src/plugins/platforms/wayland/qwaylanddataoffer.cpp b/src/plugins/platforms/wayland/qwaylanddataoffer.cpp index 56a18f007d3..2491c658b12 100644 --- a/src/plugins/platforms/wayland/qwaylanddataoffer.cpp +++ b/src/plugins/platforms/wayland/qwaylanddataoffer.cpp @@ -47,8 +47,6 @@ #include -#if QT_CONFIG(draganddrop) - QT_BEGIN_NAMESPACE namespace QtWaylandClient { @@ -183,5 +181,3 @@ int QWaylandMimeData::readData(int fd, QByteArray &data) const } QT_END_NAMESPACE - -#endif // draganddrop diff --git a/src/plugins/platforms/wayland/qwaylanddataoffer_p.h b/src/plugins/platforms/wayland/qwaylanddataoffer_p.h index c7520f3e55c..c9b9c21f17d 100644 --- a/src/plugins/platforms/wayland/qwaylanddataoffer_p.h +++ b/src/plugins/platforms/wayland/qwaylanddataoffer_p.h @@ -53,10 +53,11 @@ #include -#include +#include #include -#if QT_CONFIG(draganddrop) +QT_REQUIRE_CONFIG(wayland_datadevice); + QT_BEGIN_NAMESPACE namespace QtWaylandClient { @@ -106,5 +107,4 @@ private: } QT_END_NAMESPACE -#endif // draganddrop #endif diff --git a/src/plugins/platforms/wayland/qwaylanddatasource.cpp b/src/plugins/platforms/wayland/qwaylanddatasource.cpp index c61de181ba6..0c6ad50e4b7 100644 --- a/src/plugins/platforms/wayland/qwaylanddatasource.cpp +++ b/src/plugins/platforms/wayland/qwaylanddatasource.cpp @@ -50,8 +50,6 @@ #include #include -#if QT_CONFIG(draganddrop) - QT_BEGIN_NAMESPACE namespace QtWaylandClient { @@ -108,5 +106,3 @@ void QWaylandDataSource::data_source_target(const QString &mime_type) } QT_END_NAMESPACE - -#endif // draganddrop diff --git a/src/plugins/platforms/wayland/qwaylanddatasource_p.h b/src/plugins/platforms/wayland/qwaylanddatasource_p.h index 0221304c80d..bba003f561b 100644 --- a/src/plugins/platforms/wayland/qwaylanddatasource_p.h +++ b/src/plugins/platforms/wayland/qwaylanddatasource_p.h @@ -54,9 +54,9 @@ #include #include -#include +#include -#if QT_CONFIG(draganddrop) +QT_REQUIRE_CONFIG(wayland_datadevice); QT_BEGIN_NAMESPACE @@ -94,6 +94,4 @@ private: QT_END_NAMESPACE -#endif // draganddrop - #endif // QWAYLANDDATASOURCE_H diff --git a/src/plugins/platforms/wayland/qwaylanddisplay.cpp b/src/plugins/platforms/wayland/qwaylanddisplay.cpp index 83a69483f50..86cfe1a0d6c 100644 --- a/src/plugins/platforms/wayland/qwaylanddisplay.cpp +++ b/src/plugins/platforms/wayland/qwaylanddisplay.cpp @@ -47,7 +47,9 @@ #if QT_CONFIG(clipboard) #include "qwaylandclipboard_p.h" #endif +#if QT_CONFIG(wayland_datadevice) #include "qwaylanddatadevicemanager_p.h" +#endif #include "qwaylandhardwareintegration_p.h" #include "qwaylandxdgshell_p.h" #include "qwaylandxdgsurface_p.h" @@ -122,7 +124,7 @@ QWaylandWindowManagerIntegration *QWaylandDisplay::windowManagerIntegration() co QWaylandDisplay::QWaylandDisplay(QWaylandIntegration *waylandIntegration) : mWaylandIntegration(waylandIntegration) -#if QT_CONFIG(draganddrop) +#if QT_CONFIG(wayland_datadevice) , mDndSelectionHandler(0) #endif , mWindowExtension(0) @@ -162,7 +164,7 @@ QWaylandDisplay::~QWaylandDisplay(void) mWaylandIntegration->destroyScreen(screen); } mScreens.clear(); -#if QT_CONFIG(draganddrop) +#if QT_CONFIG(wayland_datadevice) delete mDndSelectionHandler.take(); #endif wl_display_disconnect(mDisplay); @@ -257,7 +259,7 @@ void QWaylandDisplay::registry_global(uint32_t id, const QString &interface, uin } else if (interface == QStringLiteral("wl_seat")) { QWaylandInputDevice *inputDevice = mWaylandIntegration->createInputDevice(this, version, id); mInputDevices.append(inputDevice); -#if QT_CONFIG(draganddrop) +#if QT_CONFIG(wayland_datadevice) } else if (interface == QStringLiteral("wl_data_device_manager")) { mDndSelectionHandler.reset(new QWaylandDataDeviceManager(this, id)); #endif diff --git a/src/plugins/platforms/wayland/qwaylanddisplay_p.h b/src/plugins/platforms/wayland/qwaylanddisplay_p.h index 9268d9f1e67..35d861760e5 100644 --- a/src/plugins/platforms/wayland/qwaylanddisplay_p.h +++ b/src/plugins/platforms/wayland/qwaylanddisplay_p.h @@ -61,7 +61,7 @@ #include #include -#include +#include #include #include @@ -137,7 +137,7 @@ public: QList inputDevices() const { return mInputDevices; } QWaylandInputDevice *defaultInputDevice() const; QWaylandInputDevice *currentInputDevice() const { return defaultInputDevice(); } -#if QT_CONFIG(draganddrop) +#if QT_CONFIG(wayland_datadevice) QWaylandDataDeviceManager *dndSelectionHandler() const { return mDndSelectionHandler.data(); } #endif QtWayland::qt_surface_extension *windowExtension() const { return mWindowExtension.data(); } @@ -202,7 +202,7 @@ private: QList mInputDevices; QList mRegistryListeners; QWaylandIntegration *mWaylandIntegration; -#if QT_CONFIG(draganddrop) +#if QT_CONFIG(wayland_datadevice) QScopedPointer mDndSelectionHandler; #endif QScopedPointer mWindowExtension; diff --git a/src/plugins/platforms/wayland/qwaylandinputdevice.cpp b/src/plugins/platforms/wayland/qwaylandinputdevice.cpp index fb22c95e673..b0c6394e2b0 100644 --- a/src/plugins/platforms/wayland/qwaylandinputdevice.cpp +++ b/src/plugins/platforms/wayland/qwaylandinputdevice.cpp @@ -42,8 +42,10 @@ #include "qwaylandintegration_p.h" #include "qwaylandwindow_p.h" #include "qwaylandbuffer_p.h" +#if QT_CONFIG(wayland_datadevice) #include "qwaylanddatadevice_p.h" #include "qwaylanddatadevicemanager_p.h" +#endif #include "qwaylandtouch_p.h" #include "qwaylandscreen_p.h" #include "qwaylandcursor_p.h" @@ -187,7 +189,9 @@ QWaylandInputDevice::QWaylandInputDevice(QWaylandDisplay *display, int version, , mDisplay(display->wl_display()) , mVersion(qMin(version, 4)) , mCaps(0) +#if QT_CONFIG(wayland_datadevice) , mDataDevice(0) +#endif , mKeyboard(0) , mPointer(0) , mTouch(0) @@ -196,7 +200,7 @@ QWaylandInputDevice::QWaylandInputDevice(QWaylandDisplay *display, int version, , mSerial(0) , mTouchDevice(0) { -#if QT_CONFIG(draganddrop) +#if QT_CONFIG(wayland_datadevice) if (mQDisplay->dndSelectionHandler()) { mDataDevice = mQDisplay->dndSelectionHandler()->getDataDevice(this); } @@ -286,6 +290,7 @@ void QWaylandInputDevice::handleEndDrag() mPointer->releaseButtons(); } +#if QT_CONFIG(wayland_datadevice) void QWaylandInputDevice::setDataDevice(QWaylandDataDevice *device) { mDataDevice = device; @@ -296,6 +301,7 @@ QWaylandDataDevice *QWaylandInputDevice::dataDevice() const Q_ASSERT(mDataDevice); return mDataDevice; } +#endif void QWaylandInputDevice::setTextInput(QWaylandTextInput *textInput) { diff --git a/src/plugins/platforms/wayland/qwaylandinputdevice_p.h b/src/plugins/platforms/wayland/qwaylandinputdevice_p.h index d8bd0062f29..4d0a4759751 100644 --- a/src/plugins/platforms/wayland/qwaylandinputdevice_p.h +++ b/src/plugins/platforms/wayland/qwaylandinputdevice_p.h @@ -111,8 +111,10 @@ public: void handleWindowDestroyed(QWaylandWindow *window); void handleEndDrag(); +#if QT_CONFIG(wayland_datadevice) void setDataDevice(QWaylandDataDevice *device); QWaylandDataDevice *dataDevice() const; +#endif void setTextInput(QWaylandTextInput *textInput); QWaylandTextInput *textInput() const; @@ -143,7 +145,9 @@ private: struct wl_surface *pointerSurface; +#if QT_CONFIG(wayland_datadevice) QWaylandDataDevice *mDataDevice; +#endif Keyboard *mKeyboard; Pointer *mPointer; diff --git a/src/plugins/platforms/wayland/qwaylandwindow.cpp b/src/plugins/platforms/wayland/qwaylandwindow.cpp index dec4d1157dc..00fbb00de7f 100644 --- a/src/plugins/platforms/wayland/qwaylandwindow.cpp +++ b/src/plugins/platforms/wayland/qwaylandwindow.cpp @@ -40,7 +40,6 @@ #include "qwaylandwindow_p.h" #include "qwaylandbuffer_p.h" -#include "qwaylanddatadevice_p.h" #include "qwaylanddisplay_p.h" #include "qwaylandinputdevice_p.h" #include "qwaylandscreen_p.h" @@ -54,6 +53,11 @@ #include "qwaylanddecorationfactory_p.h" #include "qwaylandshmbackingstore_p.h" +#if QT_CONFIG(wayland_datadevice) +#include "qwaylanddatadevice_p.h" +#endif + + #include #include #include @@ -825,7 +829,7 @@ void QWaylandWindow::requestActivateWindow() void QWaylandWindow::unfocus() { -#if QT_CONFIG(draganddrop) +#if QT_CONFIG(clipboard) QWaylandInputDevice *inputDevice = mDisplay->currentInputDevice(); if (inputDevice && inputDevice->dataDevice()) { inputDevice->dataDevice()->invalidateSelectionOffer(); From dfb0a833d691e9cbd2935d4666e99dceb2913a5b Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Fri, 24 Mar 2017 09:49:15 +0100 Subject: [PATCH 11/15] Doc: Fix external links to wayland-ivi project Seems that the project moved to github. Task-number: QTBUG-59656 Change-Id: Ib6c9c62e987f11ffbcffe013cbeb4a4454e594b0 Reviewed-by: Venugopal Shivashankar --- src/3rdparty/wayland/protocols/qt_attribution.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/3rdparty/wayland/protocols/qt_attribution.json b/src/3rdparty/wayland/protocols/qt_attribution.json index 76fd33d37f9..f35dec4f348 100644 --- a/src/3rdparty/wayland/protocols/qt_attribution.json +++ b/src/3rdparty/wayland/protocols/qt_attribution.json @@ -26,9 +26,9 @@ "Files": "ivi-controller.xml ivi-application.xml", "Description": "\"Wayland IVI Extension\" is forked from IVI Layer Management to define a common set of APIs by wayland style protocol and provide reference implementation which can be loaded on Weston.", - "Homepage": "http://projects.genivi.org/wayland-ivi-extension", + "Homepage": "https://at.projects.genivi.org/wiki/display/WIE/Wayland+IVI+Extension+Home", "Version": "1.9.1", - "DownloadLocation": "http://git.projects.genivi.org/?p=wayland-ivi-extension.git;a=commit;h=44598504503eea5ac7f94c88477a5a78bda01f30", + "DownloadLocation": "https://github.com/GENIVI/wayland-ivi-extension/releases/tag/1.9.1", "LicenseId": "MIT", "License": "MIT License", "LicenseFile": "MIT_LICENSE.txt", From 0dc450ec222aab275b062eb0f9511ca489532769 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Tue, 7 Feb 2017 12:03:43 +0100 Subject: [PATCH 12/15] Don't redefine symbols from system libraries The system library versions may contain driver-specific functionality. Change-Id: Iaaa71bff7d2c305cb47798920a5977aaa2a3ac8a Task-number: QTBUG-58299 Reviewed-by: Johan Helsing --- src/plugins/platforms/wayland/client.pro | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/plugins/platforms/wayland/client.pro b/src/plugins/platforms/wayland/client.pro index 015bfcd4bcb..eae7ad52ea2 100644 --- a/src/plugins/platforms/wayland/client.pro +++ b/src/plugins/platforms/wayland/client.pro @@ -23,7 +23,6 @@ QMAKE_USE += wayland-client INCLUDEPATH += $$PWD/../shared WAYLANDCLIENTSOURCES += \ - ../3rdparty/protocol/wayland.xml \ ../extensions/surface-extension.xml \ ../extensions/touch-extension.xml \ ../extensions/qtkey-extension.xml \ @@ -32,6 +31,9 @@ WAYLANDCLIENTSOURCES += \ ../3rdparty/protocol/xdg-shell.xml \ ../3rdparty/protocol/xdg-shell-unstable-v6.xml \ +WAYLANDCLIENTSOURCES_SYSTEM += \ + ../3rdparty/protocol/wayland.xml \ + SOURCES += qwaylandintegration.cpp \ qwaylandnativeinterface.cpp \ qwaylandshmbackingstore.cpp \ From e9b87c0b1c94101475ce1da4ed175e1d62110096 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Sat, 1 Apr 2017 21:19:24 -0700 Subject: [PATCH 13/15] Fix warning about unused variable QPoint has no side-effects so it's safe to remove. main.cpp:214:12: warning: unused variable 'gradCenter' [-Wunused-variable] Change-Id: I27b55fdf514247549455fffd14b179b3a6a08617 Reviewed-by: Johan Helsing --- .../platforms/wayland/plugins/decorations/bradient/main.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/plugins/platforms/wayland/plugins/decorations/bradient/main.cpp b/src/plugins/platforms/wayland/plugins/decorations/bradient/main.cpp index 074c74522d2..ceb07c8032d 100644 --- a/src/plugins/platforms/wayland/plugins/decorations/bradient/main.cpp +++ b/src/plugins/platforms/wayland/plugins/decorations/bradient/main.cpp @@ -211,7 +211,6 @@ void QWaylandBradientDecoration::paint(QPaintDevice *device) p.setRenderHint(QPainter::Antialiasing); // Title bar - QPoint gradCenter(top.center()+ QPoint(30, 60)); QLinearGradient grad(top.topLeft(), top.bottomLeft()); QColor base(m_backgroundColor); grad.setColorAt(0, base.lighter(100)); From 240fb37484f02902a140c9b27ec38d7148a7b10c Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Sat, 1 Apr 2017 21:08:38 -0700 Subject: [PATCH 14/15] Fix warning about inconsistent use of override keyword qwaylandshmbackingstore_p.h:93:19: warning: 'paintDevice' overrides a member function but is not marked 'override' [-Winconsistent-missing- override Change-Id: I27b55fdf514247549455fffd14b1791d4dd6b6b3 Reviewed-by: Johan Helsing --- src/plugins/platforms/wayland/qwaylandshmbackingstore_p.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/platforms/wayland/qwaylandshmbackingstore_p.h b/src/plugins/platforms/wayland/qwaylandshmbackingstore_p.h index 71f98e30cfe..8564cc9d223 100644 --- a/src/plugins/platforms/wayland/qwaylandshmbackingstore_p.h +++ b/src/plugins/platforms/wayland/qwaylandshmbackingstore_p.h @@ -90,7 +90,7 @@ public: QWaylandShmBackingStore(QWindow *window); ~QWaylandShmBackingStore(); - QPaintDevice *paintDevice(); + QPaintDevice *paintDevice() override; void flush(QWindow *window, const QRegion ®ion, const QPoint &offset) override; void resize(const QSize &size, const QRegion &staticContents) override; void resize(const QSize &size); From b0f57f5e313caa28d238997c55f98bb64c78f792 Mon Sep 17 00:00:00 2001 From: Johan Klokkhammer Helsing Date: Wed, 12 Apr 2017 10:13:07 +0200 Subject: [PATCH 15/15] Don't try to create zxdg_popup_v6s with incomplete positioners A positioner without a size is considered incomplete, and creating a popup with an incomplete positioner is a protocol error. Change-Id: I5efdba0edfe6edc5f7b0a4908c1e43b93d35eea8 Reviewed-by: Pier Luigi Fiorini Reviewed-by: Jan Arne Petersen Reviewed-by: Paul Olav Tvete --- src/plugins/platforms/wayland/qwaylandxdgshellv6.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/platforms/wayland/qwaylandxdgshellv6.cpp b/src/plugins/platforms/wayland/qwaylandxdgshellv6.cpp index 687973240eb..b50b6b1cf0b 100644 --- a/src/plugins/platforms/wayland/qwaylandxdgshellv6.cpp +++ b/src/plugins/platforms/wayland/qwaylandxdgshellv6.cpp @@ -199,6 +199,7 @@ void QWaylandXdgSurfaceV6::setPopup(QWaylandWindow *parent, QWaylandInputDevice positioner->set_anchor_rect(transientPos.x(), transientPos.y(), 1, 1); positioner->set_anchor(QtWayland::zxdg_positioner_v6::anchor_top | QtWayland::zxdg_positioner_v6::anchor_left); positioner->set_gravity(QtWayland::zxdg_positioner_v6::gravity_bottom | QtWayland::zxdg_positioner_v6::gravity_right); + positioner->set_size(m_window->geometry().width(), m_window->geometry().height()); m_popup = new Popup(this, parentXdgSurface, positioner); positioner->destroy(); delete positioner;