diff options
author | Liang Qi <liang.qi@qt.io> | 2018-06-28 18:24:20 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2018-06-28 20:56:59 +0200 |
commit | efbeace6ffa14de0f7a1ec8b8b9653056612d5f8 (patch) | |
tree | eb2b2fccc7aa1422ed7be48e97c6fa90b057680a | |
parent | 4d9e127d3c3171bd796c5d6fc7c1c2f70101ad34 (diff) | |
parent | 56e01f9e3372446d20f0bb70bed0b88348f2a74b (diff) | |
download | qtwayland-efbeace6ffa14de0f7a1ec8b8b9653056612d5f8.tar.gz |
Merge remote-tracking branch 'origin/5.11' into dev
Conflicts:
src/client/qwaylandxdgsurface.cpp
src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgsurfacev5.cpp
src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6.cpp
src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6_p.h
Done-with: Johan Klokkhammer Helsing <johan.helsing@qt.io>
Change-Id: Ia39be6254a95af1c4efa831358cc06a697da3423
14 files changed, 143 insertions, 16 deletions
diff --git a/dist/changes-5.11.1 b/dist/changes-5.11.1 new file mode 100644 index 00000000..ee35e7b4 --- /dev/null +++ b/dist/changes-5.11.1 @@ -0,0 +1,43 @@ +Qt 5.11.1 is a bug-fix release. It maintains both forward and backward +compatibility (source and binary) with Qt 5.11.0. + +For more details, refer to the online documentation included in this +distribution. The documentation is also available online: + +http://doc.qt.io/qt-5/index.html + +The Qt version 5.11 series is binary compatible with the 5.10.x series. +Applications compiled for 5.10 will continue to run with 5.11. + +Some of the changes listed in this file include issue tracking numbers +corresponding to tasks in the Qt Bug Tracker: + +https://bugreports.qt.io/ + +Each of these identifiers can be entered in the bug tracker to obtain more +information about a particular change. + +**************************************************************************** +* Qt 5.11.1 Changes * +**************************************************************************** + +**************************************************************************** +* QPA Plugin * +**************************************************************************** + + - [QTBUG-67988] Fixed a protocol error that sometimes happened when + showing popups such as nested menus on xdg-shell unstable v6. + + - [QTBUG-68715] Fixed bug where setting absurdly long window titles + would terminate the application. + +**************************************************************************** +* Qt Wayland Compositor * +**************************************************************************** + + - Fixed crash when calling QWaylandView::setPrimary/isPrimary without + a surface + + - Fixed bug where custom extensions could be initialized multiple times. + + - Fixed OpenGL texture leak when running multi-threaded. diff --git a/examples/wayland/overview-compositor/doc/src/overview-compositor.qdoc b/examples/wayland/overview-compositor/doc/src/overview-compositor.qdoc index c34eeb2a..50408bc5 100644 --- a/examples/wayland/overview-compositor/doc/src/overview-compositor.qdoc +++ b/examples/wayland/overview-compositor/doc/src/overview-compositor.qdoc @@ -28,6 +28,7 @@ /*! * \title Qt Wayland Compositor Examples - Overview Compositor * \example overview-compositor - * \brief Overview Compositor shows how to switch between clients in a grid + * \brief Overview Compositor shows how to switch between clients in a grid. + * * \ingroup qtwaylandcompositor-examples */ diff --git a/src/compositor/compositor_api/qwaylandbufferref.cpp b/src/compositor/compositor_api/qwaylandbufferref.cpp index 82997a5d..ab34d125 100644 --- a/src/compositor/compositor_api/qwaylandbufferref.cpp +++ b/src/compositor/compositor_api/qwaylandbufferref.cpp @@ -59,7 +59,7 @@ public: * \class QWaylandBufferRef * \inmodule QtWaylandCompositor * \since 5.8 - * \brief The QWaylandBufferRef class holds the reference to a surface buffer + * \brief The QWaylandBufferRef class holds the reference to a surface buffer. * * This class can be used to reference a surface buffer. As long as a reference * to the buffer exists, it is owned by the compositor and the client cannot modify it. diff --git a/src/compositor/compositor_api/qwaylandquickhardwarelayer.cpp b/src/compositor/compositor_api/qwaylandquickhardwarelayer.cpp index f82de001..11dd7b47 100644 --- a/src/compositor/compositor_api/qwaylandquickhardwarelayer.cpp +++ b/src/compositor/compositor_api/qwaylandquickhardwarelayer.cpp @@ -87,7 +87,7 @@ QtWayland::HardwareLayerIntegration *QWaylandQuickHardwareLayerPrivate::layerInt * \qmltype WaylandHardwareLayer * \inqmlmodule QtWayland.Compositor * \preliminary - * \brief Makes a parent WaylandQuickItem use hardware layers for rendering + * \brief Makes a parent WaylandQuickItem use hardware layers for rendering. * * This item needs to be a descendant of a WaylandQuickItem or a derivative, * (i.e. ShellSurfaceItem or similar) diff --git a/src/compositor/compositor_api/qwaylandsurfacegrabber.cpp b/src/compositor/compositor_api/qwaylandsurfacegrabber.cpp index 5db57622..d36efb54 100644 --- a/src/compositor/compositor_api/qwaylandsurfacegrabber.cpp +++ b/src/compositor/compositor_api/qwaylandsurfacegrabber.cpp @@ -50,7 +50,7 @@ QT_BEGIN_NAMESPACE \class QWaylandSurfaceGrabber \inmodule QtWaylandCompositor \since 5.8 - \brief The QWaylandSurfaceGrabber class allows to read the content of a QWaylandSurface + \brief The QWaylandSurfaceGrabber class allows to read the content of a QWaylandSurface. Sometimes it is needed to get the contents of a surface, for example to provide a screenshot to the user. The QWaylandSurfaceGrabber class provides a simple method to do so, without diff --git a/src/compositor/extensions/extensions.pri b/src/compositor/extensions/extensions.pri index 77c09aa2..d51a75b5 100644 --- a/src/compositor/extensions/extensions.pri +++ b/src/compositor/extensions/extensions.pri @@ -1,6 +1,9 @@ CONFIG += wayland-scanner CONFIG += generated_privates +# make sure we install the headers generated by wayland-scanner +private_headers.CONFIG += no_check_exist + WAYLANDSERVERSOURCES += \ ../extensions/touch-extension.xml \ ../extensions/qt-key-unstable-v1.xml \ diff --git a/src/compositor/extensions/qwaylandshellsurface.cpp b/src/compositor/extensions/qwaylandshellsurface.cpp index c1cd5272..3cfe4489 100644 --- a/src/compositor/extensions/qwaylandshellsurface.cpp +++ b/src/compositor/extensions/qwaylandshellsurface.cpp @@ -43,7 +43,7 @@ * \qmltype ShellSurface * \inqmlmodule QtWayland.Compositor * \since 5.8 - * \brief Provides a common interface for surface roles specified by shell extensions + * \brief Provides a common interface for surface roles specified by shell extensions. * * This interface represents a Wayland surface role given by a Wayland protocol extension that * defines how the WaylandSurface should map onto the screen. @@ -61,7 +61,7 @@ * \class QWaylandShellSurface * \inmodule QtWaylandCompositor * \since 5.8 - * \brief The QWaylandShellSurface class is a common interface for surface roles specified by shell extensions + * \brief The QWaylandShellSurface class is a common interface for surface roles specified by shell extensions. * * This interface represents a Wayland surface role given by a Wayland protocol extension that * defines how the QWaylandSurface should map onto the screen. diff --git a/src/compositor/extensions/qwaylandxdgshellv5.cpp b/src/compositor/extensions/qwaylandxdgshellv5.cpp index cbcd50ae..6bfaf7a6 100644 --- a/src/compositor/extensions/qwaylandxdgshellv5.cpp +++ b/src/compositor/extensions/qwaylandxdgshellv5.cpp @@ -1324,7 +1324,7 @@ QWaylandQuickShellIntegration *QWaylandXdgSurfaceV5::createIntegration(QWaylandQ * \class QWaylandXdgPopupV5 * \inmodule QtWaylandCompositor * \since 5.8 - * \brief The QWaylandXdgPopupV5 class provides menus for an xdg surface + * \brief The QWaylandXdgPopupV5 class provides menus for an xdg surface. * * This class is part of the QWaylandXdgShellV5 extension and provides a way to * extend the functionality of an existing QWaylandSurface with features diff --git a/src/compositor/extensions/qwaylandxdgshellv6.cpp b/src/compositor/extensions/qwaylandxdgshellv6.cpp index 342edfd1..8cde4668 100644 --- a/src/compositor/extensions/qwaylandxdgshellv6.cpp +++ b/src/compositor/extensions/qwaylandxdgshellv6.cpp @@ -704,7 +704,7 @@ QWaylandQuickShellIntegration *QWaylandXdgSurfaceV6::createIntegration(QWaylandQ * \qmltype XdgToplevelV6 * \inqmlmodule QtWayland.Compositor * \since 5.10 - * \brief XdgToplevelV6 represents the toplevel window specific parts of an xdg surface + * \brief XdgToplevelV6 represents the toplevel window specific parts of an xdg surface. * * This type is part of the \l{XdgShellV6} extension and provides a way to * extend the functionality of an XdgSurfaceV6 with features @@ -717,7 +717,7 @@ QWaylandQuickShellIntegration *QWaylandXdgSurfaceV6::createIntegration(QWaylandQ * \class QWaylandXdgToplevelV6 * \inmodule QtWaylandCompositor * \since 5.10 - * \brief The QWaylandXdgToplevelV6 class represents the toplevel window specific parts of an xdg surface + * \brief The QWaylandXdgToplevelV6 class represents the toplevel window specific parts of an xdg surface. * * This class is part of the QWaylandXdgShellV6 extension and provides a way to * extend the functionality of an QWaylandXdgSurfaceV6 with features @@ -1462,7 +1462,7 @@ void QWaylandXdgToplevelV6Private::zxdg_toplevel_v6_set_minimized(QtWaylandServe * \qmltype XdgPopupV6 * \inqmlmodule QtWayland.Compositor * \since 5.10 - * \brief XdgPopupV6 represents the popup specific parts of and xdg surface + * \brief XdgPopupV6 represents the popup specific parts of and xdg surface. * * This type is part of the \l{XdgShellV6} extension and provides a way to extend * extend the functionality of an \l{XdgSurfaceV6} with features @@ -1475,7 +1475,7 @@ void QWaylandXdgToplevelV6Private::zxdg_toplevel_v6_set_minimized(QtWaylandServe * \class QWaylandXdgPopupV6 * \inmodule QtWaylandCompositor * \since 5.10 - * \brief The QWaylandXdgPopupV6 class represents the popup specific parts of an xdg surface + * \brief The QWaylandXdgPopupV6 class represents the popup specific parts of an xdg surface. * * This class is part of the QWaylandXdgShellV6 extension and provides a way to * extend the functionality of a QWaylandXdgSurfaceV6 with features diff --git a/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgsurfacev5.cpp b/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgsurfacev5.cpp index 31c7dff7..40e2a994 100644 --- a/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgsurfacev5.cpp +++ b/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgsurfacev5.cpp @@ -229,6 +229,7 @@ void QWaylandXdgSurfaceV5::xdg_surface_configure(int32_t width, int32_t height, void QWaylandXdgSurfaceV5::xdg_surface_close() { + m_window->window()->close(); } } diff --git a/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6.cpp b/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6.cpp index a8bfaac6..986deceb 100644 --- a/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6.cpp +++ b/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6.cpp @@ -152,6 +152,7 @@ QWaylandXdgSurfaceV6::Popup::Popup(QWaylandXdgSurfaceV6 *xdgSurface, QWaylandXdg QtWayland::zxdg_positioner_v6 *positioner) : zxdg_popup_v6(xdgSurface->get_popup(parent->object(), positioner->object())) , m_xdgSurface(xdgSurface) + , m_parent(parent) { } @@ -159,6 +160,19 @@ QWaylandXdgSurfaceV6::Popup::~Popup() { if (isInitialized()) destroy(); + + if (m_grabbing) { + auto *shell = m_xdgSurface->m_shell; + Q_ASSERT(shell->m_topmostPopup == this); + shell->m_topmostPopup = m_parent->m_popup; + } +} + +void QWaylandXdgSurfaceV6::Popup::grab(QWaylandInputDevice *seat, uint serial) +{ + m_xdgSurface->m_shell->m_topmostPopup = this; + zxdg_popup_v6::grab(seat->wl_seat(), serial); + m_grabbing = true; } void QWaylandXdgSurfaceV6::Popup::zxdg_popup_v6_popup_done() @@ -192,8 +206,10 @@ QWaylandXdgSurfaceV6::~QWaylandXdgSurfaceV6() { if (m_toplevel) zxdg_toplevel_v6_destroy(m_toplevel->object()); - if (m_popup) - zxdg_popup_v6_destroy(m_popup->object()); + if (m_popup) { + delete m_popup; + m_popup = nullptr; + } destroy(); } @@ -277,6 +293,14 @@ void QWaylandXdgSurfaceV6::setPopup(QWaylandWindow *parent, QWaylandInputDevice Q_ASSERT(!m_toplevel && !m_popup); auto parentXdgSurface = static_cast<QWaylandXdgSurfaceV6 *>(parent->shellSurface()); + + auto *top = m_shell->m_topmostPopup; + if (grab && top && top->m_xdgSurface != parentXdgSurface) { + qCWarning(lcQpaWayland) << "setPopup called for a surface that was not the topmost popup, positions might be off."; + parentXdgSurface = top->m_xdgSurface; + parent = top->m_xdgSurface->m_window; + } + auto positioner = new QtWayland::zxdg_positioner_v6(m_shell->create_positioner()); // set_popup expects a position relative to the parent QPoint transientPos = m_window->geometry().topLeft(); // this is absolute @@ -292,9 +316,8 @@ void QWaylandXdgSurfaceV6::setPopup(QWaylandWindow *parent, QWaylandInputDevice m_popup = new Popup(this, parentXdgSurface, positioner); positioner->destroy(); delete positioner; - if (grab) { - m_popup->grab(device->wl_seat(), serial); - } + if (grab) + m_popup->grab(device, serial); } void QWaylandXdgSurfaceV6::zxdg_surface_v6_configure(uint32_t serial) diff --git a/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6_p.h b/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6_p.h index 8168ae56..38b711f8 100644 --- a/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6_p.h +++ b/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6_p.h @@ -122,9 +122,12 @@ private: Popup(QWaylandXdgSurfaceV6 *xdgSurface, QWaylandXdgSurfaceV6 *parent, QtWayland::zxdg_positioner_v6 *positioner); ~Popup() override; + void grab(QWaylandInputDevice *seat, uint serial); void zxdg_popup_v6_popup_done() override; QWaylandXdgSurfaceV6 *m_xdgSurface = nullptr; + QWaylandXdgSurfaceV6 *m_parent = nullptr; + bool m_grabbing = false; }; void setToplevel(); @@ -137,6 +140,8 @@ private: bool m_configured = false; QRegion m_exposeRegion; uint m_pendingConfigureSerial = 0; + + friend class QWaylandXdgShellV6; }; class Q_WAYLAND_CLIENT_EXPORT QWaylandXdgShellV6 : public QtWayland::zxdg_shell_v6 @@ -150,6 +155,9 @@ public: private: void zxdg_shell_v6_ping(uint32_t serial) override; + QWaylandXdgSurfaceV6::Popup *m_topmostPopup = nullptr; + + friend class QWaylandXdgSurfaceV6; }; QT_END_NAMESPACE diff --git a/sync.profile b/sync.profile index 458ee9f2..a2da7dbc 100644 --- a/sync.profile +++ b/sync.profile @@ -17,3 +17,50 @@ %classnames = ( "qwaylandquickextension.h" => "QWaylandQuickExtension", ); +%inject_headers = ( + "$basedir/src/client" => [ + "^qwayland-hardware-integration.h", + "^qwayland-qt-windowmanager.h", + "^qwayland-qtkey-extension.h" , + "^qwayland-server-buffer-extension.h", + "^qwayland-surface-extension.h", + "^qwayland-text-input-unstable-v2.h", + "^qwayland-touch-extension.h", + "^qwayland-wayland.h", + "^qwayland-xdg-shell-unstable-v6.h", + "^qwayland-xdg-shell.h", + "^wayland-hardware-integration-client-protocol.h", + "^wayland-qt-windowmanager-client-protocol.h", + "^wayland-qtkey-extension-client-protocol.h", + "^wayland-server-buffer-extension-client-protocol.h", + "^wayland-surface-extension-client-protocol.h", + "^wayland-text-input-unstable-v2-client-protocol.h", + "^wayland-touch-extension-client-protocol.h", + "^wayland-wayland-client-protocol.h", + "^wayland-xdg-shell-client-protocol.h", + "^wayland-xdg-shell-unstable-v6-client-protocol.h", + ], + "$basedir/src/compositor" => [ + "^qwayland-server-wayland.h", + "^qwayland-server-hardware-integration.h", + "^qwayland-server-ivi-application.h", + "^qwayland-server-qt-windowmanager.h", + "^qwayland-server-qtkey-extension.h", + "^qwayland-server-server-buffer-extension.h", + "^qwayland-server-text-input-unstable-v2.h", + "^qwayland-server-touch-extension.h", + "^qwayland-server-xdg-shell-unstable-v6.h", + "^qwayland-server-xdg-shell.h", + "^wayland-hardware-integration-server-protocol.h", + "^wayland-ivi-application-server-protocol.h", + "^wayland-qt-windowmanager-server-protocol.h", + "^wayland-qtkey-extension-server-protocol.h", + "^wayland-server-buffer-extension-server-protocol.h", + "^wayland-text-input-unstable-v2-server-protocol.h", + "^wayland-touch-extension-server-protocol.h", + "^wayland-wayland-server-protocol.h", + "^wayland-xdg-shell-server-protocol.h", + "^wayland-xdg-shell-unstable-v6-server-protocol.h", + ], +); +@private_headers = ( qr/^qwayland-.*\.h/, qr/^wayland-.*-protocol\.h/ ); diff --git a/tests/auto/client/client/tst_client.cpp b/tests/auto/client/client/tst_client.cpp index 6b7daecd..470db25a 100644 --- a/tests/auto/client/client/tst_client.cpp +++ b/tests/auto/client/client/tst_client.cpp @@ -506,6 +506,7 @@ void tst_WaylandClient::mouseDrag() void tst_WaylandClient::dontCrashOnMultipleCommits() { + QSKIP("This test is flaky. See QTBUG-68756."); auto window = new TestWindow(); window->show(); |