diff -Nru qtwayland-opensource-src-5.11.3/config.tests/dmabuf_server_buffer/dmabuf_server_buffer.pro qtwayland-opensource-src-5.12.2/config.tests/dmabuf_server_buffer/dmabuf_server_buffer.pro --- qtwayland-opensource-src-5.11.3/config.tests/dmabuf_server_buffer/dmabuf_server_buffer.pro 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/config.tests/dmabuf_server_buffer/dmabuf_server_buffer.pro 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +SOURCES += main.cpp diff -Nru qtwayland-opensource-src-5.11.3/config.tests/dmabuf_server_buffer/main.cpp qtwayland-opensource-src-5.12.2/config.tests/dmabuf_server_buffer/main.cpp --- qtwayland-opensource-src-5.11.3/config.tests/dmabuf_server_buffer/main.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/config.tests/dmabuf_server_buffer/main.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Compositor. +** +** $QT_BEGIN_LICENSE:BSD$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include + +int main() +{ +#ifdef EGL_LINUX_DMA_BUF_EXT + return 0; +#else +#error Requires EGL_LINUX_DMA_BUF_EXT + return 1; +#endif +} diff -Nru qtwayland-opensource-src-5.11.3/debian/changelog qtwayland-opensource-src-5.12.2/debian/changelog --- qtwayland-opensource-src-5.11.3/debian/changelog 2018-12-26 19:59:01.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/debian/changelog 2019-03-24 16:59:03.000000000 +0000 @@ -1,3 +1,13 @@ +qtwayland-opensource-src (5.12.2-1) experimental; urgency=medium + + * New upstream release. + * Bump Qt build-dependencies to 5.12.2. + * Update list of files in libqt5waylandcompositor5-dev package. + * Update symbols files from the current build log. + * Update debian/copyright. + + -- Dmitry Shachnev Sun, 24 Mar 2019 19:59:03 +0300 + qtwayland-opensource-src (5.11.3-2) unstable; urgency=medium [ Simon Quigley ] diff -Nru qtwayland-opensource-src-5.11.3/debian/control qtwayland-opensource-src-5.12.2/debian/control --- qtwayland-opensource-src-5.11.3/debian/control 2018-12-26 19:58:05.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/debian/control 2019-03-24 16:59:03.000000000 +0000 @@ -23,14 +23,14 @@ libxrender-dev, pkg-config, pkg-kde-tools, - qtbase5-dev (>= 5.11.3+dfsg~), - qtbase5-dev:native (>= 5.11.3+dfsg~), - qtbase5-private-dev (>= 5.11.3+dfsg~), - qtdeclarative5-private-dev (>= 5.11.3~), + qtbase5-dev (>= 5.12.2+dfsg~), + qtbase5-dev:native (>= 5.12.2+dfsg~), + qtbase5-private-dev (>= 5.12.2+dfsg~), + qtdeclarative5-private-dev (>= 5.12.2~), xauth, xvfb -Build-Depends-Indep: qtbase5-doc-html (>= 5.11.3+dfsg~) , - qttools5-dev-tools (>= 5.11.3~) +Build-Depends-Indep: qtbase5-doc-html (>= 5.12.2+dfsg~) , + qttools5-dev-tools (>= 5.12.2~) Standards-Version: 4.3.0 Homepage: http://qt-project.org/ Vcs-Git: https://salsa.debian.org/qt-kde-team/qt/qtwayland.git diff -Nru qtwayland-opensource-src-5.11.3/debian/copyright qtwayland-opensource-src-5.12.2/debian/copyright --- qtwayland-opensource-src-5.11.3/debian/copyright 2018-12-22 18:30:42.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/debian/copyright 2019-03-24 16:59:03.000000000 +0000 @@ -3,7 +3,7 @@ Source: https://download.qt.io/official_releases/qt/*/submodules/ Files: * -Copyright: 2016-2017 The Qt Company Ltd. +Copyright: 2016-2019 The Qt Company Ltd. License: LGPL-3 or GPL-2 Files: debian/* @@ -89,19 +89,56 @@ Copyright: 2016 Robin Burchell License: LGPL-3 or GPL-2 -Files: src/client/qwaylandxdgshell* -Copyright: 2014 Eurogiciel +Files: src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5* + src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6* + src/plugins/shellintegration/xdg-shell/qwaylandxdgshell* +Copyright: 2016-2017 Eurogiciel License: LGPL-3 or GPL-2 -Files: src/3rdparty/protocol/* -Copyright: 2008-2013 Kristian Høgsberg - 2010-2013 Intel Corporation +Files: src/3rdparty/protocol/ivi-application.xml + src/3rdparty/protocol/ivi-controller.xml +Copyright: 2013 DENSO Corporation + 2013 BMW Car IT GmbH +License: Expat + +Files: src/3rdparty/protocol/text-input-unstable-v2.xml +Copyright: 2012-2013 Intel Corporation + 2015-2016 Jan Arne Petersen +License: HPND + +Files: src/3rdparty/protocol/wayland.xml +Copyright: 2008-2011 Kristian Høgsberg + 2010-2011 Intel Corporation 2012-2013 Collabora, Ltd. +License: HPND + +Files: src/3rdparty/protocol/wl-eglstream-controller.xml +Copyright: 2017 NVIDIA Corporation +License: Expat + +Files: src/3rdparty/protocol/xdg-decoration-unstable-v1.xml +Copyright: 2018 Simon Ser +License: Expat + +Files: src/3rdparty/protocol/xdg-output-unstable-v1.xml +Copyright: 2017 Red Hat Inc. +License: Expat + +Files: src/3rdparty/protocol/xdg-shell.xml + src/3rdparty/protocol/xdg-shell-unstable-v5.xml + src/3rdparty/protocol/xdg-shell-unstable-v6.xml + src/compositor/extensions/pregenerated/3rdparty/qwayland-server-xdg-shell-unstable-v5* + src/compositor/extensions/pregenerated/3rdparty/wayland-xdg-shell-unstable-v5-protocol.c + src/compositor/extensions/pregenerated/3rdparty/wayland-xdg-shell-unstable-v5-server-protocol_p.h + src/plugins/shellintegration/xdg-shell-v5/pregenerated/3rdparty/qwayland-xdg-shell-unstable-v5* + src/plugins/shellintegration/xdg-shell-v5/pregenerated/3rdparty/wayland-xdg-shell-unstable-v5-client-protocol_p.h + src/plugins/shellintegration/xdg-shell-v5/pregenerated/3rdparty/wayland-xdg-shell-unstable-v5-protocol.c +Copyright: 2008-2013 Kristian Høgsberg 2013 Rafael Antognolli 2013 Jasper St. Pierre - 2013 DENSO CORPORATION - 2013 BMW Car IT GmbH - 2015-2016 Jan Arne Petersen + 2010-2013 Intel Corporation + 2015-2017 Samsung Electronics Co., Ltd + 2015-2017 Red Hat Inc. License: Expat Files: tests/auto/client/shared/mockinput.h @@ -137,6 +174,12 @@ Copyright: 2017 ITAGE Corporation License: LGPL-3 or GPL-2 +Files: src/plugins/shellintegration/wl-shell/main.cpp + src/plugins/shellintegration/xdg-shell-v5/main.cpp +Copyright: 2018 The Qt Company Ltd. + 2017 ITAGE Corporation +License: LGPL-3 or GPL-2 + Files: tests/auto/compositor/compositor/mockseat.* tests/auto/compositor/compositor/testkeyboardgrabber.* tests/auto/compositor/compositor/testseat.* @@ -251,6 +294,28 @@ Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in + all copies and that both that copyright notice and this permission + notice appear in supporting documentation, and that the name of + the copyright holders not be used in advertising or publicity + pertaining to distribution of the software without specific, + written prior permission. The copyright holders make no + representations about the suitability of this software for any + purpose. It is provided "as is" without express or implied + warranty. + . + THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS + SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY + SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF + THIS SOFTWARE. + +License: HPND + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of the copyright holders not be used in advertising or publicity diff -Nru qtwayland-opensource-src-5.11.3/debian/libqt5waylandclient5.symbols qtwayland-opensource-src-5.12.2/debian/libqt5waylandclient5.symbols --- qtwayland-opensource-src-5.11.3/debian/libqt5waylandclient5.symbols 2018-12-22 18:30:17.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/debian/libqt5waylandclient5.symbols 2019-03-24 16:59:03.000000000 +0000 @@ -1,8 +1,9 @@ -# SymbolsHelper-Confirmed: 5.11.1 amd64 +# SymbolsHelper-Confirmed: 5.12.2 amd64 libQt5WaylandClient.so.5 libqt5waylandclient5 #MINVER# Qt_5.0@Qt_5.0 5.10.1 Qt_5.10@Qt_5.10 5.10.1 Qt_5.11@Qt_5.11 5.11.1 + Qt_5.12@Qt_5.12 5.12.0 Qt_5.1@Qt_5.1 5.10.1 Qt_5.2@Qt_5.2 5.10.1 Qt_5.3@Qt_5.3 5.10.1 @@ -25,8 +26,8 @@ _ZN15QtWaylandClient12QWaylandDrag10finishDragERK23QPlatformDropQtResponse@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient12QWaylandDrag11setResponseERK23QPlatformDragQtResponse@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient12QWaylandDrag12updateTargetERK7QString@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient12QWaylandDrag4dropERK6QPoint@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient12QWaylandDrag4moveERK6QPoint@Qt_5_PRIVATE_API 5.10.1 + _ZN15QtWaylandClient12QWaylandDrag4dropERK6QPoint6QFlagsIN2Qt11MouseButtonEES4_INS5_16KeyboardModifierEE@Qt_5_PRIVATE_API 5.12.2 + _ZN15QtWaylandClient12QWaylandDrag4moveERK6QPoint6QFlagsIN2Qt11MouseButtonEES4_INS5_16KeyboardModifierEE@Qt_5_PRIVATE_API 5.12.2 _ZN15QtWaylandClient12QWaylandDrag6cancelEv@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient12QWaylandDrag7endDragEv@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient12QWaylandDrag9startDragEv@Qt_5_PRIVATE_API 5.10.1 @@ -35,6 +36,7 @@ _ZN15QtWaylandClient12QWaylandDragD0Ev@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient12QWaylandDragD1Ev@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient12QWaylandDragD2Ev@Qt_5_PRIVATE_API 5.10.1 + _ZN15QtWaylandClient12lcQpaWaylandEv@Qt_5 5.12.2 _ZN15QtWaylandClient14QWaylandBuffer4initEP9wl_buffer@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandBuffer7releaseEPvP9wl_buffer@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandBuffer8listenerE@Qt_5_PRIVATE_API 5.10.1 @@ -46,23 +48,22 @@ _ZN15QtWaylandClient14QWaylandCursor11cursorImageEN2Qt11CursorShapeE@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandCursor12changeCursorEP7QCursorP7QWindow@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandCursor12pointerEventERK11QMouseEvent@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient14QWaylandCursor13initCursorMapEv@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient14QWaylandCursor13requestCursorENS0_13WaylandCursorE@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandCursor17cursorBitmapImageEPK7QCursor@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandCursor6setPosERK6QPoint@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandCursorC1EPNS_14QWaylandScreenE@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandCursorC2EPNS_14QWaylandScreenE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient14QWaylandCursorD0Ev@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient14QWaylandCursorD1Ev@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient14QWaylandCursorD2Ev@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandScreen11output_doneEv@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandScreen11output_modeEjiii@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandScreen12fromWlOutputEP9wl_output@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandScreen12output_scaleEi@Qt_5_PRIVATE_API 5.10.1 + _ZN15QtWaylandClient14QWaylandScreen13initXdgOutputEPN9QtWayland22zxdg_output_manager_v1E@Qt_5_PRIVATE_API 5.12.2 + _ZN15QtWaylandClient14QWaylandScreen13waylandCursorEv@Qt_5_PRIVATE_API 5.12.2 _ZN15QtWaylandClient14QWaylandScreen15output_geometryEiiiiiRK7QStringS3_i@Qt_5_PRIVATE_API 5.10.1 + _ZN15QtWaylandClient14QWaylandScreen19zxdg_output_v1_doneEv@Qt_5_PRIVATE_API 5.12.2 _ZN15QtWaylandClient14QWaylandScreen23waylandScreenFromWindowEP7QWindow@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandScreen24setOrientationUpdateMaskE6QFlagsIN2Qt17ScreenOrientationEE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient14QWaylandScreen4initEv@Qt_5_PRIVATE_API 5.10.1 + _ZN15QtWaylandClient14QWaylandScreen27zxdg_output_v1_logical_sizeEii@Qt_5_PRIVATE_API 5.12.2 + _ZN15QtWaylandClient14QWaylandScreen31zxdg_output_v1_logical_positionEii@Qt_5_PRIVATE_API 5.12.2 _ZN15QtWaylandClient14QWaylandScreenC1EPNS_15QWaylandDisplayEij@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandScreenC2EPNS_15QWaylandDisplayEij@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandScreenD0Ev@Qt_5_PRIVATE_API 5.10.1 @@ -71,6 +72,7 @@ _ZN15QtWaylandClient14QWaylandWindow10ensureSizeEv@Qt_5_PRIVATE_API 5.11.1 _ZN15QtWaylandClient14QWaylandWindow10initWindowEv@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandWindow10mMouseGrabE@Qt_5_PRIVATE_API 5.10.1 + _ZN15QtWaylandClient14QWaylandWindow10safeCommitEPNS_14QWaylandBufferERK7QRegion@Qt_5_PRIVATE_API 5.12.2 _ZN15QtWaylandClient14QWaylandWindow10setVisibleEb@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandWindow11closePopupsEPS0_@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandWindow11handleMouseEPNS_19QWaylandInputDeviceERKNS_20QWaylandPointerEventE@Qt_5_PRIVATE_API 5.10.1 @@ -79,15 +81,16 @@ _ZN15QtWaylandClient14QWaylandWindow11setGeometryERK5QRect@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandWindow11setPropertyERK7QStringRK8QVariant@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandWindow12attachOffsetEPNS_14QWaylandBufferE@Qt_5_PRIVATE_API 5.10.1 + _ZN15QtWaylandClient14QWaylandWindow12handleExposeERK7QRegion@Qt_5_PRIVATE_API 5.12.2 _ZN15QtWaylandClient14QWaylandWindow12sendPropertyERK7QStringRK8QVariant@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandWindow12setCanResizeEb@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandWindow13frameCallbackEPvP11wl_callbackj@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandWindow13fromWlSurfaceEP10wl_surface@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient14QWaylandWindow13requestResizeEv@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandWindow13requestUpdateEv@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandWindow13setWindowIconERK5QIcon@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandWindow13surface_enterEP9wl_output@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandWindow13surface_leaveEP9wl_output@Qt_5_PRIVATE_API 5.10.1 + _ZN15QtWaylandClient14QWaylandWindow14applyConfigureEv@Qt_5_PRIVATE_API 5.12.2 _ZN15QtWaylandClient14QWaylandWindow14setMouseCursorEPNS_19QWaylandInputDeviceERK7QCursor@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandWindow14setWindowFlagsE6QFlagsIN2Qt10WindowTypeEE@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandWindow14setWindowStateE6QFlagsIN2Qt11WindowStateEE@Qt_5_PRIVATE_API 5.10.1 @@ -98,6 +101,7 @@ _ZN15QtWaylandClient14QWaylandWindow15startSystemMoveERK6QPoint@Qt_5_PRIVATE_API 5.11.1 _ZN15QtWaylandClient14QWaylandWindow16callbackListenerE@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandWindow16createDecorationEv@Qt_5_PRIVATE_API 5.10.1 + _ZN15QtWaylandClient14QWaylandWindow16doApplyConfigureEv@Qt_5_PRIVATE_API 5.12.2 _ZN15QtWaylandClient14QWaylandWindow16handleMouseLeaveEPNS_19QWaylandInputDeviceE@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandWindow16staticMetaObjectE@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandWindow16waitForFrameSyncEv@Qt_5_PRIVATE_API 5.10.1 @@ -110,7 +114,9 @@ _ZN15QtWaylandClient14QWaylandWindow19setMouseGrabEnabledEb@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandWindow19touchDragDecorationEPNS_19QWaylandInputDeviceERK7QPointFS5_N2Qt15TouchPointStateE6QFlagsINS6_16KeyboardModifierEE@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandWindow21requestActivateWindowEv@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient14QWaylandWindow22setWindowStateInternalE6QFlagsIN2Qt11WindowStateEE@Qt_5_PRIVATE_API 5.10.1 + _ZN15QtWaylandClient14QWaylandWindow24resizeFromApplyConfigureERK5QSizeRK6QPoint@Qt_5_PRIVATE_API 5.12.2 + _ZN15QtWaylandClient14QWaylandWindow25handleWindowStatesChangedE6QFlagsIN2Qt11WindowStateEE@Qt_5_PRIVATE_API 5.12.2 + _ZN15QtWaylandClient14QWaylandWindow26applyConfigureWhenPossibleEv@Qt_5_PRIVATE_API 5.12.2 _ZN15QtWaylandClient14QWaylandWindow30handleContentOrientationChangeEN2Qt17ScreenOrientationE@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandWindow30handleMouseEventWithDecorationEPNS_19QWaylandInputDeviceERKNS_20QWaylandPointerEventE@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandWindow5lowerEv@Qt_5_PRIVATE_API 5.10.1 @@ -121,10 +127,8 @@ _ZN15QtWaylandClient14QWaylandWindow6damageERK5QRect@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandWindow7setMaskERK7QRegion@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandWindow7unfocusEv@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient14QWaylandWindow8doResizeEv@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandWindow8propertyERK7QString@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandWindow8propertyERK7QStringRK8QVariant@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient14QWaylandWindow9configureEjii@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandWindow9setParentEPK15QPlatformWindow@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandWindowC1EP7QWindow@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient14QWaylandWindowC2EP7QWindow@Qt_5_PRIVATE_API 5.10.1 @@ -138,12 +142,15 @@ _ZN15QtWaylandClient15QWaylandDisplay13exitWithErrorEv@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient15QWaylandDisplay13flushRequestsEv@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient15QWaylandDisplay14forceRoundTripEv@Qt_5_PRIVATE_API 5.10.1 + _ZN15QtWaylandClient15QWaylandDisplay14removeListenerEPFvPvP11wl_registryjRK7QStringjES1_@Qt_5_PRIVATE_API 5.12.2 _ZN15QtWaylandClient15QWaylandDisplay14waitForScreensEv@Qt_5_PRIVATE_API 5.10.1 + _ZN15QtWaylandClient15QWaylandDisplay15loadCursorThemeEd@Qt_5_PRIVATE_API 5.12.2 _ZN15QtWaylandClient15QWaylandDisplay15registry_globalEjRK7QStringj@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient15QWaylandDisplay16createSubSurfaceEPNS_14QWaylandWindowES2_@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient15QWaylandDisplay16staticMetaObjectE@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient15QWaylandDisplay17handleWaylandSyncEv@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient15QWaylandDisplay17hasRegistryGlobalERK7QString@Qt_5_PRIVATE_API 5.10.1 + _ZN15QtWaylandClient15QWaylandDisplay17isWindowActivatedEPKNS_14QWaylandWindowE@Qt_5_PRIVATE_API 5.12.2 _ZN15QtWaylandClient15QWaylandDisplay18blockingReadEventsEv@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient15QWaylandDisplay18createShellSurfaceEPNS_14QWaylandWindowE@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient15QWaylandDisplay18requestWaylandSyncEv@Qt_5_PRIVATE_API 5.10.1 @@ -156,33 +163,13 @@ _ZN15QtWaylandClient15QWaylandDisplay22registry_global_removeEj@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient15QWaylandDisplay23handleWindowDeactivatedEPNS_14QWaylandWindowE@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient15QWaylandDisplay26handleKeyboardFocusChangedEPNS_19QWaylandInputDeviceE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient15QWaylandDisplay9setCursorEP9wl_bufferP15wl_cursor_image@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient15QWaylandDisplay9setCursorERK14QSharedPointerINS_14QWaylandBufferEERK6QPoint@Qt_5_PRIVATE_API 5.10.1 + _ZN15QtWaylandClient15QWaylandDisplay9setCursorEP9wl_bufferP15wl_cursor_imaged@Qt_5_PRIVATE_API 5.12.2 + _ZN15QtWaylandClient15QWaylandDisplay9setCursorERK14QSharedPointerINS_14QWaylandBufferEERK6QPointd@Qt_5_PRIVATE_API 5.12.2 _ZN15QtWaylandClient15QWaylandDisplayC1EPNS_19QWaylandIntegrationE@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient15QWaylandDisplayC2EPNS_19QWaylandIntegrationE@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient15QWaylandDisplayD0Ev@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient15QWaylandDisplayD1Ev@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient15QWaylandDisplayD2Ev@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient16QWaylandXdgPopup11qt_metacallEN11QMetaObject4CallEiPPv@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient16QWaylandXdgPopup11qt_metacastEPKc@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient16QWaylandXdgPopup16staticMetaObjectE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient16QWaylandXdgPopup20xdg_popup_popup_doneEv@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient16QWaylandXdgPopup7setTypeEN2Qt10WindowTypeEPNS_14QWaylandWindowE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient16QWaylandXdgPopupC1EP9xdg_popupPNS_14QWaylandWindowE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient16QWaylandXdgPopupC2EP9xdg_popupPNS_14QWaylandWindowE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient16QWaylandXdgPopupD0Ev@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient16QWaylandXdgPopupD1Ev@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient16QWaylandXdgPopupD2Ev@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient16QWaylandXdgShell14createXdgPopupEPNS_14QWaylandWindowEPNS_19QWaylandInputDeviceE@Qt_5_PRIVATE_API 5.11.1 - _ZN15QtWaylandClient16QWaylandXdgShell14xdg_shell_pingEj@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient16QWaylandXdgShell16createXdgSurfaceEPNS_14QWaylandWindowE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient16QWaylandXdgShellC1EP11wl_registryj@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient16QWaylandXdgShellC1EP9xdg_shell@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient16QWaylandXdgShellC2EP11wl_registryj@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient16QWaylandXdgShellC2EP9xdg_shell@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient16QWaylandXdgShellD0Ev@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient16QWaylandXdgShellD1Ev@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient16QWaylandXdgShellD2Ev@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient17QWaylandClipboard11setMimeDataEP9QMimeDataN10QClipboard4ModeE@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient17QWaylandClipboard8mimeDataEN10QClipboard4ModeE@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient17QWaylandClipboardC1EPNS_15QWaylandDisplayE@Qt_5_PRIVATE_API 5.10.1 @@ -230,39 +217,12 @@ _ZN15QtWaylandClient18QWaylandSubSurfaceD0Ev@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient18QWaylandSubSurfaceD1Ev@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient18QWaylandSubSurfaceD2Ev@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient18QWaylandXdgShellV613getXdgSurfaceEPNS_14QWaylandWindowE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient18QWaylandXdgShellV618zxdg_shell_v6_pingEj@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient18QWaylandXdgShellV6C1EP11wl_registryjj@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient18QWaylandXdgShellV6C2EP11wl_registryjj@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient18QWaylandXdgShellV6D0Ev@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient18QWaylandXdgShellV6D1Ev@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient18QWaylandXdgShellV6D2Ev@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient18QWaylandXdgSurface11qt_metacallEN11QMetaObject4CallEiPPv@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient18QWaylandXdgSurface11qt_metacastEPKc@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient18QWaylandXdgSurface12sendPropertyERK7QStringRK8QVariant@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient18QWaylandXdgSurface12setMaximizedEv@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient18QWaylandXdgSurface12setMinimizedEv@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient18QWaylandXdgSurface13setFullscreenEv@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient18QWaylandXdgSurface14setWindowFlagsE6QFlagsIN2Qt10WindowTypeEE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient18QWaylandXdgSurface16staticMetaObjectE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient18QWaylandXdgSurface17xdg_surface_closeEv@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient18QWaylandXdgSurface21updateTransientParentEPNS_14QWaylandWindowE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient18QWaylandXdgSurface21xdg_surface_configureEiiP8wl_arrayj@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient18QWaylandXdgSurface25setContentOrientationMaskE6QFlagsIN2Qt17ScreenOrientationEE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient18QWaylandXdgSurface4moveEPNS_19QWaylandInputDeviceE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient18QWaylandXdgSurface5lowerEv@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient18QWaylandXdgSurface5raiseEv@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient18QWaylandXdgSurface6resizeEPNS_19QWaylandInputDeviceE23wl_shell_surface_resize@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient18QWaylandXdgSurface6resizeEPNS_19QWaylandInputDeviceEN9QtWayland11xdg_surface11resize_edgeE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient18QWaylandXdgSurface7setTypeEN2Qt10WindowTypeEPNS_14QWaylandWindowE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient18QWaylandXdgSurface8setAppIdERK7QString@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient18QWaylandXdgSurface8setTitleERK7QString@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient18QWaylandXdgSurface9setNormalEv@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient18QWaylandXdgSurfaceC1EPNS_16QWaylandXdgShellEPNS_14QWaylandWindowE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient18QWaylandXdgSurfaceC2EPNS_16QWaylandXdgShellEPNS_14QWaylandWindowE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient18QWaylandXdgSurfaceD0Ev@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient18QWaylandXdgSurfaceD1Ev@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient18QWaylandXdgSurfaceD2Ev@Qt_5_PRIVATE_API 5.10.1 + _ZN15QtWaylandClient19QWaylandCursorTheme11cursorImageEN2Qt11CursorShapeE@Qt_5_PRIVATE_API 5.12.2 + _ZN15QtWaylandClient19QWaylandCursorTheme13requestCursorENS0_13WaylandCursorE@Qt_5_PRIVATE_API 5.12.2 + _ZN15QtWaylandClient19QWaylandCursorTheme6createEPNS_11QWaylandShmEi@Qt_5_PRIVATE_API 5.12.2 + _ZN15QtWaylandClient19QWaylandCursorTheme6createEPNS_11QWaylandShmEiRK7QString@Qt_5_PRIVATE_API 5.12.2 + _ZN15QtWaylandClient19QWaylandCursorThemeD1Ev@Qt_5_PRIVATE_API 5.12.2 + _ZN15QtWaylandClient19QWaylandCursorThemeD2Ev@Qt_5_PRIVATE_API 5.12.2 _ZN15QtWaylandClient19QWaylandInputDevice11createTouchEPS0_@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient19QWaylandInputDevice11qt_metacallEN11QMetaObject4CallEiPPv@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient19QWaylandInputDevice11qt_metacastEPKc@Qt_5_PRIVATE_API 5.10.1 @@ -319,9 +279,9 @@ _ZN15QtWaylandClient19QWaylandInputDevice8KeyboardD1Ev@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient19QWaylandInputDevice8KeyboardD2Ev@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient19QWaylandInputDevice9setCursorEN2Qt11CursorShapeEPNS_14QWaylandScreenE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient19QWaylandInputDevice9setCursorEP9wl_bufferP15wl_cursor_image@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient19QWaylandInputDevice9setCursorEP9wl_bufferRK6QPointRK5QSize@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient19QWaylandInputDevice9setCursorERK14QSharedPointerINS_14QWaylandBufferEERK6QPoint@Qt_5_PRIVATE_API 5.10.1 + _ZN15QtWaylandClient19QWaylandInputDevice9setCursorEP9wl_bufferP15wl_cursor_imagei@Qt_5_PRIVATE_API 5.12.2 + _ZN15QtWaylandClient19QWaylandInputDevice9setCursorEP9wl_bufferRK6QPointRK5QSizei@Qt_5_PRIVATE_API 5.12.2 + _ZN15QtWaylandClient19QWaylandInputDevice9setCursorERK14QSharedPointerINS_14QWaylandBufferEERK6QPointi@Qt_5_PRIVATE_API 5.12.2 _ZN15QtWaylandClient19QWaylandInputDevice9setCursorERK7QCursorPNS_14QWaylandScreenE@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient19QWaylandInputDeviceC1EPNS_15QWaylandDisplayEij@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient19QWaylandInputDeviceC2EPNS_15QWaylandDisplayEij@Qt_5_PRIVATE_API 5.10.1 @@ -353,38 +313,7 @@ _ZN15QtWaylandClient20QWaylandShellSurface16staticMetaObjectE@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient20QWaylandShellSurfaceC1EPNS_14QWaylandWindowE@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient20QWaylandShellSurfaceC2EPNS_14QWaylandWindowE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient20QWaylandXdgSurfaceV611setToplevelEv@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient20QWaylandXdgSurfaceV612handleExposeERK7QRegion@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient20QWaylandXdgSurfaceV625zxdg_surface_v6_configureEj@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient20QWaylandXdgSurfaceV64moveEPNS_19QWaylandInputDeviceE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient20QWaylandXdgSurfaceV65Popup14applyConfigureEv@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient20QWaylandXdgSurfaceV65Popup24zxdg_popup_v6_popup_doneEv@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient20QWaylandXdgSurfaceV65Popup4grabEPNS_19QWaylandInputDeviceEj@Qt_5_PRIVATE_API 5.11.1 - _ZN15QtWaylandClient20QWaylandXdgSurfaceV65PopupC1EPS0_S2_PN9QtWayland18zxdg_positioner_v6E@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient20QWaylandXdgSurfaceV65PopupC2EPS0_S2_PN9QtWayland18zxdg_positioner_v6E@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient20QWaylandXdgSurfaceV65PopupD0Ev@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient20QWaylandXdgSurfaceV65PopupD1Ev@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient20QWaylandXdgSurfaceV65PopupD2Ev@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient20QWaylandXdgSurfaceV66resizeEPNS_19QWaylandInputDeviceE23wl_shell_surface_resize@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient20QWaylandXdgSurfaceV66resizeEPNS_19QWaylandInputDeviceE28zxdg_toplevel_v6_resize_edge@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient20QWaylandXdgSurfaceV67setTypeEN2Qt10WindowTypeEPNS_14QWaylandWindowE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient20QWaylandXdgSurfaceV68Toplevel14applyConfigureEv@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient20QWaylandXdgSurfaceV68Toplevel22zxdg_toplevel_v6_closeEv@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient20QWaylandXdgSurfaceV68Toplevel26zxdg_toplevel_v6_configureEiiP8wl_array@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient20QWaylandXdgSurfaceV68ToplevelC1EPS0_@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient20QWaylandXdgSurfaceV68ToplevelC2EPS0_@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient20QWaylandXdgSurfaceV68ToplevelD0Ev@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient20QWaylandXdgSurfaceV68ToplevelD1Ev@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient20QWaylandXdgSurfaceV68ToplevelD2Ev@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient20QWaylandXdgSurfaceV68setAppIdERK7QString@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient20QWaylandXdgSurfaceV68setPopupEPNS_14QWaylandWindowEPNS_19QWaylandInputDeviceEib@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient20QWaylandXdgSurfaceV68setTitleERK7QString@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient20QWaylandXdgSurfaceV6C1EPNS_18QWaylandXdgShellV6EP15zxdg_surface_v6PNS_14QWaylandWindowE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient20QWaylandXdgSurfaceV6C2EPNS_18QWaylandXdgShellV6EP15zxdg_surface_v6PNS_14QWaylandWindowE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient20QWaylandXdgSurfaceV6D0Ev@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient20QWaylandXdgSurfaceV6D1Ev@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient20QWaylandXdgSurfaceV6D2Ev@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient22QWaylandQtKeyExtension19key_extension_qtkeyEP10wl_surfacejjjjjjjRK7QStringjj@Qt_5_PRIVATE_API 5.10.1 + _ZN15QtWaylandClient22QWaylandQtKeyExtension14zqt_key_v1_keyEP10wl_surfacejjjjjjjRK7QStringjj@Qt_5_PRIVATE_API 5.12.2 _ZN15QtWaylandClient22QWaylandQtKeyExtensionC1EPNS_15QWaylandDisplayEj@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient22QWaylandQtKeyExtensionC2EPNS_15QWaylandDisplayEj@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient22QWaylandTouchExtension13touchCanceledEv@Qt_5_PRIVATE_API 5.10.1 @@ -394,34 +323,6 @@ _ZN15QtWaylandClient22QWaylandTouchExtension25touch_extension_configureEj@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient22QWaylandTouchExtensionC1EPNS_15QWaylandDisplayEj@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient22QWaylandTouchExtensionC2EPNS_15QWaylandDisplayEj@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient22QWaylandWlShellSurface11qt_metacallEN11QMetaObject4CallEiPPv@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient22QWaylandWlShellSurface11qt_metacastEPKc@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient22QWaylandWlShellSurface11setTopLevelEv@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient22QWaylandWlShellSurface12sendPropertyERK7QStringRK8QVariant@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient22QWaylandWlShellSurface12setMaximizedEv@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient22QWaylandWlShellSurface12setMinimizedEv@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient22QWaylandWlShellSurface13setFullscreenEv@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient22QWaylandWlShellSurface14setWindowFlagsE6QFlagsIN2Qt10WindowTypeEE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient22QWaylandWlShellSurface16staticMetaObjectE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient22QWaylandWlShellSurface18shell_surface_pingEj@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient22QWaylandWlShellSurface21updateTransientParentEP7QWindow@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient22QWaylandWlShellSurface23shell_surface_configureEjii@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient22QWaylandWlShellSurface24shell_surface_popup_doneEv@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient22QWaylandWlShellSurface25setContentOrientationMaskE6QFlagsIN2Qt17ScreenOrientationEE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient22QWaylandWlShellSurface4moveEPNS_19QWaylandInputDeviceE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient22QWaylandWlShellSurface5lowerEv@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient22QWaylandWlShellSurface5raiseEv@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient22QWaylandWlShellSurface6resizeEPNS_19QWaylandInputDeviceE23wl_shell_surface_resize@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient22QWaylandWlShellSurface7setTypeEN2Qt10WindowTypeEPNS_14QWaylandWindowE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient22QWaylandWlShellSurface8setAppIdERK7QString@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient22QWaylandWlShellSurface8setPopupEPNS_14QWaylandWindowEPNS_19QWaylandInputDeviceEj@Qt_5_PRIVATE_API 5.11.1 - _ZN15QtWaylandClient22QWaylandWlShellSurface8setTitleERK7QString@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient22QWaylandWlShellSurface9setNormalEv@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient22QWaylandWlShellSurfaceC1EP16wl_shell_surfacePNS_14QWaylandWindowE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient22QWaylandWlShellSurfaceC2EP16wl_shell_surfacePNS_14QWaylandWindowE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient22QWaylandWlShellSurfaceD0Ev@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient22QWaylandWlShellSurfaceD1Ev@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient22QWaylandWlShellSurfaceD2Ev@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient23QWaylandExtendedSurface14setWindowFlagsE6QFlagsIN2Qt10WindowTypeEE@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient23QWaylandExtendedSurface21updateGenericPropertyERK7QStringRK8QVariant@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient23QWaylandExtendedSurface22extended_surface_closeEv@Qt_5_PRIVATE_API 5.10.1 @@ -490,28 +391,12 @@ _ZN15QtWaylandClient26QWaylandAbstractDecorationD0Ev@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient26QWaylandAbstractDecorationD1Ev@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient26QWaylandAbstractDecorationD2Ev@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient26QWaylandWlShellIntegration10initializeEPNS_15QWaylandDisplayE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient26QWaylandWlShellIntegration18createShellSurfaceEPNS_14QWaylandWindowE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient26QWaylandWlShellIntegration6createEPNS_15QWaylandDisplayE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient26QWaylandWlShellIntegrationC1EPNS_15QWaylandDisplayE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient26QWaylandWlShellIntegrationC2EPNS_15QWaylandDisplayE@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient27QWaylandHardwareIntegration23clientBufferIntegrationEv@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient27QWaylandHardwareIntegration23serverBufferIntegrationEv@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient27QWaylandHardwareIntegration35hardware_integration_client_backendERK7QString@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient27QWaylandHardwareIntegration35hardware_integration_server_backendERK7QString@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient27QWaylandHardwareIntegrationC1EP11wl_registryi@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient27QWaylandHardwareIntegrationC2EP11wl_registryi@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient27QWaylandXdgShellIntegration10initializeEPNS_15QWaylandDisplayE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient27QWaylandXdgShellIntegration18createShellSurfaceEPNS_14QWaylandWindowE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient27QWaylandXdgShellIntegration26handleKeyboardFocusChangedEPNS_14QWaylandWindowES2_@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient27QWaylandXdgShellIntegration6createEPNS_15QWaylandDisplayE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient27QWaylandXdgShellIntegrationC1EPNS_15QWaylandDisplayE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient27QWaylandXdgShellIntegrationC2EPNS_15QWaylandDisplayE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient29QWaylandXdgShellV6Integration10initializeEPNS_15QWaylandDisplayE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient29QWaylandXdgShellV6Integration18createShellSurfaceEPNS_14QWaylandWindowE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient29QWaylandXdgShellV6Integration6createEPNS_15QWaylandDisplayE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient29QWaylandXdgShellV6IntegrationC1EPNS_15QWaylandDisplayE@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient29QWaylandXdgShellV6IntegrationC2EPNS_15QWaylandDisplayE@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient30QWaylandShellIntegrationPlugin11qt_metacallEN11QMetaObject4CallEiPPv@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient30QWaylandShellIntegrationPlugin11qt_metacastEPKc@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient30QWaylandShellIntegrationPlugin16staticMetaObjectE@Qt_5_PRIVATE_API 5.10.1 @@ -531,7 +416,7 @@ _ZN15QtWaylandClient31QWaylandServerBufferIntegrationD1Ev@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient31QWaylandServerBufferIntegrationD2Ev@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient31QWaylandShellIntegrationFactory4keysERK7QString@Qt_5_PRIVATE_API 5.10.1 - _ZN15QtWaylandClient31QWaylandShellIntegrationFactory6createERK7QStringRK11QStringListS3_@Qt_5_PRIVATE_API 5.10.1 + _ZN15QtWaylandClient31QWaylandShellIntegrationFactory6createERK7QStringPNS_15QWaylandDisplayERK11QStringListS3_@Qt_5_PRIVATE_API 5.12.2 _ZN15QtWaylandClient32QWaylandWindowManagerIntegration11qt_metacallEN11QMetaObject4CallEiPPv@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient32QWaylandWindowManagerIntegration11qt_metacastEPKc@Qt_5_PRIVATE_API 5.10.1 _ZN15QtWaylandClient32QWaylandWindowManagerIntegration12openDocumentERK4QUrl@Qt_5_PRIVATE_API 5.10.1 @@ -641,6 +526,22 @@ _ZN9QtWayland10wl_surfaceD0Ev@Qt_5 5.10.1 _ZN9QtWayland10wl_surfaceD1Ev@Qt_5 5.10.1 _ZN9QtWayland10wl_surfaceD2Ev@Qt_5 5.10.1 + _ZN9QtWayland10zqt_key_v110handle_keyEPvP10zqt_key_v1P10wl_surfacejjjjjjjPKcjj@Qt_5 5.12.2 + _ZN9QtWayland10zqt_key_v113init_listenerEv@Qt_5 5.12.2 + _ZN9QtWayland10zqt_key_v114zqt_key_v1_keyEP10wl_surfacejjjjjjjRK7QStringjj@Qt_5 5.12.2 + _ZN9QtWayland10zqt_key_v121m_zqt_key_v1_listenerE@Qt_5 5.12.2 + _ZN9QtWayland10zqt_key_v14initEP10zqt_key_v1@Qt_5 5.12.2 + _ZN9QtWayland10zqt_key_v14initEP11wl_registryii@Qt_5 5.12.2 + _ZN9QtWayland10zqt_key_v19interfaceEv@Qt_5 5.12.2 + _ZN9QtWayland10zqt_key_v1C1EP10zqt_key_v1@Qt_5 5.12.2 + _ZN9QtWayland10zqt_key_v1C1EP11wl_registryii@Qt_5 5.12.2 + _ZN9QtWayland10zqt_key_v1C1Ev@Qt_5 5.12.2 + _ZN9QtWayland10zqt_key_v1C2EP10zqt_key_v1@Qt_5 5.12.2 + _ZN9QtWayland10zqt_key_v1C2EP11wl_registryii@Qt_5 5.12.2 + _ZN9QtWayland10zqt_key_v1C2Ev@Qt_5 5.12.2 + _ZN9QtWayland10zqt_key_v1D0Ev@Qt_5 5.12.2 + _ZN9QtWayland10zqt_key_v1D1Ev@Qt_5 5.12.2 + _ZN9QtWayland10zqt_key_v1D2Ev@Qt_5 5.12.2 _ZN9QtWayland11wl_callback11handle_doneEPvP11wl_callbackj@Qt_5 5.10.1 _ZN9QtWayland11wl_callback13callback_doneEj@Qt_5 5.10.1 _ZN9QtWayland11wl_callback13init_listenerEv@Qt_5 5.10.1 @@ -718,38 +619,6 @@ _ZN9QtWayland11wl_shm_poolD0Ev@Qt_5 5.10.1 _ZN9QtWayland11wl_shm_poolD1Ev@Qt_5 5.10.1 _ZN9QtWayland11wl_shm_poolD2Ev@Qt_5 5.10.1 - _ZN9QtWayland11xdg_surface10set_app_idERK7QString@Qt_5 5.10.1 - _ZN9QtWayland11xdg_surface10set_parentEP11xdg_surface@Qt_5 5.10.1 - _ZN9QtWayland11xdg_surface12handle_closeEPvP11xdg_surface@Qt_5 5.10.1 - _ZN9QtWayland11xdg_surface13ack_configureEj@Qt_5 5.10.1 - _ZN9QtWayland11xdg_surface13init_listenerEv@Qt_5 5.10.1 - _ZN9QtWayland11xdg_surface13set_maximizedEv@Qt_5 5.10.1 - _ZN9QtWayland11xdg_surface13set_minimizedEv@Qt_5 5.10.1 - _ZN9QtWayland11xdg_surface14set_fullscreenEP9wl_output@Qt_5 5.10.1 - _ZN9QtWayland11xdg_surface15unset_maximizedEv@Qt_5 5.10.1 - _ZN9QtWayland11xdg_surface16handle_configureEPvP11xdg_surfaceiiP8wl_arrayj@Qt_5 5.10.1 - _ZN9QtWayland11xdg_surface16show_window_menuEP7wl_seatjii@Qt_5 5.10.1 - _ZN9QtWayland11xdg_surface16unset_fullscreenEv@Qt_5 5.10.1 - _ZN9QtWayland11xdg_surface17xdg_surface_closeEv@Qt_5 5.10.1 - _ZN9QtWayland11xdg_surface19set_window_geometryEiiii@Qt_5 5.10.1 - _ZN9QtWayland11xdg_surface21xdg_surface_configureEiiP8wl_arrayj@Qt_5 5.10.1 - _ZN9QtWayland11xdg_surface22m_xdg_surface_listenerE@Qt_5 5.10.1 - _ZN9QtWayland11xdg_surface4initEP11wl_registryii@Qt_5 5.10.1 - _ZN9QtWayland11xdg_surface4initEP11xdg_surface@Qt_5 5.10.1 - _ZN9QtWayland11xdg_surface4moveEP7wl_seatj@Qt_5 5.10.1 - _ZN9QtWayland11xdg_surface6resizeEP7wl_seatjj@Qt_5 5.10.1 - _ZN9QtWayland11xdg_surface7destroyEv@Qt_5 5.10.1 - _ZN9QtWayland11xdg_surface9interfaceEv@Qt_5 5.10.1 - _ZN9QtWayland11xdg_surface9set_titleERK7QString@Qt_5 5.10.1 - _ZN9QtWayland11xdg_surfaceC1EP11wl_registryii@Qt_5 5.10.1 - _ZN9QtWayland11xdg_surfaceC1EP11xdg_surface@Qt_5 5.10.1 - _ZN9QtWayland11xdg_surfaceC1Ev@Qt_5 5.10.1 - _ZN9QtWayland11xdg_surfaceC2EP11wl_registryii@Qt_5 5.10.1 - _ZN9QtWayland11xdg_surfaceC2EP11xdg_surface@Qt_5 5.10.1 - _ZN9QtWayland11xdg_surfaceC2Ev@Qt_5 5.10.1 - _ZN9QtWayland11xdg_surfaceD0Ev@Qt_5 5.10.1 - _ZN9QtWayland11xdg_surfaceD1Ev@Qt_5 5.10.1 - _ZN9QtWayland11xdg_surfaceD2Ev@Qt_5 5.10.1 _ZN9QtWayland13wl_compositor13create_regionEv@Qt_5 5.10.1 _ZN9QtWayland13wl_compositor14create_surfaceEv@Qt_5 5.10.1 _ZN9QtWayland13wl_compositor4initEP11wl_registryii@Qt_5 5.10.1 @@ -801,46 +670,6 @@ _ZN9QtWayland13wl_subsurfaceD0Ev@Qt_5 5.10.1 _ZN9QtWayland13wl_subsurfaceD1Ev@Qt_5 5.10.1 _ZN9QtWayland13wl_subsurfaceD2Ev@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_popup_v613init_listenerEv@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_popup_v616handle_configureEPvP13zxdg_popup_v6iiii@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_popup_v617handle_popup_doneEPvP13zxdg_popup_v6@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_popup_v623zxdg_popup_v6_configureEiiii@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_popup_v624m_zxdg_popup_v6_listenerE@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_popup_v624zxdg_popup_v6_popup_doneEv@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_popup_v64grabEP7wl_seatj@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_popup_v64initEP11wl_registryii@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_popup_v64initEP13zxdg_popup_v6@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_popup_v67destroyEv@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_popup_v69interfaceEv@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_popup_v6C1EP11wl_registryii@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_popup_v6C1EP13zxdg_popup_v6@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_popup_v6C1Ev@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_popup_v6C2EP11wl_registryii@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_popup_v6C2EP13zxdg_popup_v6@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_popup_v6C2Ev@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_popup_v6D0Ev@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_popup_v6D1Ev@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_popup_v6D2Ev@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_shell_v611handle_pingEPvP13zxdg_shell_v6j@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_shell_v613init_listenerEv@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_shell_v615get_xdg_surfaceEP10wl_surface@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_shell_v617create_positionerEv@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_shell_v618zxdg_shell_v6_pingEj@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_shell_v624m_zxdg_shell_v6_listenerE@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_shell_v64initEP11wl_registryii@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_shell_v64initEP13zxdg_shell_v6@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_shell_v64pongEj@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_shell_v67destroyEv@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_shell_v69interfaceEv@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_shell_v6C1EP11wl_registryii@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_shell_v6C1EP13zxdg_shell_v6@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_shell_v6C1Ev@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_shell_v6C2EP11wl_registryii@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_shell_v6C2EP13zxdg_shell_v6@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_shell_v6C2Ev@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_shell_v6D0Ev@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_shell_v6D1Ev@Qt_5 5.10.1 - _ZN9QtWayland13zxdg_shell_v6D2Ev@Qt_5 5.10.1 _ZN9QtWayland14wl_data_device10start_dragEP14wl_data_sourceP10wl_surfaceS4_j@Qt_5 5.10.1 _ZN9QtWayland14wl_data_device11handle_dropEPvP14wl_data_device@Qt_5 5.10.1 _ZN9QtWayland14wl_data_device12handle_enterEPvP14wl_data_devicejP10wl_surfaceiiP13wl_data_offer@Qt_5 5.10.1 @@ -891,44 +720,31 @@ _ZN9QtWayland14wl_data_sourceD0Ev@Qt_5 5.10.1 _ZN9QtWayland14wl_data_sourceD1Ev@Qt_5 5.10.1 _ZN9QtWayland14wl_data_sourceD2Ev@Qt_5 5.10.1 - _ZN9QtWayland15zxdg_surface_v612get_toplevelEv@Qt_5 5.10.1 - _ZN9QtWayland15zxdg_surface_v613ack_configureEj@Qt_5 5.10.1 - _ZN9QtWayland15zxdg_surface_v613init_listenerEv@Qt_5 5.10.1 - _ZN9QtWayland15zxdg_surface_v616handle_configureEPvP15zxdg_surface_v6j@Qt_5 5.10.1 - _ZN9QtWayland15zxdg_surface_v619set_window_geometryEiiii@Qt_5 5.10.1 - _ZN9QtWayland15zxdg_surface_v625zxdg_surface_v6_configureEj@Qt_5 5.10.1 - _ZN9QtWayland15zxdg_surface_v626m_zxdg_surface_v6_listenerE@Qt_5 5.10.1 - _ZN9QtWayland15zxdg_surface_v64initEP11wl_registryii@Qt_5 5.10.1 - _ZN9QtWayland15zxdg_surface_v64initEP15zxdg_surface_v6@Qt_5 5.10.1 - _ZN9QtWayland15zxdg_surface_v67destroyEv@Qt_5 5.10.1 - _ZN9QtWayland15zxdg_surface_v69get_popupEP15zxdg_surface_v6P18zxdg_positioner_v6@Qt_5 5.10.1 - _ZN9QtWayland15zxdg_surface_v69interfaceEv@Qt_5 5.10.1 - _ZN9QtWayland15zxdg_surface_v6C1EP11wl_registryii@Qt_5 5.10.1 - _ZN9QtWayland15zxdg_surface_v6C1EP15zxdg_surface_v6@Qt_5 5.10.1 - _ZN9QtWayland15zxdg_surface_v6C1Ev@Qt_5 5.10.1 - _ZN9QtWayland15zxdg_surface_v6C2EP11wl_registryii@Qt_5 5.10.1 - _ZN9QtWayland15zxdg_surface_v6C2EP15zxdg_surface_v6@Qt_5 5.10.1 - _ZN9QtWayland15zxdg_surface_v6C2Ev@Qt_5 5.10.1 - _ZN9QtWayland15zxdg_surface_v6D0Ev@Qt_5 5.10.1 - _ZN9QtWayland15zxdg_surface_v6D1Ev@Qt_5 5.10.1 - _ZN9QtWayland15zxdg_surface_v6D2Ev@Qt_5 5.10.1 - _ZN9QtWayland16qt_key_extension12handle_qtkeyEPvP16qt_key_extensionP10wl_surfacejjjjjjjPKcjj@Qt_5 5.10.1 - _ZN9QtWayland16qt_key_extension13init_listenerEv@Qt_5 5.10.1 - _ZN9QtWayland16qt_key_extension19key_extension_qtkeyEP10wl_surfacejjjjjjjRK7QStringjj@Qt_5 5.10.1 - _ZN9QtWayland16qt_key_extension27m_qt_key_extension_listenerE@Qt_5 5.10.1 - _ZN9QtWayland16qt_key_extension4initEP11wl_registryii@Qt_5 5.10.1 - _ZN9QtWayland16qt_key_extension4initEP16qt_key_extension@Qt_5 5.10.1 - _ZN9QtWayland16qt_key_extension5dummyEv@Qt_5 5.10.1 - _ZN9QtWayland16qt_key_extension9interfaceEv@Qt_5 5.10.1 - _ZN9QtWayland16qt_key_extensionC1EP11wl_registryii@Qt_5 5.10.1 - _ZN9QtWayland16qt_key_extensionC1EP16qt_key_extension@Qt_5 5.10.1 - _ZN9QtWayland16qt_key_extensionC1Ev@Qt_5 5.10.1 - _ZN9QtWayland16qt_key_extensionC2EP11wl_registryii@Qt_5 5.10.1 - _ZN9QtWayland16qt_key_extensionC2EP16qt_key_extension@Qt_5 5.10.1 - _ZN9QtWayland16qt_key_extensionC2Ev@Qt_5 5.10.1 - _ZN9QtWayland16qt_key_extensionD0Ev@Qt_5 5.10.1 - _ZN9QtWayland16qt_key_extensionD1Ev@Qt_5 5.10.1 - _ZN9QtWayland16qt_key_extensionD2Ev@Qt_5 5.10.1 + _ZN9QtWayland14zxdg_output_v111handle_doneEPvP14zxdg_output_v1@Qt_5 5.12.2 + _ZN9QtWayland14zxdg_output_v111handle_nameEPvP14zxdg_output_v1PKc@Qt_5 5.12.2 + _ZN9QtWayland14zxdg_output_v113init_listenerEv@Qt_5 5.12.2 + _ZN9QtWayland14zxdg_output_v118handle_descriptionEPvP14zxdg_output_v1PKc@Qt_5 5.12.2 + _ZN9QtWayland14zxdg_output_v119handle_logical_sizeEPvP14zxdg_output_v1ii@Qt_5 5.12.2 + _ZN9QtWayland14zxdg_output_v119zxdg_output_v1_doneEv@Qt_5 5.12.2 + _ZN9QtWayland14zxdg_output_v119zxdg_output_v1_nameERK7QString@Qt_5 5.12.2 + _ZN9QtWayland14zxdg_output_v123handle_logical_positionEPvP14zxdg_output_v1ii@Qt_5 5.12.2 + _ZN9QtWayland14zxdg_output_v125m_zxdg_output_v1_listenerE@Qt_5 5.12.2 + _ZN9QtWayland14zxdg_output_v126zxdg_output_v1_descriptionERK7QString@Qt_5 5.12.2 + _ZN9QtWayland14zxdg_output_v127zxdg_output_v1_logical_sizeEii@Qt_5 5.12.2 + _ZN9QtWayland14zxdg_output_v131zxdg_output_v1_logical_positionEii@Qt_5 5.12.2 + _ZN9QtWayland14zxdg_output_v14initEP11wl_registryii@Qt_5 5.12.2 + _ZN9QtWayland14zxdg_output_v14initEP14zxdg_output_v1@Qt_5 5.12.2 + _ZN9QtWayland14zxdg_output_v17destroyEv@Qt_5 5.12.2 + _ZN9QtWayland14zxdg_output_v19interfaceEv@Qt_5 5.12.2 + _ZN9QtWayland14zxdg_output_v1C1EP11wl_registryii@Qt_5 5.12.2 + _ZN9QtWayland14zxdg_output_v1C1EP14zxdg_output_v1@Qt_5 5.12.2 + _ZN9QtWayland14zxdg_output_v1C1Ev@Qt_5 5.12.2 + _ZN9QtWayland14zxdg_output_v1C2EP11wl_registryii@Qt_5 5.12.2 + _ZN9QtWayland14zxdg_output_v1C2EP14zxdg_output_v1@Qt_5 5.12.2 + _ZN9QtWayland14zxdg_output_v1C2Ev@Qt_5 5.12.2 + _ZN9QtWayland14zxdg_output_v1D0Ev@Qt_5 5.12.2 + _ZN9QtWayland14zxdg_output_v1D1Ev@Qt_5 5.12.2 + _ZN9QtWayland14zxdg_output_v1D2Ev@Qt_5 5.12.2 _ZN9QtWayland16qt_server_buffer4initEP11wl_registryii@Qt_5 5.10.1 _ZN9QtWayland16qt_server_buffer4initEP16qt_server_buffer@Qt_5 5.10.1 _ZN9QtWayland16qt_server_buffer7releaseEv@Qt_5 5.10.1 @@ -1005,38 +821,6 @@ _ZN9QtWayland16wl_subcompositorD0Ev@Qt_5 5.10.1 _ZN9QtWayland16wl_subcompositorD1Ev@Qt_5 5.10.1 _ZN9QtWayland16wl_subcompositorD2Ev@Qt_5 5.10.1 - _ZN9QtWayland16zxdg_toplevel_v610set_app_idERK7QString@Qt_5 5.10.1 - _ZN9QtWayland16zxdg_toplevel_v610set_parentEP16zxdg_toplevel_v6@Qt_5 5.10.1 - _ZN9QtWayland16zxdg_toplevel_v612handle_closeEPvP16zxdg_toplevel_v6@Qt_5 5.10.1 - _ZN9QtWayland16zxdg_toplevel_v612set_max_sizeEii@Qt_5 5.10.1 - _ZN9QtWayland16zxdg_toplevel_v612set_min_sizeEii@Qt_5 5.10.1 - _ZN9QtWayland16zxdg_toplevel_v613init_listenerEv@Qt_5 5.10.1 - _ZN9QtWayland16zxdg_toplevel_v613set_maximizedEv@Qt_5 5.10.1 - _ZN9QtWayland16zxdg_toplevel_v613set_minimizedEv@Qt_5 5.10.1 - _ZN9QtWayland16zxdg_toplevel_v614set_fullscreenEP9wl_output@Qt_5 5.10.1 - _ZN9QtWayland16zxdg_toplevel_v615unset_maximizedEv@Qt_5 5.10.1 - _ZN9QtWayland16zxdg_toplevel_v616handle_configureEPvP16zxdg_toplevel_v6iiP8wl_array@Qt_5 5.10.1 - _ZN9QtWayland16zxdg_toplevel_v616show_window_menuEP7wl_seatjii@Qt_5 5.10.1 - _ZN9QtWayland16zxdg_toplevel_v616unset_fullscreenEv@Qt_5 5.10.1 - _ZN9QtWayland16zxdg_toplevel_v622zxdg_toplevel_v6_closeEv@Qt_5 5.10.1 - _ZN9QtWayland16zxdg_toplevel_v626zxdg_toplevel_v6_configureEiiP8wl_array@Qt_5 5.10.1 - _ZN9QtWayland16zxdg_toplevel_v627m_zxdg_toplevel_v6_listenerE@Qt_5 5.10.1 - _ZN9QtWayland16zxdg_toplevel_v64initEP11wl_registryii@Qt_5 5.10.1 - _ZN9QtWayland16zxdg_toplevel_v64initEP16zxdg_toplevel_v6@Qt_5 5.10.1 - _ZN9QtWayland16zxdg_toplevel_v64moveEP7wl_seatj@Qt_5 5.10.1 - _ZN9QtWayland16zxdg_toplevel_v66resizeEP7wl_seatjj@Qt_5 5.10.1 - _ZN9QtWayland16zxdg_toplevel_v67destroyEv@Qt_5 5.10.1 - _ZN9QtWayland16zxdg_toplevel_v69interfaceEv@Qt_5 5.10.1 - _ZN9QtWayland16zxdg_toplevel_v69set_titleERK7QString@Qt_5 5.10.1 - _ZN9QtWayland16zxdg_toplevel_v6C1EP11wl_registryii@Qt_5 5.10.1 - _ZN9QtWayland16zxdg_toplevel_v6C1EP16zxdg_toplevel_v6@Qt_5 5.10.1 - _ZN9QtWayland16zxdg_toplevel_v6C1Ev@Qt_5 5.10.1 - _ZN9QtWayland16zxdg_toplevel_v6C2EP11wl_registryii@Qt_5 5.10.1 - _ZN9QtWayland16zxdg_toplevel_v6C2EP16zxdg_toplevel_v6@Qt_5 5.10.1 - _ZN9QtWayland16zxdg_toplevel_v6C2Ev@Qt_5 5.10.1 - _ZN9QtWayland16zxdg_toplevel_v6D0Ev@Qt_5 5.10.1 - _ZN9QtWayland16zxdg_toplevel_v6D1Ev@Qt_5 5.10.1 - _ZN9QtWayland16zxdg_toplevel_v6D2Ev@Qt_5 5.10.1 _ZN9QtWayland17zwp_text_input_v212handle_enterEPvP17zwp_text_input_v2jP10wl_surface@Qt_5 5.10.1 _ZN9QtWayland17zwp_text_input_v212handle_leaveEPvP17zwp_text_input_v2jP10wl_surface@Qt_5 5.10.1 _ZN9QtWayland17zwp_text_input_v212update_stateEjj@Qt_5 5.10.1 @@ -1110,25 +894,6 @@ _ZN9QtWayland18qt_touch_extensionD0Ev@Qt_5 5.10.1 _ZN9QtWayland18qt_touch_extensionD1Ev@Qt_5 5.10.1 _ZN9QtWayland18qt_touch_extensionD2Ev@Qt_5 5.10.1 - _ZN9QtWayland18zxdg_positioner_v610set_anchorEj@Qt_5 5.10.1 - _ZN9QtWayland18zxdg_positioner_v610set_offsetEii@Qt_5 5.10.1 - _ZN9QtWayland18zxdg_positioner_v611set_gravityEj@Qt_5 5.10.1 - _ZN9QtWayland18zxdg_positioner_v615set_anchor_rectEiiii@Qt_5 5.10.1 - _ZN9QtWayland18zxdg_positioner_v625set_constraint_adjustmentEj@Qt_5 5.10.1 - _ZN9QtWayland18zxdg_positioner_v64initEP11wl_registryii@Qt_5 5.10.1 - _ZN9QtWayland18zxdg_positioner_v64initEP18zxdg_positioner_v6@Qt_5 5.10.1 - _ZN9QtWayland18zxdg_positioner_v67destroyEv@Qt_5 5.10.1 - _ZN9QtWayland18zxdg_positioner_v68set_sizeEii@Qt_5 5.10.1 - _ZN9QtWayland18zxdg_positioner_v69interfaceEv@Qt_5 5.10.1 - _ZN9QtWayland18zxdg_positioner_v6C1EP11wl_registryii@Qt_5 5.10.1 - _ZN9QtWayland18zxdg_positioner_v6C1EP18zxdg_positioner_v6@Qt_5 5.10.1 - _ZN9QtWayland18zxdg_positioner_v6C1Ev@Qt_5 5.10.1 - _ZN9QtWayland18zxdg_positioner_v6C2EP11wl_registryii@Qt_5 5.10.1 - _ZN9QtWayland18zxdg_positioner_v6C2EP18zxdg_positioner_v6@Qt_5 5.10.1 - _ZN9QtWayland18zxdg_positioner_v6C2Ev@Qt_5 5.10.1 - _ZN9QtWayland18zxdg_positioner_v6D0Ev@Qt_5 5.10.1 - _ZN9QtWayland18zxdg_positioner_v6D1Ev@Qt_5 5.10.1 - _ZN9QtWayland18zxdg_positioner_v6D2Ev@Qt_5 5.10.1 _ZN9QtWayland19qt_extended_surface12handle_closeEPvP19qt_extended_surface@Qt_5 5.10.1 _ZN9QtWayland19qt_extended_surface13init_listenerEv@Qt_5 5.10.1 _ZN9QtWayland19qt_extended_surface16set_window_flagsEi@Qt_5 5.10.1 @@ -1181,6 +946,20 @@ _ZN9QtWayland22wl_data_device_managerD0Ev@Qt_5 5.10.1 _ZN9QtWayland22wl_data_device_managerD1Ev@Qt_5 5.10.1 _ZN9QtWayland22wl_data_device_managerD2Ev@Qt_5 5.10.1 + _ZN9QtWayland22zxdg_output_manager_v114get_xdg_outputEP9wl_output@Qt_5 5.12.2 + _ZN9QtWayland22zxdg_output_manager_v14initEP11wl_registryii@Qt_5 5.12.2 + _ZN9QtWayland22zxdg_output_manager_v14initEP22zxdg_output_manager_v1@Qt_5 5.12.2 + _ZN9QtWayland22zxdg_output_manager_v17destroyEv@Qt_5 5.12.2 + _ZN9QtWayland22zxdg_output_manager_v19interfaceEv@Qt_5 5.12.2 + _ZN9QtWayland22zxdg_output_manager_v1C1EP11wl_registryii@Qt_5 5.12.2 + _ZN9QtWayland22zxdg_output_manager_v1C1EP22zxdg_output_manager_v1@Qt_5 5.12.2 + _ZN9QtWayland22zxdg_output_manager_v1C1Ev@Qt_5 5.12.2 + _ZN9QtWayland22zxdg_output_manager_v1C2EP11wl_registryii@Qt_5 5.12.2 + _ZN9QtWayland22zxdg_output_manager_v1C2EP22zxdg_output_manager_v1@Qt_5 5.12.2 + _ZN9QtWayland22zxdg_output_manager_v1C2Ev@Qt_5 5.12.2 + _ZN9QtWayland22zxdg_output_manager_v1D0Ev@Qt_5 5.12.2 + _ZN9QtWayland22zxdg_output_manager_v1D1Ev@Qt_5 5.12.2 + _ZN9QtWayland22zxdg_output_manager_v1D2Ev@Qt_5 5.12.2 _ZN9QtWayland23qt_hardware_integration13init_listenerEv@Qt_5 5.10.1 _ZN9QtWayland23qt_hardware_integration21handle_client_backendEPvP23qt_hardware_integrationPKc@Qt_5 5.10.1 _ZN9QtWayland23qt_hardware_integration21handle_server_backendEPvP23qt_hardware_integrationPKc@Qt_5 5.10.1 @@ -1343,44 +1122,6 @@ _ZN9QtWayland9wl_regionD0Ev@Qt_5 5.10.1 _ZN9QtWayland9wl_regionD1Ev@Qt_5 5.10.1 _ZN9QtWayland9wl_regionD2Ev@Qt_5 5.10.1 - _ZN9QtWayland9xdg_popup13init_listenerEv@Qt_5 5.10.1 - _ZN9QtWayland9xdg_popup17handle_popup_doneEPvP9xdg_popup@Qt_5 5.10.1 - _ZN9QtWayland9xdg_popup20m_xdg_popup_listenerE@Qt_5 5.10.1 - _ZN9QtWayland9xdg_popup20xdg_popup_popup_doneEv@Qt_5 5.10.1 - _ZN9QtWayland9xdg_popup4initEP11wl_registryii@Qt_5 5.10.1 - _ZN9QtWayland9xdg_popup4initEP9xdg_popup@Qt_5 5.10.1 - _ZN9QtWayland9xdg_popup7destroyEv@Qt_5 5.10.1 - _ZN9QtWayland9xdg_popup9interfaceEv@Qt_5 5.10.1 - _ZN9QtWayland9xdg_popupC1EP11wl_registryii@Qt_5 5.10.1 - _ZN9QtWayland9xdg_popupC1EP9xdg_popup@Qt_5 5.10.1 - _ZN9QtWayland9xdg_popupC1Ev@Qt_5 5.10.1 - _ZN9QtWayland9xdg_popupC2EP11wl_registryii@Qt_5 5.10.1 - _ZN9QtWayland9xdg_popupC2EP9xdg_popup@Qt_5 5.10.1 - _ZN9QtWayland9xdg_popupC2Ev@Qt_5 5.10.1 - _ZN9QtWayland9xdg_popupD0Ev@Qt_5 5.10.1 - _ZN9QtWayland9xdg_popupD1Ev@Qt_5 5.10.1 - _ZN9QtWayland9xdg_popupD2Ev@Qt_5 5.10.1 - _ZN9QtWayland9xdg_shell11handle_pingEPvP9xdg_shellj@Qt_5 5.10.1 - _ZN9QtWayland9xdg_shell13get_xdg_popupEP10wl_surfaceS2_P7wl_seatjii@Qt_5 5.10.1 - _ZN9QtWayland9xdg_shell13init_listenerEv@Qt_5 5.10.1 - _ZN9QtWayland9xdg_shell14xdg_shell_pingEj@Qt_5 5.10.1 - _ZN9QtWayland9xdg_shell15get_xdg_surfaceEP10wl_surface@Qt_5 5.10.1 - _ZN9QtWayland9xdg_shell20m_xdg_shell_listenerE@Qt_5 5.10.1 - _ZN9QtWayland9xdg_shell20use_unstable_versionEi@Qt_5 5.10.1 - _ZN9QtWayland9xdg_shell4initEP11wl_registryii@Qt_5 5.10.1 - _ZN9QtWayland9xdg_shell4initEP9xdg_shell@Qt_5 5.10.1 - _ZN9QtWayland9xdg_shell4pongEj@Qt_5 5.10.1 - _ZN9QtWayland9xdg_shell7destroyEv@Qt_5 5.10.1 - _ZN9QtWayland9xdg_shell9interfaceEv@Qt_5 5.10.1 - _ZN9QtWayland9xdg_shellC1EP11wl_registryii@Qt_5 5.10.1 - _ZN9QtWayland9xdg_shellC1EP9xdg_shell@Qt_5 5.10.1 - _ZN9QtWayland9xdg_shellC1Ev@Qt_5 5.10.1 - _ZN9QtWayland9xdg_shellC2EP11wl_registryii@Qt_5 5.10.1 - _ZN9QtWayland9xdg_shellC2EP9xdg_shell@Qt_5 5.10.1 - _ZN9QtWayland9xdg_shellC2Ev@Qt_5 5.10.1 - _ZN9QtWayland9xdg_shellD0Ev@Qt_5 5.10.1 - _ZN9QtWayland9xdg_shellD1Ev@Qt_5 5.10.1 - _ZN9QtWayland9xdg_shellD2Ev@Qt_5 5.10.1 _ZNK15QtWaylandClient11QWaylandShm15formatSupportedE13wl_shm_format@Qt_5_PRIVATE_API 5.10.1 _ZNK15QtWaylandClient11QWaylandShm15formatSupportedEN6QImage6FormatE@Qt_5_PRIVATE_API 5.10.1 _ZNK15QtWaylandClient14QWaylandCursor3posEv@Qt_5_PRIVATE_API 5.10.1 @@ -1412,6 +1153,7 @@ _ZNK15QtWaylandClient14QWaylandWindow32calculateScreenFromSurfaceEventsEv@Qt_5_PRIVATE_API 5.10.1 _ZNK15QtWaylandClient14QWaylandWindow5scaleEv@Qt_5_PRIVATE_API 5.10.1 _ZNK15QtWaylandClient14QWaylandWindow5winIdEv@Qt_5_PRIVATE_API 5.10.1 + _ZNK15QtWaylandClient14QWaylandWindow8isActiveEv@Qt_5_PRIVATE_API 5.12.2 _ZNK15QtWaylandClient14QWaylandWindow9isExposedEv@Qt_5_PRIVATE_API 5.10.1 _ZNK15QtWaylandClient15QWaylandDisplay10checkErrorEv@Qt_5_PRIVATE_API 5.10.1 _ZNK15QtWaylandClient15QWaylandDisplay10metaObjectEv@Qt_5_PRIVATE_API 5.10.1 @@ -1421,14 +1163,12 @@ _ZNK15QtWaylandClient15QWaylandDisplay23clientBufferIntegrationEv@Qt_5_PRIVATE_API 5.10.1 _ZNK15QtWaylandClient15QWaylandDisplay24supportsWindowDecorationEv@Qt_5_PRIVATE_API 5.10.1 _ZNK15QtWaylandClient15QWaylandDisplay24windowManagerIntegrationEv@Qt_5_PRIVATE_API 5.10.1 - _ZNK15QtWaylandClient16QWaylandXdgPopup10metaObjectEv@Qt_5_PRIVATE_API 5.10.1 _ZNK15QtWaylandClient17QWaylandClipboard12supportsModeEN10QClipboard4ModeE@Qt_5_PRIVATE_API 5.10.1 _ZNK15QtWaylandClient17QWaylandClipboard8ownsModeEN10QClipboard4ModeE@Qt_5_PRIVATE_API 5.10.1 _ZNK15QtWaylandClient17QWaylandDataOffer11firstFormatEv@Qt_5_PRIVATE_API 5.10.1 _ZNK15QtWaylandClient17QWaylandShmWindow10windowTypeEv@Qt_5_PRIVATE_API 5.10.1 _ZNK15QtWaylandClient18QWaylandDataSource10metaObjectEv@Qt_5_PRIVATE_API 5.10.1 _ZNK15QtWaylandClient18QWaylandDataSource8mimeDataEv@Qt_5_PRIVATE_API 5.10.1 - _ZNK15QtWaylandClient18QWaylandXdgSurface10metaObjectEv@Qt_5_PRIVATE_API 5.10.1 _ZNK15QtWaylandClient19QWaylandInputDevice10dataDeviceEv@Qt_5_PRIVATE_API 5.10.1 _ZNK15QtWaylandClient19QWaylandInputDevice10metaObjectEv@Qt_5_PRIVATE_API 5.10.1 _ZNK15QtWaylandClient19QWaylandInputDevice10touchFocusEv@Qt_5_PRIVATE_API 5.10.1 @@ -1462,7 +1202,6 @@ _ZNK15QtWaylandClient20QWaylandServerBuffer6formatEv@Qt_5_PRIVATE_API 5.10.1 _ZNK15QtWaylandClient20QWaylandServerBuffer8userDataEv@Qt_5_PRIVATE_API 5.10.1 _ZNK15QtWaylandClient20QWaylandShellSurface10metaObjectEv@Qt_5_PRIVATE_API 5.10.1 - _ZNK15QtWaylandClient22QWaylandWlShellSurface10metaObjectEv@Qt_5_PRIVATE_API 5.10.1 _ZNK15QtWaylandClient23QWaylandNativeInterface14windowPropertyEP15QPlatformWindowRK7QString@Qt_5_PRIVATE_API 5.10.1 _ZNK15QtWaylandClient23QWaylandNativeInterface14windowPropertyEP15QPlatformWindowRK7QStringRK8QVariant@Qt_5_PRIVATE_API 5.10.1 _ZNK15QtWaylandClient23QWaylandNativeInterface16platformFunctionERK10QByteArray@Qt_5_PRIVATE_API 5.10.1 @@ -1491,31 +1230,27 @@ _ZNK23QWaylandClientExtension8isActiveEv@Qt_5 5.10.1 _ZNK9QtWayland10wl_pointer13isInitializedEv@Qt_5 5.10.1 _ZNK9QtWayland10wl_surface13isInitializedEv@Qt_5 5.10.1 + _ZNK9QtWayland10zqt_key_v113isInitializedEv@Qt_5 5.12.2 _ZNK9QtWayland11wl_callback13isInitializedEv@Qt_5 5.10.1 _ZNK9QtWayland11wl_keyboard13isInitializedEv@Qt_5 5.10.1 _ZNK9QtWayland11wl_registry13isInitializedEv@Qt_5 5.10.1 _ZNK9QtWayland11wl_shm_pool13isInitializedEv@Qt_5 5.10.1 - _ZNK9QtWayland11xdg_surface13isInitializedEv@Qt_5 5.10.1 _ZNK9QtWayland13wl_compositor13isInitializedEv@Qt_5 5.10.1 _ZNK9QtWayland13wl_data_offer13isInitializedEv@Qt_5 5.10.1 _ZNK9QtWayland13wl_subsurface13isInitializedEv@Qt_5 5.10.1 - _ZNK9QtWayland13zxdg_popup_v613isInitializedEv@Qt_5 5.10.1 - _ZNK9QtWayland13zxdg_shell_v613isInitializedEv@Qt_5 5.10.1 _ZNK9QtWayland14wl_data_device13isInitializedEv@Qt_5 5.10.1 _ZNK9QtWayland14wl_data_source13isInitializedEv@Qt_5 5.10.1 - _ZNK9QtWayland15zxdg_surface_v613isInitializedEv@Qt_5 5.10.1 - _ZNK9QtWayland16qt_key_extension13isInitializedEv@Qt_5 5.10.1 + _ZNK9QtWayland14zxdg_output_v113isInitializedEv@Qt_5 5.12.2 _ZNK9QtWayland16qt_server_buffer13isInitializedEv@Qt_5 5.10.1 _ZNK9QtWayland16qt_windowmanager13isInitializedEv@Qt_5 5.10.1 _ZNK9QtWayland16wl_shell_surface13isInitializedEv@Qt_5 5.10.1 _ZNK9QtWayland16wl_subcompositor13isInitializedEv@Qt_5 5.10.1 - _ZNK9QtWayland16zxdg_toplevel_v613isInitializedEv@Qt_5 5.10.1 _ZNK9QtWayland17zwp_text_input_v213isInitializedEv@Qt_5 5.10.1 _ZNK9QtWayland18qt_touch_extension13isInitializedEv@Qt_5 5.10.1 - _ZNK9QtWayland18zxdg_positioner_v613isInitializedEv@Qt_5 5.10.1 _ZNK9QtWayland19qt_extended_surface13isInitializedEv@Qt_5 5.10.1 _ZNK9QtWayland20qt_surface_extension13isInitializedEv@Qt_5 5.10.1 _ZNK9QtWayland22wl_data_device_manager13isInitializedEv@Qt_5 5.10.1 + _ZNK9QtWayland22zxdg_output_manager_v113isInitializedEv@Qt_5 5.12.2 _ZNK9QtWayland23qt_hardware_integration13isInitializedEv@Qt_5 5.10.1 _ZNK9QtWayland25zwp_text_input_manager_v213isInitializedEv@Qt_5 5.10.1 _ZNK9QtWayland6wl_shm13isInitializedEv@Qt_5 5.10.1 @@ -1525,8 +1260,6 @@ _ZNK9QtWayland9wl_buffer13isInitializedEv@Qt_5 5.10.1 _ZNK9QtWayland9wl_output13isInitializedEv@Qt_5 5.10.1 _ZNK9QtWayland9wl_region13isInitializedEv@Qt_5 5.10.1 - _ZNK9QtWayland9xdg_popup13isInitializedEv@Qt_5 5.10.1 - _ZNK9QtWayland9xdg_shell13isInitializedEv@Qt_5 5.10.1 _ZTI23QWaylandClientExtension@Qt_5 5.10.1 _ZTI27QEventDispatcherGlibPrivate@Qt_5 5.10.1 _ZTI30QWaylandClientExtensionPrivate@Qt_5_PRIVATE_API 5.10.1 @@ -1538,16 +1271,12 @@ _ZTIN15QtWaylandClient14QWaylandScreenE@Qt_5_PRIVATE_API 5.10.1 _ZTIN15QtWaylandClient14QWaylandWindowE@Qt_5_PRIVATE_API 5.10.1 _ZTIN15QtWaylandClient15QWaylandDisplayE@Qt_5_PRIVATE_API 5.10.1 - _ZTIN15QtWaylandClient16QWaylandXdgPopupE@Qt_5_PRIVATE_API 5.10.1 - _ZTIN15QtWaylandClient16QWaylandXdgShellE@Qt_5_PRIVATE_API 5.10.1 _ZTIN15QtWaylandClient17QWaylandClipboardE@Qt_5_PRIVATE_API 5.10.1 _ZTIN15QtWaylandClient17QWaylandDataOfferE@Qt_5_PRIVATE_API 5.10.1 _ZTIN15QtWaylandClient17QWaylandShmBufferE@Qt_5_PRIVATE_API 5.10.1 _ZTIN15QtWaylandClient17QWaylandShmWindowE@Qt_5_PRIVATE_API 5.10.1 _ZTIN15QtWaylandClient18QWaylandDataSourceE@Qt_5_PRIVATE_API 5.10.1 _ZTIN15QtWaylandClient18QWaylandSubSurfaceE@Qt_5_PRIVATE_API 5.10.1 - _ZTIN15QtWaylandClient18QWaylandXdgShellV6E@Qt_5_PRIVATE_API 5.10.1 - _ZTIN15QtWaylandClient18QWaylandXdgSurfaceE@Qt_5_PRIVATE_API 5.10.1 _ZTIN15QtWaylandClient19QWaylandInputDevice5TouchE@Qt_5_PRIVATE_API 5.10.1 _ZTIN15QtWaylandClient19QWaylandInputDevice7PointerE@Qt_5_PRIVATE_API 5.10.1 _ZTIN15QtWaylandClient19QWaylandInputDevice8KeyboardE@Qt_5_PRIVATE_API 5.10.1 @@ -1555,23 +1284,15 @@ _ZTIN15QtWaylandClient19QWaylandIntegrationE@Qt_5_PRIVATE_API 5.10.1 _ZTIN15QtWaylandClient20QWaylandServerBufferE@Qt_5_PRIVATE_API 5.10.1 _ZTIN15QtWaylandClient20QWaylandShellSurfaceE@Qt_5_PRIVATE_API 5.10.1 - _ZTIN15QtWaylandClient20QWaylandXdgSurfaceV65PopupE@Qt_5_PRIVATE_API 5.10.1 - _ZTIN15QtWaylandClient20QWaylandXdgSurfaceV68ToplevelE@Qt_5_PRIVATE_API 5.10.1 - _ZTIN15QtWaylandClient20QWaylandXdgSurfaceV6E@Qt_5_PRIVATE_API 5.10.1 _ZTIN15QtWaylandClient22QWaylandQtKeyExtensionE@Qt_5_PRIVATE_API 5.10.1 _ZTIN15QtWaylandClient22QWaylandTouchExtensionE@Qt_5_PRIVATE_API 5.10.1 - _ZTIN15QtWaylandClient22QWaylandWlShellSurfaceE@Qt_5_PRIVATE_API 5.10.1 _ZTIN15QtWaylandClient23QWaylandExtendedSurfaceE@Qt_5_PRIVATE_API 5.10.1 _ZTIN15QtWaylandClient23QWaylandNativeInterfaceE@Qt_5_PRIVATE_API 5.10.1 _ZTIN15QtWaylandClient23QWaylandShmBackingStoreE@Qt_5_PRIVATE_API 5.10.1 _ZTIN15QtWaylandClient24QWaylandDecorationPluginE@Qt_5_PRIVATE_API 5.10.1 - _ZTIN15QtWaylandClient24QWaylandShellIntegrationE@Qt_5_PRIVATE_API 5.10.1 _ZTIN15QtWaylandClient25QWaylandDataDeviceManagerE@Qt_5_PRIVATE_API 5.10.1 _ZTIN15QtWaylandClient26QWaylandAbstractDecorationE@Qt_5_PRIVATE_API 5.10.1 - _ZTIN15QtWaylandClient26QWaylandWlShellIntegrationE@Qt_5_PRIVATE_API 5.10.1 _ZTIN15QtWaylandClient27QWaylandHardwareIntegrationE@Qt_5_PRIVATE_API 5.10.1 - _ZTIN15QtWaylandClient27QWaylandXdgShellIntegrationE@Qt_5_PRIVATE_API 5.10.1 - _ZTIN15QtWaylandClient29QWaylandXdgShellV6IntegrationE@Qt_5_PRIVATE_API 5.10.1 _ZTIN15QtWaylandClient30QWaylandShellIntegrationPluginE@Qt_5_PRIVATE_API 5.10.1 _ZTIN15QtWaylandClient31QWaylandClientBufferIntegrationE@Qt_5_PRIVATE_API 5.10.1 _ZTIN15QtWaylandClient31QWaylandServerBufferIntegrationE@Qt_5_PRIVATE_API 5.10.1 @@ -1581,31 +1302,27 @@ _ZTIN15QtWaylandClient37QWaylandServerBufferIntegrationPluginE@Qt_5_PRIVATE_API 5.10.1 _ZTIN9QtWayland10wl_pointerE@Qt_5 5.10.1 _ZTIN9QtWayland10wl_surfaceE@Qt_5 5.10.1 + _ZTIN9QtWayland10zqt_key_v1E@Qt_5 5.12.2 _ZTIN9QtWayland11wl_callbackE@Qt_5 5.10.1 _ZTIN9QtWayland11wl_keyboardE@Qt_5 5.10.1 _ZTIN9QtWayland11wl_registryE@Qt_5 5.10.1 _ZTIN9QtWayland11wl_shm_poolE@Qt_5 5.10.1 - _ZTIN9QtWayland11xdg_surfaceE@Qt_5 5.10.1 _ZTIN9QtWayland13wl_compositorE@Qt_5 5.10.1 _ZTIN9QtWayland13wl_data_offerE@Qt_5 5.10.1 _ZTIN9QtWayland13wl_subsurfaceE@Qt_5 5.10.1 - _ZTIN9QtWayland13zxdg_popup_v6E@Qt_5 5.10.1 - _ZTIN9QtWayland13zxdg_shell_v6E@Qt_5 5.10.1 _ZTIN9QtWayland14wl_data_deviceE@Qt_5 5.10.1 _ZTIN9QtWayland14wl_data_sourceE@Qt_5 5.10.1 - _ZTIN9QtWayland15zxdg_surface_v6E@Qt_5 5.10.1 - _ZTIN9QtWayland16qt_key_extensionE@Qt_5 5.10.1 + _ZTIN9QtWayland14zxdg_output_v1E@Qt_5 5.12.2 _ZTIN9QtWayland16qt_server_bufferE@Qt_5 5.10.1 _ZTIN9QtWayland16qt_windowmanagerE@Qt_5 5.10.1 _ZTIN9QtWayland16wl_shell_surfaceE@Qt_5 5.10.1 _ZTIN9QtWayland16wl_subcompositorE@Qt_5 5.10.1 - _ZTIN9QtWayland16zxdg_toplevel_v6E@Qt_5 5.10.1 _ZTIN9QtWayland17zwp_text_input_v2E@Qt_5 5.10.1 _ZTIN9QtWayland18qt_touch_extensionE@Qt_5 5.10.1 - _ZTIN9QtWayland18zxdg_positioner_v6E@Qt_5 5.10.1 _ZTIN9QtWayland19qt_extended_surfaceE@Qt_5 5.10.1 _ZTIN9QtWayland20qt_surface_extensionE@Qt_5 5.10.1 _ZTIN9QtWayland22wl_data_device_managerE@Qt_5 5.10.1 + _ZTIN9QtWayland22zxdg_output_manager_v1E@Qt_5 5.12.2 _ZTIN9QtWayland23qt_hardware_integrationE@Qt_5 5.10.1 _ZTIN9QtWayland25zwp_text_input_manager_v2E@Qt_5 5.10.1 _ZTIN9QtWayland6wl_shmE@Qt_5 5.10.1 @@ -1615,8 +1332,6 @@ _ZTIN9QtWayland9wl_bufferE@Qt_5 5.10.1 _ZTIN9QtWayland9wl_outputE@Qt_5 5.10.1 _ZTIN9QtWayland9wl_regionE@Qt_5 5.10.1 - _ZTIN9QtWayland9xdg_popupE@Qt_5 5.10.1 - _ZTIN9QtWayland9xdg_shellE@Qt_5 5.10.1 _ZTS23QWaylandClientExtension@Qt_5 5.10.1 _ZTS27QEventDispatcherGlibPrivate@Qt_5 5.10.1 _ZTS30QWaylandClientExtensionPrivate@Qt_5_PRIVATE_API 5.10.1 @@ -1628,16 +1343,12 @@ _ZTSN15QtWaylandClient14QWaylandScreenE@Qt_5_PRIVATE_API 5.10.1 _ZTSN15QtWaylandClient14QWaylandWindowE@Qt_5_PRIVATE_API 5.10.1 _ZTSN15QtWaylandClient15QWaylandDisplayE@Qt_5_PRIVATE_API 5.10.1 - _ZTSN15QtWaylandClient16QWaylandXdgPopupE@Qt_5_PRIVATE_API 5.10.1 - _ZTSN15QtWaylandClient16QWaylandXdgShellE@Qt_5_PRIVATE_API 5.10.1 _ZTSN15QtWaylandClient17QWaylandClipboardE@Qt_5_PRIVATE_API 5.10.1 _ZTSN15QtWaylandClient17QWaylandDataOfferE@Qt_5_PRIVATE_API 5.10.1 _ZTSN15QtWaylandClient17QWaylandShmBufferE@Qt_5_PRIVATE_API 5.10.1 _ZTSN15QtWaylandClient17QWaylandShmWindowE@Qt_5_PRIVATE_API 5.10.1 _ZTSN15QtWaylandClient18QWaylandDataSourceE@Qt_5_PRIVATE_API 5.10.1 _ZTSN15QtWaylandClient18QWaylandSubSurfaceE@Qt_5_PRIVATE_API 5.10.1 - _ZTSN15QtWaylandClient18QWaylandXdgShellV6E@Qt_5_PRIVATE_API 5.10.1 - _ZTSN15QtWaylandClient18QWaylandXdgSurfaceE@Qt_5_PRIVATE_API 5.10.1 _ZTSN15QtWaylandClient19QWaylandInputDevice5TouchE@Qt_5_PRIVATE_API 5.10.1 _ZTSN15QtWaylandClient19QWaylandInputDevice7PointerE@Qt_5_PRIVATE_API 5.10.1 _ZTSN15QtWaylandClient19QWaylandInputDevice8KeyboardE@Qt_5_PRIVATE_API 5.10.1 @@ -1645,23 +1356,15 @@ _ZTSN15QtWaylandClient19QWaylandIntegrationE@Qt_5_PRIVATE_API 5.10.1 _ZTSN15QtWaylandClient20QWaylandServerBufferE@Qt_5_PRIVATE_API 5.10.1 _ZTSN15QtWaylandClient20QWaylandShellSurfaceE@Qt_5_PRIVATE_API 5.10.1 - _ZTSN15QtWaylandClient20QWaylandXdgSurfaceV65PopupE@Qt_5_PRIVATE_API 5.10.1 - _ZTSN15QtWaylandClient20QWaylandXdgSurfaceV68ToplevelE@Qt_5_PRIVATE_API 5.10.1 - _ZTSN15QtWaylandClient20QWaylandXdgSurfaceV6E@Qt_5_PRIVATE_API 5.10.1 _ZTSN15QtWaylandClient22QWaylandQtKeyExtensionE@Qt_5_PRIVATE_API 5.10.1 _ZTSN15QtWaylandClient22QWaylandTouchExtensionE@Qt_5_PRIVATE_API 5.10.1 - _ZTSN15QtWaylandClient22QWaylandWlShellSurfaceE@Qt_5_PRIVATE_API 5.10.1 _ZTSN15QtWaylandClient23QWaylandExtendedSurfaceE@Qt_5_PRIVATE_API 5.10.1 _ZTSN15QtWaylandClient23QWaylandNativeInterfaceE@Qt_5_PRIVATE_API 5.10.1 _ZTSN15QtWaylandClient23QWaylandShmBackingStoreE@Qt_5_PRIVATE_API 5.10.1 _ZTSN15QtWaylandClient24QWaylandDecorationPluginE@Qt_5_PRIVATE_API 5.10.1 - _ZTSN15QtWaylandClient24QWaylandShellIntegrationE@Qt_5_PRIVATE_API 5.10.1 _ZTSN15QtWaylandClient25QWaylandDataDeviceManagerE@Qt_5_PRIVATE_API 5.10.1 _ZTSN15QtWaylandClient26QWaylandAbstractDecorationE@Qt_5_PRIVATE_API 5.10.1 - _ZTSN15QtWaylandClient26QWaylandWlShellIntegrationE@Qt_5_PRIVATE_API 5.10.1 _ZTSN15QtWaylandClient27QWaylandHardwareIntegrationE@Qt_5_PRIVATE_API 5.10.1 - _ZTSN15QtWaylandClient27QWaylandXdgShellIntegrationE@Qt_5_PRIVATE_API 5.10.1 - _ZTSN15QtWaylandClient29QWaylandXdgShellV6IntegrationE@Qt_5_PRIVATE_API 5.10.1 _ZTSN15QtWaylandClient30QWaylandShellIntegrationPluginE@Qt_5_PRIVATE_API 5.10.1 _ZTSN15QtWaylandClient31QWaylandClientBufferIntegrationE@Qt_5_PRIVATE_API 5.10.1 _ZTSN15QtWaylandClient31QWaylandServerBufferIntegrationE@Qt_5_PRIVATE_API 5.10.1 @@ -1671,31 +1374,27 @@ _ZTSN15QtWaylandClient37QWaylandServerBufferIntegrationPluginE@Qt_5_PRIVATE_API 5.10.1 _ZTSN9QtWayland10wl_pointerE@Qt_5 5.10.1 _ZTSN9QtWayland10wl_surfaceE@Qt_5 5.10.1 + _ZTSN9QtWayland10zqt_key_v1E@Qt_5 5.12.2 _ZTSN9QtWayland11wl_callbackE@Qt_5 5.10.1 _ZTSN9QtWayland11wl_keyboardE@Qt_5 5.10.1 _ZTSN9QtWayland11wl_registryE@Qt_5 5.10.1 _ZTSN9QtWayland11wl_shm_poolE@Qt_5 5.10.1 - _ZTSN9QtWayland11xdg_surfaceE@Qt_5 5.10.1 _ZTSN9QtWayland13wl_compositorE@Qt_5 5.10.1 _ZTSN9QtWayland13wl_data_offerE@Qt_5 5.10.1 _ZTSN9QtWayland13wl_subsurfaceE@Qt_5 5.10.1 - _ZTSN9QtWayland13zxdg_popup_v6E@Qt_5 5.10.1 - _ZTSN9QtWayland13zxdg_shell_v6E@Qt_5 5.10.1 _ZTSN9QtWayland14wl_data_deviceE@Qt_5 5.10.1 _ZTSN9QtWayland14wl_data_sourceE@Qt_5 5.10.1 - _ZTSN9QtWayland15zxdg_surface_v6E@Qt_5 5.10.1 - _ZTSN9QtWayland16qt_key_extensionE@Qt_5 5.10.1 + _ZTSN9QtWayland14zxdg_output_v1E@Qt_5 5.12.2 _ZTSN9QtWayland16qt_server_bufferE@Qt_5 5.10.1 _ZTSN9QtWayland16qt_windowmanagerE@Qt_5 5.10.1 _ZTSN9QtWayland16wl_shell_surfaceE@Qt_5 5.10.1 _ZTSN9QtWayland16wl_subcompositorE@Qt_5 5.10.1 - _ZTSN9QtWayland16zxdg_toplevel_v6E@Qt_5 5.10.1 _ZTSN9QtWayland17zwp_text_input_v2E@Qt_5 5.10.1 _ZTSN9QtWayland18qt_touch_extensionE@Qt_5 5.10.1 - _ZTSN9QtWayland18zxdg_positioner_v6E@Qt_5 5.10.1 _ZTSN9QtWayland19qt_extended_surfaceE@Qt_5 5.10.1 _ZTSN9QtWayland20qt_surface_extensionE@Qt_5 5.10.1 _ZTSN9QtWayland22wl_data_device_managerE@Qt_5 5.10.1 + _ZTSN9QtWayland22zxdg_output_manager_v1E@Qt_5 5.12.2 _ZTSN9QtWayland23qt_hardware_integrationE@Qt_5 5.10.1 _ZTSN9QtWayland25zwp_text_input_manager_v2E@Qt_5 5.10.1 _ZTSN9QtWayland6wl_shmE@Qt_5 5.10.1 @@ -1705,8 +1404,6 @@ _ZTSN9QtWayland9wl_bufferE@Qt_5 5.10.1 _ZTSN9QtWayland9wl_outputE@Qt_5 5.10.1 _ZTSN9QtWayland9wl_regionE@Qt_5 5.10.1 - _ZTSN9QtWayland9xdg_popupE@Qt_5 5.10.1 - _ZTSN9QtWayland9xdg_shellE@Qt_5 5.10.1 _ZTV23QWaylandClientExtension@Qt_5 5.10.1 _ZTV30QWaylandClientExtensionPrivate@Qt_5_PRIVATE_API 5.10.1 _ZTV31QAbstractEventDispatcherPrivate@Qt_5 5.10.1 @@ -1717,16 +1414,12 @@ _ZTVN15QtWaylandClient14QWaylandScreenE@Qt_5_PRIVATE_API 5.10.1 _ZTVN15QtWaylandClient14QWaylandWindowE@Qt_5_PRIVATE_API 5.10.1 _ZTVN15QtWaylandClient15QWaylandDisplayE@Qt_5_PRIVATE_API 5.10.1 - _ZTVN15QtWaylandClient16QWaylandXdgPopupE@Qt_5_PRIVATE_API 5.10.1 - _ZTVN15QtWaylandClient16QWaylandXdgShellE@Qt_5_PRIVATE_API 5.10.1 _ZTVN15QtWaylandClient17QWaylandClipboardE@Qt_5_PRIVATE_API 5.10.1 _ZTVN15QtWaylandClient17QWaylandDataOfferE@Qt_5_PRIVATE_API 5.10.1 _ZTVN15QtWaylandClient17QWaylandShmBufferE@Qt_5_PRIVATE_API 5.10.1 _ZTVN15QtWaylandClient17QWaylandShmWindowE@Qt_5_PRIVATE_API 5.10.1 _ZTVN15QtWaylandClient18QWaylandDataSourceE@Qt_5_PRIVATE_API 5.10.1 _ZTVN15QtWaylandClient18QWaylandSubSurfaceE@Qt_5_PRIVATE_API 5.10.1 - _ZTVN15QtWaylandClient18QWaylandXdgShellV6E@Qt_5_PRIVATE_API 5.10.1 - _ZTVN15QtWaylandClient18QWaylandXdgSurfaceE@Qt_5_PRIVATE_API 5.10.1 _ZTVN15QtWaylandClient19QWaylandInputDevice5TouchE@Qt_5_PRIVATE_API 5.10.1 _ZTVN15QtWaylandClient19QWaylandInputDevice7PointerE@Qt_5_PRIVATE_API 5.10.1 _ZTVN15QtWaylandClient19QWaylandInputDevice8KeyboardE@Qt_5_PRIVATE_API 5.10.1 @@ -1734,22 +1427,15 @@ _ZTVN15QtWaylandClient19QWaylandIntegrationE@Qt_5_PRIVATE_API 5.10.1 _ZTVN15QtWaylandClient20QWaylandServerBufferE@Qt_5_PRIVATE_API 5.10.1 _ZTVN15QtWaylandClient20QWaylandShellSurfaceE@Qt_5_PRIVATE_API 5.10.1 - _ZTVN15QtWaylandClient20QWaylandXdgSurfaceV65PopupE@Qt_5_PRIVATE_API 5.10.1 - _ZTVN15QtWaylandClient20QWaylandXdgSurfaceV68ToplevelE@Qt_5_PRIVATE_API 5.10.1 - _ZTVN15QtWaylandClient20QWaylandXdgSurfaceV6E@Qt_5_PRIVATE_API 5.10.1 _ZTVN15QtWaylandClient22QWaylandQtKeyExtensionE@Qt_5_PRIVATE_API 5.10.1 _ZTVN15QtWaylandClient22QWaylandTouchExtensionE@Qt_5_PRIVATE_API 5.10.1 - _ZTVN15QtWaylandClient22QWaylandWlShellSurfaceE@Qt_5_PRIVATE_API 5.10.1 _ZTVN15QtWaylandClient23QWaylandExtendedSurfaceE@Qt_5_PRIVATE_API 5.10.1 _ZTVN15QtWaylandClient23QWaylandNativeInterfaceE@Qt_5_PRIVATE_API 5.10.1 _ZTVN15QtWaylandClient23QWaylandShmBackingStoreE@Qt_5_PRIVATE_API 5.10.1 _ZTVN15QtWaylandClient24QWaylandDecorationPluginE@Qt_5_PRIVATE_API 5.10.1 _ZTVN15QtWaylandClient25QWaylandDataDeviceManagerE@Qt_5_PRIVATE_API 5.10.1 _ZTVN15QtWaylandClient26QWaylandAbstractDecorationE@Qt_5_PRIVATE_API 5.10.1 - _ZTVN15QtWaylandClient26QWaylandWlShellIntegrationE@Qt_5_PRIVATE_API 5.10.1 _ZTVN15QtWaylandClient27QWaylandHardwareIntegrationE@Qt_5_PRIVATE_API 5.10.1 - _ZTVN15QtWaylandClient27QWaylandXdgShellIntegrationE@Qt_5_PRIVATE_API 5.10.1 - _ZTVN15QtWaylandClient29QWaylandXdgShellV6IntegrationE@Qt_5_PRIVATE_API 5.10.1 _ZTVN15QtWaylandClient30QWaylandShellIntegrationPluginE@Qt_5_PRIVATE_API 5.10.1 _ZTVN15QtWaylandClient31QWaylandClientBufferIntegrationE@Qt_5_PRIVATE_API 5.10.1 _ZTVN15QtWaylandClient31QWaylandServerBufferIntegrationE@Qt_5_PRIVATE_API 5.10.1 @@ -1759,31 +1445,27 @@ _ZTVN15QtWaylandClient37QWaylandServerBufferIntegrationPluginE@Qt_5_PRIVATE_API 5.10.1 _ZTVN9QtWayland10wl_pointerE@Qt_5 5.10.1 _ZTVN9QtWayland10wl_surfaceE@Qt_5 5.10.1 + _ZTVN9QtWayland10zqt_key_v1E@Qt_5 5.12.2 _ZTVN9QtWayland11wl_callbackE@Qt_5 5.10.1 _ZTVN9QtWayland11wl_keyboardE@Qt_5 5.10.1 _ZTVN9QtWayland11wl_registryE@Qt_5 5.10.1 _ZTVN9QtWayland11wl_shm_poolE@Qt_5 5.10.1 - _ZTVN9QtWayland11xdg_surfaceE@Qt_5 5.10.1 _ZTVN9QtWayland13wl_compositorE@Qt_5 5.10.1 _ZTVN9QtWayland13wl_data_offerE@Qt_5 5.10.1 _ZTVN9QtWayland13wl_subsurfaceE@Qt_5 5.10.1 - _ZTVN9QtWayland13zxdg_popup_v6E@Qt_5 5.10.1 - _ZTVN9QtWayland13zxdg_shell_v6E@Qt_5 5.10.1 _ZTVN9QtWayland14wl_data_deviceE@Qt_5 5.10.1 _ZTVN9QtWayland14wl_data_sourceE@Qt_5 5.10.1 - _ZTVN9QtWayland15zxdg_surface_v6E@Qt_5 5.10.1 - _ZTVN9QtWayland16qt_key_extensionE@Qt_5 5.10.1 + _ZTVN9QtWayland14zxdg_output_v1E@Qt_5 5.12.2 _ZTVN9QtWayland16qt_server_bufferE@Qt_5 5.10.1 _ZTVN9QtWayland16qt_windowmanagerE@Qt_5 5.10.1 _ZTVN9QtWayland16wl_shell_surfaceE@Qt_5 5.10.1 _ZTVN9QtWayland16wl_subcompositorE@Qt_5 5.10.1 - _ZTVN9QtWayland16zxdg_toplevel_v6E@Qt_5 5.10.1 _ZTVN9QtWayland17zwp_text_input_v2E@Qt_5 5.10.1 _ZTVN9QtWayland18qt_touch_extensionE@Qt_5 5.10.1 - _ZTVN9QtWayland18zxdg_positioner_v6E@Qt_5 5.10.1 _ZTVN9QtWayland19qt_extended_surfaceE@Qt_5 5.10.1 _ZTVN9QtWayland20qt_surface_extensionE@Qt_5 5.10.1 _ZTVN9QtWayland22wl_data_device_managerE@Qt_5 5.10.1 + _ZTVN9QtWayland22zxdg_output_manager_v1E@Qt_5 5.12.2 _ZTVN9QtWayland23qt_hardware_integrationE@Qt_5 5.10.1 _ZTVN9QtWayland25zwp_text_input_manager_v2E@Qt_5 5.10.1 _ZTVN9QtWayland6wl_shmE@Qt_5 5.10.1 @@ -1793,8 +1475,6 @@ _ZTVN9QtWayland9wl_bufferE@Qt_5 5.10.1 _ZTVN9QtWayland9wl_outputE@Qt_5 5.10.1 _ZTVN9QtWayland9wl_regionE@Qt_5 5.10.1 - _ZTVN9QtWayland9xdg_popupE@Qt_5 5.10.1 - _ZTVN9QtWayland9xdg_shellE@Qt_5 5.10.1 (c++)"non-virtual thunk to QtWaylandClient::QWaylandDataSource::data_source_cancelled()@Qt_5_PRIVATE_API" 5.10.1 (c++)"non-virtual thunk to QtWaylandClient::QWaylandDataSource::data_source_send(QString const&, int)@Qt_5_PRIVATE_API" 5.10.1 (c++)"non-virtual thunk to QtWaylandClient::QWaylandDataSource::data_source_target(QString const&)@Qt_5_PRIVATE_API" 5.10.1 @@ -1815,11 +1495,15 @@ (c++)"non-virtual thunk to QtWaylandClient::QWaylandScreen::output_geometry(int, int, int, int, int, QString const&, QString const&, int)@Qt_5_PRIVATE_API" 5.10.1 (c++)"non-virtual thunk to QtWaylandClient::QWaylandScreen::output_mode(unsigned int, int, int, int)@Qt_5_PRIVATE_API" 5.10.1 (c++)"non-virtual thunk to QtWaylandClient::QWaylandScreen::output_scale(int)@Qt_5_PRIVATE_API" 5.10.1 + (c++)"non-virtual thunk to QtWaylandClient::QWaylandScreen::zxdg_output_v1_done()@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QtWaylandClient::QWaylandScreen::zxdg_output_v1_logical_position(int, int)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QtWaylandClient::QWaylandScreen::zxdg_output_v1_logical_size(int, int)@Qt_5_PRIVATE_API" 5.12.2 (c++)"non-virtual thunk to QtWaylandClient::QWaylandScreen::~QWaylandScreen()@Qt_5_PRIVATE_API" 5.10.1 (c++)"non-virtual thunk to QtWaylandClient::QWaylandShmWindow::~QWaylandShmWindow()@Qt_5_PRIVATE_API" 5.10.1 (c++)"non-virtual thunk to QtWaylandClient::QWaylandWindow::devicePixelRatio() const@Qt_5_PRIVATE_API" 5.10.1 (c++)"non-virtual thunk to QtWaylandClient::QWaylandWindow::frameMargins() const@Qt_5_PRIVATE_API" 5.10.1 (c++)"non-virtual thunk to QtWaylandClient::QWaylandWindow::handleContentOrientationChange(Qt::ScreenOrientation)@Qt_5_PRIVATE_API" 5.10.1 + (c++)"non-virtual thunk to QtWaylandClient::QWaylandWindow::isActive() const@Qt_5_PRIVATE_API" 5.12.2 (c++)"non-virtual thunk to QtWaylandClient::QWaylandWindow::isExposed() const@Qt_5_PRIVATE_API" 5.10.1 (c++)"non-virtual thunk to QtWaylandClient::QWaylandWindow::lower()@Qt_5_PRIVATE_API" 5.10.1 (c++)"non-virtual thunk to QtWaylandClient::QWaylandWindow::raise()@Qt_5_PRIVATE_API" 5.10.1 @@ -1844,31 +1528,14 @@ (c++)"non-virtual thunk to QtWaylandClient::QWaylandWindowManagerIntegration::windowmanager_hints(int)@Qt_5_PRIVATE_API" 5.10.1 (c++)"non-virtual thunk to QtWaylandClient::QWaylandWindowManagerIntegration::windowmanager_quit()@Qt_5_PRIVATE_API" 5.10.1 (c++)"non-virtual thunk to QtWaylandClient::QWaylandWindowManagerIntegration::~QWaylandWindowManagerIntegration()@Qt_5_PRIVATE_API" 5.10.1 - (c++)"non-virtual thunk to QtWaylandClient::QWaylandWlShellSurface::shell_surface_configure(unsigned int, int, int)@Qt_5_PRIVATE_API" 5.10.1 - (c++)"non-virtual thunk to QtWaylandClient::QWaylandWlShellSurface::shell_surface_ping(unsigned int)@Qt_5_PRIVATE_API" 5.10.1 - (c++)"non-virtual thunk to QtWaylandClient::QWaylandWlShellSurface::shell_surface_popup_done()@Qt_5_PRIVATE_API" 5.10.1 - (c++)"non-virtual thunk to QtWaylandClient::QWaylandWlShellSurface::~QWaylandWlShellSurface()@Qt_5_PRIVATE_API" 5.10.1 - (c++)"non-virtual thunk to QtWaylandClient::QWaylandXdgPopup::xdg_popup_popup_done()@Qt_5_PRIVATE_API" 5.10.1 - (c++)"non-virtual thunk to QtWaylandClient::QWaylandXdgPopup::~QWaylandXdgPopup()@Qt_5_PRIVATE_API" 5.10.1 - (c++)"non-virtual thunk to QtWaylandClient::QWaylandXdgSurface::xdg_surface_close()@Qt_5_PRIVATE_API" 5.10.1 - (c++)"non-virtual thunk to QtWaylandClient::QWaylandXdgSurface::xdg_surface_configure(int, int, wl_array*, unsigned int)@Qt_5_PRIVATE_API" 5.10.1 - (c++)"non-virtual thunk to QtWaylandClient::QWaylandXdgSurface::~QWaylandXdgSurface()@Qt_5_PRIVATE_API" 5.10.1 - (c++)"non-virtual thunk to QtWaylandClient::QWaylandXdgSurfaceV6::zxdg_surface_v6_configure(unsigned int)@Qt_5_PRIVATE_API" 5.10.1 - (c++)"non-virtual thunk to QtWaylandClient::QWaylandXdgSurfaceV6::~QWaylandXdgSurfaceV6()@Qt_5_PRIVATE_API" 5.10.1 qt_extended_surface_interface@Qt_5 5.10.1 qt_hardware_integration_interface@Qt_5 5.10.1 - qt_key_extension_interface@Qt_5 5.10.1 qt_server_buffer_interface@Qt_5 5.10.1 qt_surface_extension_interface@Qt_5 5.10.1 qt_touch_extension_interface@Qt_5 5.10.1 qt_windowmanager_interface@Qt_5 5.10.1 - xdg_popup_interface@Qt_5 5.10.1 - xdg_shell_interface@Qt_5 5.10.1 - xdg_surface_interface@Qt_5 5.10.1 + zqt_key_v1_interface@Qt_5 5.12.2 zwp_text_input_manager_v2_interface@Qt_5 5.10.1 zwp_text_input_v2_interface@Qt_5 5.10.1 - zxdg_popup_v6_interface@Qt_5 5.10.1 - zxdg_positioner_v6_interface@Qt_5 5.10.1 - zxdg_shell_v6_interface@Qt_5 5.10.1 - zxdg_surface_v6_interface@Qt_5 5.10.1 - zxdg_toplevel_v6_interface@Qt_5 5.10.1 + zxdg_output_manager_v1_interface@Qt_5 5.12.2 + zxdg_output_v1_interface@Qt_5 5.12.2 diff -Nru qtwayland-opensource-src-5.11.3/debian/libqt5waylandcompositor5-dev.install qtwayland-opensource-src-5.12.2/debian/libqt5waylandcompositor5-dev.install --- qtwayland-opensource-src-5.11.3/debian/libqt5waylandcompositor5-dev.install 2018-06-29 14:40:46.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/debian/libqt5waylandcompositor5-dev.install 2019-03-24 16:59:03.000000000 +0000 @@ -36,12 +36,17 @@ usr/include/*/qt5/QtWaylandCompositor/QWaylandView usr/include/*/qt5/QtWaylandCompositor/QWaylandWlShell usr/include/*/qt5/QtWaylandCompositor/QWaylandWlShellSurface +usr/include/*/qt5/QtWaylandCompositor/QWaylandXdgDecorationManagerV1 +usr/include/*/qt5/QtWaylandCompositor/QWaylandXdgPopup usr/include/*/qt5/QtWaylandCompositor/QWaylandXdgPopupV5 usr/include/*/qt5/QtWaylandCompositor/QWaylandXdgPopupV6 +usr/include/*/qt5/QtWaylandCompositor/QWaylandXdgShell usr/include/*/qt5/QtWaylandCompositor/QWaylandXdgShellV5 usr/include/*/qt5/QtWaylandCompositor/QWaylandXdgShellV6 +usr/include/*/qt5/QtWaylandCompositor/QWaylandXdgSurface usr/include/*/qt5/QtWaylandCompositor/QWaylandXdgSurfaceV5 usr/include/*/qt5/QtWaylandCompositor/QWaylandXdgSurfaceV6 +usr/include/*/qt5/QtWaylandCompositor/QWaylandXdgToplevel usr/include/*/qt5/QtWaylandCompositor/QWaylandXdgToplevelV6 usr/include/*/qt5/QtWaylandCompositor/QtWaylandCompositor usr/include/*/qt5/QtWaylandCompositor/QtWaylandCompositorDepends @@ -65,6 +70,7 @@ usr/include/*/qt5/QtWaylandCompositor/qwaylandoutputmode.h usr/include/*/qt5/QtWaylandCompositor/qwaylandpointer.h usr/include/*/qt5/QtWaylandCompositor/qwaylandqtwindowmanager.h +usr/include/*/qt5/QtWaylandCompositor/qwaylandquickchildren.h usr/include/*/qt5/QtWaylandCompositor/qwaylandquickcompositor.h usr/include/*/qt5/QtWaylandCompositor/qwaylandquickextension.h usr/include/*/qt5/QtWaylandCompositor/qwaylandquickitem.h @@ -82,6 +88,8 @@ usr/include/*/qt5/QtWaylandCompositor/qwaylandtouch.h usr/include/*/qt5/QtWaylandCompositor/qwaylandview.h usr/include/*/qt5/QtWaylandCompositor/qwaylandwlshell.h +usr/include/*/qt5/QtWaylandCompositor/qwaylandxdgdecorationv1.h +usr/include/*/qt5/QtWaylandCompositor/qwaylandxdgshell.h usr/include/*/qt5/QtWaylandCompositor/qwaylandxdgshellv5.h usr/include/*/qt5/QtWaylandCompositor/qwaylandxdgshellv6.h usr/lib/*/cmake/Qt5Gui/Qt5Gui_QWaylandEglPlatformIntegrationPlugin.cmake diff -Nru qtwayland-opensource-src-5.11.3/debian/libqt5waylandcompositor5.symbols qtwayland-opensource-src-5.12.2/debian/libqt5waylandcompositor5.symbols --- qtwayland-opensource-src-5.11.3/debian/libqt5waylandcompositor5.symbols 2018-12-22 18:30:17.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/debian/libqt5waylandcompositor5.symbols 2019-03-24 16:59:03.000000000 +0000 @@ -1,8 +1,9 @@ -# SymbolsHelper-Confirmed: 5.11.1 amd64 +# SymbolsHelper-Confirmed: 5.12.2 amd64 libQt5WaylandCompositor.so.5 libqt5waylandcompositor5 #MINVER# Qt_5.0@Qt_5.0 5.7.0 Qt_5.10@Qt_5.10 5.10.1 Qt_5.11@Qt_5.11 5.11.1 + Qt_5.12@Qt_5.12 5.12.0 Qt_5.1@Qt_5.1 5.7.0 Qt_5.2@Qt_5.2 5.7.0 Qt_5.3@Qt_5.3 5.7.0 @@ -14,6 +15,8 @@ Qt_5.9@Qt_5.9 5.9.0~rc Qt_5@Qt_5 5.7.0 Qt_5_PRIVATE_API@Qt_5_PRIVATE_API 5.7.0 + _Z20qLcWaylandCompositorv@Qt_5 5.12.2 + _Z39qLcWaylandCompositorHardwareIntegrationv@Qt_5 5.12.2 _ZN12QWaylandDrag10cancelDragEv@Qt_5 5.7.0 _ZN12QWaylandDrag11dragStartedEv@Qt_5 5.7.0 _ZN12QWaylandDrag11iconChangedEv@Qt_5 5.7.0 @@ -27,6 +30,7 @@ _ZN12QWaylandSeat10initializeEv@Qt_5 5.9.0~rc _ZN12QWaylandSeat11qt_metacallEN11QMetaObject4CallEiPPv@Qt_5 5.9.0~rc _ZN12QWaylandSeat11qt_metacastEPKc@Qt_5 5.9.0~rc + _ZN12QWaylandSeat12sendKeyEventEib@Qt_5 5.12.2 _ZN12QWaylandSeat13setMouseFocusEP12QWaylandView@Qt_5 5.9.0~rc _ZN12QWaylandSeat16fromSeatResourceEP11wl_resource@Qt_5 5.9.0~rc _ZN12QWaylandSeat16sendFullKeyEventEP9QKeyEvent@Qt_5 5.9.0~rc @@ -150,11 +154,9 @@ _ZN14QWaylandOutput12surfaceLeaveEP15QWaylandSurface@Qt_5 5.7.0 _ZN14QWaylandOutput13setCompositorEP18QWaylandCompositor@Qt_5 5.7.0 _ZN14QWaylandOutput13windowChangedEv@Qt_5 5.7.0 - _ZN14QWaylandOutput14handleSetWidthEi@Qt_5 5.9.0~rc _ZN14QWaylandOutput14setCurrentModeERK18QWaylandOutputMode@Qt_5 5.9.0~rc _ZN14QWaylandOutput14setScaleFactorEi@Qt_5 5.7.0 _ZN14QWaylandOutput15geometryChangedEv@Qt_5 5.7.0 - _ZN14QWaylandOutput15handleSetHeightEi@Qt_5 5.9.0~rc _ZN14QWaylandOutput15positionChangedEv@Qt_5 5.7.0 _ZN14QWaylandOutput15setManufacturerERK7QString@Qt_5 5.7.0 _ZN14QWaylandOutput15setPhysicalSizeERK5QSize@Qt_5 5.7.0 @@ -170,7 +172,6 @@ _ZN14QWaylandOutput19physicalSizeChangedEv@Qt_5 5.7.0 _ZN14QWaylandOutput20setAvailableGeometryERK5QRect@Qt_5 5.7.0 _ZN14QWaylandOutput20setSizeFollowsWindowEb@Qt_5 5.7.0 - _ZN14QWaylandOutput21handleWindowDestroyedEv@Qt_5 5.7.0 _ZN14QWaylandOutput24availableGeometryChangedEv@Qt_5 5.7.0 _ZN14QWaylandOutput24sizeFollowsWindowChangedEv@Qt_5 5.7.0 _ZN14QWaylandOutput30physicalSizeFollowsSizeChangedEv@Qt_5 5.7.0 @@ -345,6 +346,34 @@ _ZN15QtWaylandServer10wl_surfaceD0Ev@Qt_5 5.7.0 _ZN15QtWaylandServer10wl_surfaceD1Ev@Qt_5 5.7.0 _ZN15QtWaylandServer10wl_surfaceD2Ev@Qt_5 5.7.0 + _ZN15QtWaylandServer10zqt_key_v112destroy_funcEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer10zqt_key_v119zqt_key_v1_allocateEv@Qt_5 5.12.2 + _ZN15QtWaylandServer10zqt_key_v120display_destroy_funcEP11wl_listenerPv@Qt_5 5.12.2 + _ZN15QtWaylandServer10zqt_key_v124zqt_key_v1_bind_resourceEPNS0_8ResourceE@Qt_5 5.12.2 + _ZN15QtWaylandServer10zqt_key_v127zqt_key_v1_destroy_resourceEPNS0_8ResourceE@Qt_5 5.12.2 + _ZN15QtWaylandServer10zqt_key_v13addEP9wl_clienti@Qt_5 5.12.2 + _ZN15QtWaylandServer10zqt_key_v13addEP9wl_clientii@Qt_5 5.12.2 + _ZN15QtWaylandServer10zqt_key_v14bindEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer10zqt_key_v14bindEP9wl_clientji@Qt_5 5.12.2 + _ZN15QtWaylandServer10zqt_key_v14initEP10wl_displayi@Qt_5 5.12.2 + _ZN15QtWaylandServer10zqt_key_v14initEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer10zqt_key_v14initEP9wl_clientii@Qt_5 5.12.2 + _ZN15QtWaylandServer10zqt_key_v18Resource12fromResourceEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer10zqt_key_v18send_keyEP11wl_resourceS2_jjjjjjjRK7QStringjj@Qt_5 5.12.2 + _ZN15QtWaylandServer10zqt_key_v18send_keyEP11wl_resourcejjjjjjjRK7QStringjj@Qt_5 5.12.2 + _ZN15QtWaylandServer10zqt_key_v19bind_funcEP9wl_clientPvjj@Qt_5 5.12.2 + _ZN15QtWaylandServer10zqt_key_v19interfaceEv@Qt_5 5.12.2 + _ZN15QtWaylandServer10zqt_key_v1C1EP10wl_displayi@Qt_5 5.12.2 + _ZN15QtWaylandServer10zqt_key_v1C1EP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer10zqt_key_v1C1EP9wl_clientii@Qt_5 5.12.2 + _ZN15QtWaylandServer10zqt_key_v1C1Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer10zqt_key_v1C2EP10wl_displayi@Qt_5 5.12.2 + _ZN15QtWaylandServer10zqt_key_v1C2EP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer10zqt_key_v1C2EP9wl_clientii@Qt_5 5.12.2 + _ZN15QtWaylandServer10zqt_key_v1C2Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer10zqt_key_v1D0Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer10zqt_key_v1D1Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer10zqt_key_v1D2Ev@Qt_5 5.12.2 _ZN15QtWaylandServer11ivi_surface12destroy_funcEP11wl_resource@Qt_5 5.9.0~rc _ZN15QtWaylandServer11ivi_surface14handle_destroyEP9wl_clientP11wl_resource@Qt_5 5.9.0~rc _ZN15QtWaylandServer11ivi_surface14send_configureEP11wl_resourceii@Qt_5 5.9.0~rc @@ -478,43 +507,23 @@ _ZN15QtWaylandServer11wl_shm_poolD0Ev@Qt_5 5.7.0 _ZN15QtWaylandServer11wl_shm_poolD1Ev@Qt_5 5.7.0 _ZN15QtWaylandServer11wl_shm_poolD2Ev@Qt_5 5.7.0 - _ZN15QtWaylandServer11xdg_surface10send_closeEP11wl_resource@Qt_5 5.7.0 - _ZN15QtWaylandServer11xdg_surface10send_closeEv@Qt_5 5.7.0 - _ZN15QtWaylandServer11xdg_surface11handle_moveEP9wl_clientP11wl_resourceS4_j@Qt_5 5.7.0 _ZN15QtWaylandServer11xdg_surface12destroy_funcEP11wl_resource@Qt_5 5.7.0 - _ZN15QtWaylandServer11xdg_surface13handle_resizeEP9wl_clientP11wl_resourceS4_jj@Qt_5 5.7.0 _ZN15QtWaylandServer11xdg_surface14handle_destroyEP9wl_clientP11wl_resource@Qt_5 5.7.0 - _ZN15QtWaylandServer11xdg_surface14send_configureEP11wl_resourceiiRK10QByteArrayj@Qt_5 5.7.0 - _ZN15QtWaylandServer11xdg_surface14send_configureEiiRK10QByteArrayj@Qt_5 5.7.0 - _ZN15QtWaylandServer11xdg_surface16handle_set_titleEP9wl_clientP11wl_resourcePKc@Qt_5 5.7.0 - _ZN15QtWaylandServer11xdg_surface16xdg_surface_moveEPNS0_8ResourceEP11wl_resourcej@Qt_5 5.7.0 - _ZN15QtWaylandServer11xdg_surface17handle_set_app_idEP9wl_clientP11wl_resourcePKc@Qt_5 5.7.0 - _ZN15QtWaylandServer11xdg_surface17handle_set_parentEP9wl_clientP11wl_resourceS4_@Qt_5 5.7.0 - _ZN15QtWaylandServer11xdg_surface18xdg_surface_resizeEPNS0_8ResourceEP11wl_resourcejj@Qt_5 5.7.0 + _ZN15QtWaylandServer11xdg_surface14send_configureEP11wl_resourcej@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_surface14send_configureEj@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_surface16handle_get_popupEP9wl_clientP11wl_resourcejS4_S4_@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_surface19handle_get_toplevelEP9wl_clientP11wl_resourcej@Qt_5 5.12.2 _ZN15QtWaylandServer11xdg_surface19xdg_surface_destroyEPNS0_8ResourceE@Qt_5 5.7.0 _ZN15QtWaylandServer11xdg_surface20display_destroy_funcEP11wl_listenerPv@Qt_5 5.11.1 _ZN15QtWaylandServer11xdg_surface20handle_ack_configureEP9wl_clientP11wl_resourcej@Qt_5 5.7.0 - _ZN15QtWaylandServer11xdg_surface20handle_set_maximizedEP9wl_clientP11wl_resource@Qt_5 5.7.0 - _ZN15QtWaylandServer11xdg_surface20handle_set_minimizedEP9wl_clientP11wl_resource@Qt_5 5.7.0 _ZN15QtWaylandServer11xdg_surface20xdg_surface_allocateEv@Qt_5 5.7.0 - _ZN15QtWaylandServer11xdg_surface21handle_set_fullscreenEP9wl_clientP11wl_resourceS4_@Qt_5 5.7.0 - _ZN15QtWaylandServer11xdg_surface21xdg_surface_set_titleEPNS0_8ResourceERK7QString@Qt_5 5.7.0 - _ZN15QtWaylandServer11xdg_surface22handle_unset_maximizedEP9wl_clientP11wl_resource@Qt_5 5.7.0 - _ZN15QtWaylandServer11xdg_surface22xdg_surface_set_app_idEPNS0_8ResourceERK7QString@Qt_5 5.7.0 - _ZN15QtWaylandServer11xdg_surface22xdg_surface_set_parentEPNS0_8ResourceEP11wl_resource@Qt_5 5.7.0 - _ZN15QtWaylandServer11xdg_surface23handle_show_window_menuEP9wl_clientP11wl_resourceS4_jii@Qt_5 5.7.0 - _ZN15QtWaylandServer11xdg_surface23handle_unset_fullscreenEP9wl_clientP11wl_resource@Qt_5 5.7.0 + _ZN15QtWaylandServer11xdg_surface21xdg_surface_get_popupEPNS0_8ResourceEjP11wl_resourceS4_@Qt_5 5.12.2 _ZN15QtWaylandServer11xdg_surface23m_xdg_surface_interfaceE@Qt_5 5.7.0 + _ZN15QtWaylandServer11xdg_surface24xdg_surface_get_toplevelEPNS0_8ResourceEj@Qt_5 5.12.2 _ZN15QtWaylandServer11xdg_surface25xdg_surface_ack_configureEPNS0_8ResourceEj@Qt_5 5.7.0 _ZN15QtWaylandServer11xdg_surface25xdg_surface_bind_resourceEPNS0_8ResourceE@Qt_5 5.7.0 - _ZN15QtWaylandServer11xdg_surface25xdg_surface_set_maximizedEPNS0_8ResourceE@Qt_5 5.7.0 - _ZN15QtWaylandServer11xdg_surface25xdg_surface_set_minimizedEPNS0_8ResourceE@Qt_5 5.7.0 _ZN15QtWaylandServer11xdg_surface26handle_set_window_geometryEP9wl_clientP11wl_resourceiiii@Qt_5 5.7.0 - _ZN15QtWaylandServer11xdg_surface26xdg_surface_set_fullscreenEPNS0_8ResourceEP11wl_resource@Qt_5 5.7.0 - _ZN15QtWaylandServer11xdg_surface27xdg_surface_unset_maximizedEPNS0_8ResourceE@Qt_5 5.7.0 _ZN15QtWaylandServer11xdg_surface28xdg_surface_destroy_resourceEPNS0_8ResourceE@Qt_5 5.7.0 - _ZN15QtWaylandServer11xdg_surface28xdg_surface_show_window_menuEPNS0_8ResourceEP11wl_resourcejii@Qt_5 5.7.0 - _ZN15QtWaylandServer11xdg_surface28xdg_surface_unset_fullscreenEPNS0_8ResourceE@Qt_5 5.7.0 _ZN15QtWaylandServer11xdg_surface31xdg_surface_set_window_geometryEPNS0_8ResourceEiiii@Qt_5 5.7.0 _ZN15QtWaylandServer11xdg_surface3addEP9wl_clienti@Qt_5 5.7.0 _ZN15QtWaylandServer11xdg_surface3addEP9wl_clientii@Qt_5 5.7.0 @@ -537,6 +546,172 @@ _ZN15QtWaylandServer11xdg_surfaceD0Ev@Qt_5 5.7.0 _ZN15QtWaylandServer11xdg_surfaceD1Ev@Qt_5 5.7.0 _ZN15QtWaylandServer11xdg_surfaceD2Ev@Qt_5 5.7.0 + _ZN15QtWaylandServer11xdg_wm_base11handle_pongEP9wl_clientP11wl_resourcej@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_wm_base12destroy_funcEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_wm_base14handle_destroyEP9wl_clientP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_wm_base16xdg_wm_base_pongEPNS0_8ResourceEj@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_wm_base19xdg_wm_base_destroyEPNS0_8ResourceE@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_wm_base20display_destroy_funcEP11wl_listenerPv@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_wm_base20xdg_wm_base_allocateEv@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_wm_base22handle_get_xdg_surfaceEP9wl_clientP11wl_resourcejS4_@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_wm_base23m_xdg_wm_base_interfaceE@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_wm_base24handle_create_positionerEP9wl_clientP11wl_resourcej@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_wm_base25xdg_wm_base_bind_resourceEPNS0_8ResourceE@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_wm_base27xdg_wm_base_get_xdg_surfaceEPNS0_8ResourceEjP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_wm_base28xdg_wm_base_destroy_resourceEPNS0_8ResourceE@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_wm_base29xdg_wm_base_create_positionerEPNS0_8ResourceEj@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_wm_base3addEP9wl_clienti@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_wm_base3addEP9wl_clientii@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_wm_base4bindEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_wm_base4bindEP9wl_clientji@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_wm_base4initEP10wl_displayi@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_wm_base4initEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_wm_base4initEP9wl_clientii@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_wm_base8Resource12fromResourceEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_wm_base9bind_funcEP9wl_clientPvjj@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_wm_base9interfaceEv@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_wm_base9send_pingEP11wl_resourcej@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_wm_base9send_pingEj@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_wm_baseC1EP10wl_displayi@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_wm_baseC1EP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_wm_baseC1EP9wl_clientii@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_wm_baseC1Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_wm_baseC2EP10wl_displayi@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_wm_baseC2EP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_wm_baseC2EP9wl_clientii@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_wm_baseC2Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_wm_baseD0Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_wm_baseD1Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer11xdg_wm_baseD2Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_popup_v512destroy_funcEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_popup_v514handle_destroyEP9wl_clientP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_popup_v515send_popup_doneEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_popup_v515send_popup_doneEv@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_popup_v517xdg_popup_destroyEPNS0_8ResourceE@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_popup_v518xdg_popup_allocateEv@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_popup_v520display_destroy_funcEP11wl_listenerPv@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_popup_v521m_xdg_popup_interfaceE@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_popup_v523xdg_popup_bind_resourceEPNS0_8ResourceE@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_popup_v526xdg_popup_destroy_resourceEPNS0_8ResourceE@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_popup_v53addEP9wl_clienti@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_popup_v53addEP9wl_clientii@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_popup_v54bindEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_popup_v54bindEP9wl_clientji@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_popup_v54initEP10wl_displayi@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_popup_v54initEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_popup_v54initEP9wl_clientii@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_popup_v58Resource12fromResourceEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_popup_v59bind_funcEP9wl_clientPvjj@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_popup_v59interfaceEv@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_popup_v5C1EP10wl_displayi@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_popup_v5C1EP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_popup_v5C1EP9wl_clientii@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_popup_v5C1Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_popup_v5C2EP10wl_displayi@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_popup_v5C2EP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_popup_v5C2EP9wl_clientii@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_popup_v5C2Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_popup_v5D0Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_popup_v5D1Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_popup_v5D2Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v511handle_pongEP9wl_clientP11wl_resourcej@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v512destroy_funcEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v514handle_destroyEP9wl_clientP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v514xdg_shell_pongEPNS0_8ResourceEj@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v517xdg_shell_destroyEPNS0_8ResourceE@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v518xdg_shell_allocateEv@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v520display_destroy_funcEP11wl_listenerPv@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v520handle_get_xdg_popupEP9wl_clientP11wl_resourcejS4_S4_S4_jii@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v521m_xdg_shell_interfaceE@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v522handle_get_xdg_surfaceEP9wl_clientP11wl_resourcejS4_@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v523xdg_shell_bind_resourceEPNS0_8ResourceE@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v523xdg_shell_get_xdg_popupEPNS0_8ResourceEjP11wl_resourceS4_S4_jii@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v525xdg_shell_get_xdg_surfaceEPNS0_8ResourceEjP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v526xdg_shell_destroy_resourceEPNS0_8ResourceE@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v527handle_use_unstable_versionEP9wl_clientP11wl_resourcei@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v530xdg_shell_use_unstable_versionEPNS0_8ResourceEi@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v53addEP9wl_clienti@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v53addEP9wl_clientii@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v54bindEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v54bindEP9wl_clientji@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v54initEP10wl_displayi@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v54initEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v54initEP9wl_clientii@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v58Resource12fromResourceEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v59bind_funcEP9wl_clientPvjj@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v59interfaceEv@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v59send_pingEP11wl_resourcej@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v59send_pingEj@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v5C1EP10wl_displayi@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v5C1EP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v5C1EP9wl_clientii@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v5C1Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v5C2EP10wl_displayi@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v5C2EP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v5C2EP9wl_clientii@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v5C2Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v5D0Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v5D1Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_shell_v5D2Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel10send_closeEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel10send_closeEv@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel11handle_moveEP9wl_clientP11wl_resourceS4_j@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel12destroy_funcEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel13handle_resizeEP9wl_clientP11wl_resourceS4_jj@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel14handle_destroyEP9wl_clientP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel14send_configureEP11wl_resourceiiRK10QByteArray@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel14send_configureEiiRK10QByteArray@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel16handle_set_titleEP9wl_clientP11wl_resourcePKc@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel17handle_set_app_idEP9wl_clientP11wl_resourcePKc@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel17handle_set_parentEP9wl_clientP11wl_resourceS4_@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel17xdg_toplevel_moveEPNS0_8ResourceEP11wl_resourcej@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel19handle_set_max_sizeEP9wl_clientP11wl_resourceii@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel19handle_set_min_sizeEP9wl_clientP11wl_resourceii@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel19xdg_toplevel_resizeEPNS0_8ResourceEP11wl_resourcejj@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel20display_destroy_funcEP11wl_listenerPv@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel20handle_set_maximizedEP9wl_clientP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel20handle_set_minimizedEP9wl_clientP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel20xdg_toplevel_destroyEPNS0_8ResourceE@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel21handle_set_fullscreenEP9wl_clientP11wl_resourceS4_@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel21xdg_toplevel_allocateEv@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel22handle_unset_maximizedEP9wl_clientP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel22xdg_toplevel_set_titleEPNS0_8ResourceERK7QString@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel23handle_show_window_menuEP9wl_clientP11wl_resourceS4_jii@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel23handle_unset_fullscreenEP9wl_clientP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel23xdg_toplevel_set_app_idEPNS0_8ResourceERK7QString@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel23xdg_toplevel_set_parentEPNS0_8ResourceEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel24m_xdg_toplevel_interfaceE@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel25xdg_toplevel_set_max_sizeEPNS0_8ResourceEii@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel25xdg_toplevel_set_min_sizeEPNS0_8ResourceEii@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel26xdg_toplevel_bind_resourceEPNS0_8ResourceE@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel26xdg_toplevel_set_maximizedEPNS0_8ResourceE@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel26xdg_toplevel_set_minimizedEPNS0_8ResourceE@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel27xdg_toplevel_set_fullscreenEPNS0_8ResourceEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel28xdg_toplevel_unset_maximizedEPNS0_8ResourceE@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel29xdg_toplevel_destroy_resourceEPNS0_8ResourceE@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel29xdg_toplevel_show_window_menuEPNS0_8ResourceEP11wl_resourcejii@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel29xdg_toplevel_unset_fullscreenEPNS0_8ResourceE@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel3addEP9wl_clienti@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel3addEP9wl_clientii@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel4bindEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel4bindEP9wl_clientji@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel4initEP10wl_displayi@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel4initEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel4initEP9wl_clientii@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel8Resource12fromResourceEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel9bind_funcEP9wl_clientPvjj@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevel9interfaceEv@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevelC1EP10wl_displayi@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevelC1EP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevelC1EP9wl_clientii@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevelC1Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevelC2EP10wl_displayi@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevelC2EP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevelC2EP9wl_clientii@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevelC2Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevelD0Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevelD1Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer12xdg_toplevelD2Ev@Qt_5 5.12.2 _ZN15QtWaylandServer13wl_compositor12destroy_funcEP11wl_resource@Qt_5 5.7.0 _ZN15QtWaylandServer13wl_compositor19compositor_allocateEv@Qt_5 5.7.0 _ZN15QtWaylandServer13wl_compositor20display_destroy_funcEP11wl_listenerPv@Qt_5 5.11.1 @@ -794,6 +969,106 @@ _ZN15QtWaylandServer14wl_data_sourceD0Ev@Qt_5 5.7.0 _ZN15QtWaylandServer14wl_data_sourceD1Ev@Qt_5 5.7.0 _ZN15QtWaylandServer14wl_data_sourceD2Ev@Qt_5 5.7.0 + _ZN15QtWaylandServer14xdg_positioner12destroy_funcEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positioner14handle_destroyEP9wl_clientP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positioner15handle_set_sizeEP9wl_clientP11wl_resourceii@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positioner17handle_set_anchorEP9wl_clientP11wl_resourcej@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positioner17handle_set_offsetEP9wl_clientP11wl_resourceii@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positioner18handle_set_gravityEP9wl_clientP11wl_resourcej@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positioner20display_destroy_funcEP11wl_listenerPv@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positioner22handle_set_anchor_rectEP9wl_clientP11wl_resourceiiii@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positioner22xdg_positioner_destroyEPNS0_8ResourceE@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positioner23xdg_positioner_allocateEv@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positioner23xdg_positioner_set_sizeEPNS0_8ResourceEii@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positioner25xdg_positioner_set_anchorEPNS0_8ResourceEj@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positioner25xdg_positioner_set_offsetEPNS0_8ResourceEii@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positioner26m_xdg_positioner_interfaceE@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positioner26xdg_positioner_set_gravityEPNS0_8ResourceEj@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positioner28xdg_positioner_bind_resourceEPNS0_8ResourceE@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positioner30xdg_positioner_set_anchor_rectEPNS0_8ResourceEiiii@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positioner31xdg_positioner_destroy_resourceEPNS0_8ResourceE@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positioner32handle_set_constraint_adjustmentEP9wl_clientP11wl_resourcej@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positioner3addEP9wl_clienti@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positioner3addEP9wl_clientii@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positioner40xdg_positioner_set_constraint_adjustmentEPNS0_8ResourceEj@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positioner4bindEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positioner4bindEP9wl_clientji@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positioner4initEP10wl_displayi@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positioner4initEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positioner4initEP9wl_clientii@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positioner8Resource12fromResourceEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positioner9bind_funcEP9wl_clientPvjj@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positioner9interfaceEv@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positionerC1EP10wl_displayi@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positionerC1EP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positionerC1EP9wl_clientii@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positionerC1Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positionerC2EP10wl_displayi@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positionerC2EP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positionerC2EP9wl_clientii@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positionerC2Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positionerD0Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positionerD1Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_positionerD2Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v510send_closeEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v510send_closeEv@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v511handle_moveEP9wl_clientP11wl_resourceS4_j@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v512destroy_funcEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v513handle_resizeEP9wl_clientP11wl_resourceS4_jj@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v514handle_destroyEP9wl_clientP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v514send_configureEP11wl_resourceiiRK10QByteArrayj@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v514send_configureEiiRK10QByteArrayj@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v516handle_set_titleEP9wl_clientP11wl_resourcePKc@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v516xdg_surface_moveEPNS0_8ResourceEP11wl_resourcej@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v517handle_set_app_idEP9wl_clientP11wl_resourcePKc@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v517handle_set_parentEP9wl_clientP11wl_resourceS4_@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v518xdg_surface_resizeEPNS0_8ResourceEP11wl_resourcejj@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v519xdg_surface_destroyEPNS0_8ResourceE@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v520display_destroy_funcEP11wl_listenerPv@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v520handle_ack_configureEP9wl_clientP11wl_resourcej@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v520handle_set_maximizedEP9wl_clientP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v520handle_set_minimizedEP9wl_clientP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v520xdg_surface_allocateEv@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v521handle_set_fullscreenEP9wl_clientP11wl_resourceS4_@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v521xdg_surface_set_titleEPNS0_8ResourceERK7QString@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v522handle_unset_maximizedEP9wl_clientP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v522xdg_surface_set_app_idEPNS0_8ResourceERK7QString@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v522xdg_surface_set_parentEPNS0_8ResourceEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v523handle_show_window_menuEP9wl_clientP11wl_resourceS4_jii@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v523handle_unset_fullscreenEP9wl_clientP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v523m_xdg_surface_interfaceE@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v525xdg_surface_ack_configureEPNS0_8ResourceEj@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v525xdg_surface_bind_resourceEPNS0_8ResourceE@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v525xdg_surface_set_maximizedEPNS0_8ResourceE@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v525xdg_surface_set_minimizedEPNS0_8ResourceE@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v526handle_set_window_geometryEP9wl_clientP11wl_resourceiiii@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v526xdg_surface_set_fullscreenEPNS0_8ResourceEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v527xdg_surface_unset_maximizedEPNS0_8ResourceE@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v528xdg_surface_destroy_resourceEPNS0_8ResourceE@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v528xdg_surface_show_window_menuEPNS0_8ResourceEP11wl_resourcejii@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v528xdg_surface_unset_fullscreenEPNS0_8ResourceE@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v531xdg_surface_set_window_geometryEPNS0_8ResourceEiiii@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v53addEP9wl_clienti@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v53addEP9wl_clientii@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v54bindEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v54bindEP9wl_clientji@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v54initEP10wl_displayi@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v54initEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v54initEP9wl_clientii@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v58Resource12fromResourceEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v59bind_funcEP9wl_clientPvjj@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v59interfaceEv@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v5C1EP10wl_displayi@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v5C1EP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v5C1EP9wl_clientii@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v5C1Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v5C2EP10wl_displayi@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v5C2EP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v5C2EP9wl_clientii@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v5C2Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v5D0Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v5D1Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer14xdg_surface_v5D2Ev@Qt_5 5.12.2 _ZN15QtWaylandServer15ivi_application12destroy_funcEP11wl_resource@Qt_5 5.9.0~rc _ZN15QtWaylandServer15ivi_application20display_destroy_funcEP11wl_listenerPv@Qt_5 5.11.1 _ZN15QtWaylandServer15ivi_application21handle_surface_createEP9wl_clientP11wl_resourcejS4_j@Qt_5 5.9.0~rc @@ -862,37 +1137,6 @@ _ZN15QtWaylandServer15zxdg_surface_v6D0Ev@Qt_5 5.10.1 _ZN15QtWaylandServer15zxdg_surface_v6D1Ev@Qt_5 5.10.1 _ZN15QtWaylandServer15zxdg_surface_v6D2Ev@Qt_5 5.10.1 - _ZN15QtWaylandServer16qt_key_extension10send_qtkeyEP11wl_resourceS2_jjjjjjjRK7QStringjj@Qt_5 5.7.0 - _ZN15QtWaylandServer16qt_key_extension10send_qtkeyEP11wl_resourcejjjjjjjRK7QStringjj@Qt_5 5.7.0 - _ZN15QtWaylandServer16qt_key_extension12destroy_funcEP11wl_resource@Qt_5 5.7.0 - _ZN15QtWaylandServer16qt_key_extension12handle_dummyEP9wl_clientP11wl_resource@Qt_5 5.7.0 - _ZN15QtWaylandServer16qt_key_extension19key_extension_dummyEPNS0_8ResourceE@Qt_5 5.7.0 - _ZN15QtWaylandServer16qt_key_extension20display_destroy_funcEP11wl_listenerPv@Qt_5 5.11.1 - _ZN15QtWaylandServer16qt_key_extension22key_extension_allocateEv@Qt_5 5.7.0 - _ZN15QtWaylandServer16qt_key_extension27key_extension_bind_resourceEPNS0_8ResourceE@Qt_5 5.7.0 - _ZN15QtWaylandServer16qt_key_extension28m_qt_key_extension_interfaceE@Qt_5 5.7.0 - _ZN15QtWaylandServer16qt_key_extension30key_extension_destroy_resourceEPNS0_8ResourceE@Qt_5 5.7.0 - _ZN15QtWaylandServer16qt_key_extension3addEP9wl_clienti@Qt_5 5.7.0 - _ZN15QtWaylandServer16qt_key_extension3addEP9wl_clientii@Qt_5 5.7.0 - _ZN15QtWaylandServer16qt_key_extension4bindEP11wl_resource@Qt_5 5.7.0 - _ZN15QtWaylandServer16qt_key_extension4bindEP9wl_clientji@Qt_5 5.7.0 - _ZN15QtWaylandServer16qt_key_extension4initEP10wl_displayi@Qt_5 5.7.0 - _ZN15QtWaylandServer16qt_key_extension4initEP11wl_resource@Qt_5 5.7.0 - _ZN15QtWaylandServer16qt_key_extension4initEP9wl_clientii@Qt_5 5.7.0 - _ZN15QtWaylandServer16qt_key_extension8Resource12fromResourceEP11wl_resource@Qt_5 5.7.0 - _ZN15QtWaylandServer16qt_key_extension9bind_funcEP9wl_clientPvjj@Qt_5 5.7.0 - _ZN15QtWaylandServer16qt_key_extension9interfaceEv@Qt_5 5.7.0 - _ZN15QtWaylandServer16qt_key_extensionC1EP10wl_displayi@Qt_5 5.7.0 - _ZN15QtWaylandServer16qt_key_extensionC1EP11wl_resource@Qt_5 5.7.0 - _ZN15QtWaylandServer16qt_key_extensionC1EP9wl_clientii@Qt_5 5.7.0 - _ZN15QtWaylandServer16qt_key_extensionC1Ev@Qt_5 5.7.0 - _ZN15QtWaylandServer16qt_key_extensionC2EP10wl_displayi@Qt_5 5.7.0 - _ZN15QtWaylandServer16qt_key_extensionC2EP11wl_resource@Qt_5 5.7.0 - _ZN15QtWaylandServer16qt_key_extensionC2EP9wl_clientii@Qt_5 5.7.0 - _ZN15QtWaylandServer16qt_key_extensionC2Ev@Qt_5 5.7.0 - _ZN15QtWaylandServer16qt_key_extensionD0Ev@Qt_5 5.7.0 - _ZN15QtWaylandServer16qt_key_extensionD1Ev@Qt_5 5.7.0 - _ZN15QtWaylandServer16qt_key_extensionD2Ev@Qt_5 5.7.0 _ZN15QtWaylandServer16qt_server_buffer12destroy_funcEP11wl_resource@Qt_5 5.7.0 _ZN15QtWaylandServer16qt_server_buffer14handle_releaseEP9wl_clientP11wl_resource@Qt_5 5.7.0 _ZN15QtWaylandServer16qt_server_buffer20display_destroy_funcEP11wl_listenerPv@Qt_5 5.11.1 @@ -1341,6 +1585,72 @@ _ZN15QtWaylandServer25zwp_text_input_manager_v2D0Ev@Qt_5 5.7.0 _ZN15QtWaylandServer25zwp_text_input_manager_v2D1Ev@Qt_5 5.7.0 _ZN15QtWaylandServer25zwp_text_input_manager_v2D2Ev@Qt_5 5.7.0 + _ZN15QtWaylandServer26zxdg_decoration_manager_v112destroy_funcEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer26zxdg_decoration_manager_v114handle_destroyEP9wl_clientP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer26zxdg_decoration_manager_v120display_destroy_funcEP11wl_listenerPv@Qt_5 5.12.2 + _ZN15QtWaylandServer26zxdg_decoration_manager_v130handle_get_toplevel_decorationEP9wl_clientP11wl_resourcejS4_@Qt_5 5.12.2 + _ZN15QtWaylandServer26zxdg_decoration_manager_v134zxdg_decoration_manager_v1_destroyEPNS0_8ResourceE@Qt_5 5.12.2 + _ZN15QtWaylandServer26zxdg_decoration_manager_v135zxdg_decoration_manager_v1_allocateEv@Qt_5 5.12.2 + _ZN15QtWaylandServer26zxdg_decoration_manager_v138m_zxdg_decoration_manager_v1_interfaceE@Qt_5 5.12.2 + _ZN15QtWaylandServer26zxdg_decoration_manager_v13addEP9wl_clienti@Qt_5 5.12.2 + _ZN15QtWaylandServer26zxdg_decoration_manager_v13addEP9wl_clientii@Qt_5 5.12.2 + _ZN15QtWaylandServer26zxdg_decoration_manager_v140zxdg_decoration_manager_v1_bind_resourceEPNS0_8ResourceE@Qt_5 5.12.2 + _ZN15QtWaylandServer26zxdg_decoration_manager_v143zxdg_decoration_manager_v1_destroy_resourceEPNS0_8ResourceE@Qt_5 5.12.2 + _ZN15QtWaylandServer26zxdg_decoration_manager_v14bindEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer26zxdg_decoration_manager_v14bindEP9wl_clientji@Qt_5 5.12.2 + _ZN15QtWaylandServer26zxdg_decoration_manager_v14initEP10wl_displayi@Qt_5 5.12.2 + _ZN15QtWaylandServer26zxdg_decoration_manager_v14initEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer26zxdg_decoration_manager_v14initEP9wl_clientii@Qt_5 5.12.2 + _ZN15QtWaylandServer26zxdg_decoration_manager_v150zxdg_decoration_manager_v1_get_toplevel_decorationEPNS0_8ResourceEjP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer26zxdg_decoration_manager_v18Resource12fromResourceEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer26zxdg_decoration_manager_v19bind_funcEP9wl_clientPvjj@Qt_5 5.12.2 + _ZN15QtWaylandServer26zxdg_decoration_manager_v19interfaceEv@Qt_5 5.12.2 + _ZN15QtWaylandServer26zxdg_decoration_manager_v1C1EP10wl_displayi@Qt_5 5.12.2 + _ZN15QtWaylandServer26zxdg_decoration_manager_v1C1EP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer26zxdg_decoration_manager_v1C1EP9wl_clientii@Qt_5 5.12.2 + _ZN15QtWaylandServer26zxdg_decoration_manager_v1C1Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer26zxdg_decoration_manager_v1C2EP10wl_displayi@Qt_5 5.12.2 + _ZN15QtWaylandServer26zxdg_decoration_manager_v1C2EP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer26zxdg_decoration_manager_v1C2EP9wl_clientii@Qt_5 5.12.2 + _ZN15QtWaylandServer26zxdg_decoration_manager_v1C2Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer26zxdg_decoration_manager_v1D0Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer26zxdg_decoration_manager_v1D1Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer26zxdg_decoration_manager_v1D2Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer27zxdg_toplevel_decoration_v112destroy_funcEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer27zxdg_toplevel_decoration_v114handle_destroyEP9wl_clientP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer27zxdg_toplevel_decoration_v114send_configureEP11wl_resourcej@Qt_5 5.12.2 + _ZN15QtWaylandServer27zxdg_toplevel_decoration_v114send_configureEj@Qt_5 5.12.2 + _ZN15QtWaylandServer27zxdg_toplevel_decoration_v115handle_set_modeEP9wl_clientP11wl_resourcej@Qt_5 5.12.2 + _ZN15QtWaylandServer27zxdg_toplevel_decoration_v117handle_unset_modeEP9wl_clientP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer27zxdg_toplevel_decoration_v120display_destroy_funcEP11wl_listenerPv@Qt_5 5.12.2 + _ZN15QtWaylandServer27zxdg_toplevel_decoration_v135zxdg_toplevel_decoration_v1_destroyEPNS0_8ResourceE@Qt_5 5.12.2 + _ZN15QtWaylandServer27zxdg_toplevel_decoration_v136zxdg_toplevel_decoration_v1_allocateEv@Qt_5 5.12.2 + _ZN15QtWaylandServer27zxdg_toplevel_decoration_v136zxdg_toplevel_decoration_v1_set_modeEPNS0_8ResourceEj@Qt_5 5.12.2 + _ZN15QtWaylandServer27zxdg_toplevel_decoration_v138zxdg_toplevel_decoration_v1_unset_modeEPNS0_8ResourceE@Qt_5 5.12.2 + _ZN15QtWaylandServer27zxdg_toplevel_decoration_v139m_zxdg_toplevel_decoration_v1_interfaceE@Qt_5 5.12.2 + _ZN15QtWaylandServer27zxdg_toplevel_decoration_v13addEP9wl_clienti@Qt_5 5.12.2 + _ZN15QtWaylandServer27zxdg_toplevel_decoration_v13addEP9wl_clientii@Qt_5 5.12.2 + _ZN15QtWaylandServer27zxdg_toplevel_decoration_v141zxdg_toplevel_decoration_v1_bind_resourceEPNS0_8ResourceE@Qt_5 5.12.2 + _ZN15QtWaylandServer27zxdg_toplevel_decoration_v144zxdg_toplevel_decoration_v1_destroy_resourceEPNS0_8ResourceE@Qt_5 5.12.2 + _ZN15QtWaylandServer27zxdg_toplevel_decoration_v14bindEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer27zxdg_toplevel_decoration_v14bindEP9wl_clientji@Qt_5 5.12.2 + _ZN15QtWaylandServer27zxdg_toplevel_decoration_v14initEP10wl_displayi@Qt_5 5.12.2 + _ZN15QtWaylandServer27zxdg_toplevel_decoration_v14initEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer27zxdg_toplevel_decoration_v14initEP9wl_clientii@Qt_5 5.12.2 + _ZN15QtWaylandServer27zxdg_toplevel_decoration_v18Resource12fromResourceEP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer27zxdg_toplevel_decoration_v19bind_funcEP9wl_clientPvjj@Qt_5 5.12.2 + _ZN15QtWaylandServer27zxdg_toplevel_decoration_v19interfaceEv@Qt_5 5.12.2 + _ZN15QtWaylandServer27zxdg_toplevel_decoration_v1C1EP10wl_displayi@Qt_5 5.12.2 + _ZN15QtWaylandServer27zxdg_toplevel_decoration_v1C1EP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer27zxdg_toplevel_decoration_v1C1EP9wl_clientii@Qt_5 5.12.2 + _ZN15QtWaylandServer27zxdg_toplevel_decoration_v1C1Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer27zxdg_toplevel_decoration_v1C2EP10wl_displayi@Qt_5 5.12.2 + _ZN15QtWaylandServer27zxdg_toplevel_decoration_v1C2EP11wl_resource@Qt_5 5.12.2 + _ZN15QtWaylandServer27zxdg_toplevel_decoration_v1C2EP9wl_clientii@Qt_5 5.12.2 + _ZN15QtWaylandServer27zxdg_toplevel_decoration_v1C2Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer27zxdg_toplevel_decoration_v1D0Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer27zxdg_toplevel_decoration_v1D1Ev@Qt_5 5.12.2 + _ZN15QtWaylandServer27zxdg_toplevel_decoration_v1D2Ev@Qt_5 5.12.2 _ZN15QtWaylandServer6wl_shm11send_formatEP11wl_resourcej@Qt_5 5.7.0 _ZN15QtWaylandServer6wl_shm11send_formatEj@Qt_5 5.7.0 _ZN15QtWaylandServer6wl_shm12destroy_funcEP11wl_resource@Qt_5 5.7.0 @@ -1575,8 +1885,12 @@ _ZN15QtWaylandServer9wl_regionD0Ev@Qt_5 5.7.0 _ZN15QtWaylandServer9wl_regionD1Ev@Qt_5 5.7.0 _ZN15QtWaylandServer9wl_regionD2Ev@Qt_5 5.7.0 + _ZN15QtWaylandServer9xdg_popup11handle_grabEP9wl_clientP11wl_resourceS4_j@Qt_5 5.12.2 _ZN15QtWaylandServer9xdg_popup12destroy_funcEP11wl_resource@Qt_5 5.7.0 _ZN15QtWaylandServer9xdg_popup14handle_destroyEP9wl_clientP11wl_resource@Qt_5 5.7.0 + _ZN15QtWaylandServer9xdg_popup14send_configureEP11wl_resourceiiii@Qt_5 5.12.2 + _ZN15QtWaylandServer9xdg_popup14send_configureEiiii@Qt_5 5.12.2 + _ZN15QtWaylandServer9xdg_popup14xdg_popup_grabEPNS0_8ResourceEP11wl_resourcej@Qt_5 5.12.2 _ZN15QtWaylandServer9xdg_popup15send_popup_doneEP11wl_resource@Qt_5 5.7.0 _ZN15QtWaylandServer9xdg_popup15send_popup_doneEv@Qt_5 5.7.0 _ZN15QtWaylandServer9xdg_popup17xdg_popup_destroyEPNS0_8ResourceE@Qt_5 5.7.0 @@ -1606,45 +1920,6 @@ _ZN15QtWaylandServer9xdg_popupD0Ev@Qt_5 5.7.0 _ZN15QtWaylandServer9xdg_popupD1Ev@Qt_5 5.7.0 _ZN15QtWaylandServer9xdg_popupD2Ev@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shell11handle_pongEP9wl_clientP11wl_resourcej@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shell12destroy_funcEP11wl_resource@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shell14handle_destroyEP9wl_clientP11wl_resource@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shell14xdg_shell_pongEPNS0_8ResourceEj@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shell17xdg_shell_destroyEPNS0_8ResourceE@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shell18xdg_shell_allocateEv@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shell20display_destroy_funcEP11wl_listenerPv@Qt_5 5.11.1 - _ZN15QtWaylandServer9xdg_shell20handle_get_xdg_popupEP9wl_clientP11wl_resourcejS4_S4_S4_jii@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shell21m_xdg_shell_interfaceE@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shell22handle_get_xdg_surfaceEP9wl_clientP11wl_resourcejS4_@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shell23xdg_shell_bind_resourceEPNS0_8ResourceE@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shell23xdg_shell_get_xdg_popupEPNS0_8ResourceEjP11wl_resourceS4_S4_jii@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shell25xdg_shell_get_xdg_surfaceEPNS0_8ResourceEjP11wl_resource@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shell26xdg_shell_destroy_resourceEPNS0_8ResourceE@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shell27handle_use_unstable_versionEP9wl_clientP11wl_resourcei@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shell30xdg_shell_use_unstable_versionEPNS0_8ResourceEi@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shell3addEP9wl_clienti@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shell3addEP9wl_clientii@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shell4bindEP11wl_resource@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shell4bindEP9wl_clientji@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shell4initEP10wl_displayi@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shell4initEP11wl_resource@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shell4initEP9wl_clientii@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shell8Resource12fromResourceEP11wl_resource@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shell9bind_funcEP9wl_clientPvjj@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shell9interfaceEv@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shell9send_pingEP11wl_resourcej@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shell9send_pingEj@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shellC1EP10wl_displayi@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shellC1EP11wl_resource@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shellC1EP9wl_clientii@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shellC1Ev@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shellC2EP10wl_displayi@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shellC2EP11wl_resource@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shellC2EP9wl_clientii@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shellC2Ev@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shellD0Ev@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shellD1Ev@Qt_5 5.7.0 - _ZN15QtWaylandServer9xdg_shellD2Ev@Qt_5 5.7.0 _ZN16QWaylandKeyboard11qt_metacallEN11QMetaObject4CallEiPPv@Qt_5 5.7.0 _ZN16QWaylandKeyboard11qt_metacastEPKc@Qt_5 5.7.0 _ZN16QWaylandKeyboard12focusChangedEP15QWaylandSurface@Qt_5 5.7.0 @@ -1667,8 +1942,32 @@ _ZN16QWaylandResourceC1Ev@Qt_5 5.7.0 _ZN16QWaylandResourceC2EP11wl_resource@Qt_5 5.7.0 _ZN16QWaylandResourceC2Ev@Qt_5 5.7.0 + _ZN16QWaylandXdgPopup11qt_metacallEN11QMetaObject4CallEiPPv@Qt_5 5.12.2 + _ZN16QWaylandXdgPopup11qt_metacastEPKc@Qt_5 5.12.2 + _ZN16QWaylandXdgPopup13sendConfigureERK5QRect@Qt_5 5.12.2 + _ZN16QWaylandXdgPopup16staticMetaObjectE@Qt_5 5.12.2 + _ZN16QWaylandXdgPopup25configuredGeometryChangedEv@Qt_5 5.12.2 + _ZN16QWaylandXdgPopup4roleEv@Qt_5 5.12.2 + _ZN16QWaylandXdgPopupC1EP18QWaylandXdgSurfaceS1_P21QWaylandXdgPositionerR16QWaylandResource@Qt_5_PRIVATE_API 5.12.2 + _ZN16QWaylandXdgPopupC2EP18QWaylandXdgSurfaceS1_P21QWaylandXdgPositionerR16QWaylandResource@Qt_5_PRIVATE_API 5.12.2 + _ZN16QWaylandXdgShell10initializeEv@Qt_5 5.12.2 + _ZN16QWaylandXdgShell11qt_metacallEN11QMetaObject4CallEiPPv@Qt_5 5.12.2 + _ZN16QWaylandXdgShell11qt_metacastEPKc@Qt_5 5.12.2 + _ZN16QWaylandXdgShell12popupCreatedEP16QWaylandXdgPopupP18QWaylandXdgSurface@Qt_5 5.12.2 + _ZN16QWaylandXdgShell13interfaceNameEv@Qt_5 5.12.2 + _ZN16QWaylandXdgShell15toplevelCreatedEP19QWaylandXdgToplevelP18QWaylandXdgSurface@Qt_5 5.12.2 + _ZN16QWaylandXdgShell16staticMetaObjectE@Qt_5 5.12.2 + _ZN16QWaylandXdgShell17handleSeatChangedEP12QWaylandSeatS1_@Qt_5 5.12.2 + _ZN16QWaylandXdgShell17xdgSurfaceCreatedEP18QWaylandXdgSurface@Qt_5 5.12.2 + _ZN16QWaylandXdgShell18handleFocusChangedEP15QWaylandSurfaceS1_@Qt_5 5.12.2 + _ZN16QWaylandXdgShell4pingEP14QWaylandClient@Qt_5 5.12.2 + _ZN16QWaylandXdgShell4pongEj@Qt_5 5.12.2 + _ZN16QWaylandXdgShell9interfaceEv@Qt_5 5.12.2 + _ZN16QWaylandXdgShellC1EP18QWaylandCompositor@Qt_5 5.12.2 + _ZN16QWaylandXdgShellC1Ev@Qt_5 5.12.2 + _ZN16QWaylandXdgShellC2EP18QWaylandCompositor@Qt_5 5.12.2 + _ZN16QWaylandXdgShellC2Ev@Qt_5 5.12.2 _ZN17QWaylandBufferRef16lockNativeBufferEv@Qt_5 5.9.0~rc - (subst)_ZN17QWaylandBufferRef18unlockNativeBufferE{quintptr}@Qt_5 5.9.0~rc _ZN17QWaylandBufferRefC1EPN9QtWayland12ClientBufferE@Qt_5_PRIVATE_API 5.9.0~rc _ZN17QWaylandBufferRefC1ERKS_@Qt_5 5.7.0 _ZN17QWaylandBufferRefC1Ev@Qt_5 5.7.0 @@ -1690,6 +1989,7 @@ _ZN17QWaylandQuickItem11qt_metacastEPKc@Qt_5 5.7.0 _ZN17QWaylandQuickItem12mouseReleaseEv@Qt_5 5.7.0 _ZN17QWaylandQuickItem12updateBufferEb@Qt_5 5.7.0 + _ZN17QWaylandQuickItem12updateOutputEv@Qt_5 5.12.2 _ZN17QWaylandQuickItem12updateWindowEv@Qt_5 5.7.0 _ZN17QWaylandQuickItem13keyPressEventEP9QKeyEvent@Qt_5 5.7.0 _ZN17QWaylandQuickItem13originChangedEv@Qt_5 5.7.0 @@ -1706,6 +2006,8 @@ _ZN17QWaylandQuickItem15setFocusOnClickEb@Qt_5 5.7.0 _ZN17QWaylandQuickItem15setPaintEnabledEb@Qt_5 5.7.0 _ZN17QWaylandQuickItem15updatePaintNodeEP7QSGNodePN10QQuickItem19UpdatePaintNodeDataE@Qt_5 5.7.0 + _ZN17QWaylandQuickItem16handlePlaceAboveEP15QWaylandSurface@Qt_5 5.12.2 + _ZN17QWaylandQuickItem16handlePlaceBelowEP15QWaylandSurface@Qt_5 5.12.2 _ZN17QWaylandQuickItem16inputMethodEventEP17QInputMethodEvent@Qt_5 5.7.0 _ZN17QWaylandQuickItem16staticMetaObjectE@Qt_5 5.7.0 _ZN17QWaylandQuickItem16surfaceDestroyedEv@Qt_5 5.7.0 @@ -1713,6 +2015,7 @@ _ZN17QWaylandQuickItem17handleDragStartedEP12QWaylandDrag@Qt_5 5.9.0~rc _ZN17QWaylandQuickItem17mouseReleaseEventEP11QMouseEvent@Qt_5 5.7.0 _ZN17QWaylandQuickItem17updateInputMethodE6QFlagsIN2Qt16InputMethodQueryEE@Qt_5 5.7.0 + _ZN17QWaylandQuickItem18sendMouseMoveEventERK7QPointFP12QWaylandSeat@Qt_5 5.12.2 _ZN17QWaylandQuickItem19bufferLockedChangedEv@Qt_5 5.9.0~rc _ZN17QWaylandQuickItem19focusOnClickChangedEv@Qt_5 5.7.0 _ZN17QWaylandQuickItem19inputRegionContainsERK7QPointF@Qt_5 5.7.0 @@ -1762,6 +2065,7 @@ _ZN18QWaylandCompositor17socketNameChangedERK10QByteArray@Qt_5 5.9.0~rc _ZN18QWaylandCompositor17subsurfaceChangedEP15QWaylandSurfaceS1_@Qt_5 5.7.0 _ZN18QWaylandCompositor18defaultSeatChangedEP12QWaylandSeatS1_@Qt_5 5.9.0~rc + _ZN18QWaylandCompositor19addSocketDescriptorEi@Qt_5 5.12.2 _ZN18QWaylandCompositor19createPointerDeviceEP12QWaylandSeat@Qt_5 5.9.0~rc _ZN18QWaylandCompositor20createKeyboardDeviceEP12QWaylandSeat@Qt_5 5.9.0~rc _ZN18QWaylandCompositor20defaultOutputChangedEv@Qt_5 5.7.0 @@ -1799,8 +2103,7 @@ _ZN18QWaylandIviSurfaceC1Ev@Qt_5 5.9.0~rc _ZN18QWaylandIviSurfaceC2EP22QWaylandIviApplicationP15QWaylandSurfacejRK16QWaylandResource@Qt_5 5.9.0~rc _ZN18QWaylandIviSurfaceC2Ev@Qt_5 5.9.0~rc - _ZN18QWaylandOutputMode8setWidthEi@Qt_5 5.9.0~rc - _ZN18QWaylandOutputMode9setHeightEi@Qt_5 5.9.0~rc + _ZN18QWaylandOutputMode7setSizeERK5QSize@Qt_5 5.12.2 _ZN18QWaylandOutputModeC1ERK5QSizei@Qt_5 5.9.0~rc _ZN18QWaylandOutputModeC1ERKS_@Qt_5 5.9.0~rc _ZN18QWaylandOutputModeC1Ev@Qt_5 5.9.0~rc @@ -1873,6 +2176,26 @@ _ZN18QWaylandXdgShellV6C1Ev@Qt_5 5.10.1 _ZN18QWaylandXdgShellV6C2EP18QWaylandCompositor@Qt_5 5.10.1 _ZN18QWaylandXdgShellV6C2Ev@Qt_5 5.10.1 + _ZN18QWaylandXdgSurface10initializeEP16QWaylandXdgShellP15QWaylandSurfaceRK16QWaylandResource@Qt_5 5.12.2 + _ZN18QWaylandXdgSurface10initializeEv@Qt_5 5.12.2 + _ZN18QWaylandXdgSurface11qt_metacallEN11QMetaObject4CallEiPPv@Qt_5 5.12.2 + _ZN18QWaylandXdgSurface11qt_metacastEPKc@Qt_5 5.12.2 + _ZN18QWaylandXdgSurface12fromResourceEP11wl_resource@Qt_5 5.12.2 + _ZN18QWaylandXdgSurface12popupCreatedEv@Qt_5 5.12.2 + _ZN18QWaylandXdgSurface12shellChangedEv@Qt_5 5.12.2 + _ZN18QWaylandXdgSurface13interfaceNameEv@Qt_5 5.12.2 + _ZN18QWaylandXdgSurface14surfaceChangedEv@Qt_5 5.12.2 + _ZN18QWaylandXdgSurface15toplevelCreatedEv@Qt_5 5.12.2 + _ZN18QWaylandXdgSurface16staticMetaObjectE@Qt_5 5.12.2 + _ZN18QWaylandXdgSurface17createIntegrationEP29QWaylandQuickShellSurfaceItem@Qt_5 5.12.2 + _ZN18QWaylandXdgSurface21windowGeometryChangedEv@Qt_5 5.12.2 + _ZN18QWaylandXdgSurface24handleBufferScaleChangedEv@Qt_5 5.12.2 + _ZN18QWaylandXdgSurface24handleSurfaceSizeChangedEv@Qt_5 5.12.2 + _ZN18QWaylandXdgSurface9interfaceEv@Qt_5 5.12.2 + _ZN18QWaylandXdgSurfaceC1EP16QWaylandXdgShellP15QWaylandSurfaceRK16QWaylandResource@Qt_5 5.12.2 + _ZN18QWaylandXdgSurfaceC1Ev@Qt_5 5.12.2 + _ZN18QWaylandXdgSurfaceC2EP16QWaylandXdgShellP15QWaylandSurfaceRK16QWaylandResource@Qt_5 5.12.2 + _ZN18QWaylandXdgSurfaceC2Ev@Qt_5 5.12.2 _ZN19QWaylandQuickOutput10classBeginEv@Qt_5 5.9.0~rc _ZN19QWaylandQuickOutput10initializeEv@Qt_5 5.7.0 _ZN19QWaylandQuickOutput11qt_metacallEN11QMetaObject4CallEiPPv@Qt_5 5.7.0 @@ -1901,6 +2224,42 @@ _ZN19QWaylandSeatPrivateD0Ev@Qt_5_PRIVATE_API 5.9.0~rc _ZN19QWaylandSeatPrivateD1Ev@Qt_5_PRIVATE_API 5.9.0~rc _ZN19QWaylandSeatPrivateD2Ev@Qt_5_PRIVATE_API 5.9.0~rc + _ZN19QWaylandXdgToplevel11qt_metacallEN11QMetaObject4CallEiPPv@Qt_5 5.12.2 + _ZN19QWaylandXdgToplevel11qt_metacastEPKc@Qt_5 5.12.2 + _ZN19QWaylandXdgToplevel11startResizeEP12QWaylandSeat6QFlagsIN2Qt4EdgeEE@Qt_5 5.12.2 + _ZN19QWaylandXdgToplevel12appIdChangedEv@Qt_5 5.12.2 + _ZN19QWaylandXdgToplevel12fromResourceEP11wl_resource@Qt_5 5.12.2 + _ZN19QWaylandXdgToplevel12sendResizingERK5QSize@Qt_5 5.12.2 + _ZN19QWaylandXdgToplevel12setMaximizedEv@Qt_5 5.12.2 + _ZN19QWaylandXdgToplevel12setMinimizedEv@Qt_5 5.12.2 + _ZN19QWaylandXdgToplevel12titleChangedEv@Qt_5 5.12.2 + _ZN19QWaylandXdgToplevel13sendConfigureERK5QSizeRK7QVectorINS_5StateEE@Qt_5 5.12.2 + _ZN19QWaylandXdgToplevel13sendConfigureERK5QSizeRK7QVectorIiE@Qt_5 5.12.2 + _ZN19QWaylandXdgToplevel13sendMaximizedERK5QSize@Qt_5 5.12.2 + _ZN19QWaylandXdgToplevel13setFullscreenEP14QWaylandOutput@Qt_5 5.12.2 + _ZN19QWaylandXdgToplevel13statesChangedEv@Qt_5 5.12.2 + _ZN19QWaylandXdgToplevel14maxSizeChangedEv@Qt_5 5.12.2 + _ZN19QWaylandXdgToplevel14minSizeChangedEv@Qt_5 5.12.2 + _ZN19QWaylandXdgToplevel14sendFullscreenERK5QSize@Qt_5 5.12.2 + _ZN19QWaylandXdgToplevel14showWindowMenuEP12QWaylandSeatRK6QPoint@Qt_5 5.12.2 + _ZN19QWaylandXdgToplevel14unsetMaximizedEv@Qt_5 5.12.2 + _ZN19QWaylandXdgToplevel15resizingChangedEv@Qt_5 5.12.2 + _ZN19QWaylandXdgToplevel15sendUnmaximizedERK5QSize@Qt_5 5.12.2 + _ZN19QWaylandXdgToplevel15unsetFullscreenEv@Qt_5 5.12.2 + _ZN19QWaylandXdgToplevel16activatedChangedEv@Qt_5 5.12.2 + _ZN19QWaylandXdgToplevel16maximizedChangedEv@Qt_5 5.12.2 + _ZN19QWaylandXdgToplevel16staticMetaObjectE@Qt_5 5.12.2 + _ZN19QWaylandXdgToplevel17fullscreenChangedEv@Qt_5 5.12.2 + _ZN19QWaylandXdgToplevel21decorationModeChangedEv@Qt_5 5.12.2 + _ZN19QWaylandXdgToplevel21parentToplevelChangedEv@Qt_5 5.12.2 + _ZN19QWaylandXdgToplevel4roleEv@Qt_5 5.12.2 + _ZN19QWaylandXdgToplevel9sendCloseEv@Qt_5 5.12.2 + _ZN19QWaylandXdgToplevel9startMoveEP12QWaylandSeat@Qt_5 5.12.2 + _ZN19QWaylandXdgToplevelC1EP18QWaylandXdgSurfaceR16QWaylandResource@Qt_5 5.12.2 + _ZN19QWaylandXdgToplevelC2EP18QWaylandXdgSurfaceR16QWaylandResource@Qt_5 5.12.2 + _ZN19QWaylandXdgToplevelD0Ev@Qt_5 5.12.2 + _ZN19QWaylandXdgToplevelD1Ev@Qt_5 5.12.2 + _ZN19QWaylandXdgToplevelD2Ev@Qt_5 5.12.2 _ZN20QWaylandQuickSurface11qt_metacallEN11QMetaObject4CallEiPPv@Qt_5 5.7.0 _ZN20QWaylandQuickSurface11qt_metacastEPKc@Qt_5 5.7.0 _ZN20QWaylandQuickSurface16staticMetaObjectE@Qt_5 5.7.0 @@ -2000,6 +2359,9 @@ _ZN21QWaylandOutputPrivate13sendModesInfoEv@Qt_5_PRIVATE_API 5.9.0~rc _ZN21QWaylandOutputPrivate16sendGeometryInfoEv@Qt_5_PRIVATE_API 5.7.0 _ZN21QWaylandOutputPrivate20output_bind_resourceEPN15QtWaylandServer9wl_output8ResourceE@Qt_5_PRIVATE_API 5.7.0 + _ZN21QWaylandOutputPrivate24_q_handleWindowDestroyedEv@Qt_5_PRIVATE_API 5.12.2 + _ZN21QWaylandOutputPrivate28handleWindowPixelSizeChangedEv@Qt_5_PRIVATE_API 5.12.2 + _ZN21QWaylandOutputPrivate36_q_handleMaybeWindowPixelSizeChangedEv@Qt_5_PRIVATE_API 5.12.2 _ZN21QWaylandOutputPrivate7addViewEP12QWaylandViewP15QWaylandSurface@Qt_5_PRIVATE_API 5.7.0 _ZN21QWaylandOutputPrivate8sendModeEPKN15QtWaylandServer9wl_output8ResourceERK18QWaylandOutputMode@Qt_5_PRIVATE_API 5.9.0~rc _ZN21QWaylandOutputPrivateC1Ev@Qt_5_PRIVATE_API 5.7.0 @@ -2007,6 +2369,19 @@ _ZN21QWaylandOutputPrivateD0Ev@Qt_5_PRIVATE_API 5.7.0 _ZN21QWaylandOutputPrivateD1Ev@Qt_5_PRIVATE_API 5.7.0 _ZN21QWaylandOutputPrivateD2Ev@Qt_5_PRIVATE_API 5.7.0 + _ZN21QWaylandXdgPositioner12fromResourceEP11wl_resource@Qt_5_PRIVATE_API 5.12.2 + _ZN21QWaylandXdgPositioner14convertToEdgesEN15QtWaylandServer14xdg_positioner6anchorE@Qt_5_PRIVATE_API 5.12.2 + _ZN21QWaylandXdgPositioner14convertToEdgesEN15QtWaylandServer14xdg_positioner7gravityE@Qt_5_PRIVATE_API 5.12.2 + _ZN21QWaylandXdgPositioner22xdg_positioner_destroyEPN15QtWaylandServer14xdg_positioner8ResourceE@Qt_5_PRIVATE_API 5.12.2 + _ZN21QWaylandXdgPositioner23xdg_positioner_set_sizeEPN15QtWaylandServer14xdg_positioner8ResourceEii@Qt_5_PRIVATE_API 5.12.2 + _ZN21QWaylandXdgPositioner25xdg_positioner_set_anchorEPN15QtWaylandServer14xdg_positioner8ResourceEj@Qt_5_PRIVATE_API 5.12.2 + _ZN21QWaylandXdgPositioner25xdg_positioner_set_offsetEPN15QtWaylandServer14xdg_positioner8ResourceEii@Qt_5_PRIVATE_API 5.12.2 + _ZN21QWaylandXdgPositioner26xdg_positioner_set_gravityEPN15QtWaylandServer14xdg_positioner8ResourceEj@Qt_5_PRIVATE_API 5.12.2 + _ZN21QWaylandXdgPositioner30xdg_positioner_set_anchor_rectEPN15QtWaylandServer14xdg_positioner8ResourceEiiii@Qt_5_PRIVATE_API 5.12.2 + _ZN21QWaylandXdgPositioner31xdg_positioner_destroy_resourceEPN15QtWaylandServer14xdg_positioner8ResourceE@Qt_5_PRIVATE_API 5.12.2 + _ZN21QWaylandXdgPositioner40xdg_positioner_set_constraint_adjustmentEPN15QtWaylandServer14xdg_positioner8ResourceEj@Qt_5_PRIVATE_API 5.12.2 + _ZN21QWaylandXdgPositionerC1ERK16QWaylandResource@Qt_5_PRIVATE_API 5.12.2 + _ZN21QWaylandXdgPositionerC2ERK16QWaylandResource@Qt_5_PRIVATE_API 5.12.2 _ZN21QWaylandXdgToplevelV611qt_metacallEN11QMetaObject4CallEiPPv@Qt_5 5.10.1 _ZN21QWaylandXdgToplevelV611qt_metacastEPKc@Qt_5 5.10.1 _ZN21QWaylandXdgToplevelV611startResizeEP12QWaylandSeat6QFlagsIN2Qt4EdgeEE@Qt_5 5.10.1 @@ -2075,7 +2450,6 @@ _ZN22QWaylandSurfacePrivate10Subsurface23subsurface_set_positionEPN15QtWaylandServer13wl_subsurface8ResourceEii@Qt_5_PRIVATE_API 5.7.0 _ZN22QWaylandSurfacePrivate13surface_frameEPN15QtWaylandServer10wl_surface8ResourceEj@Qt_5_PRIVATE_API 5.7.0 _ZN22QWaylandSurfacePrivate14initSubsurfaceEP15QWaylandSurfaceP9wl_clientii@Qt_5_PRIVATE_API 5.7.0 - _ZN22QWaylandSurfacePrivate14setBufferScaleEi@Qt_5_PRIVATE_API 5.7.0 _ZN22QWaylandSurfacePrivate14surface_attachEPN15QtWaylandServer10wl_surface8ResourceEP11wl_resourceii@Qt_5_PRIVATE_API 5.7.0 _ZN22QWaylandSurfacePrivate14surface_commitEPN15QtWaylandServer10wl_surface8ResourceE@Qt_5_PRIVATE_API 5.7.0 _ZN22QWaylandSurfacePrivate14surface_damageEPN15QtWaylandServer10wl_surface8ResourceEiiii@Qt_5_PRIVATE_API 5.7.0 @@ -2091,7 +2465,6 @@ _ZN22QWaylandSurfacePrivate3refEv@Qt_5_PRIVATE_API 5.7.0 _ZN22QWaylandSurfacePrivate5derefEv@Qt_5_PRIVATE_API 5.7.0 _ZN22QWaylandSurfacePrivate7refViewEP12QWaylandView@Qt_5_PRIVATE_API 5.7.0 - _ZN22QWaylandSurfacePrivate7setSizeERK5QSize@Qt_5_PRIVATE_API 5.7.0 _ZN22QWaylandSurfacePrivate9derefViewEP12QWaylandView@Qt_5_PRIVATE_API 5.7.0 _ZN22QWaylandSurfacePrivate9getBufferEP11wl_resource@Qt_5_PRIVATE_API 5.9.0~rc _ZN22QWaylandSurfacePrivateC1Ev@Qt_5_PRIVATE_API 5.7.0 @@ -2155,6 +2528,7 @@ _ZN23QWaylandKeyboardPrivate19updateModifierStateEjj@Qt_5_PRIVATE_API 5.7.0 _ZN23QWaylandKeyboardPrivate22keyboard_bind_resourceEPN15QtWaylandServer11wl_keyboard8ResourceE@Qt_5_PRIVATE_API 5.7.0 _ZN23QWaylandKeyboardPrivate25keyboard_destroy_resourceEPN15QtWaylandServer11wl_keyboard8ResourceE@Qt_5_PRIVATE_API 5.7.0 + _ZN23QWaylandKeyboardPrivate27maybeUpdateXkbScanCodeTableEv@Qt_5_PRIVATE_API 5.12.2 _ZN23QWaylandKeyboardPrivate3getEP16QWaylandKeyboard@Qt_5_PRIVATE_API 5.7.0 _ZN23QWaylandKeyboardPrivate7focusedEP15QWaylandSurface@Qt_5_PRIVATE_API 5.7.0 _ZN23QWaylandKeyboardPrivate7initXKBEv@Qt_5_PRIVATE_API 5.7.0 @@ -2189,6 +2563,13 @@ _ZN23QWaylandQuickCompositor6createEv@Qt_5 5.7.0 _ZN23QWaylandQuickCompositorC1EP7QObject@Qt_5 5.7.0 _ZN23QWaylandQuickCompositorC2EP7QObject@Qt_5 5.7.0 + _ZN23QWaylandXdgPopupPrivate13sendConfigureERK5QRect@Qt_5_PRIVATE_API 5.12.2 + _ZN23QWaylandXdgPopupPrivate14xdg_popup_grabEPN15QtWaylandServer9xdg_popup8ResourceEP11wl_resourcej@Qt_5_PRIVATE_API 5.12.2 + _ZN23QWaylandXdgPopupPrivate17xdg_popup_destroyEPN15QtWaylandServer9xdg_popup8ResourceE@Qt_5_PRIVATE_API 5.12.2 + _ZN23QWaylandXdgPopupPrivate18handleAckConfigureEj@Qt_5_PRIVATE_API 5.12.2 + _ZN23QWaylandXdgPopupPrivate6s_roleE@Qt_5_PRIVATE_API 5.12.2 + _ZN23QWaylandXdgPopupPrivateC1EP18QWaylandXdgSurfaceS1_P21QWaylandXdgPositionerRK16QWaylandResource@Qt_5_PRIVATE_API 5.12.2 + _ZN23QWaylandXdgPopupPrivateC2EP18QWaylandXdgSurfaceS1_P21QWaylandXdgPositionerRK16QWaylandResource@Qt_5_PRIVATE_API 5.12.2 _ZN23QWaylandXdgPositionerV612fromResourceEP11wl_resource@Qt_5_PRIVATE_API 5.10.1 _ZN23QWaylandXdgPositionerV626zxdg_positioner_v6_destroyEPN15QtWaylandServer18zxdg_positioner_v68ResourceE@Qt_5_PRIVATE_API 5.10.1 _ZN23QWaylandXdgPositionerV627zxdg_positioner_v6_set_sizeEPN15QtWaylandServer18zxdg_positioner_v68ResourceEii@Qt_5_PRIVATE_API 5.10.1 @@ -2200,6 +2581,16 @@ _ZN23QWaylandXdgPositionerV644zxdg_positioner_v6_set_constraint_adjustmentEPN15QtWaylandServer18zxdg_positioner_v68ResourceEj@Qt_5_PRIVATE_API 5.10.1 _ZN23QWaylandXdgPositionerV6C1ERK16QWaylandResource@Qt_5_PRIVATE_API 5.10.1 _ZN23QWaylandXdgPositionerV6C2ERK16QWaylandResource@Qt_5_PRIVATE_API 5.10.1 + _ZN23QWaylandXdgShellPrivate16xdg_wm_base_pongEPN15QtWaylandServer11xdg_wm_base8ResourceEj@Qt_5_PRIVATE_API 5.12.2 + _ZN23QWaylandXdgShellPrivate18registerXdgSurfaceEP18QWaylandXdgSurface@Qt_5_PRIVATE_API 5.12.2 + _ZN23QWaylandXdgShellPrivate19xdg_wm_base_destroyEPN15QtWaylandServer11xdg_wm_base8ResourceE@Qt_5_PRIVATE_API 5.12.2 + _ZN23QWaylandXdgShellPrivate20unregisterXdgSurfaceEP18QWaylandXdgSurface@Qt_5_PRIVATE_API 5.12.2 + _ZN23QWaylandXdgShellPrivate21xdgSurfaceFromSurfaceEP15QWaylandSurface@Qt_5_PRIVATE_API 5.12.2 + _ZN23QWaylandXdgShellPrivate27xdg_wm_base_get_xdg_surfaceEPN15QtWaylandServer11xdg_wm_base8ResourceEjP11wl_resource@Qt_5_PRIVATE_API 5.12.2 + _ZN23QWaylandXdgShellPrivate29xdg_wm_base_create_positionerEPN15QtWaylandServer11xdg_wm_base8ResourceEj@Qt_5_PRIVATE_API 5.12.2 + _ZN23QWaylandXdgShellPrivate4pingEPN15QtWaylandServer11xdg_wm_base8ResourceEj@Qt_5_PRIVATE_API 5.12.2 + _ZN23QWaylandXdgShellPrivateC1Ev@Qt_5_PRIVATE_API 5.12.2 + _ZN23QWaylandXdgShellPrivateC2Ev@Qt_5_PRIVATE_API 5.12.2 _ZN24QWaylandTextInputManager10initializeEv@Qt_5 5.7.0 _ZN24QWaylandTextInputManager11qt_metacallEN11QMetaObject4CallEiPPv@Qt_5 5.7.0 _ZN24QWaylandTextInputManager11qt_metacastEPKc@Qt_5 5.7.0 @@ -2236,6 +2627,7 @@ _ZN25QWaylandCompositorPrivate17unregisterSurfaceEP15QWaylandSurface@Qt_5_PRIVATE_API 5.7.0 _ZN25QWaylandCompositorPrivate20createDefaultSurfaceEv@Qt_5_PRIVATE_API 5.7.0 _ZN25QWaylandCompositorPrivate24compositor_create_regionEPN15QtWaylandServer13wl_compositor8ResourceEj@Qt_5_PRIVATE_API 5.7.0 + _ZN25QWaylandCompositorPrivate24connectToExternalSocketsEv@Qt_5_PRIVATE_API 5.12.2 _ZN25QWaylandCompositorPrivate25compositor_create_surfaceEPN15QtWaylandServer13wl_compositor8ResourceEj@Qt_5_PRIVATE_API 5.7.0 _ZN25QWaylandCompositorPrivate25feedRetainedSelectionDataEP9QMimeData@Qt_5_PRIVATE_API 5.7.0 _ZN25QWaylandCompositorPrivate27loadClientBufferIntegrationEv@Qt_5_PRIVATE_API 5.7.0 @@ -2254,8 +2646,8 @@ _ZN25QWaylandIviSurfacePrivate6s_roleE@Qt_5_PRIVATE_API 5.9.0~rc _ZN25QWaylandIviSurfacePrivateC1Ev@Qt_5_PRIVATE_API 5.9.0~rc _ZN25QWaylandIviSurfacePrivateC2Ev@Qt_5_PRIVATE_API 5.9.0~rc - _ZN25QWaylandXdgPopupV5Private17xdg_popup_destroyEPN15QtWaylandServer9xdg_popup8ResourceE@Qt_5_PRIVATE_API 5.9.0~rc - _ZN25QWaylandXdgPopupV5Private26xdg_popup_destroy_resourceEPN15QtWaylandServer9xdg_popup8ResourceE@Qt_5_PRIVATE_API 5.9.0~rc + _ZN25QWaylandXdgPopupV5Private17xdg_popup_destroyEPN15QtWaylandServer12xdg_popup_v58ResourceE@Qt_5_PRIVATE_API 5.12.2 + _ZN25QWaylandXdgPopupV5Private26xdg_popup_destroy_resourceEPN15QtWaylandServer12xdg_popup_v58ResourceE@Qt_5_PRIVATE_API 5.12.2 _ZN25QWaylandXdgPopupV5Private6s_roleE@Qt_5_PRIVATE_API 5.9.0~rc _ZN25QWaylandXdgPopupV5PrivateC1Ev@Qt_5_PRIVATE_API 5.9.0~rc _ZN25QWaylandXdgPopupV5PrivateC2Ev@Qt_5_PRIVATE_API 5.9.0~rc @@ -2266,17 +2658,19 @@ _ZN25QWaylandXdgPopupV6Private6s_roleE@Qt_5_PRIVATE_API 5.10.1 _ZN25QWaylandXdgPopupV6PrivateC1EP20QWaylandXdgSurfaceV6S1_P23QWaylandXdgPositionerV6RK16QWaylandResource@Qt_5_PRIVATE_API 5.10.1 _ZN25QWaylandXdgPopupV6PrivateC2EP20QWaylandXdgSurfaceV6S1_P23QWaylandXdgPositionerV6RK16QWaylandResource@Qt_5_PRIVATE_API 5.10.1 - _ZN25QWaylandXdgShellV5Private14xdg_shell_pongEPN15QtWaylandServer9xdg_shell8ResourceEj@Qt_5_PRIVATE_API 5.9.0~rc + _ZN25QWaylandXdgPositionerDataC1Ev@Qt_5_PRIVATE_API 5.12.2 + _ZN25QWaylandXdgPositionerDataC2Ev@Qt_5_PRIVATE_API 5.12.2 + _ZN25QWaylandXdgShellV5Private14xdg_shell_pongEPN15QtWaylandServer12xdg_shell_v58ResourceEj@Qt_5_PRIVATE_API 5.12.2 _ZN25QWaylandXdgShellV5Private15registerSurfaceEP20QWaylandXdgSurfaceV5@Qt_5_PRIVATE_API 5.9.0~rc _ZN25QWaylandXdgShellV5Private16registerXdgPopupEP18QWaylandXdgPopupV5@Qt_5_PRIVATE_API 5.9.0~rc - _ZN25QWaylandXdgShellV5Private17xdg_shell_destroyEPN15QtWaylandServer9xdg_shell8ResourceE@Qt_5_PRIVATE_API 5.9.0~rc + _ZN25QWaylandXdgShellV5Private17xdg_shell_destroyEPN15QtWaylandServer12xdg_shell_v58ResourceE@Qt_5_PRIVATE_API 5.12.2 _ZN25QWaylandXdgShellV5Private18unregisterXdgPopupEP18QWaylandXdgPopupV5@Qt_5_PRIVATE_API 5.9.0~rc _ZN25QWaylandXdgShellV5Private20unregisterXdgSurfaceEP20QWaylandXdgSurfaceV5@Qt_5_PRIVATE_API 5.9.0~rc _ZN25QWaylandXdgShellV5Private21xdgSurfaceFromSurfaceEP15QWaylandSurface@Qt_5_PRIVATE_API 5.9.0~rc - _ZN25QWaylandXdgShellV5Private23xdg_shell_get_xdg_popupEPN15QtWaylandServer9xdg_shell8ResourceEjP11wl_resourceS5_S5_jii@Qt_5_PRIVATE_API 5.9.0~rc - _ZN25QWaylandXdgShellV5Private25xdg_shell_get_xdg_surfaceEPN15QtWaylandServer9xdg_shell8ResourceEjP11wl_resource@Qt_5_PRIVATE_API 5.9.0~rc - _ZN25QWaylandXdgShellV5Private30xdg_shell_use_unstable_versionEPN15QtWaylandServer9xdg_shell8ResourceEi@Qt_5_PRIVATE_API 5.9.0~rc - _ZN25QWaylandXdgShellV5Private4pingEPN15QtWaylandServer9xdg_shell8ResourceEj@Qt_5_PRIVATE_API 5.9.0~rc + _ZN25QWaylandXdgShellV5Private23xdg_shell_get_xdg_popupEPN15QtWaylandServer12xdg_shell_v58ResourceEjP11wl_resourceS5_S5_jii@Qt_5_PRIVATE_API 5.12.2 + _ZN25QWaylandXdgShellV5Private25xdg_shell_get_xdg_surfaceEPN15QtWaylandServer12xdg_shell_v58ResourceEjP11wl_resource@Qt_5_PRIVATE_API 5.12.2 + _ZN25QWaylandXdgShellV5Private30xdg_shell_use_unstable_versionEPN15QtWaylandServer12xdg_shell_v58ResourceEi@Qt_5_PRIVATE_API 5.12.2 + _ZN25QWaylandXdgShellV5Private4pingEPN15QtWaylandServer12xdg_shell_v58ResourceEj@Qt_5_PRIVATE_API 5.12.2 _ZN25QWaylandXdgShellV5PrivateC1Ev@Qt_5_PRIVATE_API 5.9.0~rc _ZN25QWaylandXdgShellV5PrivateC2Ev@Qt_5_PRIVATE_API 5.9.0~rc _ZN25QWaylandXdgShellV6Private14convertToEdgesEj@Qt_5_PRIVATE_API 5.10.1 @@ -2290,6 +2684,18 @@ _ZN25QWaylandXdgShellV6Private4pingEPN15QtWaylandServer13zxdg_shell_v68ResourceEj@Qt_5_PRIVATE_API 5.10.1 _ZN25QWaylandXdgShellV6PrivateC1Ev@Qt_5_PRIVATE_API 5.10.1 _ZN25QWaylandXdgShellV6PrivateC2Ev@Qt_5_PRIVATE_API 5.10.1 + _ZN25QWaylandXdgSurfacePrivate13setWindowTypeEN2Qt10WindowTypeE@Qt_5_PRIVATE_API 5.12.2 + _ZN25QWaylandXdgSurfacePrivate15handleFocusLostEv@Qt_5_PRIVATE_API 5.12.2 + _ZN25QWaylandXdgSurfacePrivate19handleFocusReceivedEv@Qt_5_PRIVATE_API 5.12.2 + _ZN25QWaylandXdgSurfacePrivate19xdg_surface_destroyEPN15QtWaylandServer11xdg_surface8ResourceE@Qt_5_PRIVATE_API 5.12.2 + _ZN25QWaylandXdgSurfacePrivate21xdg_surface_get_popupEPN15QtWaylandServer11xdg_surface8ResourceEjP11wl_resourceS5_@Qt_5_PRIVATE_API 5.12.2 + _ZN25QWaylandXdgSurfacePrivate24xdg_surface_get_toplevelEPN15QtWaylandServer11xdg_surface8ResourceEj@Qt_5_PRIVATE_API 5.12.2 + _ZN25QWaylandXdgSurfacePrivate25xdg_surface_ack_configureEPN15QtWaylandServer11xdg_surface8ResourceEj@Qt_5_PRIVATE_API 5.12.2 + _ZN25QWaylandXdgSurfacePrivate28updateFallbackWindowGeometryEv@Qt_5_PRIVATE_API 5.12.2 + _ZN25QWaylandXdgSurfacePrivate28xdg_surface_destroy_resourceEPN15QtWaylandServer11xdg_surface8ResourceE@Qt_5_PRIVATE_API 5.12.2 + _ZN25QWaylandXdgSurfacePrivate31xdg_surface_set_window_geometryEPN15QtWaylandServer11xdg_surface8ResourceEiiii@Qt_5_PRIVATE_API 5.12.2 + _ZN25QWaylandXdgSurfacePrivateC1Ev@Qt_5_PRIVATE_API 5.12.2 + _ZN25QWaylandXdgSurfacePrivateC2Ev@Qt_5_PRIVATE_API 5.12.2 _ZN26QWaylandQuickHardwareLayer10classBeginEv@Qt_5_PRIVATE_API 5.11.1 _ZN26QWaylandQuickHardwareLayer11qt_metacallEN11QMetaObject4CallEiPPv@Qt_5_PRIVATE_API 5.11.1 _ZN26QWaylandQuickHardwareLayer11qt_metacastEPKc@Qt_5_PRIVATE_API 5.11.1 @@ -2303,6 +2709,28 @@ _ZN26QWaylandQuickHardwareLayerD0Ev@Qt_5_PRIVATE_API 5.11.1 _ZN26QWaylandQuickHardwareLayerD1Ev@Qt_5_PRIVATE_API 5.11.1 _ZN26QWaylandQuickHardwareLayerD2Ev@Qt_5_PRIVATE_API 5.11.1 + _ZN26QWaylandXdgToplevelPrivate14convertToEdgesEN15QtWaylandServer12xdg_toplevel11resize_edgeE@Qt_5_PRIVATE_API 5.12.2 + _ZN26QWaylandXdgToplevelPrivate15handleFocusLostEv@Qt_5_PRIVATE_API 5.12.2 + _ZN26QWaylandXdgToplevelPrivate17xdg_toplevel_moveEPN15QtWaylandServer12xdg_toplevel8ResourceEP11wl_resourcej@Qt_5_PRIVATE_API 5.12.2 + _ZN26QWaylandXdgToplevelPrivate18handleAckConfigureEj@Qt_5_PRIVATE_API 5.12.2 + _ZN26QWaylandXdgToplevelPrivate19handleFocusReceivedEv@Qt_5_PRIVATE_API 5.12.2 + _ZN26QWaylandXdgToplevelPrivate19xdg_toplevel_resizeEPN15QtWaylandServer12xdg_toplevel8ResourceEP11wl_resourcejj@Qt_5_PRIVATE_API 5.12.2 + _ZN26QWaylandXdgToplevelPrivate20xdg_toplevel_destroyEPN15QtWaylandServer12xdg_toplevel8ResourceE@Qt_5_PRIVATE_API 5.12.2 + _ZN26QWaylandXdgToplevelPrivate22xdg_toplevel_set_titleEPN15QtWaylandServer12xdg_toplevel8ResourceERK7QString@Qt_5_PRIVATE_API 5.12.2 + _ZN26QWaylandXdgToplevelPrivate23xdg_toplevel_set_app_idEPN15QtWaylandServer12xdg_toplevel8ResourceERK7QString@Qt_5_PRIVATE_API 5.12.2 + _ZN26QWaylandXdgToplevelPrivate23xdg_toplevel_set_parentEPN15QtWaylandServer12xdg_toplevel8ResourceEP11wl_resource@Qt_5_PRIVATE_API 5.12.2 + _ZN26QWaylandXdgToplevelPrivate25xdg_toplevel_set_max_sizeEPN15QtWaylandServer12xdg_toplevel8ResourceEii@Qt_5_PRIVATE_API 5.12.2 + _ZN26QWaylandXdgToplevelPrivate25xdg_toplevel_set_min_sizeEPN15QtWaylandServer12xdg_toplevel8ResourceEii@Qt_5_PRIVATE_API 5.12.2 + _ZN26QWaylandXdgToplevelPrivate26xdg_toplevel_set_maximizedEPN15QtWaylandServer12xdg_toplevel8ResourceE@Qt_5_PRIVATE_API 5.12.2 + _ZN26QWaylandXdgToplevelPrivate26xdg_toplevel_set_minimizedEPN15QtWaylandServer12xdg_toplevel8ResourceE@Qt_5_PRIVATE_API 5.12.2 + _ZN26QWaylandXdgToplevelPrivate27xdg_toplevel_set_fullscreenEPN15QtWaylandServer12xdg_toplevel8ResourceEP11wl_resource@Qt_5_PRIVATE_API 5.12.2 + _ZN26QWaylandXdgToplevelPrivate28xdg_toplevel_unset_maximizedEPN15QtWaylandServer12xdg_toplevel8ResourceE@Qt_5_PRIVATE_API 5.12.2 + _ZN26QWaylandXdgToplevelPrivate29xdg_toplevel_destroy_resourceEPN15QtWaylandServer12xdg_toplevel8ResourceE@Qt_5_PRIVATE_API 5.12.2 + _ZN26QWaylandXdgToplevelPrivate29xdg_toplevel_show_window_menuEPN15QtWaylandServer12xdg_toplevel8ResourceEP11wl_resourcejii@Qt_5_PRIVATE_API 5.12.2 + _ZN26QWaylandXdgToplevelPrivate29xdg_toplevel_unset_fullscreenEPN15QtWaylandServer12xdg_toplevel8ResourceE@Qt_5_PRIVATE_API 5.12.2 + _ZN26QWaylandXdgToplevelPrivate6s_roleE@Qt_5_PRIVATE_API 5.12.2 + _ZN26QWaylandXdgToplevelPrivateC1EP18QWaylandXdgSurfaceRK16QWaylandResource@Qt_5_PRIVATE_API 5.12.2 + _ZN26QWaylandXdgToplevelPrivateC2EP18QWaylandXdgSurfaceRK16QWaylandResource@Qt_5_PRIVATE_API 5.12.2 _ZN27QWaylandCompositorExtension10initializeEv@Qt_5 5.7.0 _ZN27QWaylandCompositorExtension11qt_metacallEN11QMetaObject4CallEiPPv@Qt_5 5.7.0 _ZN27QWaylandCompositorExtension11qt_metacastEPKc@Qt_5 5.7.0 @@ -2324,23 +2752,23 @@ _ZN27QWaylandXdgPositionerV6DataC2Ev@Qt_5_PRIVATE_API 5.10.1 _ZN27QWaylandXdgSurfaceV5Private13setWindowTypeEN2Qt10WindowTypeE@Qt_5_PRIVATE_API 5.9.0~rc _ZN27QWaylandXdgSurfaceV5Private15handleFocusLostEv@Qt_5_PRIVATE_API 5.9.0~rc - _ZN27QWaylandXdgSurfaceV5Private16xdg_surface_moveEPN15QtWaylandServer11xdg_surface8ResourceEP11wl_resourcej@Qt_5_PRIVATE_API 5.9.0~rc - _ZN27QWaylandXdgSurfaceV5Private18xdg_surface_resizeEPN15QtWaylandServer11xdg_surface8ResourceEP11wl_resourcejj@Qt_5_PRIVATE_API 5.9.0~rc + _ZN27QWaylandXdgSurfaceV5Private16xdg_surface_moveEPN15QtWaylandServer14xdg_surface_v58ResourceEP11wl_resourcej@Qt_5_PRIVATE_API 5.12.2 + _ZN27QWaylandXdgSurfaceV5Private18xdg_surface_resizeEPN15QtWaylandServer14xdg_surface_v58ResourceEP11wl_resourcejj@Qt_5_PRIVATE_API 5.12.2 _ZN27QWaylandXdgSurfaceV5Private19handleFocusReceivedEv@Qt_5_PRIVATE_API 5.9.0~rc - _ZN27QWaylandXdgSurfaceV5Private19xdg_surface_destroyEPN15QtWaylandServer11xdg_surface8ResourceE@Qt_5_PRIVATE_API 5.9.0~rc - _ZN27QWaylandXdgSurfaceV5Private21xdg_surface_set_titleEPN15QtWaylandServer11xdg_surface8ResourceERK7QString@Qt_5_PRIVATE_API 5.9.0~rc - _ZN27QWaylandXdgSurfaceV5Private22xdg_surface_set_app_idEPN15QtWaylandServer11xdg_surface8ResourceERK7QString@Qt_5_PRIVATE_API 5.9.0~rc - _ZN27QWaylandXdgSurfaceV5Private22xdg_surface_set_parentEPN15QtWaylandServer11xdg_surface8ResourceEP11wl_resource@Qt_5_PRIVATE_API 5.9.0~rc - _ZN27QWaylandXdgSurfaceV5Private25xdg_surface_ack_configureEPN15QtWaylandServer11xdg_surface8ResourceEj@Qt_5_PRIVATE_API 5.9.0~rc - _ZN27QWaylandXdgSurfaceV5Private25xdg_surface_set_maximizedEPN15QtWaylandServer11xdg_surface8ResourceE@Qt_5_PRIVATE_API 5.9.0~rc - _ZN27QWaylandXdgSurfaceV5Private25xdg_surface_set_minimizedEPN15QtWaylandServer11xdg_surface8ResourceE@Qt_5_PRIVATE_API 5.9.0~rc - _ZN27QWaylandXdgSurfaceV5Private26xdg_surface_set_fullscreenEPN15QtWaylandServer11xdg_surface8ResourceEP11wl_resource@Qt_5_PRIVATE_API 5.9.0~rc - _ZN27QWaylandXdgSurfaceV5Private27xdg_surface_unset_maximizedEPN15QtWaylandServer11xdg_surface8ResourceE@Qt_5_PRIVATE_API 5.9.0~rc + _ZN27QWaylandXdgSurfaceV5Private19xdg_surface_destroyEPN15QtWaylandServer14xdg_surface_v58ResourceE@Qt_5_PRIVATE_API 5.12.2 + _ZN27QWaylandXdgSurfaceV5Private21xdg_surface_set_titleEPN15QtWaylandServer14xdg_surface_v58ResourceERK7QString@Qt_5_PRIVATE_API 5.12.2 + _ZN27QWaylandXdgSurfaceV5Private22xdg_surface_set_app_idEPN15QtWaylandServer14xdg_surface_v58ResourceERK7QString@Qt_5_PRIVATE_API 5.12.2 + _ZN27QWaylandXdgSurfaceV5Private22xdg_surface_set_parentEPN15QtWaylandServer14xdg_surface_v58ResourceEP11wl_resource@Qt_5_PRIVATE_API 5.12.2 + _ZN27QWaylandXdgSurfaceV5Private25xdg_surface_ack_configureEPN15QtWaylandServer14xdg_surface_v58ResourceEj@Qt_5_PRIVATE_API 5.12.2 + _ZN27QWaylandXdgSurfaceV5Private25xdg_surface_set_maximizedEPN15QtWaylandServer14xdg_surface_v58ResourceE@Qt_5_PRIVATE_API 5.12.2 + _ZN27QWaylandXdgSurfaceV5Private25xdg_surface_set_minimizedEPN15QtWaylandServer14xdg_surface_v58ResourceE@Qt_5_PRIVATE_API 5.12.2 + _ZN27QWaylandXdgSurfaceV5Private26xdg_surface_set_fullscreenEPN15QtWaylandServer14xdg_surface_v58ResourceEP11wl_resource@Qt_5_PRIVATE_API 5.12.2 + _ZN27QWaylandXdgSurfaceV5Private27xdg_surface_unset_maximizedEPN15QtWaylandServer14xdg_surface_v58ResourceE@Qt_5_PRIVATE_API 5.12.2 _ZN27QWaylandXdgSurfaceV5Private28updateFallbackWindowGeometryEv@Qt_5_PRIVATE_API 5.9.0~rc - _ZN27QWaylandXdgSurfaceV5Private28xdg_surface_destroy_resourceEPN15QtWaylandServer11xdg_surface8ResourceE@Qt_5_PRIVATE_API 5.9.0~rc - _ZN27QWaylandXdgSurfaceV5Private28xdg_surface_show_window_menuEPN15QtWaylandServer11xdg_surface8ResourceEP11wl_resourcejii@Qt_5_PRIVATE_API 5.9.0~rc - _ZN27QWaylandXdgSurfaceV5Private28xdg_surface_unset_fullscreenEPN15QtWaylandServer11xdg_surface8ResourceE@Qt_5_PRIVATE_API 5.9.0~rc - _ZN27QWaylandXdgSurfaceV5Private31xdg_surface_set_window_geometryEPN15QtWaylandServer11xdg_surface8ResourceEiiii@Qt_5_PRIVATE_API 5.9.0~rc + _ZN27QWaylandXdgSurfaceV5Private28xdg_surface_destroy_resourceEPN15QtWaylandServer14xdg_surface_v58ResourceE@Qt_5_PRIVATE_API 5.12.2 + _ZN27QWaylandXdgSurfaceV5Private28xdg_surface_show_window_menuEPN15QtWaylandServer14xdg_surface_v58ResourceEP11wl_resourcejii@Qt_5_PRIVATE_API 5.12.2 + _ZN27QWaylandXdgSurfaceV5Private28xdg_surface_unset_fullscreenEPN15QtWaylandServer14xdg_surface_v58ResourceE@Qt_5_PRIVATE_API 5.12.2 + _ZN27QWaylandXdgSurfaceV5Private31xdg_surface_set_window_geometryEPN15QtWaylandServer14xdg_surface_v58ResourceEiiii@Qt_5_PRIVATE_API 5.12.2 _ZN27QWaylandXdgSurfaceV5Private6s_roleE@Qt_5_PRIVATE_API 5.9.0~rc _ZN27QWaylandXdgSurfaceV5PrivateC1Ev@Qt_5_PRIVATE_API 5.9.0~rc _ZN27QWaylandXdgSurfaceV5PrivateC2Ev@Qt_5_PRIVATE_API 5.9.0~rc @@ -2404,6 +2832,9 @@ _ZN29QWaylandQuickShellSurfaceItem16staticMetaObjectE@Qt_5 5.7.0 _ZN29QWaylandQuickShellSurfaceItem17mouseReleaseEventEP11QMouseEvent@Qt_5 5.7.0 _ZN29QWaylandQuickShellSurfaceItem19shellSurfaceChangedEv@Qt_5 5.7.0 + _ZN29QWaylandQuickShellSurfaceItem20autoCreatePopupItemsEv@Qt_5 5.12.2 + _ZN29QWaylandQuickShellSurfaceItem23setAutoCreatePopupItemsEb@Qt_5 5.12.2 + _ZN29QWaylandQuickShellSurfaceItem27autoCreatePopupItemsChangedEv@Qt_5 5.12.2 _ZN29QWaylandQuickShellSurfaceItemC1EP10QQuickItem@Qt_5 5.7.0 _ZN29QWaylandQuickShellSurfaceItemC1ER36QWaylandQuickShellSurfaceItemPrivateP10QQuickItem@Qt_5_PRIVATE_API 5.7.0 _ZN29QWaylandQuickShellSurfaceItemC2EP10QQuickItem@Qt_5 5.7.0 @@ -2435,11 +2866,33 @@ _ZN30QWaylandQtWindowManagerPrivate30windowmanager_destroy_resourceEPN15QtWaylandServer16qt_windowmanager8ResourceE@Qt_5_PRIVATE_API 5.9.0~rc _ZN30QWaylandQtWindowManagerPrivateC1Ev@Qt_5_PRIVATE_API 5.9.0~rc _ZN30QWaylandQtWindowManagerPrivateC2Ev@Qt_5_PRIVATE_API 5.9.0~rc + _ZN30QWaylandXdgDecorationManagerV110initializeEv@Qt_5 5.12.2 + _ZN30QWaylandXdgDecorationManagerV111qt_metacallEN11QMetaObject4CallEiPPv@Qt_5 5.12.2 + _ZN30QWaylandXdgDecorationManagerV111qt_metacastEPKc@Qt_5 5.12.2 + _ZN30QWaylandXdgDecorationManagerV116setPreferredModeEN19QWaylandXdgToplevel14DecorationModeE@Qt_5 5.12.2 + _ZN30QWaylandXdgDecorationManagerV116staticMetaObjectE@Qt_5 5.12.2 + _ZN30QWaylandXdgDecorationManagerV120preferredModeChangedEv@Qt_5 5.12.2 + _ZN30QWaylandXdgDecorationManagerV19interfaceEv@Qt_5 5.12.2 + _ZN30QWaylandXdgDecorationManagerV1C1Ev@Qt_5 5.12.2 + _ZN30QWaylandXdgDecorationManagerV1C2Ev@Qt_5 5.12.2 _ZN31QWaylandTextInputManagerPrivate40zwp_text_input_manager_v2_get_text_inputEPN15QtWaylandServer25zwp_text_input_manager_v28ResourceEjP11wl_resource@Qt_5_PRIVATE_API 5.7.0 _ZN31QWaylandTextInputManagerPrivateC1Ev@Qt_5_PRIVATE_API 5.7.0 _ZN31QWaylandTextInputManagerPrivateC2Ev@Qt_5_PRIVATE_API 5.7.0 + _ZN31QWaylandXdgToplevelDecorationV113sendConfigureEN19QWaylandXdgToplevel14DecorationModeE@Qt_5_PRIVATE_API 5.12.2 + _ZN31QWaylandXdgToplevelDecorationV132handleClientPreferredModeChangedEv@Qt_5_PRIVATE_API 5.12.2 + _ZN31QWaylandXdgToplevelDecorationV135zxdg_toplevel_decoration_v1_destroyEPN15QtWaylandServer27zxdg_toplevel_decoration_v18ResourceE@Qt_5_PRIVATE_API 5.12.2 + _ZN31QWaylandXdgToplevelDecorationV136zxdg_toplevel_decoration_v1_set_modeEPN15QtWaylandServer27zxdg_toplevel_decoration_v18ResourceEj@Qt_5_PRIVATE_API 5.12.2 + _ZN31QWaylandXdgToplevelDecorationV138zxdg_toplevel_decoration_v1_unset_modeEPN15QtWaylandServer27zxdg_toplevel_decoration_v18ResourceE@Qt_5_PRIVATE_API 5.12.2 + _ZN31QWaylandXdgToplevelDecorationV144zxdg_toplevel_decoration_v1_destroy_resourceEPN15QtWaylandServer27zxdg_toplevel_decoration_v18ResourceE@Qt_5_PRIVATE_API 5.12.2 + _ZN31QWaylandXdgToplevelDecorationV1C1EP19QWaylandXdgToplevelP30QWaylandXdgDecorationManagerV1P9wl_clienti@Qt_5_PRIVATE_API 5.12.2 + _ZN31QWaylandXdgToplevelDecorationV1C2EP19QWaylandXdgToplevelP30QWaylandXdgDecorationManagerV1P9wl_clienti@Qt_5_PRIVATE_API 5.12.2 + _ZN31QWaylandXdgToplevelDecorationV1D0Ev@Qt_5_PRIVATE_API 5.12.2 + _ZN31QWaylandXdgToplevelDecorationV1D1Ev@Qt_5_PRIVATE_API 5.12.2 + _ZN31QWaylandXdgToplevelDecorationV1D2Ev@Qt_5_PRIVATE_API 5.12.2 _ZN33QWaylandInputMethodControlPrivateC1EP15QWaylandSurface@Qt_5_PRIVATE_API 5.7.0 _ZN33QWaylandInputMethodControlPrivateC2EP15QWaylandSurface@Qt_5_PRIVATE_API 5.7.0 + _ZN36QWaylandQuickShellSurfaceItemPrivate20maybeCreateAutoPopupEP20QWaylandShellSurface@Qt_5_PRIVATE_API 5.12.2 + _ZN37QWaylandXdgDecorationManagerV1Private50zxdg_decoration_manager_v1_get_toplevel_decorationEPN15QtWaylandServer26zxdg_decoration_manager_v18ResourceEjP11wl_resource@Qt_5_PRIVATE_API 5.12.2 _ZN9QtWayland12ClientBuffer11sendReleaseEv@Qt_5_PRIVATE_API 5.9.0~rc _ZN9QtWayland12ClientBuffer12setCommittedER7QRegion@Qt_5_PRIVATE_API 5.9.0~rc _ZN9QtWayland12ClientBuffer12setDestroyedEv@Qt_5_PRIVATE_API 5.9.0~rc @@ -2588,6 +3041,7 @@ _ZNK15QWaylandSurface11isDestroyedEv@Qt_5 5.7.0 _ZNK15QWaylandSurface11primaryViewEv@Qt_5 5.9.0~rc _ZNK15QWaylandSurface13isInitializedEv@Qt_5 5.7.0 + _ZNK15QWaylandSurface13waylandClientEv@Qt_5 5.12.2 _ZNK15QWaylandSurface15isCursorSurfaceEv@Qt_5 5.7.0 _ZNK15QWaylandSurface18contentOrientationEv@Qt_5 5.7.0 _ZNK15QWaylandSurface18inputMethodControlEv@Qt_5 5.7.0 @@ -2608,8 +3062,23 @@ _ZNK16QWaylandKeyboard10repeatRateEv@Qt_5 5.7.0 _ZNK16QWaylandKeyboard11focusClientEv@Qt_5 5.7.0 _ZNK16QWaylandKeyboard11repeatDelayEv@Qt_5 5.7.0 + _ZNK16QWaylandKeyboard13keyToScanCodeEi@Qt_5 5.12.2 _ZNK16QWaylandKeyboard4seatEv@Qt_5 5.9.0~rc _ZNK16QWaylandKeyboard5focusEv@Qt_5 5.7.0 + _ZNK16QWaylandXdgPopup10anchorRectEv@Qt_5 5.12.2 + _ZNK16QWaylandXdgPopup10metaObjectEv@Qt_5 5.12.2 + _ZNK16QWaylandXdgPopup10xdgSurfaceEv@Qt_5 5.12.2 + _ZNK16QWaylandXdgPopup11anchorEdgesEv@Qt_5 5.12.2 + _ZNK16QWaylandXdgPopup12gravityEdgesEv@Qt_5 5.12.2 + _ZNK16QWaylandXdgPopup14positionerSizeEv@Qt_5 5.12.2 + _ZNK16QWaylandXdgPopup15flipConstraintsEv@Qt_5 5.12.2 + _ZNK16QWaylandXdgPopup16parentXdgSurfaceEv@Qt_5 5.12.2 + _ZNK16QWaylandXdgPopup16slideConstraintsEv@Qt_5 5.12.2 + _ZNK16QWaylandXdgPopup17resizeConstraintsEv@Qt_5 5.12.2 + _ZNK16QWaylandXdgPopup18configuredGeometryEv@Qt_5 5.12.2 + _ZNK16QWaylandXdgPopup21unconstrainedPositionEv@Qt_5 5.12.2 + _ZNK16QWaylandXdgPopup6offsetEv@Qt_5 5.12.2 + _ZNK16QWaylandXdgShell10metaObjectEv@Qt_5 5.12.2 _ZNK17QWaylandBufferRef10bufferTypeEv@Qt_5 5.7.0 _ZNK17QWaylandBufferRef10hasContentEv@Qt_5 5.9.0~rc _ZNK17QWaylandBufferRef11isDestroyedEv@Qt_5 5.7.0 @@ -2637,6 +3106,7 @@ _ZNK17QWaylandQuickItem18inputEventsEnabledEv@Qt_5 5.7.0 _ZNK17QWaylandQuickItem18sizeFollowsSurfaceEv@Qt_5 5.7.0 _ZNK17QWaylandQuickItem18touchEventsEnabledEv@Qt_5 5.7.0 + _ZNK17QWaylandQuickItem19inputRegionContainsERK7QPointF@Qt_5 5.12.2 _ZNK17QWaylandQuickItem23allowDiscardFrontBufferEv@Qt_5 5.9.0~rc _ZNK17QWaylandQuickItem4viewEv@Qt_5 5.7.0 _ZNK17QWaylandQuickItem6originEv@Qt_5 5.7.0 @@ -2685,8 +3155,30 @@ _ZNK18QWaylandXdgShellV510metaObjectEv@Qt_5 5.9.0~rc _ZNK18QWaylandXdgShellV511popupClientEv@Qt_5 5.9.0~rc _ZNK18QWaylandXdgShellV610metaObjectEv@Qt_5 5.10.1 + _ZNK18QWaylandXdgSurface10metaObjectEv@Qt_5 5.12.2 + _ZNK18QWaylandXdgSurface10windowTypeEv@Qt_5 5.12.2 + _ZNK18QWaylandXdgSurface14windowGeometryEv@Qt_5 5.12.2 + _ZNK18QWaylandXdgSurface5popupEv@Qt_5 5.12.2 + _ZNK18QWaylandXdgSurface5shellEv@Qt_5 5.12.2 + _ZNK18QWaylandXdgSurface7surfaceEv@Qt_5 5.12.2 + _ZNK18QWaylandXdgSurface8toplevelEv@Qt_5 5.12.2 _ZNK19QWaylandQuickOutput10metaObjectEv@Qt_5 5.7.0 _ZNK19QWaylandQuickOutput22automaticFrameCallbackEv@Qt_5 5.7.0 + _ZNK19QWaylandXdgToplevel10fullscreenEv@Qt_5 5.12.2 + _ZNK19QWaylandXdgToplevel10metaObjectEv@Qt_5 5.12.2 + _ZNK19QWaylandXdgToplevel10xdgSurfaceEv@Qt_5 5.12.2 + _ZNK19QWaylandXdgToplevel12statesAsIntsEv@Qt_5 5.12.2 + _ZNK19QWaylandXdgToplevel13sizeForResizeERK6QSizeFRK7QPointF6QFlagsIN2Qt4EdgeEE@Qt_5 5.12.2 + _ZNK19QWaylandXdgToplevel14decorationModeEv@Qt_5 5.12.2 + _ZNK19QWaylandXdgToplevel14parentToplevelEv@Qt_5 5.12.2 + _ZNK19QWaylandXdgToplevel5appIdEv@Qt_5 5.12.2 + _ZNK19QWaylandXdgToplevel5titleEv@Qt_5 5.12.2 + _ZNK19QWaylandXdgToplevel6statesEv@Qt_5 5.12.2 + _ZNK19QWaylandXdgToplevel7maxSizeEv@Qt_5 5.12.2 + _ZNK19QWaylandXdgToplevel7minSizeEv@Qt_5 5.12.2 + _ZNK19QWaylandXdgToplevel8resizingEv@Qt_5 5.12.2 + _ZNK19QWaylandXdgToplevel9activatedEv@Qt_5 5.12.2 + _ZNK19QWaylandXdgToplevel9maximizedEv@Qt_5 5.12.2 _ZNK20QWaylandQuickSurface10metaObjectEv@Qt_5 5.7.0 _ZNK20QWaylandQuickSurface15useTextureAlphaEv@Qt_5 5.7.0 _ZNK20QWaylandQuickSurface22clientRenderingEnabledEv@Qt_5 5.7.0 @@ -2713,6 +3205,7 @@ _ZNK20QWaylandXdgSurfaceV67surfaceEv@Qt_5 5.10.1 _ZNK20QWaylandXdgSurfaceV68toplevelEv@Qt_5 5.10.1 (optional=templinst)_ZNK21QWaylandShellTemplateI15QWaylandWlShellE18extensionInterfaceEv@Qt_5 5.9.0~rc + (optional=templinst)_ZNK21QWaylandShellTemplateI16QWaylandXdgShellE18extensionInterfaceEv@Qt_5 5.12.2 (optional=templinst)_ZNK21QWaylandShellTemplateI18QWaylandXdgShellV5E18extensionInterfaceEv@Qt_5 5.9.0~rc (optional=templinst)_ZNK21QWaylandShellTemplateI18QWaylandXdgShellV6E18extensionInterfaceEv@Qt_5 5.10.1 _ZNK21QWaylandXdgToplevelV610fullscreenEv@Qt_5 5.10.1 @@ -2743,8 +3236,12 @@ _ZNK23QWaylandQuickCompositor10metaObjectEv@Qt_5 5.7.0 _ZNK24QWaylandTextInputManager10metaObjectEv@Qt_5 5.7.0 _ZNK24QWaylandTextInputPrivate16inputMethodQueryEN2Qt16InputMethodQueryE8QVariant@Qt_5_PRIVATE_API 5.7.0 + _ZNK25QWaylandXdgPositionerData10isCompleteEv@Qt_5_PRIVATE_API 5.12.2 + _ZNK25QWaylandXdgPositionerData11anchorPointEv@Qt_5_PRIVATE_API 5.12.2 + _ZNK25QWaylandXdgPositionerData21unconstrainedPositionEv@Qt_5_PRIVATE_API 5.12.2 _ZNK25QWaylandXdgShellV5Private18isValidPopupParentEP15QWaylandSurface@Qt_5_PRIVATE_API 5.9.0~rc _ZNK25QWaylandXdgShellV5Private21topmostPopupForClientEP9wl_client@Qt_5_PRIVATE_API 5.9.0~rc + _ZNK25QWaylandXdgSurfacePrivate31calculateFallbackWindowGeometryEv@Qt_5_PRIVATE_API 5.12.2 _ZNK26QWaylandQuickHardwareLayer10metaObjectEv@Qt_5_PRIVATE_API 5.11.1 _ZNK26QWaylandQuickHardwareLayer11waylandItemEv@Qt_5_PRIVATE_API 5.11.1 _ZNK26QWaylandQuickHardwareLayer13stackingLevelEv@Qt_5_PRIVATE_API 5.11.1 @@ -2758,6 +3255,7 @@ _ZNK27QWaylandXdgSurfaceV6Private31calculateFallbackWindowGeometryEv@Qt_5_PRIVATE_API 5.10.1 (optional=templinst)_ZNK28QWaylandShellSurfaceTemplateI18QWaylandIviSurfaceE18extensionInterfaceEv@Qt_5 5.9.0~rc (optional=templinst)_ZNK28QWaylandShellSurfaceTemplateI18QWaylandXdgPopupV5E18extensionInterfaceEv@Qt_5 5.9.0~rc + (optional=templinst)_ZNK28QWaylandShellSurfaceTemplateI18QWaylandXdgSurfaceE18extensionInterfaceEv@Qt_5 5.12.2 (optional=templinst)_ZNK28QWaylandShellSurfaceTemplateI20QWaylandXdgSurfaceV5E18extensionInterfaceEv@Qt_5 5.9.0~rc (optional=templinst)_ZNK28QWaylandShellSurfaceTemplateI20QWaylandXdgSurfaceV6E18extensionInterfaceEv@Qt_5 5.10.1 (optional=templinst)_ZNK28QWaylandShellSurfaceTemplateI22QWaylandWlShellSurfaceE18extensionInterfaceEv@Qt_5 5.7.0 @@ -2766,10 +3264,13 @@ _ZNK29QWaylandQuickShellSurfaceItem10metaObjectEv@Qt_5 5.7.0 _ZNK29QWaylandQuickShellSurfaceItem12shellSurfaceEv@Qt_5 5.7.0 _ZNK29QWaylandQuickShellSurfaceItem8moveItemEv@Qt_5 5.7.0 + _ZNK30QWaylandXdgDecorationManagerV110metaObjectEv@Qt_5 5.12.2 + _ZNK30QWaylandXdgDecorationManagerV113preferredModeEv@Qt_5 5.12.2 _ZNK33QWaylandInputMethodControlPrivate9textInputEv@Qt_5_PRIVATE_API 5.7.0 (optional=templinst)_ZNK35QWaylandCompositorExtensionTemplateI22QWaylandIviApplicationE18extensionInterfaceEv@Qt_5 5.9.0~rc (optional=templinst)_ZNK35QWaylandCompositorExtensionTemplateI23QWaylandQtWindowManagerE18extensionInterfaceEv@Qt_5 5.9.0~rc (optional=templinst)_ZNK35QWaylandCompositorExtensionTemplateI24QWaylandTextInputManagerE18extensionInterfaceEv@Qt_5 5.7.0 + (optional=templinst)_ZNK35QWaylandCompositorExtensionTemplateI30QWaylandXdgDecorationManagerV1E18extensionInterfaceEv@Qt_5 5.12.2 _ZNK9QtWayland12ClientBuffer15bufferFormatEglEv@Qt_5_PRIVATE_API 5.9.0~rc _ZNK9QtWayland12ServerBuffer11isYInvertedEv@Qt_5_PRIVATE_API 5.7.0 _ZNK9QtWayland12ServerBuffer4sizeEv@Qt_5_PRIVATE_API 5.7.0 @@ -2794,6 +3295,8 @@ _ZTI15QWaylandSurface@Qt_5 5.7.0 _ZTI15QWaylandWlShell@Qt_5 5.7.0 _ZTI16QWaylandKeyboard@Qt_5 5.7.0 + _ZTI16QWaylandXdgPopup@Qt_5 5.12.2 + _ZTI16QWaylandXdgShell@Qt_5 5.12.2 _ZTI17QWaylandQuickItem@Qt_5 5.7.0 _ZTI18QWaylandCompositor@Qt_5 5.7.0 _ZTI18QWaylandIviSurface@Qt_5 5.9.0~rc @@ -2801,8 +3304,10 @@ _ZTI18QWaylandXdgPopupV6@Qt_5 5.10.1 _ZTI18QWaylandXdgShellV5@Qt_5 5.9.0~rc _ZTI18QWaylandXdgShellV6@Qt_5 5.10.1 + _ZTI18QWaylandXdgSurface@Qt_5 5.12.2 _ZTI19QWaylandQuickOutput@Qt_5 5.7.0 _ZTI19QWaylandSeatPrivate@Qt_5_PRIVATE_API 5.9.0~rc + _ZTI19QWaylandXdgToplevel@Qt_5 5.12.2 _ZTI20QWaylandQuickSurface@Qt_5 5.7.0 _ZTI20QWaylandShellPrivate@Qt_5_PRIVATE_API 5.9.0~rc _ZTI20QWaylandShellSurface@Qt_5 5.7.0 @@ -2812,8 +3317,10 @@ _ZTI21QWaylandKeymapPrivate@Qt_5_PRIVATE_API 5.9.0~rc _ZTI21QWaylandOutputPrivate@Qt_5_PRIVATE_API 5.7.0 _ZTI21QWaylandShellTemplateI15QWaylandWlShellE@Qt_5 5.9.0~rc + _ZTI21QWaylandShellTemplateI16QWaylandXdgShellE@Qt_5 5.12.2 _ZTI21QWaylandShellTemplateI18QWaylandXdgShellV5E@Qt_5 5.9.0~rc _ZTI21QWaylandShellTemplateI18QWaylandXdgShellV6E@Qt_5 5.10.1 + _ZTI21QWaylandXdgPositioner@Qt_5_PRIVATE_API 5.12.2 _ZTI21QWaylandXdgToplevelV6@Qt_5 5.10.1 _ZTI22QWaylandIviApplication@Qt_5 5.9.0~rc _ZTI22QWaylandPointerPrivate@Qt_5_PRIVATE_API 5.7.0 @@ -2825,7 +3332,9 @@ _ZTI23QWaylandKeyboardPrivate@Qt_5_PRIVATE_API 5.7.0 _ZTI23QWaylandQtWindowManager@Qt_5 5.9.0~rc _ZTI23QWaylandQuickCompositor@Qt_5 5.7.0 + _ZTI23QWaylandXdgPopupPrivate@Qt_5_PRIVATE_API 5.12.2 _ZTI23QWaylandXdgPositionerV6@Qt_5_PRIVATE_API 5.10.1 + _ZTI23QWaylandXdgShellPrivate@Qt_5_PRIVATE_API 5.12.2 _ZTI24QWaylandTextInputManager@Qt_5 5.7.0 _ZTI24QWaylandTextInputPrivate@Qt_5_PRIVATE_API 5.7.0 _ZTI25QWaylandCompositorPrivate@Qt_5_PRIVATE_API 5.7.0 @@ -2834,12 +3343,15 @@ _ZTI25QWaylandXdgPopupV6Private@Qt_5_PRIVATE_API 5.10.1 _ZTI25QWaylandXdgShellV5Private@Qt_5_PRIVATE_API 5.9.0~rc _ZTI25QWaylandXdgShellV6Private@Qt_5_PRIVATE_API 5.10.1 + _ZTI25QWaylandXdgSurfacePrivate@Qt_5_PRIVATE_API 5.12.2 _ZTI26QWaylandQuickHardwareLayer@Qt_5_PRIVATE_API 5.11.1 + _ZTI26QWaylandXdgToplevelPrivate@Qt_5_PRIVATE_API 5.12.2 _ZTI27QWaylandCompositorExtension@Qt_5 5.7.0 _ZTI27QWaylandXdgSurfaceV5Private@Qt_5_PRIVATE_API 5.9.0~rc _ZTI27QWaylandXdgSurfaceV6Private@Qt_5_PRIVATE_API 5.10.1 _ZTI28QWaylandShellSurfaceTemplateI18QWaylandIviSurfaceE@Qt_5 5.9.0~rc _ZTI28QWaylandShellSurfaceTemplateI18QWaylandXdgPopupV5E@Qt_5 5.9.0~rc + _ZTI28QWaylandShellSurfaceTemplateI18QWaylandXdgSurfaceE@Qt_5 5.12.2 _ZTI28QWaylandShellSurfaceTemplateI20QWaylandXdgSurfaceV5E@Qt_5 5.9.0~rc _ZTI28QWaylandShellSurfaceTemplateI20QWaylandXdgSurfaceV6E@Qt_5 5.10.1 _ZTI28QWaylandShellSurfaceTemplateI22QWaylandWlShellSurfaceE@Qt_5 5.7.0 @@ -2850,17 +3362,23 @@ _ZTI29QWaylandQuickShellSurfaceItem@Qt_5 5.7.0 _ZTI29QWaylandWlShellSurfacePrivate@Qt_5_PRIVATE_API 5.7.0 _ZTI30QWaylandQtWindowManagerPrivate@Qt_5_PRIVATE_API 5.9.0~rc + _ZTI30QWaylandXdgDecorationManagerV1@Qt_5 5.12.2 _ZTI31QWaylandTextInputManagerPrivate@Qt_5_PRIVATE_API 5.7.0 + _ZTI31QWaylandXdgToplevelDecorationV1@Qt_5_PRIVATE_API 5.12.2 _ZTI33QWaylandInputMethodControlPrivate@Qt_5_PRIVATE_API 5.7.0 _ZTI34QWaylandCompositorExtensionPrivate@Qt_5_PRIVATE_API 5.7.0 _ZTI35QWaylandCompositorExtensionTemplateI22QWaylandIviApplicationE@Qt_5 5.9.0~rc _ZTI35QWaylandCompositorExtensionTemplateI23QWaylandQtWindowManagerE@Qt_5 5.9.0~rc _ZTI35QWaylandCompositorExtensionTemplateI24QWaylandTextInputManagerE@Qt_5 5.7.0 + _ZTI35QWaylandCompositorExtensionTemplateI30QWaylandXdgDecorationManagerV1E@Qt_5 5.12.2 _ZTI36QWaylandQuickShellSurfaceItemPrivate@Qt_5_PRIVATE_API 5.7.0 + _ZTI37QWaylandXdgDecorationManagerV1Private@Qt_5_PRIVATE_API 5.12.2 _ZTIN15QtWaylandServer10wl_pointer8ResourceE@Qt_5 5.7.0 _ZTIN15QtWaylandServer10wl_pointerE@Qt_5 5.7.0 _ZTIN15QtWaylandServer10wl_surface8ResourceE@Qt_5 5.7.0 _ZTIN15QtWaylandServer10wl_surfaceE@Qt_5 5.7.0 + _ZTIN15QtWaylandServer10zqt_key_v18ResourceE@Qt_5 5.12.2 + _ZTIN15QtWaylandServer10zqt_key_v1E@Qt_5 5.12.2 _ZTIN15QtWaylandServer11ivi_surface8ResourceE@Qt_5 5.9.0~rc _ZTIN15QtWaylandServer11ivi_surfaceE@Qt_5 5.9.0~rc _ZTIN15QtWaylandServer11wl_callback8ResourceE@Qt_5 5.7.0 @@ -2871,6 +3389,14 @@ _ZTIN15QtWaylandServer11wl_shm_poolE@Qt_5 5.7.0 _ZTIN15QtWaylandServer11xdg_surface8ResourceE@Qt_5 5.7.0 _ZTIN15QtWaylandServer11xdg_surfaceE@Qt_5 5.7.0 + _ZTIN15QtWaylandServer11xdg_wm_base8ResourceE@Qt_5 5.12.2 + _ZTIN15QtWaylandServer11xdg_wm_baseE@Qt_5 5.12.2 + _ZTIN15QtWaylandServer12xdg_popup_v58ResourceE@Qt_5 5.12.2 + _ZTIN15QtWaylandServer12xdg_popup_v5E@Qt_5 5.12.2 + _ZTIN15QtWaylandServer12xdg_shell_v58ResourceE@Qt_5 5.12.2 + _ZTIN15QtWaylandServer12xdg_shell_v5E@Qt_5 5.12.2 + _ZTIN15QtWaylandServer12xdg_toplevel8ResourceE@Qt_5 5.12.2 + _ZTIN15QtWaylandServer12xdg_toplevelE@Qt_5 5.12.2 _ZTIN15QtWaylandServer13wl_compositor8ResourceE@Qt_5 5.7.0 _ZTIN15QtWaylandServer13wl_compositorE@Qt_5 5.7.0 _ZTIN15QtWaylandServer13wl_data_offer8ResourceE@Qt_5 5.7.0 @@ -2885,12 +3411,14 @@ _ZTIN15QtWaylandServer14wl_data_deviceE@Qt_5 5.7.0 _ZTIN15QtWaylandServer14wl_data_source8ResourceE@Qt_5 5.7.0 _ZTIN15QtWaylandServer14wl_data_sourceE@Qt_5 5.7.0 + _ZTIN15QtWaylandServer14xdg_positioner8ResourceE@Qt_5 5.12.2 + _ZTIN15QtWaylandServer14xdg_positionerE@Qt_5 5.12.2 + _ZTIN15QtWaylandServer14xdg_surface_v58ResourceE@Qt_5 5.12.2 + _ZTIN15QtWaylandServer14xdg_surface_v5E@Qt_5 5.12.2 _ZTIN15QtWaylandServer15ivi_application8ResourceE@Qt_5 5.9.0~rc _ZTIN15QtWaylandServer15ivi_applicationE@Qt_5 5.9.0~rc _ZTIN15QtWaylandServer15zxdg_surface_v68ResourceE@Qt_5 5.10.1 _ZTIN15QtWaylandServer15zxdg_surface_v6E@Qt_5 5.10.1 - _ZTIN15QtWaylandServer16qt_key_extension8ResourceE@Qt_5 5.7.0 - _ZTIN15QtWaylandServer16qt_key_extensionE@Qt_5 5.7.0 _ZTIN15QtWaylandServer16qt_server_buffer8ResourceE@Qt_5 5.7.0 _ZTIN15QtWaylandServer16qt_server_bufferE@Qt_5 5.7.0 _ZTIN15QtWaylandServer16qt_windowmanager8ResourceE@Qt_5 5.7.0 @@ -2913,6 +3441,10 @@ _ZTIN15QtWaylandServer23qt_hardware_integrationE@Qt_5 5.7.0 _ZTIN15QtWaylandServer25zwp_text_input_manager_v28ResourceE@Qt_5 5.7.0 _ZTIN15QtWaylandServer25zwp_text_input_manager_v2E@Qt_5 5.7.0 + _ZTIN15QtWaylandServer26zxdg_decoration_manager_v18ResourceE@Qt_5 5.12.2 + _ZTIN15QtWaylandServer26zxdg_decoration_manager_v1E@Qt_5 5.12.2 + _ZTIN15QtWaylandServer27zxdg_toplevel_decoration_v18ResourceE@Qt_5 5.12.2 + _ZTIN15QtWaylandServer27zxdg_toplevel_decoration_v1E@Qt_5 5.12.2 _ZTIN15QtWaylandServer6wl_shm8ResourceE@Qt_5 5.7.0 _ZTIN15QtWaylandServer6wl_shmE@Qt_5 5.7.0 _ZTIN15QtWaylandServer7wl_seat8ResourceE@Qt_5 5.7.0 @@ -2929,8 +3461,6 @@ _ZTIN15QtWaylandServer9wl_regionE@Qt_5 5.7.0 _ZTIN15QtWaylandServer9xdg_popup8ResourceE@Qt_5 5.7.0 _ZTIN15QtWaylandServer9xdg_popupE@Qt_5 5.7.0 - _ZTIN15QtWaylandServer9xdg_shell8ResourceE@Qt_5 5.7.0 - _ZTIN15QtWaylandServer9xdg_shellE@Qt_5 5.7.0 _ZTIN22QWaylandSurfacePrivate10SubsurfaceE@Qt_5_PRIVATE_API 5.7.0 _ZTIN9QtWayland12ClientBufferE@Qt_5_PRIVATE_API 5.9.0~rc _ZTIN9QtWayland12ServerBufferE@Qt_5_PRIVATE_API 5.7.0 @@ -2956,6 +3486,8 @@ _ZTS15QWaylandSurface@Qt_5 5.7.0 _ZTS15QWaylandWlShell@Qt_5 5.7.0 _ZTS16QWaylandKeyboard@Qt_5 5.7.0 + _ZTS16QWaylandXdgPopup@Qt_5 5.12.2 + _ZTS16QWaylandXdgShell@Qt_5 5.12.2 _ZTS17QWaylandQuickItem@Qt_5 5.7.0 _ZTS18QWaylandCompositor@Qt_5 5.7.0 _ZTS18QWaylandIviSurface@Qt_5 5.9.0~rc @@ -2963,8 +3495,10 @@ _ZTS18QWaylandXdgPopupV6@Qt_5 5.10.1 _ZTS18QWaylandXdgShellV5@Qt_5 5.9.0~rc _ZTS18QWaylandXdgShellV6@Qt_5 5.10.1 + _ZTS18QWaylandXdgSurface@Qt_5 5.12.2 _ZTS19QWaylandQuickOutput@Qt_5 5.7.0 _ZTS19QWaylandSeatPrivate@Qt_5_PRIVATE_API 5.9.0~rc + _ZTS19QWaylandXdgToplevel@Qt_5 5.12.2 _ZTS20QWaylandQuickSurface@Qt_5 5.7.0 _ZTS20QWaylandShellPrivate@Qt_5_PRIVATE_API 5.9.0~rc _ZTS20QWaylandShellSurface@Qt_5 5.7.0 @@ -2974,8 +3508,10 @@ _ZTS21QWaylandKeymapPrivate@Qt_5_PRIVATE_API 5.9.0~rc _ZTS21QWaylandOutputPrivate@Qt_5_PRIVATE_API 5.7.0 _ZTS21QWaylandShellTemplateI15QWaylandWlShellE@Qt_5 5.9.0~rc + _ZTS21QWaylandShellTemplateI16QWaylandXdgShellE@Qt_5 5.12.2 _ZTS21QWaylandShellTemplateI18QWaylandXdgShellV5E@Qt_5 5.9.0~rc _ZTS21QWaylandShellTemplateI18QWaylandXdgShellV6E@Qt_5 5.10.1 + _ZTS21QWaylandXdgPositioner@Qt_5_PRIVATE_API 5.12.2 _ZTS21QWaylandXdgToplevelV6@Qt_5 5.10.1 _ZTS22QWaylandIviApplication@Qt_5 5.9.0~rc _ZTS22QWaylandPointerPrivate@Qt_5_PRIVATE_API 5.7.0 @@ -2987,7 +3523,9 @@ _ZTS23QWaylandKeyboardPrivate@Qt_5_PRIVATE_API 5.7.0 _ZTS23QWaylandQtWindowManager@Qt_5 5.9.0~rc _ZTS23QWaylandQuickCompositor@Qt_5 5.7.0 + _ZTS23QWaylandXdgPopupPrivate@Qt_5_PRIVATE_API 5.12.2 _ZTS23QWaylandXdgPositionerV6@Qt_5_PRIVATE_API 5.10.1 + _ZTS23QWaylandXdgShellPrivate@Qt_5_PRIVATE_API 5.12.2 _ZTS24QWaylandTextInputManager@Qt_5 5.7.0 _ZTS24QWaylandTextInputPrivate@Qt_5_PRIVATE_API 5.7.0 _ZTS25QWaylandCompositorPrivate@Qt_5_PRIVATE_API 5.7.0 @@ -2996,12 +3534,15 @@ _ZTS25QWaylandXdgPopupV6Private@Qt_5_PRIVATE_API 5.10.1 _ZTS25QWaylandXdgShellV5Private@Qt_5_PRIVATE_API 5.9.0~rc _ZTS25QWaylandXdgShellV6Private@Qt_5_PRIVATE_API 5.10.1 + _ZTS25QWaylandXdgSurfacePrivate@Qt_5_PRIVATE_API 5.12.2 _ZTS26QWaylandQuickHardwareLayer@Qt_5_PRIVATE_API 5.11.1 + _ZTS26QWaylandXdgToplevelPrivate@Qt_5_PRIVATE_API 5.12.2 _ZTS27QWaylandCompositorExtension@Qt_5 5.7.0 _ZTS27QWaylandXdgSurfaceV5Private@Qt_5_PRIVATE_API 5.9.0~rc _ZTS27QWaylandXdgSurfaceV6Private@Qt_5_PRIVATE_API 5.10.1 _ZTS28QWaylandShellSurfaceTemplateI18QWaylandIviSurfaceE@Qt_5 5.9.0~rc _ZTS28QWaylandShellSurfaceTemplateI18QWaylandXdgPopupV5E@Qt_5 5.9.0~rc + _ZTS28QWaylandShellSurfaceTemplateI18QWaylandXdgSurfaceE@Qt_5 5.12.2 _ZTS28QWaylandShellSurfaceTemplateI20QWaylandXdgSurfaceV5E@Qt_5 5.9.0~rc _ZTS28QWaylandShellSurfaceTemplateI20QWaylandXdgSurfaceV6E@Qt_5 5.10.1 _ZTS28QWaylandShellSurfaceTemplateI22QWaylandWlShellSurfaceE@Qt_5 5.7.0 @@ -3012,17 +3553,23 @@ _ZTS29QWaylandQuickShellSurfaceItem@Qt_5 5.7.0 _ZTS29QWaylandWlShellSurfacePrivate@Qt_5_PRIVATE_API 5.7.0 _ZTS30QWaylandQtWindowManagerPrivate@Qt_5_PRIVATE_API 5.9.0~rc + _ZTS30QWaylandXdgDecorationManagerV1@Qt_5 5.12.2 _ZTS31QWaylandTextInputManagerPrivate@Qt_5_PRIVATE_API 5.7.0 + _ZTS31QWaylandXdgToplevelDecorationV1@Qt_5_PRIVATE_API 5.12.2 _ZTS33QWaylandInputMethodControlPrivate@Qt_5_PRIVATE_API 5.7.0 _ZTS34QWaylandCompositorExtensionPrivate@Qt_5_PRIVATE_API 5.7.0 _ZTS35QWaylandCompositorExtensionTemplateI22QWaylandIviApplicationE@Qt_5 5.9.0~rc _ZTS35QWaylandCompositorExtensionTemplateI23QWaylandQtWindowManagerE@Qt_5 5.9.0~rc _ZTS35QWaylandCompositorExtensionTemplateI24QWaylandTextInputManagerE@Qt_5 5.7.0 + _ZTS35QWaylandCompositorExtensionTemplateI30QWaylandXdgDecorationManagerV1E@Qt_5 5.12.2 _ZTS36QWaylandQuickShellSurfaceItemPrivate@Qt_5_PRIVATE_API 5.7.0 + _ZTS37QWaylandXdgDecorationManagerV1Private@Qt_5_PRIVATE_API 5.12.2 _ZTSN15QtWaylandServer10wl_pointer8ResourceE@Qt_5 5.7.0 _ZTSN15QtWaylandServer10wl_pointerE@Qt_5 5.7.0 _ZTSN15QtWaylandServer10wl_surface8ResourceE@Qt_5 5.7.0 _ZTSN15QtWaylandServer10wl_surfaceE@Qt_5 5.7.0 + _ZTSN15QtWaylandServer10zqt_key_v18ResourceE@Qt_5 5.12.2 + _ZTSN15QtWaylandServer10zqt_key_v1E@Qt_5 5.12.2 _ZTSN15QtWaylandServer11ivi_surface8ResourceE@Qt_5 5.9.0~rc _ZTSN15QtWaylandServer11ivi_surfaceE@Qt_5 5.9.0~rc _ZTSN15QtWaylandServer11wl_callback8ResourceE@Qt_5 5.7.0 @@ -3033,6 +3580,14 @@ _ZTSN15QtWaylandServer11wl_shm_poolE@Qt_5 5.7.0 _ZTSN15QtWaylandServer11xdg_surface8ResourceE@Qt_5 5.7.0 _ZTSN15QtWaylandServer11xdg_surfaceE@Qt_5 5.7.0 + _ZTSN15QtWaylandServer11xdg_wm_base8ResourceE@Qt_5 5.12.2 + _ZTSN15QtWaylandServer11xdg_wm_baseE@Qt_5 5.12.2 + _ZTSN15QtWaylandServer12xdg_popup_v58ResourceE@Qt_5 5.12.2 + _ZTSN15QtWaylandServer12xdg_popup_v5E@Qt_5 5.12.2 + _ZTSN15QtWaylandServer12xdg_shell_v58ResourceE@Qt_5 5.12.2 + _ZTSN15QtWaylandServer12xdg_shell_v5E@Qt_5 5.12.2 + _ZTSN15QtWaylandServer12xdg_toplevel8ResourceE@Qt_5 5.12.2 + _ZTSN15QtWaylandServer12xdg_toplevelE@Qt_5 5.12.2 _ZTSN15QtWaylandServer13wl_compositor8ResourceE@Qt_5 5.7.0 _ZTSN15QtWaylandServer13wl_compositorE@Qt_5 5.7.0 _ZTSN15QtWaylandServer13wl_data_offer8ResourceE@Qt_5 5.7.0 @@ -3047,12 +3602,14 @@ _ZTSN15QtWaylandServer14wl_data_deviceE@Qt_5 5.7.0 _ZTSN15QtWaylandServer14wl_data_source8ResourceE@Qt_5 5.7.0 _ZTSN15QtWaylandServer14wl_data_sourceE@Qt_5 5.7.0 + _ZTSN15QtWaylandServer14xdg_positioner8ResourceE@Qt_5 5.12.2 + _ZTSN15QtWaylandServer14xdg_positionerE@Qt_5 5.12.2 + _ZTSN15QtWaylandServer14xdg_surface_v58ResourceE@Qt_5 5.12.2 + _ZTSN15QtWaylandServer14xdg_surface_v5E@Qt_5 5.12.2 _ZTSN15QtWaylandServer15ivi_application8ResourceE@Qt_5 5.9.0~rc _ZTSN15QtWaylandServer15ivi_applicationE@Qt_5 5.9.0~rc _ZTSN15QtWaylandServer15zxdg_surface_v68ResourceE@Qt_5 5.10.1 _ZTSN15QtWaylandServer15zxdg_surface_v6E@Qt_5 5.10.1 - _ZTSN15QtWaylandServer16qt_key_extension8ResourceE@Qt_5 5.7.0 - _ZTSN15QtWaylandServer16qt_key_extensionE@Qt_5 5.7.0 _ZTSN15QtWaylandServer16qt_server_buffer8ResourceE@Qt_5 5.7.0 _ZTSN15QtWaylandServer16qt_server_bufferE@Qt_5 5.7.0 _ZTSN15QtWaylandServer16qt_windowmanager8ResourceE@Qt_5 5.7.0 @@ -3075,6 +3632,10 @@ _ZTSN15QtWaylandServer23qt_hardware_integrationE@Qt_5 5.11.1 _ZTSN15QtWaylandServer25zwp_text_input_manager_v28ResourceE@Qt_5 5.11.1 _ZTSN15QtWaylandServer25zwp_text_input_manager_v2E@Qt_5 5.11.1 + _ZTSN15QtWaylandServer26zxdg_decoration_manager_v18ResourceE@Qt_5 5.12.2 + _ZTSN15QtWaylandServer26zxdg_decoration_manager_v1E@Qt_5 5.12.2 + _ZTSN15QtWaylandServer27zxdg_toplevel_decoration_v18ResourceE@Qt_5 5.12.2 + _ZTSN15QtWaylandServer27zxdg_toplevel_decoration_v1E@Qt_5 5.12.2 _ZTSN15QtWaylandServer6wl_shm8ResourceE@Qt_5 5.11.1 _ZTSN15QtWaylandServer6wl_shmE@Qt_5 5.11.1 _ZTSN15QtWaylandServer7wl_seat8ResourceE@Qt_5 5.11.1 @@ -3091,8 +3652,6 @@ _ZTSN15QtWaylandServer9wl_regionE@Qt_5 5.11.1 _ZTSN15QtWaylandServer9xdg_popup8ResourceE@Qt_5 5.11.1 _ZTSN15QtWaylandServer9xdg_popupE@Qt_5 5.11.1 - _ZTSN15QtWaylandServer9xdg_shell8ResourceE@Qt_5 5.11.1 - _ZTSN15QtWaylandServer9xdg_shellE@Qt_5 5.11.1 _ZTSN22QWaylandSurfacePrivate10SubsurfaceE@Qt_5_PRIVATE_API 5.11.1 _ZTSN9QtWayland12ClientBufferE@Qt_5_PRIVATE_API 5.11.1 _ZTSN9QtWayland12ServerBufferE@Qt_5_PRIVATE_API 5.11.1 @@ -3118,6 +3677,8 @@ _ZTV15QWaylandSurface@Qt_5 5.7.0 _ZTV15QWaylandWlShell@Qt_5 5.7.0 _ZTV16QWaylandKeyboard@Qt_5 5.7.0 + _ZTV16QWaylandXdgPopup@Qt_5 5.12.2 + _ZTV16QWaylandXdgShell@Qt_5 5.12.2 _ZTV17QWaylandQuickItem@Qt_5 5.7.0 _ZTV18QWaylandCompositor@Qt_5 5.7.0 _ZTV18QWaylandIviSurface@Qt_5 5.9.0~rc @@ -3125,8 +3686,10 @@ _ZTV18QWaylandXdgPopupV6@Qt_5 5.10.1 _ZTV18QWaylandXdgShellV5@Qt_5 5.9.0~rc _ZTV18QWaylandXdgShellV6@Qt_5 5.10.1 + _ZTV18QWaylandXdgSurface@Qt_5 5.12.2 _ZTV19QWaylandQuickOutput@Qt_5 5.7.0 _ZTV19QWaylandSeatPrivate@Qt_5_PRIVATE_API 5.9.0~rc + _ZTV19QWaylandXdgToplevel@Qt_5 5.12.2 _ZTV20QWaylandQuickSurface@Qt_5 5.7.0 _ZTV20QWaylandShellPrivate@Qt_5_PRIVATE_API 5.9.0~rc _ZTV20QWaylandShellSurface@Qt_5 5.7.0 @@ -3135,6 +3698,7 @@ _ZTV20QWaylandXdgSurfaceV6@Qt_5 5.10.1 _ZTV21QWaylandKeymapPrivate@Qt_5_PRIVATE_API 5.9.0~rc _ZTV21QWaylandOutputPrivate@Qt_5_PRIVATE_API 5.7.0 + _ZTV21QWaylandXdgPositioner@Qt_5_PRIVATE_API 5.12.2 _ZTV21QWaylandXdgToplevelV6@Qt_5 5.10.1 _ZTV22QWaylandIviApplication@Qt_5 5.9.0~rc _ZTV22QWaylandPointerPrivate@Qt_5_PRIVATE_API 5.7.0 @@ -3146,7 +3710,9 @@ _ZTV23QWaylandKeyboardPrivate@Qt_5_PRIVATE_API 5.7.0 _ZTV23QWaylandQtWindowManager@Qt_5 5.9.0~rc _ZTV23QWaylandQuickCompositor@Qt_5 5.7.0 + _ZTV23QWaylandXdgPopupPrivate@Qt_5_PRIVATE_API 5.12.2 _ZTV23QWaylandXdgPositionerV6@Qt_5_PRIVATE_API 5.10.1 + _ZTV23QWaylandXdgShellPrivate@Qt_5_PRIVATE_API 5.12.2 _ZTV24QWaylandTextInputManager@Qt_5 5.7.0 _ZTV24QWaylandTextInputPrivate@Qt_5_PRIVATE_API 5.7.0 _ZTV25QWaylandCompositorPrivate@Qt_5_PRIVATE_API 5.7.0 @@ -3155,7 +3721,9 @@ _ZTV25QWaylandXdgPopupV6Private@Qt_5_PRIVATE_API 5.10.1 _ZTV25QWaylandXdgShellV5Private@Qt_5_PRIVATE_API 5.9.0~rc _ZTV25QWaylandXdgShellV6Private@Qt_5_PRIVATE_API 5.10.1 + _ZTV25QWaylandXdgSurfacePrivate@Qt_5_PRIVATE_API 5.12.2 _ZTV26QWaylandQuickHardwareLayer@Qt_5_PRIVATE_API 5.11.1 + _ZTV26QWaylandXdgToplevelPrivate@Qt_5_PRIVATE_API 5.12.2 _ZTV27QWaylandCompositorExtension@Qt_5 5.7.0 _ZTV27QWaylandXdgSurfaceV5Private@Qt_5_PRIVATE_API 5.9.0~rc _ZTV27QWaylandXdgSurfaceV6Private@Qt_5_PRIVATE_API 5.10.1 @@ -3166,17 +3734,23 @@ _ZTV29QWaylandQuickShellSurfaceItem@Qt_5 5.7.0 _ZTV29QWaylandWlShellSurfacePrivate@Qt_5_PRIVATE_API 5.7.0 _ZTV30QWaylandQtWindowManagerPrivate@Qt_5_PRIVATE_API 5.9.0~rc + _ZTV30QWaylandXdgDecorationManagerV1@Qt_5 5.12.2 _ZTV31QWaylandTextInputManagerPrivate@Qt_5_PRIVATE_API 5.7.0 + _ZTV31QWaylandXdgToplevelDecorationV1@Qt_5_PRIVATE_API 5.12.2 _ZTV33QWaylandInputMethodControlPrivate@Qt_5_PRIVATE_API 5.7.0 _ZTV34QWaylandCompositorExtensionPrivate@Qt_5_PRIVATE_API 5.7.0 _ZTV35QWaylandCompositorExtensionTemplateI22QWaylandIviApplicationE@Qt_5 5.9.0~rc _ZTV35QWaylandCompositorExtensionTemplateI23QWaylandQtWindowManagerE@Qt_5 5.9.0~rc _ZTV35QWaylandCompositorExtensionTemplateI24QWaylandTextInputManagerE@Qt_5 5.7.0 + _ZTV35QWaylandCompositorExtensionTemplateI30QWaylandXdgDecorationManagerV1E@Qt_5 5.12.2 _ZTV36QWaylandQuickShellSurfaceItemPrivate@Qt_5_PRIVATE_API 5.7.0 + _ZTV37QWaylandXdgDecorationManagerV1Private@Qt_5_PRIVATE_API 5.12.2 _ZTVN15QtWaylandServer10wl_pointer8ResourceE@Qt_5 5.7.0 _ZTVN15QtWaylandServer10wl_pointerE@Qt_5 5.7.0 _ZTVN15QtWaylandServer10wl_surface8ResourceE@Qt_5 5.7.0 _ZTVN15QtWaylandServer10wl_surfaceE@Qt_5 5.7.0 + _ZTVN15QtWaylandServer10zqt_key_v18ResourceE@Qt_5 5.12.2 + _ZTVN15QtWaylandServer10zqt_key_v1E@Qt_5 5.12.2 _ZTVN15QtWaylandServer11ivi_surface8ResourceE@Qt_5 5.9.0~rc _ZTVN15QtWaylandServer11ivi_surfaceE@Qt_5 5.9.0~rc _ZTVN15QtWaylandServer11wl_callback8ResourceE@Qt_5 5.7.0 @@ -3187,6 +3761,14 @@ _ZTVN15QtWaylandServer11wl_shm_poolE@Qt_5 5.7.0 _ZTVN15QtWaylandServer11xdg_surface8ResourceE@Qt_5 5.7.0 _ZTVN15QtWaylandServer11xdg_surfaceE@Qt_5 5.7.0 + _ZTVN15QtWaylandServer11xdg_wm_base8ResourceE@Qt_5 5.12.2 + _ZTVN15QtWaylandServer11xdg_wm_baseE@Qt_5 5.12.2 + _ZTVN15QtWaylandServer12xdg_popup_v58ResourceE@Qt_5 5.12.2 + _ZTVN15QtWaylandServer12xdg_popup_v5E@Qt_5 5.12.2 + _ZTVN15QtWaylandServer12xdg_shell_v58ResourceE@Qt_5 5.12.2 + _ZTVN15QtWaylandServer12xdg_shell_v5E@Qt_5 5.12.2 + _ZTVN15QtWaylandServer12xdg_toplevel8ResourceE@Qt_5 5.12.2 + _ZTVN15QtWaylandServer12xdg_toplevelE@Qt_5 5.12.2 _ZTVN15QtWaylandServer13wl_compositor8ResourceE@Qt_5 5.7.0 _ZTVN15QtWaylandServer13wl_compositorE@Qt_5 5.7.0 _ZTVN15QtWaylandServer13wl_data_offer8ResourceE@Qt_5 5.7.0 @@ -3201,12 +3783,14 @@ _ZTVN15QtWaylandServer14wl_data_deviceE@Qt_5 5.7.0 _ZTVN15QtWaylandServer14wl_data_source8ResourceE@Qt_5 5.7.0 _ZTVN15QtWaylandServer14wl_data_sourceE@Qt_5 5.7.0 + _ZTVN15QtWaylandServer14xdg_positioner8ResourceE@Qt_5 5.12.2 + _ZTVN15QtWaylandServer14xdg_positionerE@Qt_5 5.12.2 + _ZTVN15QtWaylandServer14xdg_surface_v58ResourceE@Qt_5 5.12.2 + _ZTVN15QtWaylandServer14xdg_surface_v5E@Qt_5 5.12.2 _ZTVN15QtWaylandServer15ivi_application8ResourceE@Qt_5 5.9.0~rc _ZTVN15QtWaylandServer15ivi_applicationE@Qt_5 5.9.0~rc _ZTVN15QtWaylandServer15zxdg_surface_v68ResourceE@Qt_5 5.10.1 _ZTVN15QtWaylandServer15zxdg_surface_v6E@Qt_5 5.10.1 - _ZTVN15QtWaylandServer16qt_key_extension8ResourceE@Qt_5 5.7.0 - _ZTVN15QtWaylandServer16qt_key_extensionE@Qt_5 5.7.0 _ZTVN15QtWaylandServer16qt_server_buffer8ResourceE@Qt_5 5.7.0 _ZTVN15QtWaylandServer16qt_server_bufferE@Qt_5 5.7.0 _ZTVN15QtWaylandServer16qt_windowmanager8ResourceE@Qt_5 5.7.0 @@ -3229,6 +3813,10 @@ _ZTVN15QtWaylandServer23qt_hardware_integrationE@Qt_5 5.7.0 _ZTVN15QtWaylandServer25zwp_text_input_manager_v28ResourceE@Qt_5 5.7.0 _ZTVN15QtWaylandServer25zwp_text_input_manager_v2E@Qt_5 5.7.0 + _ZTVN15QtWaylandServer26zxdg_decoration_manager_v18ResourceE@Qt_5 5.12.2 + _ZTVN15QtWaylandServer26zxdg_decoration_manager_v1E@Qt_5 5.12.2 + _ZTVN15QtWaylandServer27zxdg_toplevel_decoration_v18ResourceE@Qt_5 5.12.2 + _ZTVN15QtWaylandServer27zxdg_toplevel_decoration_v1E@Qt_5 5.12.2 _ZTVN15QtWaylandServer6wl_shm8ResourceE@Qt_5 5.7.0 _ZTVN15QtWaylandServer6wl_shmE@Qt_5 5.7.0 _ZTVN15QtWaylandServer7wl_seat8ResourceE@Qt_5 5.7.0 @@ -3245,8 +3833,6 @@ _ZTVN15QtWaylandServer9wl_regionE@Qt_5 5.7.0 _ZTVN15QtWaylandServer9xdg_popup8ResourceE@Qt_5 5.7.0 _ZTVN15QtWaylandServer9xdg_popupE@Qt_5 5.7.0 - _ZTVN15QtWaylandServer9xdg_shell8ResourceE@Qt_5 5.7.0 - _ZTVN15QtWaylandServer9xdg_shellE@Qt_5 5.7.0 _ZTVN22QWaylandSurfacePrivate10SubsurfaceE@Qt_5_PRIVATE_API 5.7.0 _ZTVN9QtWayland12ClientBufferE@Qt_5_PRIVATE_API 5.9.0~rc _ZTVN9QtWayland12ServerBufferE@Qt_5_PRIVATE_API 5.7.0 @@ -3332,40 +3918,68 @@ (c++)"non-virtual thunk to QWaylandWlShellSurfacePrivate::shell_surface_set_toplevel(QtWaylandServer::wl_shell_surface::Resource*)@Qt_5_PRIVATE_API" 5.7.0 (c++)"non-virtual thunk to QWaylandWlShellSurfacePrivate::shell_surface_set_transient(QtWaylandServer::wl_shell_surface::Resource*, wl_resource*, int, int, unsigned int)@Qt_5_PRIVATE_API" 5.7.0 (c++)"non-virtual thunk to QWaylandWlShellSurfacePrivate::~QWaylandWlShellSurfacePrivate()@Qt_5_PRIVATE_API" 5.7.0 - (c++)"non-virtual thunk to QWaylandXdgPopupV5Private::xdg_popup_destroy(QtWaylandServer::xdg_popup::Resource*)@Qt_5_PRIVATE_API" 5.9.0~rc - (c++)"non-virtual thunk to QWaylandXdgPopupV5Private::xdg_popup_destroy_resource(QtWaylandServer::xdg_popup::Resource*)@Qt_5_PRIVATE_API" 5.9.0~rc + (c++)"non-virtual thunk to QWaylandXdgDecorationManagerV1Private::zxdg_decoration_manager_v1_get_toplevel_decoration(QtWaylandServer::zxdg_decoration_manager_v1::Resource*, unsigned int, wl_resource*)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgPopupPrivate::xdg_popup_destroy(QtWaylandServer::xdg_popup::Resource*)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgPopupPrivate::xdg_popup_grab(QtWaylandServer::xdg_popup::Resource*, wl_resource*, unsigned int)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgPopupV5Private::xdg_popup_destroy(QtWaylandServer::xdg_popup_v5::Resource*)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgPopupV5Private::xdg_popup_destroy_resource(QtWaylandServer::xdg_popup_v5::Resource*)@Qt_5_PRIVATE_API" 5.12.2 (c++)"non-virtual thunk to QWaylandXdgPopupV6Private::zxdg_popup_v6_destroy(QtWaylandServer::zxdg_popup_v6::Resource*)@Qt_5_PRIVATE_API" 5.10.1 (c++)"non-virtual thunk to QWaylandXdgPopupV6Private::zxdg_popup_v6_grab(QtWaylandServer::zxdg_popup_v6::Resource*, wl_resource*, unsigned int)@Qt_5_PRIVATE_API" 5.10.1 - (c++)"non-virtual thunk to QWaylandXdgShellV5Private::xdg_shell_destroy(QtWaylandServer::xdg_shell::Resource*)@Qt_5_PRIVATE_API" 5.9.0~rc - (c++)"non-virtual thunk to QWaylandXdgShellV5Private::xdg_shell_get_xdg_popup(QtWaylandServer::xdg_shell::Resource*, unsigned int, wl_resource*, wl_resource*, wl_resource*, unsigned int, int, int)@Qt_5_PRIVATE_API" 5.9.0~rc - (c++)"non-virtual thunk to QWaylandXdgShellV5Private::xdg_shell_get_xdg_surface(QtWaylandServer::xdg_shell::Resource*, unsigned int, wl_resource*)@Qt_5_PRIVATE_API" 5.9.0~rc - (c++)"non-virtual thunk to QWaylandXdgShellV5Private::xdg_shell_pong(QtWaylandServer::xdg_shell::Resource*, unsigned int)@Qt_5_PRIVATE_API" 5.9.0~rc - (c++)"non-virtual thunk to QWaylandXdgShellV5Private::xdg_shell_use_unstable_version(QtWaylandServer::xdg_shell::Resource*, int)@Qt_5_PRIVATE_API" 5.9.0~rc + (c++)"non-virtual thunk to QWaylandXdgShellPrivate::xdg_wm_base_create_positioner(QtWaylandServer::xdg_wm_base::Resource*, unsigned int)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgShellPrivate::xdg_wm_base_destroy(QtWaylandServer::xdg_wm_base::Resource*)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgShellPrivate::xdg_wm_base_get_xdg_surface(QtWaylandServer::xdg_wm_base::Resource*, unsigned int, wl_resource*)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgShellPrivate::xdg_wm_base_pong(QtWaylandServer::xdg_wm_base::Resource*, unsigned int)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgShellV5Private::xdg_shell_destroy(QtWaylandServer::xdg_shell_v5::Resource*)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgShellV5Private::xdg_shell_get_xdg_popup(QtWaylandServer::xdg_shell_v5::Resource*, unsigned int, wl_resource*, wl_resource*, wl_resource*, unsigned int, int, int)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgShellV5Private::xdg_shell_get_xdg_surface(QtWaylandServer::xdg_shell_v5::Resource*, unsigned int, wl_resource*)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgShellV5Private::xdg_shell_pong(QtWaylandServer::xdg_shell_v5::Resource*, unsigned int)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgShellV5Private::xdg_shell_use_unstable_version(QtWaylandServer::xdg_shell_v5::Resource*, int)@Qt_5_PRIVATE_API" 5.12.2 (c++)"non-virtual thunk to QWaylandXdgShellV6Private::zxdg_shell_v6_create_positioner(QtWaylandServer::zxdg_shell_v6::Resource*, unsigned int)@Qt_5_PRIVATE_API" 5.10.1 (c++)"non-virtual thunk to QWaylandXdgShellV6Private::zxdg_shell_v6_destroy(QtWaylandServer::zxdg_shell_v6::Resource*)@Qt_5_PRIVATE_API" 5.10.1 (c++)"non-virtual thunk to QWaylandXdgShellV6Private::zxdg_shell_v6_get_xdg_surface(QtWaylandServer::zxdg_shell_v6::Resource*, unsigned int, wl_resource*)@Qt_5_PRIVATE_API" 5.10.1 (c++)"non-virtual thunk to QWaylandXdgShellV6Private::zxdg_shell_v6_pong(QtWaylandServer::zxdg_shell_v6::Resource*, unsigned int)@Qt_5_PRIVATE_API" 5.10.1 - (c++)"non-virtual thunk to QWaylandXdgSurfaceV5Private::xdg_surface_ack_configure(QtWaylandServer::xdg_surface::Resource*, unsigned int)@Qt_5_PRIVATE_API" 5.9.0~rc - (c++)"non-virtual thunk to QWaylandXdgSurfaceV5Private::xdg_surface_destroy(QtWaylandServer::xdg_surface::Resource*)@Qt_5_PRIVATE_API" 5.9.0~rc - (c++)"non-virtual thunk to QWaylandXdgSurfaceV5Private::xdg_surface_destroy_resource(QtWaylandServer::xdg_surface::Resource*)@Qt_5_PRIVATE_API" 5.9.0~rc - (c++)"non-virtual thunk to QWaylandXdgSurfaceV5Private::xdg_surface_move(QtWaylandServer::xdg_surface::Resource*, wl_resource*, unsigned int)@Qt_5_PRIVATE_API" 5.9.0~rc - (c++)"non-virtual thunk to QWaylandXdgSurfaceV5Private::xdg_surface_resize(QtWaylandServer::xdg_surface::Resource*, wl_resource*, unsigned int, unsigned int)@Qt_5_PRIVATE_API" 5.9.0~rc - (c++)"non-virtual thunk to QWaylandXdgSurfaceV5Private::xdg_surface_set_app_id(QtWaylandServer::xdg_surface::Resource*, QString const&)@Qt_5_PRIVATE_API" 5.9.0~rc - (c++)"non-virtual thunk to QWaylandXdgSurfaceV5Private::xdg_surface_set_fullscreen(QtWaylandServer::xdg_surface::Resource*, wl_resource*)@Qt_5_PRIVATE_API" 5.9.0~rc - (c++)"non-virtual thunk to QWaylandXdgSurfaceV5Private::xdg_surface_set_maximized(QtWaylandServer::xdg_surface::Resource*)@Qt_5_PRIVATE_API" 5.9.0~rc - (c++)"non-virtual thunk to QWaylandXdgSurfaceV5Private::xdg_surface_set_minimized(QtWaylandServer::xdg_surface::Resource*)@Qt_5_PRIVATE_API" 5.9.0~rc - (c++)"non-virtual thunk to QWaylandXdgSurfaceV5Private::xdg_surface_set_parent(QtWaylandServer::xdg_surface::Resource*, wl_resource*)@Qt_5_PRIVATE_API" 5.9.0~rc - (c++)"non-virtual thunk to QWaylandXdgSurfaceV5Private::xdg_surface_set_title(QtWaylandServer::xdg_surface::Resource*, QString const&)@Qt_5_PRIVATE_API" 5.9.0~rc - (c++)"non-virtual thunk to QWaylandXdgSurfaceV5Private::xdg_surface_set_window_geometry(QtWaylandServer::xdg_surface::Resource*, int, int, int, int)@Qt_5_PRIVATE_API" 5.9.0~rc - (c++)"non-virtual thunk to QWaylandXdgSurfaceV5Private::xdg_surface_show_window_menu(QtWaylandServer::xdg_surface::Resource*, wl_resource*, unsigned int, int, int)@Qt_5_PRIVATE_API" 5.9.0~rc - (c++)"non-virtual thunk to QWaylandXdgSurfaceV5Private::xdg_surface_unset_fullscreen(QtWaylandServer::xdg_surface::Resource*)@Qt_5_PRIVATE_API" 5.9.0~rc - (c++)"non-virtual thunk to QWaylandXdgSurfaceV5Private::xdg_surface_unset_maximized(QtWaylandServer::xdg_surface::Resource*)@Qt_5_PRIVATE_API" 5.9.0~rc + (c++)"non-virtual thunk to QWaylandXdgSurfacePrivate::xdg_surface_ack_configure(QtWaylandServer::xdg_surface::Resource*, unsigned int)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgSurfacePrivate::xdg_surface_destroy(QtWaylandServer::xdg_surface::Resource*)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgSurfacePrivate::xdg_surface_destroy_resource(QtWaylandServer::xdg_surface::Resource*)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgSurfacePrivate::xdg_surface_get_popup(QtWaylandServer::xdg_surface::Resource*, unsigned int, wl_resource*, wl_resource*)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgSurfacePrivate::xdg_surface_get_toplevel(QtWaylandServer::xdg_surface::Resource*, unsigned int)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgSurfacePrivate::xdg_surface_set_window_geometry(QtWaylandServer::xdg_surface::Resource*, int, int, int, int)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgSurfaceV5Private::xdg_surface_ack_configure(QtWaylandServer::xdg_surface_v5::Resource*, unsigned int)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgSurfaceV5Private::xdg_surface_destroy(QtWaylandServer::xdg_surface_v5::Resource*)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgSurfaceV5Private::xdg_surface_destroy_resource(QtWaylandServer::xdg_surface_v5::Resource*)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgSurfaceV5Private::xdg_surface_move(QtWaylandServer::xdg_surface_v5::Resource*, wl_resource*, unsigned int)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgSurfaceV5Private::xdg_surface_resize(QtWaylandServer::xdg_surface_v5::Resource*, wl_resource*, unsigned int, unsigned int)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgSurfaceV5Private::xdg_surface_set_app_id(QtWaylandServer::xdg_surface_v5::Resource*, QString const&)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgSurfaceV5Private::xdg_surface_set_fullscreen(QtWaylandServer::xdg_surface_v5::Resource*, wl_resource*)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgSurfaceV5Private::xdg_surface_set_maximized(QtWaylandServer::xdg_surface_v5::Resource*)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgSurfaceV5Private::xdg_surface_set_minimized(QtWaylandServer::xdg_surface_v5::Resource*)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgSurfaceV5Private::xdg_surface_set_parent(QtWaylandServer::xdg_surface_v5::Resource*, wl_resource*)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgSurfaceV5Private::xdg_surface_set_title(QtWaylandServer::xdg_surface_v5::Resource*, QString const&)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgSurfaceV5Private::xdg_surface_set_window_geometry(QtWaylandServer::xdg_surface_v5::Resource*, int, int, int, int)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgSurfaceV5Private::xdg_surface_show_window_menu(QtWaylandServer::xdg_surface_v5::Resource*, wl_resource*, unsigned int, int, int)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgSurfaceV5Private::xdg_surface_unset_fullscreen(QtWaylandServer::xdg_surface_v5::Resource*)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgSurfaceV5Private::xdg_surface_unset_maximized(QtWaylandServer::xdg_surface_v5::Resource*)@Qt_5_PRIVATE_API" 5.12.2 (c++)"non-virtual thunk to QWaylandXdgSurfaceV6Private::zxdg_surface_v6_ack_configure(QtWaylandServer::zxdg_surface_v6::Resource*, unsigned int)@Qt_5_PRIVATE_API" 5.10.1 (c++)"non-virtual thunk to QWaylandXdgSurfaceV6Private::zxdg_surface_v6_destroy(QtWaylandServer::zxdg_surface_v6::Resource*)@Qt_5_PRIVATE_API" 5.10.1 (c++)"non-virtual thunk to QWaylandXdgSurfaceV6Private::zxdg_surface_v6_destroy_resource(QtWaylandServer::zxdg_surface_v6::Resource*)@Qt_5_PRIVATE_API" 5.10.1 (c++)"non-virtual thunk to QWaylandXdgSurfaceV6Private::zxdg_surface_v6_get_popup(QtWaylandServer::zxdg_surface_v6::Resource*, unsigned int, wl_resource*, wl_resource*)@Qt_5_PRIVATE_API" 5.10.1 (c++)"non-virtual thunk to QWaylandXdgSurfaceV6Private::zxdg_surface_v6_get_toplevel(QtWaylandServer::zxdg_surface_v6::Resource*, unsigned int)@Qt_5_PRIVATE_API" 5.10.1 (c++)"non-virtual thunk to QWaylandXdgSurfaceV6Private::zxdg_surface_v6_set_window_geometry(QtWaylandServer::zxdg_surface_v6::Resource*, int, int, int, int)@Qt_5_PRIVATE_API" 5.10.1 + (c++)"non-virtual thunk to QWaylandXdgToplevelPrivate::xdg_toplevel_destroy(QtWaylandServer::xdg_toplevel::Resource*)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgToplevelPrivate::xdg_toplevel_destroy_resource(QtWaylandServer::xdg_toplevel::Resource*)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgToplevelPrivate::xdg_toplevel_move(QtWaylandServer::xdg_toplevel::Resource*, wl_resource*, unsigned int)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgToplevelPrivate::xdg_toplevel_resize(QtWaylandServer::xdg_toplevel::Resource*, wl_resource*, unsigned int, unsigned int)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgToplevelPrivate::xdg_toplevel_set_app_id(QtWaylandServer::xdg_toplevel::Resource*, QString const&)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgToplevelPrivate::xdg_toplevel_set_fullscreen(QtWaylandServer::xdg_toplevel::Resource*, wl_resource*)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgToplevelPrivate::xdg_toplevel_set_max_size(QtWaylandServer::xdg_toplevel::Resource*, int, int)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgToplevelPrivate::xdg_toplevel_set_maximized(QtWaylandServer::xdg_toplevel::Resource*)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgToplevelPrivate::xdg_toplevel_set_min_size(QtWaylandServer::xdg_toplevel::Resource*, int, int)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgToplevelPrivate::xdg_toplevel_set_minimized(QtWaylandServer::xdg_toplevel::Resource*)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgToplevelPrivate::xdg_toplevel_set_parent(QtWaylandServer::xdg_toplevel::Resource*, wl_resource*)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgToplevelPrivate::xdg_toplevel_set_title(QtWaylandServer::xdg_toplevel::Resource*, QString const&)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgToplevelPrivate::xdg_toplevel_show_window_menu(QtWaylandServer::xdg_toplevel::Resource*, wl_resource*, unsigned int, int, int)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgToplevelPrivate::xdg_toplevel_unset_fullscreen(QtWaylandServer::xdg_toplevel::Resource*)@Qt_5_PRIVATE_API" 5.12.2 + (c++)"non-virtual thunk to QWaylandXdgToplevelPrivate::xdg_toplevel_unset_maximized(QtWaylandServer::xdg_toplevel::Resource*)@Qt_5_PRIVATE_API" 5.12.2 (c++)"non-virtual thunk to QWaylandXdgToplevelV6Private::zxdg_toplevel_v6_destroy(QtWaylandServer::zxdg_toplevel_v6::Resource*)@Qt_5_PRIVATE_API" 5.10.1 (c++)"non-virtual thunk to QWaylandXdgToplevelV6Private::zxdg_toplevel_v6_destroy_resource(QtWaylandServer::zxdg_toplevel_v6::Resource*)@Qt_5_PRIVATE_API" 5.10.1 (c++)"non-virtual thunk to QWaylandXdgToplevelV6Private::zxdg_toplevel_v6_move(QtWaylandServer::zxdg_toplevel_v6::Resource*, wl_resource*, unsigned int)@Qt_5_PRIVATE_API" 5.10.1 @@ -3382,17 +3996,24 @@ (c++)"non-virtual thunk to QWaylandXdgToplevelV6Private::zxdg_toplevel_v6_unset_fullscreen(QtWaylandServer::zxdg_toplevel_v6::Resource*)@Qt_5_PRIVATE_API" 5.10.1 (c++)"non-virtual thunk to QWaylandXdgToplevelV6Private::zxdg_toplevel_v6_unset_maximized(QtWaylandServer::zxdg_toplevel_v6::Resource*)@Qt_5_PRIVATE_API" 5.10.1 qt_hardware_integration_interface@Qt_5 5.7.0 - qt_key_extension_interface@Qt_5 5.7.0 qt_server_buffer_interface@Qt_5 5.7.0 qt_touch_extension_interface@Qt_5 5.7.0 qt_windowmanager_interface@Qt_5 5.7.0 xdg_popup_interface@Qt_5 5.7.0 - xdg_shell_interface@Qt_5 5.7.0 + xdg_popup_v5_interface@Qt_5 5.12.2 + xdg_positioner_interface@Qt_5 5.12.2 + xdg_shell_v5_interface@Qt_5 5.12.2 xdg_surface_interface@Qt_5 5.7.0 + xdg_surface_v5_interface@Qt_5 5.12.2 + xdg_toplevel_interface@Qt_5 5.12.2 + xdg_wm_base_interface@Qt_5 5.12.2 + zqt_key_v1_interface@Qt_5 5.12.2 zwp_text_input_manager_v2_interface@Qt_5 5.7.0 zwp_text_input_v2_interface@Qt_5 5.7.0 + zxdg_decoration_manager_v1_interface@Qt_5 5.12.2 zxdg_popup_v6_interface@Qt_5 5.10.1 zxdg_positioner_v6_interface@Qt_5 5.10.1 zxdg_shell_v6_interface@Qt_5 5.10.1 zxdg_surface_v6_interface@Qt_5 5.10.1 + zxdg_toplevel_decoration_v1_interface@Qt_5 5.12.2 zxdg_toplevel_v6_interface@Qt_5 5.10.1 diff -Nru qtwayland-opensource-src-5.11.3/dist/changes-5.12.0 qtwayland-opensource-src-5.12.2/dist/changes-5.12.0 --- qtwayland-opensource-src-5.11.3/dist/changes-5.12.0 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/dist/changes-5.12.0 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,105 @@ +Qt 5.12 introduces many new features and improvements as well as bugfixes +over the 5.11.x series. For more details, refer to the online documentation +included in this distribution. The documentation is also available online: + +https://doc.qt.io/qt-5/index.html + +The Qt version 5.12 series is binary compatible with the 5.11.x series. +Applications compiled for 5.11 will continue to run with 5.12. + +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. + +**************************************************************************** +* Compositor * +**************************************************************************** + + - [QTBUG-66784] Added APIs for xdg-shell stable. + - xdg-shell unstable v5 is now deprecated. Existing compositors should + migrate to unstable v6 or stable. + - Features for server buffer integrations have been renamed. + "drm-egl-server" is now "wayland-drm-egl-server-buffer" and + "libhybris-egl-server" is "wayland-libhybris-egl-server-buffer". + - [QTBUG-49809] Added support for wl_subsurface.place_above and + place_below in WaylandQuickItem. + - QWaylandQuickItem::sendMouseMoveEvent was added to allow sending + generated mouse move events from QML. + - Added API for installing a socket on which bind() and listen() have + already been called into the event dispatch loop. This facilitates + socket-activated compositors. + - Added a new categorized logging namespace "qt.waylandcompositor" and + renamed "qt.compositor.input.methods" to + "qt.waylandcompositor.inputmethods". + - Fixed a bug where some signals on QWaylandSurface were emitted before + all double buffered state had been applied. + - [QTBUG-70163] Fixed a bug where destroying a WaylandQuickItem would + delete the OpenGL texture for all other WaylandQuickItems using that + surface. + - Fixed a bug that caused some clients to abort in libwayland when a + surface left an output. + - Fixed an issue where the WaylandOutput.window QML property had to be set + before the WaylandOutput.sizeFollowsWindow property. + - Fixed a bug where outputAdded was not emitted if a new output was added + through QWaylandCompositor::setDefaultOutput. + + - xdg-shell v6: + * Requests to enter/exit fullscreen mode are now handled. + * Minimum and maximum sizes are now respected when resizing. + * Fixed an edge case in moving an initially maximized XdgShellV6 surface + to windowed mode. + * ShellSurfaceItems now re-issue configure requests with updated sizes + when the size or available geometry changes on an output used by a + maximized or fullscreen surface. + + - wl-shell: + * ShellSurfaceItems now re-issue configure requests with updated sizes + when the size or available geometry changes on output used by a + maximized or fullscreen surface. + +**************************************************************************** +* QPA plugin * +**************************************************************************** + + - [QTBUG-66783] Added support for xdg-shell stable. + - [QTBUG-69746] Added client-side support for the + xdg-decoration-unstable-v1 Wayland extension. Qt clients will now let + the compositor draw the window decorations if configured through this + extension. + - [QTBUG-68834] The window decorations have had a redesign, they now use + the window background color instead of the blue gradient. + - QT_WAYLAND_SHELL_INTEGRATION environment variable now accepts a + semicolon-separated list of shell integrations. + - [QTBUG-68838] Deprecated the shell integrations for + xdg-shell-unstable-v5 and wl-shell. The stable version of xdg-shell + should be used instead. + - All shell integrations have been moved to plugins. + - Window decorations are now automatically disabled for ivi-application. + - Added support for xdg-output-unstable-v1 + - Font and UI scaling is now based on the screen scale factor rather than + the physical DPI. The logical DPI is set to 96 unless overridden by the + the environment variable QT_WAYLAND_FORCE_DPI, which may be set to a + specific DPI or to "physical" to get the old behavior. + - Cursors now follow the device pixel ratio of the current screen. + - Cursor themes are now loaded on-demand, leading to significant memory + savings in some cases. + - Fixed a bug where QSurfaceFormat::renderableType() was ignored when + creating an OpenGL context. + - Fixed a bug where the arrow cursor would be shown instead of the resize + cursor when hovering over the window decoration border. + - [QTBUG-70242][QTBUG-68605][QTBUG-67601] Fixed a bug where offscreen + surfaces would get surfaceless EGL contexts. + + - xdg-shell v6: + * Fixed a bug where maximized windows would resize to their unmaximized + size if the compositor sent an invalid configure event. + * Fixed a bug where buffers were sometimes attached and committed before + the first configure event, causing protocol errors. + * [QTBUG-63417][QTBUG-63748] Implemented support for maximizing, + minimizing, and setting fullscreen with xdg-shell unstable v6. + * [QTBUG-53702] QWindow::isActive now follows configure events on + xdg-shell unstable v6 (like v5). diff -Nru qtwayland-opensource-src-5.11.3/dist/changes-5.12.1 qtwayland-opensource-src-5.12.2/dist/changes-5.12.1 --- qtwayland-opensource-src-5.11.3/dist/changes-5.12.1 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/dist/changes-5.12.1 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,40 @@ +Qt 5.12.1 is a bug-fix release. It maintains both forward and backward +compatibility (source and binary) with Qt 5.12.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.12 series is binary compatible with the 5.11.x series. +Applications compiled for 5.11 will continue to run with 5.12. + +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. + +**************************************************************************** +* Compositor * +**************************************************************************** + + - [QTBUG-71697] Added a new hardware-integration supporting eglstreams on + NVIDIA platforms. It can be enabled by setting + QT_WAYLAND_CLIENT_BUFFER_INTEGRATION=wayland-eglstream-controller in the + environment. This fixes showing a black frame when resizing client windows. + In addition some flickering problems got fixed, which happened when + the client repainted very often or running without window decorations. + +**************************************************************************** +* QPA plugin * +**************************************************************************** + + - [QTBUG-71734] Fixed a protocol error that used to happen when closing a menu + with an active tooltip. + - [QTBUG-72235] Fixed a crash caused by compositors sending incorrect pointer + events. + - [QTBUG-72818] Fixed a bug where surface damage for window decorations was + outside the surface. diff -Nru qtwayland-opensource-src-5.11.3/dist/changes-5.12.2 qtwayland-opensource-src-5.12.2/dist/changes-5.12.2 --- qtwayland-opensource-src-5.11.3/dist/changes-5.12.2 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/dist/changes-5.12.2 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,24 @@ +Qt 5.12.2 is a bug-fix release. It maintains both forward and backward +compatibility (source and binary) with Qt 5.12.0 through 5.12.1. + +For more details, refer to the online documentation included in this +distribution. The documentation is also available online: + +https://doc.qt.io/qt-5/index.html + +The Qt version 5.12 series is binary compatible with the 5.11.x series. +Applications compiled for 5.11 will continue to run with 5.12. + +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. + +**************************************************************************** +* QPA plugin * +**************************************************************************** + + - [QTBUG-73524] Fixed a crash that sometimes happened when switching popups. diff -Nru qtwayland-opensource-src-5.11.3/examples/wayland/hwlayer-compositor/main.qml qtwayland-opensource-src-5.12.2/examples/wayland/hwlayer-compositor/main.qml --- qtwayland-opensource-src-5.11.3/examples/wayland/hwlayer-compositor/main.qml 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/examples/wayland/hwlayer-compositor/main.qml 2019-02-21 12:36:59.000000000 +0000 @@ -51,7 +51,7 @@ import QtQuick 2.6 import QtQuick.Window 2.2 import QtQuick.Controls 2.2 -import QtWayland.Compositor 1.2 +import QtWayland.Compositor 1.3 WaylandCompositor { WaylandOutput { @@ -155,7 +155,7 @@ function addShellSurface(shellSurface) { shellSurfaces.append({shSurface: shellSurface, animatePosition: false, animateOpacity: false, level: 0}); } - WlShell { onWlShellSurfaceCreated: addShellSurface(shellSurface) } - XdgShellV5 { onXdgSurfaceCreated: addShellSurface(xdgSurface) } + XdgShell { onToplevelCreated: addShellSurface(xdgSurface) } XdgShellV6 { onToplevelCreated: addShellSurface(xdgSurface) } + WlShell { onWlShellSurfaceCreated: addShellSurface(shellSurface) } } diff -Nru qtwayland-opensource-src-5.11.3/examples/wayland/minimal-cpp/compositor.cpp qtwayland-opensource-src-5.12.2/examples/wayland/minimal-cpp/compositor.cpp --- qtwayland-opensource-src-5.11.3/examples/wayland/minimal-cpp/compositor.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/examples/wayland/minimal-cpp/compositor.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -51,9 +51,12 @@ #include "compositor.h" #include "window.h" -#include -#include -#include +#include +#include +#include +#include + +#include #include QOpenGLTexture *View::getTexture() { @@ -62,9 +65,30 @@ return m_texture; } +QPoint View::mapToLocal(const QPoint &globalPos) const +{ + return globalPos - globalPosition(); +} + + +// Normally, an IVI based compositor would have a design where each window has +// a defined position, based on the id. In this example, we just assign a random position. + +void View::initPosition(const QSize &screenSize, const QSize &surfaceSize) +{ + if (m_positionSet) + return; + QRandomGenerator rand(iviId()); + int xrange = qMax(screenSize.width() - surfaceSize.width(), 1); + int yrange = qMax(screenSize.height() - surfaceSize.height(), 1); + setGlobalPosition(QPoint(rand.bounded(xrange), rand.bounded(yrange))); +} + Compositor::Compositor(Window *window) : m_window(window) { + window->setCompositor(this); + connect(window, &Window::glReady, this, [this] { create(); }); } Compositor::~Compositor() @@ -74,7 +98,7 @@ void Compositor::create() { QWaylandOutput *output = new QWaylandOutput(this, m_window); - QWaylandOutputMode mode(QSize(800, 600), 60000); + QWaylandOutputMode mode(m_window->size(), 60000); output->addMode(mode, true); QWaylandCompositor::create(); output->setCurrentMode(mode); @@ -83,11 +107,84 @@ connect(m_iviApplication, &QWaylandIviApplication::iviSurfaceCreated, this, &Compositor::onIviSurfaceCreated); } +View *Compositor::viewAt(const QPoint &position) +{ + // Since views are stored in painting order (back to front), we have to iterate backwards + // to find the topmost view at a given point. + for (auto it = m_views.crbegin(); it != m_views.crend(); ++it) { + View *view = *it; + if (view->globalGeometry().contains(position)) + return view; + } + return nullptr; +} + +void Compositor::raise(View *view) +{ + m_views.removeAll(view); + m_views.append(view); + defaultSeat()->setKeyboardFocus(view->surface()); + triggerRender(); +} + +static inline QPoint mapToView(const View *view, const QPoint &position) +{ + return view ? view->mapToLocal(position) : position; +} + +void Compositor::handleMousePress(const QPoint &position, Qt::MouseButton button) +{ + if (!m_mouseView) { + if (m_mouseView = viewAt(position)) + raise(m_mouseView); + } + auto *seat = defaultSeat(); + seat->sendMouseMoveEvent(m_mouseView, mapToView(m_mouseView, position)); + seat->sendMousePressEvent(button); +} + +void Compositor::handleMouseRelease(const QPoint &position, Qt::MouseButton button, Qt::MouseButtons buttons) +{ + auto *seat = defaultSeat(); + seat->sendMouseMoveEvent(m_mouseView, mapToView(m_mouseView, position)); + seat->sendMouseReleaseEvent(button); + + if (buttons == Qt::NoButton) { + View *newView = viewAt(position); + if (newView != m_mouseView) + seat->sendMouseMoveEvent(newView, mapToView(newView, position)); + m_mouseView = nullptr; + } +} + +void Compositor::handleMouseMove(const QPoint &position) +{ + View *view = m_mouseView ? m_mouseView.data() : viewAt(position); + defaultSeat()->sendMouseMoveEvent(view, mapToView(view, position)); +} + +void Compositor::handleMouseWheel(Qt::Orientation orientation, int delta) +{ + defaultSeat()->sendMouseWheelEvent(orientation, delta); +} + +void Compositor::handleKeyPress(quint32 nativeScanCode) +{ + defaultSeat()->sendKeyPressEvent(nativeScanCode); +} + +void Compositor::handleKeyRelease(quint32 nativeScanCode) +{ + defaultSeat()->sendKeyReleaseEvent(nativeScanCode); +} + + void Compositor::onIviSurfaceCreated(QWaylandIviSurface *iviSurface) { View *view = new View(iviSurface->iviId()); view->setSurface(iviSurface->surface()); view->setOutput(outputFor(m_window)); + m_views << view; connect(view, &QWaylandView::surfaceDestroyed, this, &Compositor::viewSurfaceDestroyed); connect(iviSurface->surface(), &QWaylandSurface::redraw, this, &Compositor::triggerRender); @@ -103,6 +200,7 @@ View *view = qobject_cast(sender()); m_views.removeAll(view); delete view; + triggerRender(); } void Compositor::triggerRender() diff -Nru qtwayland-opensource-src-5.11.3/examples/wayland/minimal-cpp/compositor.h qtwayland-opensource-src-5.12.2/examples/wayland/minimal-cpp/compositor.h --- qtwayland-opensource-src-5.11.3/examples/wayland/minimal-cpp/compositor.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/examples/wayland/minimal-cpp/compositor.h 2019-02-21 12:36:59.000000000 +0000 @@ -54,6 +54,7 @@ #include #include #include +#include QT_BEGIN_NAMESPACE @@ -66,12 +67,23 @@ { Q_OBJECT public: - View(int iviId) : m_iviId(iviId) {} + explicit View(int iviId) : m_iviId(iviId) {} QOpenGLTexture *getTexture(); int iviId() const { return m_iviId; } + + QRect globalGeometry() const { return QRect(globalPosition(), surface()->size()); } + void setGlobalPosition(const QPoint &globalPos) { m_pos = globalPos; m_positionSet = true; } + QPoint globalPosition() const { return m_pos; } + QPoint mapToLocal(const QPoint &globalPos) const; + QSize size() const { return surface() ? surface()->size() : QSize(); } + + void initPosition(const QSize &screenSize, const QSize &surfaceSize); + private: friend class Compositor; QOpenGLTexture *m_texture = nullptr; + bool m_positionSet = false; + QPoint m_pos; int m_iviId; }; @@ -84,6 +96,16 @@ void create() override; QList views() const { return m_views; } + View *viewAt(const QPoint &position); + void raise(View *view); + + void handleMousePress(const QPoint &position, Qt::MouseButton button); + void handleMouseRelease(const QPoint &position, Qt::MouseButton button, Qt::MouseButtons buttons); + void handleMouseMove(const QPoint &position); + void handleMouseWheel(Qt::Orientation orientation, int delta); + + void handleKeyPress(quint32 nativeScanCode); + void handleKeyRelease(quint32 nativeScanCode); void startRender(); void endRender(); @@ -98,6 +120,7 @@ Window *m_window = nullptr; QWaylandIviApplication *m_iviApplication = nullptr; QList m_views; + QPointer m_mouseView; }; QT_END_NAMESPACE diff -Nru qtwayland-opensource-src-5.11.3/examples/wayland/minimal-cpp/main.cpp qtwayland-opensource-src-5.12.2/examples/wayland/minimal-cpp/main.cpp --- qtwayland-opensource-src-5.11.3/examples/wayland/minimal-cpp/main.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/examples/wayland/minimal-cpp/main.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -57,10 +57,8 @@ QGuiApplication app(argc, argv); Window window; - Compositor compositor(&window); - window.setCompositor(&compositor); - compositor.create(); window.resize(800,600); + Compositor compositor(&window); window.show(); return app.exec(); diff -Nru qtwayland-opensource-src-5.11.3/examples/wayland/minimal-cpp/window.cpp qtwayland-opensource-src-5.12.2/examples/wayland/minimal-cpp/window.cpp --- qtwayland-opensource-src-5.11.3/examples/wayland/minimal-cpp/window.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/examples/wayland/minimal-cpp/window.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -55,7 +55,7 @@ #include #include #include -#include +#include Window::Window() { @@ -68,14 +68,7 @@ void Window::initializeGL() { m_textureBlitter.create(); -} - -static QPoint sillyrandom(int seed, QSize screenSize, QSize surfaceSize) -{ - QRandomGenerator rand(seed); - int xrange = qMax(screenSize.width() - surfaceSize.width(), 200); - int yrange = qMax(screenSize.height() - surfaceSize.height(), 200); - return QPoint(rand.bounded(xrange), rand.bounded(yrange)); + emit glReady(); } void Window::paintGL() @@ -91,7 +84,8 @@ functions->glEnable(GL_BLEND); functions->glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - Q_FOREACH (View *view, m_compositor->views()) { + const auto views = m_compositor->views(); + for (View *view : views) { auto texture = view->getTexture(); if (!texture) continue; @@ -103,7 +97,8 @@ QWaylandSurface *surface = view->surface(); if (surface && surface->hasContent()) { QSize s = surface->size(); - QPointF pos = sillyrandom(view->iviId(), size(), s); + view->initPosition(size(), s); + QPointF pos = view->globalPosition(); QRectF surfaceGeometry(pos, s); QOpenGLTextureBlitter::Origin surfaceOrigin = view->currentBuffer().origin() == QWaylandSurface::OriginTopLeft @@ -116,3 +111,33 @@ m_textureBlitter.release(); m_compositor->endRender(); } + +void Window::mousePressEvent(QMouseEvent *event) +{ + m_compositor->handleMousePress(event->localPos().toPoint(), event->button()); +} + +void Window::mouseReleaseEvent(QMouseEvent *event) +{ + m_compositor->handleMouseRelease(event->localPos().toPoint(), event->button(), event->buttons()); +} + +void Window::mouseMoveEvent(QMouseEvent *event) +{ + m_compositor->handleMouseMove(event->localPos().toPoint()); +} + +void Window::wheelEvent(QWheelEvent *event) +{ + m_compositor->handleMouseWheel(event->orientation(), event->delta()); +} + +void Window::keyPressEvent(QKeyEvent *e) +{ + m_compositor->handleKeyPress(e->nativeScanCode()); +} + +void Window::keyReleaseEvent(QKeyEvent *e) +{ + m_compositor->handleKeyRelease(e->nativeScanCode()); +} diff -Nru qtwayland-opensource-src-5.11.3/examples/wayland/minimal-cpp/window.h qtwayland-opensource-src-5.12.2/examples/wayland/minimal-cpp/window.h --- qtwayland-opensource-src-5.11.3/examples/wayland/minimal-cpp/window.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/examples/wayland/minimal-cpp/window.h 2019-02-21 12:36:59.000000000 +0000 @@ -60,13 +60,24 @@ class Window : public QOpenGLWindow { + Q_OBJECT public: Window(); void setCompositor(Compositor *comp); +signals: + void glReady(); + protected: void initializeGL() override; void paintGL() override; + void mousePressEvent(QMouseEvent *event) override; + void mouseReleaseEvent(QMouseEvent *event) override; + void mouseMoveEvent(QMouseEvent *event) override; + void wheelEvent(QWheelEvent *) override; + + void keyPressEvent(QKeyEvent *e) override; + void keyReleaseEvent(QKeyEvent *e) override; private: QOpenGLTextureBlitter m_textureBlitter; diff -Nru qtwayland-opensource-src-5.11.3/examples/wayland/minimal-qml/main.qml qtwayland-opensource-src-5.12.2/examples/wayland/minimal-qml/main.qml --- qtwayland-opensource-src-5.11.3/examples/wayland/minimal-qml/main.qml 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/examples/wayland/minimal-qml/main.qml 2019-02-21 12:36:59.000000000 +0000 @@ -50,7 +50,7 @@ import QtQuick 2.6 import QtQuick.Window 2.2 -import QtWayland.Compositor 1.1 +import QtWayland.Compositor 1.3 WaylandCompositor { // The output defines the screen. @@ -67,6 +67,7 @@ // resize/move, and forwarding of mouse and keyboard // events to the client process. ShellSurfaceItem { + autoCreatePopupItems: true shellSurface: modelData onSurfaceDestroyed: shellSurfaces.remove(index) } @@ -74,7 +75,7 @@ } } // Extensions are additions to the core Wayland - // protocol. We choose to support two different + // protocol. We choose to support three different // shells (window management protocols). When the // client creates a new shell surface (i.e. a window) // we append it to our list of shellSurfaces. @@ -86,5 +87,9 @@ onToplevelCreated: shellSurfaces.append({shellSurface: xdgSurface}); } + XdgShell { + onToplevelCreated: + shellSurfaces.append({shellSurface: xdgSurface}); + } ListModel { id: shellSurfaces } } diff -Nru qtwayland-opensource-src-5.11.3/examples/wayland/multi-screen/qml/Chrome.qml qtwayland-opensource-src-5.12.2/examples/wayland/multi-screen/qml/Chrome.qml --- qtwayland-opensource-src-5.11.3/examples/wayland/multi-screen/qml/Chrome.qml 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/examples/wayland/multi-screen/qml/Chrome.qml 2019-02-21 12:36:59.000000000 +0000 @@ -63,6 +63,7 @@ ShellSurfaceItem { id: surfaceItem + autoCreatePopupItems: true onSurfaceDestroyed: chrome.destroy(); } diff -Nru qtwayland-opensource-src-5.11.3/examples/wayland/multi-screen/qml/main.qml qtwayland-opensource-src-5.12.2/examples/wayland/multi-screen/qml/main.qml --- qtwayland-opensource-src-5.11.3/examples/wayland/multi-screen/qml/main.qml 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/examples/wayland/multi-screen/qml/main.qml 2019-02-21 12:36:59.000000000 +0000 @@ -52,7 +52,7 @@ import QtQml 2.2 import QtQuick 2.0 import QtQuick.Window 2.3 as Window -import QtWayland.Compositor 1.0 +import QtWayland.Compositor 1.3 import QtQml.Models 2.1 WaylandCompositor { @@ -100,9 +100,12 @@ onWlShellSurfaceCreated: handleShellSurfaceCreated(shellSurface) } - XdgShellV5 { - onXdgSurfaceCreated: handleShellSurfaceCreated(xdgSurface) - onXdgPopupCreated: handleShellSurfaceCreated(xdgPopup) + XdgShellV6 { + onToplevelCreated: handleShellSurfaceCreated(xdgSurface) + } + + XdgShell { + onToplevelCreated: handleShellSurfaceCreated(xdgSurface) } function createShellSurfaceItem(shellSurface, moveItem, output) { diff -Nru qtwayland-opensource-src-5.11.3/examples/wayland/overview-compositor/main.qml qtwayland-opensource-src-5.12.2/examples/wayland/overview-compositor/main.qml --- qtwayland-opensource-src-5.11.3/examples/wayland/overview-compositor/main.qml 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/examples/wayland/overview-compositor/main.qml 2019-02-21 12:36:59.000000000 +0000 @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2017 The Qt Company Ltd. +** Copyright (C) 2018 The Qt Company Ltd. ** Contact: http://www.qt-project.org/legal ** ** This file is part of the examples of the Qt Toolkit. @@ -49,8 +49,8 @@ ****************************************************************************/ import QtQuick 2.7 -import QtWayland.Compositor 1.0 -import QtQuick.Window 2.0 +import QtWayland.Compositor 1.3 +import QtQuick.Window 2.3 import QtQuick.Controls 2.0 WaylandCompositor { @@ -58,18 +58,24 @@ sizeFollowsWindow: true window: Window { id: win + + property int pixelWidth: width * screen.devicePixelRatio + property int pixelHeight: height * screen.devicePixelRatio + visible: true width: 1280 height: 720 + Grid { id: grid - anchors.fill: parent - columns: Math.ceil(Math.sqrt(shellSurfaces.count)) + property bool overview: true property int selected: 0 property int selectedColumn: selected % columns property int selectedRow: selected / columns + anchors.fill: parent + columns: Math.ceil(Math.sqrt(toplevels.count)) transform: [ Scale { xScale: grid.overview ? (1.0/grid.columns) : 1 @@ -86,15 +92,16 @@ ] Repeater { - model: shellSurfaces + model: toplevels Item { width: win.width height: win.height - WaylandQuickItem { + ShellSurfaceItem { anchors.fill: parent + shellSurface: xdgSurface + autoCreatePopupItems: true sizeFollowsSurface: false - surface: modelData.surface - onSurfaceDestroyed: shellSurfaces.remove(index) + onSurfaceDestroyed: toplevels.remove(index) } MouseArea { enabled: grid.overview @@ -116,19 +123,19 @@ } Shortcut { sequence: "space"; onActivated: grid.overview = !grid.overview } - Shortcut { sequence: "right"; onActivated: grid.selected = Math.min(grid.selected+1, shellSurfaces.count-1) } + Shortcut { sequence: "right"; onActivated: grid.selected = Math.min(grid.selected+1, toplevels.count-1) } Shortcut { sequence: "left"; onActivated: grid.selected = Math.max(grid.selected-1, 0) } Shortcut { sequence: "up"; onActivated: grid.selected = Math.max(grid.selected-grid.columns, 0) } - Shortcut { sequence: "down"; onActivated: grid.selected = Math.min(grid.selected+grid.columns, shellSurfaces.count-1) } + Shortcut { sequence: "down"; onActivated: grid.selected = Math.min(grid.selected+grid.columns, toplevels.count-1) } } } - ListModel { id: shellSurfaces } + ListModel { id: toplevels } - WlShell { - onWlShellSurfaceCreated: { - shellSurfaces.append({shellSurface: shellSurface}); - shellSurface.sendConfigure(Qt.size(win.width, win.height), WlShellSurface.NoneEdge); + XdgShell { + onToplevelCreated: { + toplevels.append({xdgSurface}); + toplevel.sendFullscreen(Qt.size(win.pixelWidth, win.pixelHeight)); } } } diff -Nru qtwayland-opensource-src-5.11.3/examples/wayland/pure-qml/qml/Chrome.qml qtwayland-opensource-src-5.12.2/examples/wayland/pure-qml/qml/Chrome.qml --- qtwayland-opensource-src-5.11.3/examples/wayland/pure-qml/qml/Chrome.qml 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/examples/wayland/pure-qml/qml/Chrome.qml 2019-02-21 12:36:59.000000000 +0000 @@ -52,15 +52,28 @@ import QtWayland.Compositor 1.0 ShellSurfaceItem { - id: rootChrome + id: chrome property bool isChild: parent.shellSurface !== undefined + signal destroyAnimationFinished + + // If the client asks to show popups on this surface, automatically create child ShellSurfaceItems + autoCreatePopupItems: true + onSurfaceDestroyed: { bufferLocked = true; destroyAnimation.start(); } + transform: [ + Scale { + id: scaleTransform + origin.x: chrome.width / 2 + origin.y: chrome.height / 2 + } + ] + Connections { target: shellSurface @@ -76,17 +89,19 @@ SequentialAnimation { id: destroyAnimation + ParallelAnimation { NumberAnimation { target: scaleTransform; property: "yScale"; to: 2/height; duration: 150 } NumberAnimation { target: scaleTransform; property: "xScale"; to: 0.4; duration: 150 } - NumberAnimation { target: rootChrome; property: "opacity"; to: rootChrome.isChild ? 0 : 1; duration: 150 } + NumberAnimation { target: chrome; property: "opacity"; to: chrome.isChild ? 0 : 1; duration: 150 } } NumberAnimation { target: scaleTransform; property: "xScale"; to: 0; duration: 150 } - ScriptAction { script: { rootChrome.destroy(); } } + ScriptAction { script: destroyAnimationFinished() } } SequentialAnimation { id: receivedFocusAnimation + ParallelAnimation { NumberAnimation { target: scaleTransform; property: "yScale"; to: 1.02; duration: 100; easing.type: Easing.OutQuad } NumberAnimation { target: scaleTransform; property: "xScale"; to: 1.02; duration: 100; easing.type: Easing.OutQuad } @@ -96,12 +111,4 @@ NumberAnimation { target: scaleTransform; property: "xScale"; to: 1; duration: 100; easing.type: Easing.InOutQuad } } } - - transform: [ - Scale { - id:scaleTransform - origin.x: rootChrome.width / 2 - origin.y: rootChrome.height / 2 - } - ] } diff -Nru qtwayland-opensource-src-5.11.3/examples/wayland/pure-qml/qml/Keyboard.qml qtwayland-opensource-src-5.12.2/examples/wayland/pure-qml/qml/Keyboard.qml --- qtwayland-opensource-src-5.11.3/examples/wayland/pure-qml/qml/Keyboard.qml 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/examples/wayland/pure-qml/qml/Keyboard.qml 2019-02-21 12:36:59.000000000 +0000 @@ -52,9 +52,8 @@ import QtQuick.VirtualKeyboard 2.1 InputPanel { - id: inputPanel visible: active - y: active ? parent.height - inputPanel.height : parent.height + y: active ? parent.height - height : parent.height anchors.left: parent.left anchors.right: parent.right } diff -Nru qtwayland-opensource-src-5.11.3/examples/wayland/pure-qml/qml/main.qml qtwayland-opensource-src-5.12.2/examples/wayland/pure-qml/qml/main.qml --- qtwayland-opensource-src-5.11.3/examples/wayland/pure-qml/qml/main.qml 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/examples/wayland/pure-qml/qml/main.qml 2019-02-21 12:36:59.000000000 +0000 @@ -49,71 +49,29 @@ ****************************************************************************/ import QtQuick 2.0 -import QtWayland.Compositor 1.1 +import QtWayland.Compositor 1.3 WaylandCompositor { - id: comp + id: waylandCompositor - property var primarySurfacesArea: null + Screen { id: screen; compositor: waylandCompositor } - Screen { - compositor: comp - } - - Component { - id: chromeComponent - Chrome { - } - } - - Component { - id: surfaceComponent - WaylandSurface { - } - } - - QtWindowManager { - id: qtWindowManager - onShowIsFullScreenChanged: console.debug("Show is fullscreen hint for Qt applications:", showIsFullScreen) - } - - WlShell { - onWlShellSurfaceCreated: { - chromeComponent.createObject(defaultOutput.surfaceArea, { "shellSurface": shellSurface } ); - } - } - - property variant viewsBySurface: ({}) - - XdgShellV5 { - onXdgSurfaceCreated: { - var item = chromeComponent.createObject(defaultOutput.surfaceArea, { "shellSurface": xdgSurface } ); - viewsBySurface[xdgSurface.surface] = item; - } - onXdgPopupCreated: { - var parentView = viewsBySurface[xdgPopup.parentSurface]; - var item = chromeComponent.createObject(parentView, { "shellSurface": xdgPopup } ); - viewsBySurface[xdgPopup.surface] = item; - } + // Shell surface extension. Needed to provide a window concept for Wayland clients. + // I.e. requests and events for maximization, minimization, resizing, closing etc. + XdgShell { + onToplevelCreated: screen.handleShellSurface(xdgSurface) } + // Unstable version of xdg-shell still used by some clients XdgShellV6 { - onToplevelCreated: { - var item = chromeComponent.createObject(defaultOutput.surfaceArea, { "shellSurface": xdgSurface } ); - viewsBySurface[xdgSurface.surface] = item; - } - onPopupCreated: { - var parentView = viewsBySurface[popup.parentXdgSurface.surface]; - var item = chromeComponent.createObject(parentView, { "shellSurface": xdgSurface } ); - viewsBySurface[xdgSurface.surface] = item; - } + onToplevelCreated: screen.handleShellSurface(xdgSurface) } - TextInputManager { + // Deprecated shell extension, still used by some clients + WlShell { + onWlShellSurfaceCreated: screen.handleShellSurface(shellSurface) } - onSurfaceRequested: { - var surface = surfaceComponent.createObject(comp, { } ); - surface.initialize(comp, client, id, version); - } + // Extension for Virtual keyboard support + TextInputManager {} } diff -Nru qtwayland-opensource-src-5.11.3/examples/wayland/pure-qml/qml/Screen.qml qtwayland-opensource-src-5.12.2/examples/wayland/pure-qml/qml/Screen.qml --- qtwayland-opensource-src-5.11.3/examples/wayland/pure-qml/qml/Screen.qml 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/examples/wayland/pure-qml/qml/Screen.qml 2019-02-21 12:36:59.000000000 +0000 @@ -54,49 +54,69 @@ WaylandOutput { id: output - property alias surfaceArea: background - sizeFollowsWindow: true - window: Window { - id: screen - property QtObject output + property ListModel shellSurfaces: ListModel {} + property bool isNestedCompositor: Qt.platform.pluginName.startsWith("wayland") || Qt.platform.pluginName === "xcb" + + function handleShellSurface(shellSurface) { + shellSurfaces.append({shellSurface: shellSurface}); + } + + // During development, it can be useful to start the compositor inside X11 or + // another Wayland compositor. In such cases, set sizeFollowsWindow to true to + // enable resizing of the compositor window to be forwarded to the Wayland clients + // as the output (screen) changing resolution. Consider setting it to false if you + // are running the compositor using eglfs, linuxfb or similar QPA backends. + sizeFollowsWindow: output.isNestedCompositor + window: Window { width: 1024 height: 760 visible: true WaylandMouseTracker { id: mouseTracker + anchors.fill: parent - windowSystemCursorEnabled: true + // Set this to false to disable the outer mouse cursor when running nested + // compositors. Otherwise you would see two mouse cursors, one for each compositor. + windowSystemCursorEnabled: output.isNestedCompositor + Image { id: background + anchors.fill: parent fillMode: Image.Tile source: "qrc:/images/background.jpg" smooth: true + + Repeater { + model: output.shellSurfaces + // Chrome displays a shell surface on the screen (See Chrome.qml) + Chrome { + shellSurface: modelData + onDestroyAnimationFinished: output.shellSurfaces.remove(index) + } + } } + + // Virtual Keyboard Loader { anchors.fill: parent source: "Keyboard.qml" } + + // Draws the mouse cursor for a given Wayland seat WaylandCursorItem { - id: cursor inputEventsEnabled: false x: mouseTracker.mouseX y: mouseTracker.mouseY - seat: output.compositor.defaultSeat } } Shortcut { - sequence: "Meta+F" - onActivated: qtWindowManager.showIsFullScreen = !qtWindowManager.showIsFullScreen - } - - Shortcut { sequence: "Ctrl+Alt+Backspace" onActivated: Qt.quit() } diff -Nru qtwayland-opensource-src-5.11.3/examples/wayland/qwindow-compositor/compositor.cpp qtwayland-opensource-src-5.12.2/examples/wayland/qwindow-compositor/compositor.cpp --- qtwayland-opensource-src-5.11.3/examples/wayland/qwindow-compositor/compositor.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/examples/wayland/qwindow-compositor/compositor.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -443,25 +443,25 @@ closePopups(); } - QWaylandSeat *input = defaultSeat(); + QWaylandSeat *seat = defaultSeat(); QWaylandSurface *surface = target ? target->surface() : nullptr; switch (me->type()) { case QEvent::MouseButtonPress: - input->sendMousePressEvent(me->button()); - if (surface != input->keyboardFocus()) { + seat->sendMousePressEvent(me->button()); + if (surface != seat->keyboardFocus()) { if (surface == nullptr || surface->role() == QWaylandWlShellSurface::role() || surface->role() == QWaylandXdgSurfaceV5::role() || surface->role() == QWaylandXdgPopupV5::role()) { - input->setKeyboardFocus(surface); + seat->setKeyboardFocus(surface); } } break; case QEvent::MouseButtonRelease: - input->sendMouseReleaseEvent(me->button()); + seat->sendMouseReleaseEvent(me->button()); break; case QEvent::MouseMove: - input->sendMouseMoveEvent(target, me->localPos(), me->globalPos()); + seat->sendMouseMoveEvent(target, me->localPos(), me->globalPos()); default: break; } diff -Nru qtwayland-opensource-src-5.11.3/examples/wayland/qwindow-compositor/main.cpp qtwayland-opensource-src-5.12.2/examples/wayland/qwindow-compositor/main.cpp --- qtwayland-opensource-src-5.11.3/examples/wayland/qwindow-compositor/main.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/examples/wayland/qwindow-compositor/main.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -59,7 +59,6 @@ Window window; Compositor compositor(&window); window.setCompositor(&compositor); - compositor.create(); window.resize(800,600); window.show(); diff -Nru qtwayland-opensource-src-5.11.3/examples/wayland/qwindow-compositor/window.cpp qtwayland-opensource-src-5.12.2/examples/wayland/qwindow-compositor/window.cpp --- qtwayland-opensource-src-5.11.3/examples/wayland/qwindow-compositor/window.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/examples/wayland/qwindow-compositor/window.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -78,6 +78,7 @@ m_backgroundTexture->setMinificationFilter(QOpenGLTexture::Nearest); m_backgroundImageSize = backgroundImage.size(); m_textureBlitter.create(); + m_compositor->create(); // the compositor's hardware integration may depend on GL } void Window::drawBackground() diff -Nru qtwayland-opensource-src-5.11.3/examples/wayland/server-buffer/compositor/sharebufferextension.cpp qtwayland-opensource-src-5.12.2/examples/wayland/server-buffer/compositor/sharebufferextension.cpp --- qtwayland-opensource-src-5.11.3/examples/wayland/server-buffer/compositor/sharebufferextension.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/examples/wayland/server-buffer/compositor/sharebufferextension.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -126,7 +126,7 @@ for (auto *buffer : qAsConst(m_server_buffers)) { qDebug() << "sending" << buffer << "to client"; - struct ::wl_client *client = resource->handle->client; + struct ::wl_client *client = wl_resource_get_client(resource->handle); struct ::wl_resource *buffer_resource = buffer->resourceForClient(client); send_cross_buffer(resource->handle, buffer_resource); } diff -Nru qtwayland-opensource-src-5.11.3/examples/wayland/server-buffer/README qtwayland-opensource-src-5.12.2/examples/wayland/server-buffer/README --- qtwayland-opensource-src-5.11.3/examples/wayland/server-buffer/README 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/examples/wayland/server-buffer/README 2019-02-21 12:36:59.000000000 +0000 @@ -2,10 +2,10 @@ Compile up both compositor and client. -If you have the drm-egl-server buffer integration (and you are running Mesa) +If you have the dmabuf-server buffer integration (and you are running Mesa) then start the compositor with: -$ QT_WAYLAND_SERVER_BUFFER_INTEGRATION=drm-egl-server ./compositor +$ QT_WAYLAND_SERVER_BUFFER_INTEGRATION=dmabuf-server ./compositor Note: if you are running a compositor on an X11 desktop, you also need to diff -Nru qtwayland-opensource-src-5.11.3/examples/wayland/server-side-decoration/doc/src/server-side-decoration.qdoc qtwayland-opensource-src-5.12.2/examples/wayland/server-side-decoration/doc/src/server-side-decoration.qdoc --- qtwayland-opensource-src-5.11.3/examples/wayland/server-side-decoration/doc/src/server-side-decoration.qdoc 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/examples/wayland/server-side-decoration/doc/src/server-side-decoration.qdoc 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,36 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + * \title Qt Wayland Compositor Examples - Sever Side Decoration Compositor + * \example server-side-decoration + * \brief Server Side Decoration Compositor is a simple example that demonstrates server side window decorations on xdg-shell. + * \ingroup qtwaylandcompositor-examples + * + * Server Side Decoration Compositor is a desktop-style Wayland compositor example implementing + * server-side window decorations. + */ diff -Nru qtwayland-opensource-src-5.11.3/examples/wayland/server-side-decoration/main.cpp qtwayland-opensource-src-5.12.2/examples/wayland/server-side-decoration/main.cpp --- qtwayland-opensource-src-5.11.3/examples/wayland/server-side-decoration/main.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/examples/wayland/server-side-decoration/main.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: http://www.qt-project.org/legal +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include + +#include + +#include + +int main(int argc, char *argv[]) +{ + // ShareOpenGLContexts is needed for using the threaded renderer + // on Nvidia EGLStreams + QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts, true); + QGuiApplication app(argc, argv); + + QQmlApplicationEngine appEngine(QUrl("qrc:///main.qml")); + + return app.exec(); +} diff -Nru qtwayland-opensource-src-5.11.3/examples/wayland/server-side-decoration/main.qml qtwayland-opensource-src-5.12.2/examples/wayland/server-side-decoration/main.qml --- qtwayland-opensource-src-5.11.3/examples/wayland/server-side-decoration/main.qml 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/examples/wayland/server-side-decoration/main.qml 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,114 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: http://www.qt-project.org/legal +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Window 2.2 +import QtQuick.Layouts 1.3 +import QtWayland.Compositor 1.3 + +WaylandCompositor { + // The output defines the screen. + WaylandOutput { + sizeFollowsWindow: true + window: Window { + width: 1024 + height: 768 + visible: true + Rectangle { + anchors.fill: parent + gradient: "MorpheusDen" + } + + Repeater { + model: shellSurfaces + Column { + id: chrome + width: shellSurfaceItem.implicitWidth + Rectangle { + visible: modelData.toplevel.decorationMode === XdgToplevel.ServerSideDecoration + width: parent.width + height: 30 + gradient: "HeavyRain"; + Text { + text: modelData.toplevel.title + anchors.centerIn: parent + } + Item { + anchors.right: parent.right + width: 30 + height: 30 + Text { text: "X"; anchors.centerIn: parent } + TapHandler { + onTapped: modelData.toplevel.sendClose() + } + } + DragHandler { + target: chrome + } + } + ShellSurfaceItem { + id: shellSurfaceItem + moveItem: parent + autoCreatePopupItems: true + shellSurface: modelData + onSurfaceDestroyed: shellSurfaces.remove(index) + } + } + } + } + } + XdgShell { + onToplevelCreated: shellSurfaces.append({shellSurface: xdgSurface}); + } + XdgDecorationManagerV1 { + preferredMode: XdgToplevel.ServerSideDecoration + } + ListModel { id: shellSurfaces } +} diff -Nru qtwayland-opensource-src-5.11.3/examples/wayland/server-side-decoration/server-side-decoration.pro qtwayland-opensource-src-5.12.2/examples/wayland/server-side-decoration/server-side-decoration.pro --- qtwayland-opensource-src-5.11.3/examples/wayland/server-side-decoration/server-side-decoration.pro 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/examples/wayland/server-side-decoration/server-side-decoration.pro 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,14 @@ +QT += gui qml + +SOURCES += \ + main.cpp + +OTHER_FILES = \ + main.qml + +RESOURCES += server-side-decoration.qrc + +target.path = $$[QT_INSTALL_EXAMPLES]/wayland/server-side-decoration +sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS server-side-decoration.pro +sources.path = $$[QT_INSTALL_EXAMPLES]/wayland/server-side-decoration +INSTALLS += target sources diff -Nru qtwayland-opensource-src-5.11.3/examples/wayland/server-side-decoration/server-side-decoration.qrc qtwayland-opensource-src-5.12.2/examples/wayland/server-side-decoration/server-side-decoration.qrc --- qtwayland-opensource-src-5.11.3/examples/wayland/server-side-decoration/server-side-decoration.qrc 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/examples/wayland/server-side-decoration/server-side-decoration.qrc 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,5 @@ + + + main.qml + + diff -Nru qtwayland-opensource-src-5.11.3/examples/wayland/spanning-screens/main.qml qtwayland-opensource-src-5.12.2/examples/wayland/spanning-screens/main.qml --- qtwayland-opensource-src-5.11.3/examples/wayland/spanning-screens/main.qml 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/examples/wayland/spanning-screens/main.qml 2019-02-21 12:36:59.000000000 +0000 @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2017 The Qt Company Ltd. +** Copyright (C) 2018 The Qt Company Ltd. ** Contact: http://www.qt-project.org/legal ** ** This file is part of the examples of the Qt Toolkit. @@ -50,20 +50,22 @@ import QtQuick 2.6 import QtQuick.Window 2.3 -import QtWayland.Compositor 1.0 +import QtWayland.Compositor 1.3 WaylandCompositor { - id: wlcompositor - WaylandOutput { - compositor: wlcompositor sizeFollowsWindow: true window: Window { id: topSurfaceArea + + property int pixelHeight: screen.devicePixelRatio * height + property int pixelWidth: screen.devicePixelRatio * width + width: 1024 height: 768 visible: true color: "#1337af" + Text { text: "Top screen" } // Enable the following to make the output target an actual screen, @@ -74,14 +76,18 @@ } WaylandOutput { - compositor: wlcompositor sizeFollowsWindow: true window: Window { id: bottomSurfaceArea + + property int pixelHeight: screen.devicePixelRatio * height + property int pixelWidth: screen.devicePixelRatio * width + width: 1024 height: 768 visible: true color: "#1abacc" + Text { text: "Bottom screen" } // Enable the following to make the output target an actual screen, @@ -93,56 +99,29 @@ Component { id: chromeComponent - WaylandQuickItem { - onSurfaceDestroyed: destroy() - } - } - - Component { - id: xdgPopupComponent ShellSurfaceItem { + autoCreatePopupItems: true onSurfaceDestroyed: destroy() } } - WlShell { - onWlShellSurfaceCreated: handleShellSurfaceCreated(shellSurface) - } - - property variant viewsBySurface: ({}) - - XdgShellV5 { - onXdgSurfaceCreated: handleShellSurfaceCreated(xdgSurface) - onXdgPopupCreated: { - var parentViews = viewsBySurface[xdgPopup.parentSurface]; - xdgPopupComponent.createObject(parentViews.top, { "shellSurface": xdgPopup } ); - xdgPopupComponent.createObject(parentViews.bottom, { "shellSurface": xdgPopup } ); - } - } - - function handleShellSurfaceCreated(shellSurface) { - var topItem = chromeComponent.createObject(topSurfaceArea, { - "surface": shellSurface.surface - }); - - var bottomItem = chromeComponent.createObject(bottomSurfaceArea, { - "surface": shellSurface.surface, - "y": Qt.binding(function() { return -topSurfaceArea.height;}) - }); - - viewsBySurface[shellSurface.surface] = { - top: topItem, - bottom: bottomItem - }; - - var height = bottomSurfaceArea.height + topSurfaceArea.height; - var width = Math.max(bottomSurfaceArea.width, topSurfaceArea.width); - var size = Qt.size(width, height); - - if (shellSurface.sendFullscreen) { - shellSurface.sendFullscreen(size); - } else if (shellSurface.sendConfigure) { - shellSurface.sendConfigure(size, WlShellSurface.NoneEdge); + XdgShell { + onToplevelCreated: { + const shellSurface = xdgSurface; + + const topItem = chromeComponent.createObject(topSurfaceArea, { + shellSurface + }); + + const bottomItem = chromeComponent.createObject(bottomSurfaceArea, { + shellSurface, + y: Qt.binding(function() { return -topSurfaceArea.height;}) + }); + + const height = topSurfaceArea.pixelHeight + bottomSurfaceArea.pixelHeight; + const width = Math.max(bottomSurfaceArea.pixelWidth, topSurfaceArea.pixelWidth); + const size = Qt.size(width, height); + toplevel.sendFullscreen(size); } } } diff -Nru qtwayland-opensource-src-5.11.3/examples/wayland/wayland.pro qtwayland-opensource-src-5.12.2/examples/wayland/wayland.pro --- qtwayland-opensource-src-5.11.3/examples/wayland/wayland.pro 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/examples/wayland/wayland.pro 2019-02-21 12:36:59.000000000 +0000 @@ -12,7 +12,9 @@ SUBDIRS += pure-qml SUBDIRS += multi-output SUBDIRS += multi-screen + SUBDIRS += overview-compositor SUBDIRS += ivi-compositor + SUBDIRS += server-side-decoration qtHaveModule(waylandclient) { SUBDIRS += \ custom-extension \ diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qtwaylandclientglobal_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qtwaylandclientglobal_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qtwaylandclientglobal_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qtwaylandclientglobal_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/qtwaylandclientglobal_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandabstractdecoration_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandabstractdecoration_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandabstractdecoration_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandabstractdecoration_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/qwaylandabstractdecoration_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandbuffer_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandbuffer_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandbuffer_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandbuffer_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/qwaylandbuffer_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandclientbufferintegrationfactory_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandclientbufferintegrationfactory_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandclientbufferintegrationfactory_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandclientbufferintegrationfactory_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/hardwareintegration/qwaylandclientbufferintegrationfactory_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandclientbufferintegration_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandclientbufferintegration_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandclientbufferintegration_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandclientbufferintegration_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/hardwareintegration/qwaylandclientbufferintegration_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandclientbufferintegrationplugin_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandclientbufferintegrationplugin_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandclientbufferintegrationplugin_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandclientbufferintegrationplugin_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/hardwareintegration/qwaylandclientbufferintegrationplugin_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandclientextension_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandclientextension_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandclientextension_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandclientextension_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/global/qwaylandclientextension_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandclipboard_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandclipboard_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandclipboard_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandclipboard_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/qwaylandclipboard_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandcursor_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandcursor_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandcursor_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandcursor_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/qwaylandcursor_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylanddatadevicemanager_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylanddatadevicemanager_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylanddatadevicemanager_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylanddatadevicemanager_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/qwaylanddatadevicemanager_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylanddatadevice_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylanddatadevice_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylanddatadevice_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylanddatadevice_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/qwaylanddatadevice_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylanddataoffer_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylanddataoffer_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylanddataoffer_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylanddataoffer_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/qwaylanddataoffer_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylanddatasource_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylanddatasource_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylanddatasource_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylanddatasource_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/qwaylanddatasource_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylanddecorationfactory_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylanddecorationfactory_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylanddecorationfactory_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylanddecorationfactory_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/qwaylanddecorationfactory_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylanddecorationplugin_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylanddecorationplugin_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylanddecorationplugin_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylanddecorationplugin_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/qwaylanddecorationplugin_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylanddisplay_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylanddisplay_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylanddisplay_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylanddisplay_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/qwaylanddisplay_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylanddnd_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylanddnd_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylanddnd_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylanddnd_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/qwaylanddnd_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandextendedsurface_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandextendedsurface_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandextendedsurface_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandextendedsurface_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/qwaylandextendedsurface_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandhardwareintegration_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandhardwareintegration_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandhardwareintegration_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandhardwareintegration_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/hardwareintegration/qwaylandhardwareintegration_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandinputcontext_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandinputcontext_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandinputcontext_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandinputcontext_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/qwaylandinputcontext_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandinputdeviceintegrationfactory_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandinputdeviceintegrationfactory_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandinputdeviceintegrationfactory_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandinputdeviceintegrationfactory_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/inputdeviceintegration/qwaylandinputdeviceintegrationfactory_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandinputdeviceintegration_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandinputdeviceintegration_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandinputdeviceintegration_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandinputdeviceintegration_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/inputdeviceintegration/qwaylandinputdeviceintegration_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandinputdeviceintegrationplugin_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandinputdeviceintegrationplugin_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandinputdeviceintegrationplugin_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandinputdeviceintegrationplugin_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/inputdeviceintegration/qwaylandinputdeviceintegrationplugin_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandinputdevice_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandinputdevice_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandinputdevice_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandinputdevice_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/qwaylandinputdevice_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandintegration_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandintegration_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandintegration_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandintegration_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/qwaylandintegration_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandnativeinterface_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandnativeinterface_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandnativeinterface_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandnativeinterface_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/qwaylandnativeinterface_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandqtkey_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandqtkey_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandqtkey_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandqtkey_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/qwaylandqtkey_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandscreen_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandscreen_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandscreen_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandscreen_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/qwaylandscreen_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandserverbufferintegrationfactory_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandserverbufferintegrationfactory_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandserverbufferintegrationfactory_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandserverbufferintegrationfactory_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/hardwareintegration/qwaylandserverbufferintegrationfactory_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandserverbufferintegration_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandserverbufferintegration_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandserverbufferintegration_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandserverbufferintegration_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/hardwareintegration/qwaylandserverbufferintegration_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandserverbufferintegrationplugin_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandserverbufferintegrationplugin_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandserverbufferintegrationplugin_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandserverbufferintegrationplugin_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/hardwareintegration/qwaylandserverbufferintegrationplugin_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandshellintegrationfactory_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandshellintegrationfactory_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandshellintegrationfactory_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandshellintegrationfactory_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/shellintegration/qwaylandshellintegrationfactory_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandshellintegration_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandshellintegration_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandshellintegration_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandshellintegration_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/shellintegration/qwaylandshellintegration_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandshellintegrationplugin_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandshellintegrationplugin_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandshellintegrationplugin_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandshellintegrationplugin_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/shellintegration/qwaylandshellintegrationplugin_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandshellsurface_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandshellsurface_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandshellsurface_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandshellsurface_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/qwaylandshellsurface_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandshmbackingstore_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandshmbackingstore_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandshmbackingstore_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandshmbackingstore_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/qwaylandshmbackingstore_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandshm_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandshm_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandshm_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandshm_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/qwaylandshm_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandshmwindow_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandshmwindow_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandshmwindow_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandshmwindow_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/qwaylandshmwindow_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandsubsurface_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandsubsurface_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandsubsurface_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandsubsurface_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/qwaylandsubsurface_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandtouch_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandtouch_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandtouch_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandtouch_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/qwaylandtouch_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandwindowmanagerintegration_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandwindowmanagerintegration_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandwindowmanagerintegration_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandwindowmanagerintegration_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/qwaylandwindowmanagerintegration_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandwindow_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandwindow_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandwindow_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandwindow_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/qwaylandwindow_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandwlshellintegration_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandwlshellintegration_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandwlshellintegration_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandwlshellintegration_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/qwaylandwlshellintegration_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandwlshellsurface_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandwlshellsurface_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandwlshellsurface_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandwlshellsurface_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/qwaylandwlshellsurface_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandxdgpopup_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandxdgpopup_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandxdgpopup_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandxdgpopup_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/qwaylandxdgpopup_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandxdgshellintegration_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandxdgshellintegration_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandxdgshellintegration_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandxdgshellintegration_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/qwaylandxdgshellintegration_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandxdgshell_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandxdgshell_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandxdgshell_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandxdgshell_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/qwaylandxdgshell_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandxdgshellv6integration_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandxdgshellv6integration_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandxdgshellv6integration_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandxdgshellv6integration_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/qwaylandxdgshellv6integration_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandxdgshellv6_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandxdgshellv6_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandxdgshellv6_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandxdgshellv6_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/qwaylandxdgshellv6_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandxdgsurface_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandxdgsurface_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandxdgsurface_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.11.3/QtWaylandClient/private/qwaylandxdgsurface_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/client/qwaylandxdgsurface_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qtwaylandclientglobal_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qtwaylandclientglobal_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qtwaylandclientglobal_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qtwaylandclientglobal_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/qtwaylandclientglobal_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandabstractdecoration_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandabstractdecoration_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandabstractdecoration_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandabstractdecoration_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/qwaylandabstractdecoration_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandbuffer_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandbuffer_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandbuffer_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandbuffer_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/qwaylandbuffer_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandclientbufferintegrationfactory_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandclientbufferintegrationfactory_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandclientbufferintegrationfactory_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandclientbufferintegrationfactory_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/hardwareintegration/qwaylandclientbufferintegrationfactory_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandclientbufferintegration_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandclientbufferintegration_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandclientbufferintegration_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandclientbufferintegration_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/hardwareintegration/qwaylandclientbufferintegration_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandclientbufferintegrationplugin_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandclientbufferintegrationplugin_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandclientbufferintegrationplugin_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandclientbufferintegrationplugin_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/hardwareintegration/qwaylandclientbufferintegrationplugin_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandclientextension_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandclientextension_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandclientextension_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandclientextension_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/global/qwaylandclientextension_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandclipboard_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandclipboard_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandclipboard_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandclipboard_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/qwaylandclipboard_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandcursor_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandcursor_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandcursor_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandcursor_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/qwaylandcursor_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylanddatadevicemanager_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylanddatadevicemanager_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylanddatadevicemanager_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylanddatadevicemanager_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/qwaylanddatadevicemanager_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylanddatadevice_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylanddatadevice_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylanddatadevice_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylanddatadevice_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/qwaylanddatadevice_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylanddataoffer_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylanddataoffer_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylanddataoffer_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylanddataoffer_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/qwaylanddataoffer_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylanddatasource_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylanddatasource_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylanddatasource_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylanddatasource_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/qwaylanddatasource_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylanddecorationfactory_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylanddecorationfactory_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylanddecorationfactory_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylanddecorationfactory_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/qwaylanddecorationfactory_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylanddecorationplugin_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylanddecorationplugin_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylanddecorationplugin_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylanddecorationplugin_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/qwaylanddecorationplugin_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylanddisplay_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylanddisplay_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylanddisplay_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylanddisplay_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/qwaylanddisplay_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylanddnd_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylanddnd_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylanddnd_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylanddnd_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/qwaylanddnd_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandextendedsurface_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandextendedsurface_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandextendedsurface_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandextendedsurface_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/qwaylandextendedsurface_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandhardwareintegration_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandhardwareintegration_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandhardwareintegration_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandhardwareintegration_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/hardwareintegration/qwaylandhardwareintegration_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandinputcontext_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandinputcontext_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandinputcontext_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandinputcontext_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/qwaylandinputcontext_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandinputdeviceintegrationfactory_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandinputdeviceintegrationfactory_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandinputdeviceintegrationfactory_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandinputdeviceintegrationfactory_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/inputdeviceintegration/qwaylandinputdeviceintegrationfactory_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandinputdeviceintegration_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandinputdeviceintegration_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandinputdeviceintegration_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandinputdeviceintegration_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/inputdeviceintegration/qwaylandinputdeviceintegration_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandinputdeviceintegrationplugin_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandinputdeviceintegrationplugin_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandinputdeviceintegrationplugin_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandinputdeviceintegrationplugin_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/inputdeviceintegration/qwaylandinputdeviceintegrationplugin_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandinputdevice_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandinputdevice_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandinputdevice_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandinputdevice_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/qwaylandinputdevice_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandintegration_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandintegration_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandintegration_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandintegration_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/qwaylandintegration_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandnativeinterface_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandnativeinterface_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandnativeinterface_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandnativeinterface_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/qwaylandnativeinterface_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandqtkey_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandqtkey_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandqtkey_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandqtkey_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/qwaylandqtkey_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandscreen_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandscreen_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandscreen_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandscreen_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/qwaylandscreen_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandserverbufferintegrationfactory_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandserverbufferintegrationfactory_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandserverbufferintegrationfactory_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandserverbufferintegrationfactory_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/hardwareintegration/qwaylandserverbufferintegrationfactory_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandserverbufferintegration_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandserverbufferintegration_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandserverbufferintegration_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandserverbufferintegration_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/hardwareintegration/qwaylandserverbufferintegration_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandserverbufferintegrationplugin_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandserverbufferintegrationplugin_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandserverbufferintegrationplugin_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandserverbufferintegrationplugin_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/hardwareintegration/qwaylandserverbufferintegrationplugin_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandshellintegrationfactory_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandshellintegrationfactory_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandshellintegrationfactory_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandshellintegrationfactory_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/shellintegration/qwaylandshellintegrationfactory_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandshellintegration_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandshellintegration_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandshellintegration_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandshellintegration_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/shellintegration/qwaylandshellintegration_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandshellintegrationplugin_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandshellintegrationplugin_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandshellintegrationplugin_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandshellintegrationplugin_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/shellintegration/qwaylandshellintegrationplugin_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandshellsurface_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandshellsurface_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandshellsurface_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandshellsurface_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/qwaylandshellsurface_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandshmbackingstore_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandshmbackingstore_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandshmbackingstore_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandshmbackingstore_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/qwaylandshmbackingstore_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandshm_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandshm_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandshm_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandshm_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/qwaylandshm_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandshmwindow_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandshmwindow_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandshmwindow_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandshmwindow_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/qwaylandshmwindow_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandsubsurface_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandsubsurface_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandsubsurface_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandsubsurface_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/qwaylandsubsurface_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandtouch_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandtouch_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandtouch_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandtouch_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/qwaylandtouch_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandwindowmanagerintegration_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandwindowmanagerintegration_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandwindowmanagerintegration_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandwindowmanagerintegration_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/qwaylandwindowmanagerintegration_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandwindow_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandwindow_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandwindow_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/5.12.2/QtWaylandClient/private/qwaylandwindow_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/client/qwaylandwindow_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/headers.pri qtwayland-opensource-src-5.12.2/include/QtWaylandClient/headers.pri --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/headers.pri 2018-11-29 15:09:19.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/headers.pri 2019-03-11 13:34:52.000000000 +0000 @@ -1,6 +1,6 @@ SYNCQT.HEADER_FILES = qtwaylandclientglobal.h global/qwaylandclientextension.h SYNCQT.GENERATED_HEADER_FILES = QWaylandClientExtension QWaylandClientExtensionTemplate qwaylandclientexport.h qtwaylandclientversion.h QtWaylandClientVersion QtWaylandClient -SYNCQT.PRIVATE_HEADER_FILES = qtwaylandclientglobal_p.h qwaylandabstractdecoration_p.h qwaylandbuffer_p.h qwaylandclipboard_p.h qwaylandcursor_p.h qwaylanddatadevice_p.h qwaylanddatadevicemanager_p.h qwaylanddataoffer_p.h qwaylanddatasource_p.h qwaylanddecorationfactory_p.h qwaylanddecorationplugin_p.h qwaylanddisplay_p.h qwaylanddnd_p.h qwaylandextendedsurface_p.h qwaylandinputcontext_p.h qwaylandinputdevice_p.h qwaylandintegration_p.h qwaylandnativeinterface_p.h qwaylandqtkey_p.h qwaylandscreen_p.h qwaylandshellsurface_p.h qwaylandshm_p.h qwaylandshmbackingstore_p.h qwaylandshmwindow_p.h qwaylandsubsurface_p.h qwaylandtouch_p.h qwaylandwindow_p.h qwaylandwindowmanagerintegration_p.h qwaylandwlshellintegration_p.h qwaylandwlshellsurface_p.h qwaylandxdgpopup_p.h qwaylandxdgshell_p.h qwaylandxdgshellintegration_p.h qwaylandxdgshellv6_p.h qwaylandxdgshellv6integration_p.h qwaylandxdgsurface_p.h global/qwaylandclientextension_p.h hardwareintegration/qwaylandclientbufferintegration_p.h hardwareintegration/qwaylandclientbufferintegrationfactory_p.h hardwareintegration/qwaylandclientbufferintegrationplugin_p.h hardwareintegration/qwaylandhardwareintegration_p.h hardwareintegration/qwaylandserverbufferintegration_p.h hardwareintegration/qwaylandserverbufferintegrationfactory_p.h hardwareintegration/qwaylandserverbufferintegrationplugin_p.h inputdeviceintegration/qwaylandinputdeviceintegration_p.h inputdeviceintegration/qwaylandinputdeviceintegrationfactory_p.h inputdeviceintegration/qwaylandinputdeviceintegrationplugin_p.h shellintegration/qwaylandshellintegration_p.h shellintegration/qwaylandshellintegrationfactory_p.h shellintegration/qwaylandshellintegrationplugin_p.h +SYNCQT.PRIVATE_HEADER_FILES = qtwaylandclientglobal_p.h qwaylandabstractdecoration_p.h qwaylandbuffer_p.h qwaylandclipboard_p.h qwaylandcursor_p.h qwaylanddatadevice_p.h qwaylanddatadevicemanager_p.h qwaylanddataoffer_p.h qwaylanddatasource_p.h qwaylanddecorationfactory_p.h qwaylanddecorationplugin_p.h qwaylanddisplay_p.h qwaylanddnd_p.h qwaylandextendedsurface_p.h qwaylandinputcontext_p.h qwaylandinputdevice_p.h qwaylandintegration_p.h qwaylandnativeinterface_p.h qwaylandqtkey_p.h qwaylandscreen_p.h qwaylandshellsurface_p.h qwaylandshm_p.h qwaylandshmbackingstore_p.h qwaylandshmwindow_p.h qwaylandsubsurface_p.h qwaylandtouch_p.h qwaylandwindow_p.h qwaylandwindowmanagerintegration_p.h global/qwaylandclientextension_p.h hardwareintegration/qwaylandclientbufferintegration_p.h hardwareintegration/qwaylandclientbufferintegrationfactory_p.h hardwareintegration/qwaylandclientbufferintegrationplugin_p.h hardwareintegration/qwaylandhardwareintegration_p.h hardwareintegration/qwaylandserverbufferintegration_p.h hardwareintegration/qwaylandserverbufferintegrationfactory_p.h hardwareintegration/qwaylandserverbufferintegrationplugin_p.h inputdeviceintegration/qwaylandinputdeviceintegration_p.h inputdeviceintegration/qwaylandinputdeviceintegrationfactory_p.h inputdeviceintegration/qwaylandinputdeviceintegrationplugin_p.h shellintegration/qwaylandshellintegration_p.h shellintegration/qwaylandshellintegrationfactory_p.h shellintegration/qwaylandshellintegrationplugin_p.h SYNCQT.QPA_HEADER_FILES = SYNCQT.CLEAN_HEADER_FILES = qtwaylandclientglobal.h global/qwaylandclientextension.h -SYNCQT.INJECTIONS = src/client/qwayland-hardware-integration.h:^5.11.3/QtWaylandClient/private/qwayland-hardware-integration.h src/client/qwayland-qt-windowmanager.h:^5.11.3/QtWaylandClient/private/qwayland-qt-windowmanager.h src/client/qwayland-qtkey-extension.h:^5.11.3/QtWaylandClient/private/qwayland-qtkey-extension.h src/client/qwayland-server-buffer-extension.h:^5.11.3/QtWaylandClient/private/qwayland-server-buffer-extension.h src/client/qwayland-surface-extension.h:^5.11.3/QtWaylandClient/private/qwayland-surface-extension.h src/client/qwayland-text-input-unstable-v2.h:^5.11.3/QtWaylandClient/private/qwayland-text-input-unstable-v2.h src/client/qwayland-touch-extension.h:^5.11.3/QtWaylandClient/private/qwayland-touch-extension.h src/client/qwayland-wayland.h:^5.11.3/QtWaylandClient/private/qwayland-wayland.h src/client/qwayland-xdg-shell-unstable-v6.h:^5.11.3/QtWaylandClient/private/qwayland-xdg-shell-unstable-v6.h src/client/qwayland-xdg-shell.h:^5.11.3/QtWaylandClient/private/qwayland-xdg-shell.h src/client/wayland-hardware-integration-client-protocol.h:^5.11.3/QtWaylandClient/private/wayland-hardware-integration-client-protocol.h src/client/wayland-qt-windowmanager-client-protocol.h:^5.11.3/QtWaylandClient/private/wayland-qt-windowmanager-client-protocol.h src/client/wayland-qtkey-extension-client-protocol.h:^5.11.3/QtWaylandClient/private/wayland-qtkey-extension-client-protocol.h src/client/wayland-server-buffer-extension-client-protocol.h:^5.11.3/QtWaylandClient/private/wayland-server-buffer-extension-client-protocol.h src/client/wayland-surface-extension-client-protocol.h:^5.11.3/QtWaylandClient/private/wayland-surface-extension-client-protocol.h src/client/wayland-text-input-unstable-v2-client-protocol.h:^5.11.3/QtWaylandClient/private/wayland-text-input-unstable-v2-client-protocol.h src/client/wayland-touch-extension-client-protocol.h:^5.11.3/QtWaylandClient/private/wayland-touch-extension-client-protocol.h src/client/wayland-wayland-client-protocol.h:^5.11.3/QtWaylandClient/private/wayland-wayland-client-protocol.h src/client/wayland-xdg-shell-client-protocol.h:^5.11.3/QtWaylandClient/private/wayland-xdg-shell-client-protocol.h src/client/wayland-xdg-shell-unstable-v6-client-protocol.h:^5.11.3/QtWaylandClient/private/wayland-xdg-shell-unstable-v6-client-protocol.h +SYNCQT.INJECTIONS = src/client/qwayland-hardware-integration.h:^5.12.2/QtWaylandClient/private/qwayland-hardware-integration.h src/client/qwayland-qt-windowmanager.h:^5.12.2/QtWaylandClient/private/qwayland-qt-windowmanager.h src/client/qwayland-qt-key-unstable-v1.h:^5.12.2/QtWaylandClient/private/qwayland-qt-key-unstable-v1.h src/client/qwayland-server-buffer-extension.h:^5.12.2/QtWaylandClient/private/qwayland-server-buffer-extension.h src/client/qwayland-surface-extension.h:^5.12.2/QtWaylandClient/private/qwayland-surface-extension.h src/client/qwayland-text-input-unstable-v2.h:^5.12.2/QtWaylandClient/private/qwayland-text-input-unstable-v2.h src/client/qwayland-touch-extension.h:^5.12.2/QtWaylandClient/private/qwayland-touch-extension.h src/client/qwayland-wayland.h:^5.12.2/QtWaylandClient/private/qwayland-wayland.h src/client/qwayland-xdg-output-unstable-v1.h:^5.12.2/QtWaylandClient/private/qwayland-xdg-output-unstable-v1.h src/client/wayland-hardware-integration-client-protocol.h:^5.12.2/QtWaylandClient/private/wayland-hardware-integration-client-protocol.h src/client/wayland-qt-windowmanager-client-protocol.h:^5.12.2/QtWaylandClient/private/wayland-qt-windowmanager-client-protocol.h src/client/wayland-qt-key-unstable-v1-client-protocol.h:^5.12.2/QtWaylandClient/private/wayland-qt-key-unstable-v1-client-protocol.h src/client/wayland-server-buffer-extension-client-protocol.h:^5.12.2/QtWaylandClient/private/wayland-server-buffer-extension-client-protocol.h src/client/wayland-surface-extension-client-protocol.h:^5.12.2/QtWaylandClient/private/wayland-surface-extension-client-protocol.h src/client/wayland-text-input-unstable-v2-client-protocol.h:^5.12.2/QtWaylandClient/private/wayland-text-input-unstable-v2-client-protocol.h src/client/wayland-touch-extension-client-protocol.h:^5.12.2/QtWaylandClient/private/wayland-touch-extension-client-protocol.h src/client/wayland-wayland-client-protocol.h:^5.12.2/QtWaylandClient/private/wayland-wayland-client-protocol.h src/client/wayland-xdg-output-unstable-v1-client-protocol.h:^5.12.2/QtWaylandClient/private/wayland-xdg-output-unstable-v1-client-protocol.h diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandClient/qtwaylandclientversion.h qtwayland-opensource-src-5.12.2/include/QtWaylandClient/qtwaylandclientversion.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandClient/qtwaylandclientversion.h 2018-11-29 15:09:19.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandClient/qtwaylandclientversion.h 2019-03-11 13:34:52.000000000 +0000 @@ -2,8 +2,8 @@ #ifndef QT_QTWAYLANDCLIENT_VERSION_H #define QT_QTWAYLANDCLIENT_VERSION_H -#define QTWAYLANDCLIENT_VERSION_STR "5.11.3" +#define QTWAYLANDCLIENT_VERSION_STR "5.12.2" -#define QTWAYLANDCLIENT_VERSION 0x050B03 +#define QTWAYLANDCLIENT_VERSION 0x050C02 #endif // QT_QTWAYLANDCLIENT_VERSION_H diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qtwaylandcompositorglobal_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qtwaylandcompositorglobal_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qtwaylandcompositorglobal_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qtwaylandcompositorglobal_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/global/qtwaylandcompositorglobal_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandcompositorextension_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandcompositorextension_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandcompositorextension_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandcompositorextension_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/global/qwaylandcompositorextension_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandcompositor_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandcompositor_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandcompositor_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandcompositor_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/compositor_api/qwaylandcompositor_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylanddestroylistener_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylanddestroylistener_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylanddestroylistener_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylanddestroylistener_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/compositor_api/qwaylanddestroylistener_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandinputmethodcontrol_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandinputmethodcontrol_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandinputmethodcontrol_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandinputmethodcontrol_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/compositor_api/qwaylandinputmethodcontrol_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandiviapplication_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandiviapplication_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandiviapplication_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandiviapplication_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/extensions/qwaylandiviapplication_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandivisurfaceintegration_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandivisurfaceintegration_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandivisurfaceintegration_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandivisurfaceintegration_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/extensions/qwaylandivisurfaceintegration_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandivisurface_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandivisurface_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandivisurface_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandivisurface_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/extensions/qwaylandivisurface_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandkeyboard_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandkeyboard_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandkeyboard_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandkeyboard_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/compositor_api/qwaylandkeyboard_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandkeymap_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandkeymap_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandkeymap_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandkeymap_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/compositor_api/qwaylandkeymap_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandoutputmode_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandoutputmode_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandoutputmode_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandoutputmode_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/compositor_api/qwaylandoutputmode_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandoutput_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandoutput_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandoutput_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandoutput_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/compositor_api/qwaylandoutput_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandpointer_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandpointer_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandpointer_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandpointer_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/compositor_api/qwaylandpointer_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandqtwindowmanager_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandqtwindowmanager_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandqtwindowmanager_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandqtwindowmanager_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/extensions/qwaylandqtwindowmanager_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandquickhardwarelayer_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandquickhardwarelayer_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandquickhardwarelayer_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandquickhardwarelayer_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/compositor_api/qwaylandquickhardwarelayer_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandquickitem_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandquickitem_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandquickitem_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandquickitem_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/compositor_api/qwaylandquickitem_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandquickshellsurfaceitem_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandquickshellsurfaceitem_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandquickshellsurfaceitem_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandquickshellsurfaceitem_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/extensions/qwaylandquickshellsurfaceitem_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandseat_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandseat_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandseat_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandseat_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/compositor_api/qwaylandseat_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandshell_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandshell_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandshell_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandshell_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/extensions/qwaylandshell_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandsurface_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandsurface_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandsurface_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandsurface_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/compositor_api/qwaylandsurface_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandtextinputmanager_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandtextinputmanager_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandtextinputmanager_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandtextinputmanager_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/extensions/qwaylandtextinputmanager_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandtextinput_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandtextinput_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandtextinput_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandtextinput_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/extensions/qwaylandtextinput_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandtouch_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandtouch_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandtouch_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandtouch_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/compositor_api/qwaylandtouch_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandview_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandview_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandview_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandview_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/compositor_api/qwaylandview_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandwlshellintegration_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandwlshellintegration_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandwlshellintegration_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandwlshellintegration_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/extensions/qwaylandwlshellintegration_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandwlshell_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandwlshell_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandwlshell_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandwlshell_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/extensions/qwaylandwlshell_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandxdgshellv5integration_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandxdgshellv5integration_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandxdgshellv5integration_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandxdgshellv5integration_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/extensions/qwaylandxdgshellv5integration_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandxdgshellv5_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandxdgshellv5_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandxdgshellv5_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandxdgshellv5_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/extensions/qwaylandxdgshellv5_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandxdgshellv6integration_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandxdgshellv6integration_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandxdgshellv6integration_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandxdgshellv6integration_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/extensions/qwaylandxdgshellv6integration_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandxdgshellv6_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandxdgshellv6_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandxdgshellv6_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwaylandxdgshellv6_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/extensions/qwaylandxdgshellv6_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlbuffermanager_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlbuffermanager_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlbuffermanager_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlbuffermanager_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/wayland_wrapper/qwlbuffermanager_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlclientbufferintegrationfactory_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlclientbufferintegrationfactory_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlclientbufferintegrationfactory_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlclientbufferintegrationfactory_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/hardware_integration/qwlclientbufferintegrationfactory_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlclientbufferintegration_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlclientbufferintegration_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlclientbufferintegration_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlclientbufferintegration_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/hardware_integration/qwlclientbufferintegration_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlclientbufferintegrationplugin_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlclientbufferintegrationplugin_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlclientbufferintegrationplugin_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlclientbufferintegrationplugin_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/hardware_integration/qwlclientbufferintegrationplugin_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlclientbuffer_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlclientbuffer_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlclientbuffer_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlclientbuffer_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/wayland_wrapper/qwlclientbuffer_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwldatadevicemanager_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwldatadevicemanager_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwldatadevicemanager_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwldatadevicemanager_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/wayland_wrapper/qwldatadevicemanager_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwldatadevice_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwldatadevice_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwldatadevice_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwldatadevice_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/wayland_wrapper/qwldatadevice_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwldataoffer_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwldataoffer_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwldataoffer_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwldataoffer_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/wayland_wrapper/qwldataoffer_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwldatasource_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwldatasource_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwldatasource_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwldatasource_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/wayland_wrapper/qwldatasource_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlhardwarelayerintegrationfactory_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlhardwarelayerintegrationfactory_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlhardwarelayerintegrationfactory_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlhardwarelayerintegrationfactory_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/hardware_integration/qwlhardwarelayerintegrationfactory_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlhardwarelayerintegration_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlhardwarelayerintegration_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlhardwarelayerintegration_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlhardwarelayerintegration_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/hardware_integration/qwlhardwarelayerintegration_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlhardwarelayerintegrationplugin_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlhardwarelayerintegrationplugin_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlhardwarelayerintegrationplugin_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlhardwarelayerintegrationplugin_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/hardware_integration/qwlhardwarelayerintegrationplugin_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlhwintegration_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlhwintegration_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlhwintegration_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlhwintegration_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/hardware_integration/qwlhwintegration_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlqtkey_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlqtkey_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlqtkey_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlqtkey_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/extensions/qwlqtkey_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlqttouch_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlqttouch_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlqttouch_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlqttouch_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/extensions/qwlqttouch_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlregion_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlregion_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlregion_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlregion_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/wayland_wrapper/qwlregion_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlserverbufferintegrationfactory_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlserverbufferintegrationfactory_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlserverbufferintegrationfactory_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlserverbufferintegrationfactory_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/hardware_integration/qwlserverbufferintegrationfactory_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlserverbufferintegration_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlserverbufferintegration_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlserverbufferintegration_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlserverbufferintegration_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/hardware_integration/qwlserverbufferintegration_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlserverbufferintegrationplugin_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlserverbufferintegrationplugin_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlserverbufferintegrationplugin_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.11.3/QtWaylandCompositor/private/qwlserverbufferintegrationplugin_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "../../../../../src/compositor/hardware_integration/qwlserverbufferintegrationplugin_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qtwaylandcompositorglobal_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qtwaylandcompositorglobal_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qtwaylandcompositorglobal_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qtwaylandcompositorglobal_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/global/qtwaylandcompositorglobal_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandcompositorextension_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandcompositorextension_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandcompositorextension_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandcompositorextension_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/global/qwaylandcompositorextension_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandcompositor_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandcompositor_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandcompositor_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandcompositor_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/compositor_api/qwaylandcompositor_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylanddestroylistener_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylanddestroylistener_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylanddestroylistener_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylanddestroylistener_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/compositor_api/qwaylanddestroylistener_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandinputmethodcontrol_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandinputmethodcontrol_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandinputmethodcontrol_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandinputmethodcontrol_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/compositor_api/qwaylandinputmethodcontrol_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandiviapplication_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandiviapplication_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandiviapplication_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandiviapplication_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/extensions/qwaylandiviapplication_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandivisurfaceintegration_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandivisurfaceintegration_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandivisurfaceintegration_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandivisurfaceintegration_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/extensions/qwaylandivisurfaceintegration_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandivisurface_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandivisurface_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandivisurface_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandivisurface_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/extensions/qwaylandivisurface_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandkeyboard_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandkeyboard_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandkeyboard_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandkeyboard_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/compositor_api/qwaylandkeyboard_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandkeymap_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandkeymap_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandkeymap_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandkeymap_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/compositor_api/qwaylandkeymap_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandoutputmode_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandoutputmode_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandoutputmode_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandoutputmode_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/compositor_api/qwaylandoutputmode_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandoutput_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandoutput_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandoutput_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandoutput_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/compositor_api/qwaylandoutput_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandpointer_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandpointer_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandpointer_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandpointer_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/compositor_api/qwaylandpointer_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandqtwindowmanager_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandqtwindowmanager_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandqtwindowmanager_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandqtwindowmanager_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/extensions/qwaylandqtwindowmanager_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandquickhardwarelayer_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandquickhardwarelayer_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandquickhardwarelayer_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandquickhardwarelayer_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/compositor_api/qwaylandquickhardwarelayer_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandquickitem_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandquickitem_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandquickitem_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandquickitem_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/compositor_api/qwaylandquickitem_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandquickshellsurfaceitem_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandquickshellsurfaceitem_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandquickshellsurfaceitem_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandquickshellsurfaceitem_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/extensions/qwaylandquickshellsurfaceitem_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandseat_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandseat_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandseat_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandseat_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/compositor_api/qwaylandseat_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwayland-server-xdg-shell-unstable-v5_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwayland-server-xdg-shell-unstable-v5_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwayland-server-xdg-shell-unstable-v5_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwayland-server-xdg-shell-unstable-v5_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/extensions/pregenerated/3rdparty/qwayland-server-xdg-shell-unstable-v5_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandshell_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandshell_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandshell_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandshell_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/extensions/qwaylandshell_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandsurface_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandsurface_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandsurface_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandsurface_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/compositor_api/qwaylandsurface_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandtextinputmanager_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandtextinputmanager_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandtextinputmanager_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandtextinputmanager_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/extensions/qwaylandtextinputmanager_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandtextinput_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandtextinput_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandtextinput_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandtextinput_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/extensions/qwaylandtextinput_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandtouch_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandtouch_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandtouch_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandtouch_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/compositor_api/qwaylandtouch_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandview_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandview_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandview_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandview_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/compositor_api/qwaylandview_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandwlshellintegration_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandwlshellintegration_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandwlshellintegration_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandwlshellintegration_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/extensions/qwaylandwlshellintegration_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandwlshell_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandwlshell_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandwlshell_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandwlshell_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/extensions/qwaylandwlshell_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandxdgdecorationv1_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandxdgdecorationv1_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandxdgdecorationv1_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandxdgdecorationv1_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/extensions/qwaylandxdgdecorationv1_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandxdgshellintegration_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandxdgshellintegration_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandxdgshellintegration_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandxdgshellintegration_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/extensions/qwaylandxdgshellintegration_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandxdgshell_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandxdgshell_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandxdgshell_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandxdgshell_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/extensions/qwaylandxdgshell_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandxdgshellv5integration_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandxdgshellv5integration_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandxdgshellv5integration_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandxdgshellv5integration_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/extensions/qwaylandxdgshellv5integration_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandxdgshellv5_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandxdgshellv5_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandxdgshellv5_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandxdgshellv5_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/extensions/qwaylandxdgshellv5_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandxdgshellv6integration_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandxdgshellv6integration_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandxdgshellv6integration_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandxdgshellv6integration_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/extensions/qwaylandxdgshellv6integration_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandxdgshellv6_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandxdgshellv6_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandxdgshellv6_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwaylandxdgshellv6_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/extensions/qwaylandxdgshellv6_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlbuffermanager_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlbuffermanager_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlbuffermanager_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlbuffermanager_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/wayland_wrapper/qwlbuffermanager_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlclientbufferintegrationfactory_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlclientbufferintegrationfactory_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlclientbufferintegrationfactory_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlclientbufferintegrationfactory_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/hardware_integration/qwlclientbufferintegrationfactory_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlclientbufferintegration_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlclientbufferintegration_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlclientbufferintegration_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlclientbufferintegration_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/hardware_integration/qwlclientbufferintegration_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlclientbufferintegrationplugin_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlclientbufferintegrationplugin_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlclientbufferintegrationplugin_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlclientbufferintegrationplugin_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/hardware_integration/qwlclientbufferintegrationplugin_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlclientbuffer_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlclientbuffer_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlclientbuffer_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlclientbuffer_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/wayland_wrapper/qwlclientbuffer_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwldatadevicemanager_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwldatadevicemanager_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwldatadevicemanager_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwldatadevicemanager_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/wayland_wrapper/qwldatadevicemanager_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwldatadevice_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwldatadevice_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwldatadevice_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwldatadevice_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/wayland_wrapper/qwldatadevice_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwldataoffer_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwldataoffer_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwldataoffer_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwldataoffer_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/wayland_wrapper/qwldataoffer_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwldatasource_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwldatasource_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwldatasource_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwldatasource_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/wayland_wrapper/qwldatasource_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlhardwarelayerintegrationfactory_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlhardwarelayerintegrationfactory_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlhardwarelayerintegrationfactory_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlhardwarelayerintegrationfactory_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/hardware_integration/qwlhardwarelayerintegrationfactory_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlhardwarelayerintegration_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlhardwarelayerintegration_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlhardwarelayerintegration_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlhardwarelayerintegration_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/hardware_integration/qwlhardwarelayerintegration_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlhardwarelayerintegrationplugin_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlhardwarelayerintegrationplugin_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlhardwarelayerintegrationplugin_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlhardwarelayerintegrationplugin_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/hardware_integration/qwlhardwarelayerintegrationplugin_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlhwintegration_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlhwintegration_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlhwintegration_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlhwintegration_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/hardware_integration/qwlhwintegration_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlqtkey_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlqtkey_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlqtkey_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlqtkey_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/extensions/qwlqtkey_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlqttouch_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlqttouch_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlqttouch_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlqttouch_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/extensions/qwlqttouch_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlregion_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlregion_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlregion_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlregion_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/wayland_wrapper/qwlregion_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlserverbufferintegrationfactory_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlserverbufferintegrationfactory_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlserverbufferintegrationfactory_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlserverbufferintegrationfactory_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/hardware_integration/qwlserverbufferintegrationfactory_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlserverbufferintegration_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlserverbufferintegration_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlserverbufferintegration_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlserverbufferintegration_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/hardware_integration/qwlserverbufferintegration_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlserverbufferintegrationplugin_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlserverbufferintegrationplugin_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlserverbufferintegrationplugin_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/qwlserverbufferintegrationplugin_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/hardware_integration/qwlserverbufferintegrationplugin_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/wayland-xdg-shell-unstable-v5-server-protocol_p.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/wayland-xdg-shell-unstable-v5-server-protocol_p.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/wayland-xdg-shell-unstable-v5-server-protocol_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/5.12.2/QtWaylandCompositor/private/wayland-xdg-shell-unstable-v5-server-protocol_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../../../../src/compositor/extensions/pregenerated/3rdparty/wayland-xdg-shell-unstable-v5-server-protocol_p.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/headers.pri qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/headers.pri --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/headers.pri 2018-11-29 15:09:19.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/headers.pri 2019-03-11 13:34:52.000000000 +0000 @@ -1,6 +1,6 @@ -SYNCQT.HEADER_FILES = compositor_api/qwaylandbufferref.h compositor_api/qwaylandclient.h compositor_api/qwaylandcompositor.h compositor_api/qwaylanddestroylistener.h compositor_api/qwaylanddrag.h compositor_api/qwaylandinputmethodcontrol.h compositor_api/qwaylandkeyboard.h compositor_api/qwaylandkeymap.h compositor_api/qwaylandoutput.h compositor_api/qwaylandoutputmode.h compositor_api/qwaylandpointer.h compositor_api/qwaylandquickcompositor.h compositor_api/qwaylandquickitem.h compositor_api/qwaylandquickoutput.h compositor_api/qwaylandquicksurface.h compositor_api/qwaylandresource.h compositor_api/qwaylandseat.h compositor_api/qwaylandsurface.h compositor_api/qwaylandsurfacegrabber.h compositor_api/qwaylandtouch.h compositor_api/qwaylandview.h extensions/qwaylandiviapplication.h extensions/qwaylandivisurface.h extensions/qwaylandqtwindowmanager.h extensions/qwaylandquickshellsurfaceitem.h extensions/qwaylandshell.h extensions/qwaylandshellsurface.h extensions/qwaylandtextinput.h extensions/qwaylandtextinputmanager.h extensions/qwaylandwlshell.h extensions/qwaylandxdgshellv5.h extensions/qwaylandxdgshellv6.h global/qtwaylandcompositorglobal.h global/qwaylandcompositorextension.h global/qwaylandquickextension.h -SYNCQT.GENERATED_HEADER_FILES = QWaylandBufferRef QWaylandClient QWaylandCompositor QWaylandDestroyListener QWaylandDrag QWaylandInputMethodControl QWaylandKeyboard QWaylandKeymap QWaylandOutput QWaylandOutputMode QWaylandPointer QWaylandQuickCompositor QWaylandQuickItem QWaylandQuickOutput QWaylandQuickSurface QWaylandResource QWaylandSeat QWaylandSurfaceRole QWaylandSurface QWaylandSurfaceGrabber QWaylandTouch QWaylandView QWaylandIviApplication QWaylandIviSurface QWaylandQtWindowManager QWaylandQuickShellSurfaceItem QWaylandShell QWaylandShellTemplate QWaylandShellSurface QWaylandShellSurfaceTemplate QWaylandTextInput QWaylandTextInputManager QWaylandWlShell QWaylandWlShellSurface QWaylandXdgShellV5 QWaylandXdgSurfaceV5 QWaylandXdgPopupV5 QWaylandXdgShellV6 QWaylandXdgSurfaceV6 QWaylandXdgToplevelV6 QWaylandXdgPopupV6 QWaylandObject QWaylandCompositorExtension QWaylandCompositorExtensionTemplate QWaylandQuickExtension qwaylandexport.h qtwaylandcompositorversion.h QtWaylandCompositorVersion QtWaylandCompositor -SYNCQT.PRIVATE_HEADER_FILES = compositor_api/qwaylandcompositor_p.h compositor_api/qwaylanddestroylistener_p.h compositor_api/qwaylandinputmethodcontrol_p.h compositor_api/qwaylandkeyboard_p.h compositor_api/qwaylandkeymap_p.h compositor_api/qwaylandoutput_p.h compositor_api/qwaylandoutputmode_p.h compositor_api/qwaylandpointer_p.h compositor_api/qwaylandquickhardwarelayer_p.h compositor_api/qwaylandquickitem_p.h compositor_api/qwaylandseat_p.h compositor_api/qwaylandsurface_p.h compositor_api/qwaylandtouch_p.h compositor_api/qwaylandview_p.h extensions/qwaylandiviapplication_p.h extensions/qwaylandivisurface_p.h extensions/qwaylandivisurfaceintegration_p.h extensions/qwaylandqtwindowmanager_p.h extensions/qwaylandquickshellsurfaceitem_p.h extensions/qwaylandshell_p.h extensions/qwaylandtextinput_p.h extensions/qwaylandtextinputmanager_p.h extensions/qwaylandwlshell_p.h extensions/qwaylandwlshellintegration_p.h extensions/qwaylandxdgshellv5_p.h extensions/qwaylandxdgshellv5integration_p.h extensions/qwaylandxdgshellv6_p.h extensions/qwaylandxdgshellv6integration_p.h extensions/qwlqtkey_p.h extensions/qwlqttouch_p.h global/qtwaylandcompositorglobal_p.h global/qwaylandcompositorextension_p.h hardware_integration/qwlclientbufferintegration_p.h hardware_integration/qwlclientbufferintegrationfactory_p.h hardware_integration/qwlclientbufferintegrationplugin_p.h hardware_integration/qwlhardwarelayerintegration_p.h hardware_integration/qwlhardwarelayerintegrationfactory_p.h hardware_integration/qwlhardwarelayerintegrationplugin_p.h hardware_integration/qwlhwintegration_p.h hardware_integration/qwlserverbufferintegration_p.h hardware_integration/qwlserverbufferintegrationfactory_p.h hardware_integration/qwlserverbufferintegrationplugin_p.h wayland_wrapper/qwlbuffermanager_p.h wayland_wrapper/qwlclientbuffer_p.h wayland_wrapper/qwldatadevice_p.h wayland_wrapper/qwldatadevicemanager_p.h wayland_wrapper/qwldataoffer_p.h wayland_wrapper/qwldatasource_p.h wayland_wrapper/qwlregion_p.h +SYNCQT.HEADER_FILES = compositor_api/qwaylandbufferref.h compositor_api/qwaylandclient.h compositor_api/qwaylandcompositor.h compositor_api/qwaylanddestroylistener.h compositor_api/qwaylanddrag.h compositor_api/qwaylandinputmethodcontrol.h compositor_api/qwaylandkeyboard.h compositor_api/qwaylandkeymap.h compositor_api/qwaylandoutput.h compositor_api/qwaylandoutputmode.h compositor_api/qwaylandpointer.h compositor_api/qwaylandquickchildren.h compositor_api/qwaylandquickcompositor.h compositor_api/qwaylandquickitem.h compositor_api/qwaylandquickoutput.h compositor_api/qwaylandquicksurface.h compositor_api/qwaylandresource.h compositor_api/qwaylandseat.h compositor_api/qwaylandsurface.h compositor_api/qwaylandsurfacegrabber.h compositor_api/qwaylandtouch.h compositor_api/qwaylandview.h extensions/qwaylandiviapplication.h extensions/qwaylandivisurface.h extensions/qwaylandqtwindowmanager.h extensions/qwaylandquickshellsurfaceitem.h extensions/qwaylandshell.h extensions/qwaylandshellsurface.h extensions/qwaylandtextinput.h extensions/qwaylandtextinputmanager.h extensions/qwaylandwlshell.h extensions/qwaylandxdgdecorationv1.h extensions/qwaylandxdgshell.h extensions/qwaylandxdgshellv5.h extensions/qwaylandxdgshellv6.h global/qtwaylandcompositorglobal.h global/qwaylandcompositorextension.h global/qwaylandquickextension.h +SYNCQT.GENERATED_HEADER_FILES = QWaylandBufferRef QWaylandClient QWaylandCompositor QWaylandDestroyListener QWaylandDrag QWaylandInputMethodControl QWaylandKeyboard QWaylandKeymap QWaylandOutput QWaylandOutputMode QWaylandPointer QWaylandQuickCompositor QWaylandQuickItem QWaylandQuickOutput QWaylandQuickSurface QWaylandResource QWaylandSeat QWaylandSurfaceRole QWaylandSurface QWaylandSurfaceGrabber QWaylandTouch QWaylandView QWaylandIviApplication QWaylandIviSurface QWaylandQtWindowManager QWaylandQuickShellSurfaceItem QWaylandShell QWaylandShellTemplate QWaylandShellSurface QWaylandShellSurfaceTemplate QWaylandTextInput QWaylandTextInputManager QWaylandWlShell QWaylandWlShellSurface QWaylandXdgDecorationManagerV1 QWaylandXdgShell QWaylandXdgSurface QWaylandXdgToplevel QWaylandXdgPopup QWaylandXdgShellV5 QWaylandXdgSurfaceV5 QWaylandXdgPopupV5 QWaylandXdgShellV6 QWaylandXdgSurfaceV6 QWaylandXdgToplevelV6 QWaylandXdgPopupV6 QWaylandObject QWaylandCompositorExtension QWaylandCompositorExtensionTemplate QWaylandQuickExtension qwaylandexport.h qtwaylandcompositorversion.h QtWaylandCompositorVersion QtWaylandCompositor +SYNCQT.PRIVATE_HEADER_FILES = compositor_api/qwaylandcompositor_p.h compositor_api/qwaylanddestroylistener_p.h compositor_api/qwaylandinputmethodcontrol_p.h compositor_api/qwaylandkeyboard_p.h compositor_api/qwaylandkeymap_p.h compositor_api/qwaylandoutput_p.h compositor_api/qwaylandoutputmode_p.h compositor_api/qwaylandpointer_p.h compositor_api/qwaylandquickhardwarelayer_p.h compositor_api/qwaylandquickitem_p.h compositor_api/qwaylandseat_p.h compositor_api/qwaylandsurface_p.h compositor_api/qwaylandtouch_p.h compositor_api/qwaylandview_p.h extensions/qwaylandiviapplication_p.h extensions/qwaylandivisurface_p.h extensions/qwaylandivisurfaceintegration_p.h extensions/qwaylandqtwindowmanager_p.h extensions/qwaylandquickshellsurfaceitem_p.h extensions/qwaylandshell_p.h extensions/qwaylandtextinput_p.h extensions/qwaylandtextinputmanager_p.h extensions/qwaylandwlshell_p.h extensions/qwaylandwlshellintegration_p.h extensions/qwaylandxdgdecorationv1_p.h extensions/qwaylandxdgshell_p.h extensions/qwaylandxdgshellintegration_p.h extensions/qwaylandxdgshellv5_p.h extensions/qwaylandxdgshellv5integration_p.h extensions/qwaylandxdgshellv6_p.h extensions/qwaylandxdgshellv6integration_p.h extensions/qwlqtkey_p.h extensions/qwlqttouch_p.h global/qtwaylandcompositorglobal_p.h global/qwaylandcompositorextension_p.h hardware_integration/qwlclientbufferintegration_p.h hardware_integration/qwlclientbufferintegrationfactory_p.h hardware_integration/qwlclientbufferintegrationplugin_p.h hardware_integration/qwlhardwarelayerintegration_p.h hardware_integration/qwlhardwarelayerintegrationfactory_p.h hardware_integration/qwlhardwarelayerintegrationplugin_p.h hardware_integration/qwlhwintegration_p.h hardware_integration/qwlserverbufferintegration_p.h hardware_integration/qwlserverbufferintegrationfactory_p.h hardware_integration/qwlserverbufferintegrationplugin_p.h wayland_wrapper/qwlbuffermanager_p.h wayland_wrapper/qwlclientbuffer_p.h wayland_wrapper/qwldatadevice_p.h wayland_wrapper/qwldatadevicemanager_p.h wayland_wrapper/qwldataoffer_p.h wayland_wrapper/qwldatasource_p.h wayland_wrapper/qwlregion_p.h extensions/pregenerated/3rdparty/qwayland-server-xdg-shell-unstable-v5_p.h extensions/pregenerated/3rdparty/wayland-xdg-shell-unstable-v5-server-protocol_p.h SYNCQT.QPA_HEADER_FILES = -SYNCQT.CLEAN_HEADER_FILES = compositor_api/qwaylandbufferref.h compositor_api/qwaylandclient.h compositor_api/qwaylandcompositor.h compositor_api/qwaylanddestroylistener.h compositor_api/qwaylanddrag.h:draganddrop compositor_api/qwaylandinputmethodcontrol.h compositor_api/qwaylandkeyboard.h compositor_api/qwaylandkeymap.h compositor_api/qwaylandoutput.h compositor_api/qwaylandoutputmode.h compositor_api/qwaylandpointer.h compositor_api/qwaylandquickcompositor.h compositor_api/qwaylandquickitem.h compositor_api/qwaylandquickoutput.h compositor_api/qwaylandquicksurface.h compositor_api/qwaylandresource.h compositor_api/qwaylandseat.h compositor_api/qwaylandsurface.h compositor_api/qwaylandsurfacegrabber.h compositor_api/qwaylandtouch.h compositor_api/qwaylandview.h extensions/qwaylandiviapplication.h extensions/qwaylandivisurface.h extensions/qwaylandqtwindowmanager.h extensions/qwaylandquickshellsurfaceitem.h extensions/qwaylandshell.h extensions/qwaylandshellsurface.h extensions/qwaylandtextinput.h extensions/qwaylandtextinputmanager.h extensions/qwaylandwlshell.h extensions/qwaylandxdgshellv5.h extensions/qwaylandxdgshellv6.h global/qtwaylandcompositorglobal.h global/qwaylandcompositorextension.h global/qwaylandquickextension.h -SYNCQT.INJECTIONS = src/compositor/qwayland-server-wayland.h:^5.11.3/QtWaylandCompositor/private/qwayland-server-wayland.h src/compositor/qwayland-server-hardware-integration.h:^5.11.3/QtWaylandCompositor/private/qwayland-server-hardware-integration.h src/compositor/qwayland-server-ivi-application.h:^5.11.3/QtWaylandCompositor/private/qwayland-server-ivi-application.h src/compositor/qwayland-server-qt-windowmanager.h:^5.11.3/QtWaylandCompositor/private/qwayland-server-qt-windowmanager.h src/compositor/qwayland-server-qtkey-extension.h:^5.11.3/QtWaylandCompositor/private/qwayland-server-qtkey-extension.h src/compositor/qwayland-server-server-buffer-extension.h:^5.11.3/QtWaylandCompositor/private/qwayland-server-server-buffer-extension.h src/compositor/qwayland-server-text-input-unstable-v2.h:^5.11.3/QtWaylandCompositor/private/qwayland-server-text-input-unstable-v2.h src/compositor/qwayland-server-touch-extension.h:^5.11.3/QtWaylandCompositor/private/qwayland-server-touch-extension.h src/compositor/qwayland-server-xdg-shell-unstable-v6.h:^5.11.3/QtWaylandCompositor/private/qwayland-server-xdg-shell-unstable-v6.h src/compositor/qwayland-server-xdg-shell.h:^5.11.3/QtWaylandCompositor/private/qwayland-server-xdg-shell.h src/compositor/wayland-hardware-integration-server-protocol.h:^5.11.3/QtWaylandCompositor/private/wayland-hardware-integration-server-protocol.h src/compositor/wayland-ivi-application-server-protocol.h:^5.11.3/QtWaylandCompositor/private/wayland-ivi-application-server-protocol.h src/compositor/wayland-qt-windowmanager-server-protocol.h:^5.11.3/QtWaylandCompositor/private/wayland-qt-windowmanager-server-protocol.h src/compositor/wayland-qtkey-extension-server-protocol.h:^5.11.3/QtWaylandCompositor/private/wayland-qtkey-extension-server-protocol.h src/compositor/wayland-server-buffer-extension-server-protocol.h:^5.11.3/QtWaylandCompositor/private/wayland-server-buffer-extension-server-protocol.h src/compositor/wayland-text-input-unstable-v2-server-protocol.h:^5.11.3/QtWaylandCompositor/private/wayland-text-input-unstable-v2-server-protocol.h src/compositor/wayland-touch-extension-server-protocol.h:^5.11.3/QtWaylandCompositor/private/wayland-touch-extension-server-protocol.h src/compositor/wayland-wayland-server-protocol.h:^5.11.3/QtWaylandCompositor/private/wayland-wayland-server-protocol.h src/compositor/wayland-xdg-shell-server-protocol.h:^5.11.3/QtWaylandCompositor/private/wayland-xdg-shell-server-protocol.h src/compositor/wayland-xdg-shell-unstable-v6-server-protocol.h:^5.11.3/QtWaylandCompositor/private/wayland-xdg-shell-unstable-v6-server-protocol.h +SYNCQT.CLEAN_HEADER_FILES = compositor_api/qwaylandbufferref.h compositor_api/qwaylandclient.h compositor_api/qwaylandcompositor.h compositor_api/qwaylanddestroylistener.h compositor_api/qwaylanddrag.h:draganddrop compositor_api/qwaylandinputmethodcontrol.h compositor_api/qwaylandkeyboard.h compositor_api/qwaylandkeymap.h compositor_api/qwaylandoutput.h compositor_api/qwaylandoutputmode.h compositor_api/qwaylandpointer.h compositor_api/qwaylandquickchildren.h compositor_api/qwaylandquickcompositor.h compositor_api/qwaylandquickitem.h compositor_api/qwaylandquickoutput.h compositor_api/qwaylandquicksurface.h compositor_api/qwaylandresource.h compositor_api/qwaylandseat.h compositor_api/qwaylandsurface.h compositor_api/qwaylandsurfacegrabber.h compositor_api/qwaylandtouch.h compositor_api/qwaylandview.h extensions/qwaylandiviapplication.h extensions/qwaylandivisurface.h extensions/qwaylandqtwindowmanager.h extensions/qwaylandquickshellsurfaceitem.h extensions/qwaylandshell.h extensions/qwaylandshellsurface.h extensions/qwaylandtextinput.h extensions/qwaylandtextinputmanager.h extensions/qwaylandwlshell.h extensions/qwaylandxdgdecorationv1.h extensions/qwaylandxdgshell.h extensions/qwaylandxdgshellv5.h extensions/qwaylandxdgshellv6.h global/qtwaylandcompositorglobal.h global/qwaylandcompositorextension.h global/qwaylandquickextension.h +SYNCQT.INJECTIONS = src/compositor/qwayland-server-wayland.h:^5.12.2/QtWaylandCompositor/private/qwayland-server-wayland.h src/compositor/qwayland-server-hardware-integration.h:^5.12.2/QtWaylandCompositor/private/qwayland-server-hardware-integration.h src/compositor/qwayland-server-ivi-application.h:^5.12.2/QtWaylandCompositor/private/qwayland-server-ivi-application.h src/compositor/qwayland-server-qt-windowmanager.h:^5.12.2/QtWaylandCompositor/private/qwayland-server-qt-windowmanager.h src/compositor/qwayland-server-qt-key-unstable-v1.h:^5.12.2/QtWaylandCompositor/private/qwayland-server-qt-key-unstable-v1.h src/compositor/qwayland-server-server-buffer-extension.h:^5.12.2/QtWaylandCompositor/private/qwayland-server-server-buffer-extension.h src/compositor/qwayland-server-text-input-unstable-v2.h:^5.12.2/QtWaylandCompositor/private/qwayland-server-text-input-unstable-v2.h src/compositor/qwayland-server-touch-extension.h:^5.12.2/QtWaylandCompositor/private/qwayland-server-touch-extension.h src/compositor/qwayland-server-xdg-decoration-unstable-v1.h:^5.12.2/QtWaylandCompositor/private/qwayland-server-xdg-decoration-unstable-v1.h src/compositor/qwayland-server-xdg-shell-unstable-v5.h:^5.12.2/QtWaylandCompositor/private/qwayland-server-xdg-shell-unstable-v5.h src/compositor/qwayland-server-xdg-shell-unstable-v6.h:^5.12.2/QtWaylandCompositor/private/qwayland-server-xdg-shell-unstable-v6.h src/compositor/qwayland-server-xdg-shell.h:^5.12.2/QtWaylandCompositor/private/qwayland-server-xdg-shell.h src/compositor/wayland-hardware-integration-server-protocol.h:^5.12.2/QtWaylandCompositor/private/wayland-hardware-integration-server-protocol.h src/compositor/wayland-ivi-application-server-protocol.h:^5.12.2/QtWaylandCompositor/private/wayland-ivi-application-server-protocol.h src/compositor/wayland-qt-windowmanager-server-protocol.h:^5.12.2/QtWaylandCompositor/private/wayland-qt-windowmanager-server-protocol.h src/compositor/wayland-qt-key-unstable-v1-server-protocol.h:^5.12.2/QtWaylandCompositor/private/wayland-qt-key-unstable-v1-server-protocol.h src/compositor/wayland-server-buffer-extension-server-protocol.h:^5.12.2/QtWaylandCompositor/private/wayland-server-buffer-extension-server-protocol.h src/compositor/wayland-text-input-unstable-v2-server-protocol.h:^5.12.2/QtWaylandCompositor/private/wayland-text-input-unstable-v2-server-protocol.h src/compositor/wayland-touch-extension-server-protocol.h:^5.12.2/QtWaylandCompositor/private/wayland-touch-extension-server-protocol.h src/compositor/wayland-wayland-server-protocol.h:^5.12.2/QtWaylandCompositor/private/wayland-wayland-server-protocol.h src/compositor/wayland-xdg-decoration-unstable-v1-server-protocol.h:^5.12.2/QtWaylandCompositor/private/wayland-xdg-decoration-unstable-v1-server-protocol.h src/compositor/wayland-xdg-shell-server-protocol.h:^5.12.2/QtWaylandCompositor/private/wayland-xdg-shell-server-protocol.h src/compositor/wayland-xdg-shell-unstable-v5-server-protocol.h:^5.12.2/QtWaylandCompositor/private/wayland-xdg-shell-unstable-v5-server-protocol.h src/compositor/wayland-xdg-shell-unstable-v6-server-protocol.h:^5.12.2/QtWaylandCompositor/private/wayland-xdg-shell-unstable-v6-server-protocol.h diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/QtWaylandCompositor qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/QtWaylandCompositor --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/QtWaylandCompositor 2018-11-29 15:09:19.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/QtWaylandCompositor 2019-03-11 13:34:52.000000000 +0000 @@ -19,6 +19,7 @@ #include "qwaylandoutputmode.h" #include "qwaylandpointer.h" #include "qwaylandqtwindowmanager.h" +#include "qwaylandquickchildren.h" #include "qwaylandquickcompositor.h" #include "qwaylandquickextension.h" #include "qwaylandquickitem.h" @@ -36,6 +37,8 @@ #include "qwaylandtouch.h" #include "qwaylandview.h" #include "qwaylandwlshell.h" +#include "qwaylandxdgdecorationv1.h" +#include "qwaylandxdgshell.h" #include "qwaylandxdgshellv5.h" #include "qwaylandxdgshellv6.h" #include "qtwaylandcompositorversion.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/qtwaylandcompositorversion.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/qtwaylandcompositorversion.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/qtwaylandcompositorversion.h 2018-11-29 15:09:19.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/qtwaylandcompositorversion.h 2019-03-11 13:34:52.000000000 +0000 @@ -2,8 +2,8 @@ #ifndef QT_QTWAYLANDCOMPOSITOR_VERSION_H #define QT_QTWAYLANDCOMPOSITOR_VERSION_H -#define QTWAYLANDCOMPOSITOR_VERSION_STR "5.11.3" +#define QTWAYLANDCOMPOSITOR_VERSION_STR "5.12.2" -#define QTWAYLANDCOMPOSITOR_VERSION 0x050B03 +#define QTWAYLANDCOMPOSITOR_VERSION 0x050C02 #endif // QT_QTWAYLANDCOMPOSITOR_VERSION_H diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/qwaylandquickchildren.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/qwaylandquickchildren.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/qwaylandquickchildren.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/qwaylandquickchildren.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../src/compositor/compositor_api/qwaylandquickchildren.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/QWaylandXdgDecorationManagerV1 qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/QWaylandXdgDecorationManagerV1 --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/QWaylandXdgDecorationManagerV1 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/QWaylandXdgDecorationManagerV1 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "qwaylandxdgdecorationv1.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/qwaylandxdgdecorationv1.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/qwaylandxdgdecorationv1.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/qwaylandxdgdecorationv1.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/qwaylandxdgdecorationv1.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../src/compositor/extensions/qwaylandxdgdecorationv1.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/QWaylandXdgPopup qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/QWaylandXdgPopup --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/QWaylandXdgPopup 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/QWaylandXdgPopup 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "qwaylandxdgshell.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/QWaylandXdgShell qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/QWaylandXdgShell --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/QWaylandXdgShell 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/QWaylandXdgShell 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "qwaylandxdgshell.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/qwaylandxdgshell.h qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/qwaylandxdgshell.h --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/qwaylandxdgshell.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/qwaylandxdgshell.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "../../src/compositor/extensions/qwaylandxdgshell.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/QWaylandXdgSurface qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/QWaylandXdgSurface --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/QWaylandXdgSurface 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/QWaylandXdgSurface 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "qwaylandxdgshell.h" diff -Nru qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/QWaylandXdgToplevel qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/QWaylandXdgToplevel --- qtwayland-opensource-src-5.11.3/include/QtWaylandCompositor/QWaylandXdgToplevel 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/include/QtWaylandCompositor/QWaylandXdgToplevel 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1 @@ +#include "qwaylandxdgshell.h" diff -Nru qtwayland-opensource-src-5.11.3/.qmake.conf qtwayland-opensource-src-5.12.2/.qmake.conf --- qtwayland-opensource-src-5.11.3/.qmake.conf 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/.qmake.conf 2019-02-21 12:36:59.000000000 +0000 @@ -1,3 +1,3 @@ load(qt_build_config) -MODULE_VERSION = 5.11.3 +MODULE_VERSION = 5.12.2 diff -Nru qtwayland-opensource-src-5.11.3/README qtwayland-opensource-src-5.12.2/README --- qtwayland-opensource-src-5.11.3/README 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/README 2019-02-21 12:36:59.000000000 +0000 @@ -9,8 +9,8 @@ Enables the creation of Wayland compositors using Qt and QtQuick. To build the QtWayland module you need the external dependencies: -xkbcommon 0.2.0 - http://xkbcommon.org/ -wayland 1.6.0 - http://wayland.freedesktop.org/ +xkbcommon - http://xkbcommon.org/ +wayland - http://wayland.freedesktop.org/ QtWaylandCompositor supports loading client buffer integrations that don't use the wayland-egl interfaces. These client buffer integrations are picked up by @@ -70,8 +70,8 @@ Custom shell protocols are added through shell integration plugins. Which shell integration to use is determined by the QT_WAYLAND_SHELL_INTEGRATION -environment variable. If no shell is specified, the default is to first try -xdg-shell-v6 and then wl-shell. +environment variable. If no shell is specified, the default is to try shells in +the following order: xdg-shell, xdg-shell-v6, wl-shell and then ivi-shell. Example Usage: @@ -83,10 +83,10 @@ Available Shell Integrations: * ivi-shell - * wl-shell - * xdg-shell-v5 + * wl-shell (deprecated) + * xdg-shell + * xdg-shell-v5 (deprecated) * xdg-shell-v6 - We hang out at #qt-labs and #qt-lighthouse on freenode if you have any questions diff -Nru qtwayland-opensource-src-5.11.3/src/3rdparty/protocol/qt_attribution.json qtwayland-opensource-src-5.12.2/src/3rdparty/protocol/qt_attribution.json --- qtwayland-opensource-src-5.11.3/src/3rdparty/protocol/qt_attribution.json 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/3rdparty/protocol/qt_attribution.json 2019-02-21 12:36:59.000000000 +0000 @@ -37,11 +37,44 @@ }, { + "Id": "wayland-xdg-decoration-protocol", + "Name": "Wayland xdg-decoration Protocol", + "QDocModule": "qtwaylandcompositor", + "QtUsage": "Used in the Qt Wayland Compositor API, and the Qt Wayland platform plugin.", + "Files": "xdg-decoration-unstable-v1.xml", + + "Description": "The xdg-decoration protocol allows a compositor to announce support for server-side decorations.", + "Homepage": "https://wayland.freedesktop.org", + "Version": "unstable v1, version 1", + "DownloadLocation": "https://cgit.freedesktop.org/wayland/wayland-protocols/plain/unstable/xdg-decoration/xdg-decoration-unstable-v1.xml?h=1.16", + "LicenseId": "MIT", + "License": "MIT License", + "LicenseFile": "MIT_LICENSE.txt", + "Copyright": "Copyright © 2018 Simon Ser" + }, + + { + "Id": "wayland-xdg-output-protocol", + "Name": "Wayland XDG Output Protocol", + "QDocModule": "qtwaylandcompositor", + "QtUsage": "Used in the Qt Wayland platform plugin.", + "Files": "xdg-output-unstable-v1.xml", + "Description": "The XDG Output protocol is an extended way to describe output regions under Wayland", + "Homepage": "https://wayland.freedesktop.org", + "Version": "unstable v1, version 2", + "DownloadLocation": "https://cgit.freedesktop.org/wayland/wayland-protocols/plain/unstable/xdg-output/xdg-output-unstable-v1.xml?h=1.16", + "LicenseId": "MIT", + "License": "MIT License", + "LicenseFile": "MIT_LICENSE.txt", + "Copyright": "Copyright © 2017 Red Hat Inc." + }, + + { "Id": "wayland-xdg-shell-protocol", "Name": "Wayland XDG Shell Protocol", "QDocModule": "qtwaylandcompositor", "QtUsage": "Used in the Qt Wayland Compositor, and the Qt Wayland platform plugin.", - "Files": "xdg-shell.xml", + "Files": " xdg-shell-unstable-v5.xml xdg-shell-unstable-v6.xml xdg-shell.xml ../../compositor/extensions/pregenerated/3rdparty/qwayland-server-xdg-shell-unstable-v5.cpp ../../compositor/extensions/pregenerated/3rdparty/qwayland-server-xdg-shell-unstable-v5_p.h ../../compositor/extensions/pregenerated/3rdparty/wayland-xdg-shell-unstable-v5-protocol.c ../../compositor/extensions/pregenerated/3rdparty/wayland-xdg-shell-unstable-v5-server-protocol_p.h ../../plugins/shellintegration/xdg-shell-v5/pregenerated/3rdparty/qwayland-xdg-shell-unstable-v5.cpp ../../plugins/shellintegration/xdg-shell-v5/pregenerated/3rdparty/qwayland-xdg-shell-unstable-v5_p.h ../../plugins/shellintegration/xdg-shell-v5/pregenerated/3rdparty/wayland-xdg-shell-unstable-v5-client-protocol_p.h ../../plugins/shellintegration/xdg-shell-v5/pregenerated/3rdparty/wayland-xdg-shell-unstable-v5-protocol.c", "Description": "The XDG-Shell protocol is an extended way to manage surfaces under Wayland compositors.", "Homepage": "https://wayland.freedesktop.org", @@ -70,5 +103,20 @@ "LicenseFile": "HPND_LICENSE.txt", "Copyright": "Copyright © 2012, 2013 Intel Corporation Copyright © 2015, 2016 Jan Arne Petersen" - } + }, + + { + "Id": "wayland-eglstream-controller", + "Name": "Wayland EGLStream Controller Protocol", + "QDocModule": "qtwaylandcompositor", + "QtUsage": "Used in the Qt Wayland Compositor", + "Files": "wayland-eglstream-controller.xml", + + "Description": "Allows clients to request that the compositor creates its EGLStream.", + "Homepage": "https://github.com/NVIDIA/egl-wayland", + "LicenseId": "MIT", + "License": "MIT License", + "LicenseFile": "MIT_LICENSE.txt", + "Copyright": "Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved." + } ] diff -Nru qtwayland-opensource-src-5.11.3/src/3rdparty/protocol/wl-eglstream-controller.xml qtwayland-opensource-src-5.12.2/src/3rdparty/protocol/wl-eglstream-controller.xml --- qtwayland-opensource-src-5.11.3/src/3rdparty/protocol/wl-eglstream-controller.xml 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/3rdparty/protocol/wl-eglstream-controller.xml 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,37 @@ + + + + Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved. + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. + + + + + Creates the corresponding server side EGLStream from the given wl_buffer + and attaches a consumer to it. + + + + + + diff -Nru qtwayland-opensource-src-5.11.3/src/3rdparty/protocol/xdg-decoration-unstable-v1.xml qtwayland-opensource-src-5.12.2/src/3rdparty/protocol/xdg-decoration-unstable-v1.xml --- qtwayland-opensource-src-5.11.3/src/3rdparty/protocol/xdg-decoration-unstable-v1.xml 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/3rdparty/protocol/xdg-decoration-unstable-v1.xml 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,156 @@ + + + + Copyright © 2018 Simon Ser + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice (including the next + paragraph) shall be included in all copies or substantial portions of the + Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. + + + + + This interface allows a compositor to announce support for server-side + decorations. + + A window decoration is a set of window controls as deemed appropriate by + the party managing them, such as user interface components used to move, + resize and change a window's state. + + A client can use this protocol to request being decorated by a supporting + compositor. + + If compositor and client do not negotiate the use of a server-side + decoration using this protocol, clients continue to self-decorate as they + see fit. + + Warning! The protocol described in this file is experimental and + backward incompatible changes may be made. Backward compatible changes + may be added together with the corresponding interface version bump. + Backward incompatible changes are done by bumping the version number in + the protocol and interface names and resetting the interface version. + Once the protocol is to be declared stable, the 'z' prefix and the + version number in the protocol and interface names are removed and the + interface version number is reset. + + + + + Destroy the decoration manager. This doesn't destroy objects created + with the manager. + + + + + + Create a new decoration object associated with the given toplevel. + + Creating an xdg_toplevel_decoration from an xdg_toplevel which has a + buffer attached or committed is a client error, and any attempts by a + client to attach or manipulate a buffer prior to the first + xdg_toplevel_decoration.configure event must also be treated as + errors. + + + + + + + + + The decoration object allows the compositor to toggle server-side window + decorations for a toplevel surface. The client can request to switch to + another mode. + + The xdg_toplevel_decoration object must be destroyed before its + xdg_toplevel. + + + + + + + + + + + Switch back to a mode without any server-side decorations at the next + commit. + + + + + + These values describe window decoration modes. + + + + + + + + Set the toplevel surface decoration mode. This informs the compositor + that the client prefers the provided decoration mode. + + After requesting a decoration mode, the compositor will respond by + emitting a xdg_surface.configure event. The client should then update + its content, drawing it without decorations if the received mode is + server-side decorations. The client must also acknowledge the configure + when committing the new content (see xdg_surface.ack_configure). + + The compositor can decide not to use the client's mode and enforce a + different mode instead. + + Clients whose decoration mode depend on the xdg_toplevel state may send + a set_mode request in response to a xdg_surface.configure event and wait + for the next xdg_surface.configure event to prevent unwanted state. + Such clients are responsible for preventing configure loops and must + make sure not to send multiple successive set_mode requests with the + same decoration mode. + + + + + + + Unset the toplevel surface decoration mode. This informs the compositor + that the client doesn't prefer a particular decoration mode. + + This request has the same semantics as set_mode. + + + + + + The configure event asks the client to change its decoration mode. The + configured state should not be applied immediately. Clients must send an + ack_configure in response to this event. See xdg_surface.configure and + xdg_surface.ack_configure for details. + + A configure event can be sent at any time. The specified mode must be + obeyed by the client. + + + + + diff -Nru qtwayland-opensource-src-5.11.3/src/3rdparty/protocol/xdg-output-unstable-v1.xml qtwayland-opensource-src-5.12.2/src/3rdparty/protocol/xdg-output-unstable-v1.xml --- qtwayland-opensource-src-5.11.3/src/3rdparty/protocol/xdg-output-unstable-v1.xml 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/3rdparty/protocol/xdg-output-unstable-v1.xml 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,209 @@ + + + + + Copyright © 2017 Red Hat Inc. + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice (including the next + paragraph) shall be included in all copies or substantial portions of the + Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. + + + + This protocol aims at describing outputs in a way which is more in line + with the concept of an output on desktop oriented systems. + + Some information are more specific to the concept of an output for + a desktop oriented system and may not make sense in other applications, + such as IVI systems for example. + + Typically, the global compositor space on a desktop system is made of + a contiguous or overlapping set of rectangular regions. + + Some of the information provided in this protocol might be identical + to their counterparts already available from wl_output, in which case + the information provided by this protocol should be preferred to their + equivalent in wl_output. The goal is to move the desktop specific + concepts (such as output location within the global compositor space, + the connector name and types, etc.) out of the core wl_output protocol. + + Warning! The protocol described in this file is experimental and + backward incompatible changes may be made. Backward compatible + changes may be added together with the corresponding interface + version bump. + Backward incompatible changes are done by bumping the version + number in the protocol and interface names and resetting the + interface version. Once the protocol is to be declared stable, + the 'z' prefix and the version number in the protocol and + interface names are removed and the interface version number is + reset. + + + + + A global factory interface for xdg_output objects. + + + + + Using this request a client can tell the server that it is not + going to use the xdg_output_manager object anymore. + + Any objects already created through this instance are not affected. + + + + + + This creates a new xdg_output object for the given wl_output. + + + + + + + + + An xdg_output describes part of the compositor geometry. + + This typically corresponds to a monitor that displays part of the + compositor space. + + + + + Using this request a client can tell the server that it is not + going to use the xdg_output object anymore. + + + + + + The position event describes the location of the wl_output within + the global compositor space. + + The logical_position event is sent after creating an xdg_output + (see xdg_output_manager.get_xdg_output) and whenever the location + of the output changes within the global compositor space. + + + + + + + + The logical_size event describes the size of the output in the + global compositor space. + + For example, a surface without any buffer scale, transformation + nor rotation set, with the size matching the logical_size will + have the same size as the corresponding output when displayed. + + Most regular Wayland clients should not pay attention to the + logical size and would rather rely on xdg_shell interfaces. + + Some clients such as Xwayland, however, need this to configure + their surfaces in the global compositor space as the compositor + may apply a different scale from what is advertised by the output + scaling property (to achieve fractional scaling, for example). + + For example, for a wl_output mode 3840×2160 and a scale factor 2: + + - A compositor not scaling the surface buffers will advertise a + logical size of 3840×2160, + + - A compositor automatically scaling the surface buffers will + advertise a logical size of 1920×1080, + + - A compositor using a fractional scale of 1.5 will advertise a + logical size to 2560×1620. + + For example, for a wl_output mode 1920×1080 and a 90 degree rotation, + the compositor will advertise a logical size of 1080x1920. + + The logical_size event is sent after creating an xdg_output + (see xdg_output_manager.get_xdg_output) and whenever the logical + size of the output changes, either as a result of a change in the + applied scale or because of a change in the corresponding output + mode(see wl_output.mode) or transform (see wl_output.transform). + + + + + + + + This event is sent after all other properties of an xdg_output + have been sent. + + This allows changes to the xdg_output properties to be seen as + atomic, even if they happen via multiple events. + + + + + + + + Many compositors will assign names to their outputs, show them to the + user, allow them to be configured by name, etc. The client may wish to + know this name as well to offer the user similar behaviors. + + The naming convention is compositor defined, but limited to + alphanumeric characters and dashes (-). Each name is unique among all + wl_output globals, but if a wl_output global is destroyed the same name + may be reused later. The names will also remain consistent across + sessions with the same hardware and software configuration. + + Examples of names include 'HDMI-A-1', 'WL-1', 'X11-1', etc. However, do + not assume that the name is a reflection of an underlying DRM + connector, X11 connection, etc. + + The name event is sent after creating an xdg_output (see + xdg_output_manager.get_xdg_output). This event is only sent once per + xdg_output, and the name does not change over the lifetime of the + wl_output global. + + + + + + + Many compositors can produce human-readable descriptions of their + outputs. The client may wish to know this description as well, to + communicate the user for various purposes. + + The description is a UTF-8 string with no convention defined for its + contents. Examples might include 'Foocorp 11" Display' or 'Virtual X11 + output via :1'. + + The description event is sent after creating an xdg_output (see + xdg_output_manager.get_xdg_output). This event is only sent once per + xdg_output, and the description does not change over the lifetime of + the wl_output global. The description is optional, and may not be sent + at all. + + + + + + diff -Nru qtwayland-opensource-src-5.11.3/src/3rdparty/protocol/xdg-shell-unstable-v5.xml qtwayland-opensource-src-5.12.2/src/3rdparty/protocol/xdg-shell-unstable-v5.xml --- qtwayland-opensource-src-5.11.3/src/3rdparty/protocol/xdg-shell-unstable-v5.xml 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/3rdparty/protocol/xdg-shell-unstable-v5.xml 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,623 @@ + + + + + Copyright © 2008-2013 Kristian Høgsberg + Copyright © 2013 Rafael Antognolli + Copyright © 2013 Jasper St. Pierre + Copyright © 2010-2013 Intel Corporation + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice (including the next + paragraph) shall be included in all copies or substantial portions of the + Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. + + + + + xdg_shell allows clients to turn a wl_surface into a "real window" + which can be dragged, resized, stacked, and moved around by the + user. Everything about this interface is suited towards traditional + desktop environments. + + + + + The 'current' member of this enum gives the version of the + protocol. Implementations can compare this to the version + they implement using static_assert to ensure the protocol and + implementation versions match. + + + + + + + + + + + + + + Destroy this xdg_shell object. + + Destroying a bound xdg_shell object while there are surfaces + still alive created by this xdg_shell object instance is illegal + and will result in a protocol error. + + + + + + Negotiate the unstable version of the interface. This + mechanism is in place to ensure client and server agree on the + unstable versions of the protocol that they speak or exit + cleanly if they don't agree. This request will go away once + the xdg-shell protocol is stable. + + + + + + + This creates an xdg_surface for the given surface and gives it the + xdg_surface role. A wl_surface can only be given an xdg_surface role + once. If get_xdg_surface is called with a wl_surface that already has + an active xdg_surface associated with it, or if it had any other role, + an error is raised. + + See the documentation of xdg_surface for more details about what an + xdg_surface is and how it is used. + + + + + + + + This creates an xdg_popup for the given surface and gives it the + xdg_popup role. A wl_surface can only be given an xdg_popup role + once. If get_xdg_popup is called with a wl_surface that already has + an active xdg_popup associated with it, or if it had any other role, + an error is raised. + + This request must be used in response to some sort of user action + like a button press, key press, or touch down event. + + See the documentation of xdg_popup for more details about what an + xdg_popup is and how it is used. + + + + + + + + + + + + + The ping event asks the client if it's still alive. Pass the + serial specified in the event back to the compositor by sending + a "pong" request back with the specified serial. + + Compositors can use this to determine if the client is still + alive. It's unspecified what will happen if the client doesn't + respond to the ping request, or in what timeframe. Clients should + try to respond in a reasonable amount of time. + + A compositor is free to ping in any way it wants, but a client must + always respond to any xdg_shell object it created. + + + + + + + A client must respond to a ping event with a pong request or + the client may be deemed unresponsive. + + + + + + + + An interface that may be implemented by a wl_surface, for + implementations that provide a desktop-style user interface. + + It provides requests to treat surfaces like windows, allowing to set + properties like maximized, fullscreen, minimized, and to move and resize + them, and associate metadata like title and app id. + + The client must call wl_surface.commit on the corresponding wl_surface + for the xdg_surface state to take effect. Prior to committing the new + state, it can set up initial configuration, such as maximizing or setting + a window geometry. + + Even without attaching a buffer the compositor must respond to initial + committed configuration, for instance sending a configure event with + expected window geometry if the client maximized its surface during + initialization. + + For a surface to be mapped by the compositor the client must have + committed both an xdg_surface state and a buffer. + + + + + Unmap and destroy the window. The window will be effectively + hidden from the user's point of view, and all state like + maximization, fullscreen, and so on, will be lost. + + + + + + Set the "parent" of this surface. This window should be stacked + above a parent. The parent surface must be mapped as long as this + surface is mapped. + + Parent windows should be set on dialogs, toolboxes, or other + "auxiliary" surfaces, so that the parent is raised when the dialog + is raised. + + + + + + + Set a short title for the surface. + + This string may be used to identify the surface in a task bar, + window list, or other user interface elements provided by the + compositor. + + The string must be encoded in UTF-8. + + + + + + + Set an application identifier for the surface. + + The app ID identifies the general class of applications to which + the surface belongs. The compositor can use this to group multiple + surfaces together, or to determine how to launch a new application. + + For D-Bus activatable applications, the app ID is used as the D-Bus + service name. + + The compositor shell will try to group application surfaces together + by their app ID. As a best practice, it is suggested to select app + ID's that match the basename of the application's .desktop file. + For example, "org.freedesktop.FooViewer" where the .desktop file is + "org.freedesktop.FooViewer.desktop". + + See the desktop-entry specification [0] for more details on + application identifiers and how they relate to well-known D-Bus + names and .desktop files. + + [0] http://standards.freedesktop.org/desktop-entry-spec/ + + + + + + + Clients implementing client-side decorations might want to show + a context menu when right-clicking on the decorations, giving the + user a menu that they can use to maximize or minimize the window. + + This request asks the compositor to pop up such a window menu at + the given position, relative to the local surface coordinates of + the parent surface. There are no guarantees as to what menu items + the window menu contains. + + This request must be used in response to some sort of user action + like a button press, key press, or touch down event. + + + + + + + + + + Start an interactive, user-driven move of the surface. + + This request must be used in response to some sort of user action + like a button press, key press, or touch down event. The passed + serial is used to determine the type of interactive move (touch, + pointer, etc). + + The server may ignore move requests depending on the state of + the surface (e.g. fullscreen or maximized), or if the passed serial + is no longer valid. + + If triggered, the surface will lose the focus of the device + (wl_pointer, wl_touch, etc) used for the move. It is up to the + compositor to visually indicate that the move is taking place, such as + updating a pointer cursor, during the move. There is no guarantee + that the device focus will return when the move is completed. + + + + + + + + These values are used to indicate which edge of a surface + is being dragged in a resize operation. + + + + + + + + + + + + + + + Start a user-driven, interactive resize of the surface. + + This request must be used in response to some sort of user action + like a button press, key press, or touch down event. The passed + serial is used to determine the type of interactive resize (touch, + pointer, etc). + + The server may ignore resize requests depending on the state of + the surface (e.g. fullscreen or maximized). + + If triggered, the client will receive configure events with the + "resize" state enum value and the expected sizes. See the "resize" + enum value for more details about what is required. The client + must also acknowledge configure events using "ack_configure". After + the resize is completed, the client will receive another "configure" + event without the resize state. + + If triggered, the surface also will lose the focus of the device + (wl_pointer, wl_touch, etc) used for the resize. It is up to the + compositor to visually indicate that the resize is taking place, + such as updating a pointer cursor, during the resize. There is no + guarantee that the device focus will return when the resize is + completed. + + The edges parameter specifies how the surface should be resized, + and is one of the values of the resize_edge enum. The compositor + may use this information to update the surface position for + example when dragging the top left corner. The compositor may also + use this information to adapt its behavior, e.g. choose an + appropriate cursor image. + + + + + + + + + The different state values used on the surface. This is designed for + state values like maximized, fullscreen. It is paired with the + configure event to ensure that both the client and the compositor + setting the state can be synchronized. + + States set in this way are double-buffered. They will get applied on + the next commit. + + Desktop environments may extend this enum by taking up a range of + values and documenting the range they chose in this description. + They are not required to document the values for the range that they + chose. Ideally, any good extensions from a desktop environment should + make its way into standardization into this enum. + + The current reserved ranges are: + + 0x0000 - 0x0FFF: xdg-shell core values, documented below. + 0x1000 - 0x1FFF: GNOME + 0x2000 - 0x2FFF: EFL + + + + The surface is maximized. The window geometry specified in the configure + event must be obeyed by the client. + + + + + The surface is fullscreen. The window geometry specified in the configure + event must be obeyed by the client. + + + + + The surface is being resized. The window geometry specified in the + configure event is a maximum; the client cannot resize beyond it. + Clients that have aspect ratio or cell sizing configuration can use + a smaller size, however. + + + + + Client window decorations should be painted as if the window is + active. Do not assume this means that the window actually has + keyboard or pointer focus. + + + + + + + The configure event asks the client to resize its surface or to + change its state. + + The width and height arguments specify a hint to the window + about how its surface should be resized in window geometry + coordinates. See set_window_geometry. + + If the width or height arguments are zero, it means the client + should decide its own window dimension. This may happen when the + compositor need to configure the state of the surface but doesn't + have any information about any previous or expected dimension. + + The states listed in the event specify how the width/height + arguments should be interpreted, and possibly how it should be + drawn. + + Clients should arrange their surface for the new size and + states, and then send a ack_configure request with the serial + sent in this configure event at some point before committing + the new surface. + + If the client receives multiple configure events before it + can respond to one, it is free to discard all but the last + event it received. + + + + + + + + + + When a configure event is received, if a client commits the + surface in response to the configure event, then the client + must make an ack_configure request sometime before the commit + request, passing along the serial of the configure event. + + For instance, the compositor might use this information to move + a surface to the top left only when the client has drawn itself + for the maximized or fullscreen state. + + If the client receives multiple configure events before it + can respond to one, it only has to ack the last configure event. + + A client is not required to commit immediately after sending + an ack_configure request - it may even ack_configure several times + before its next surface commit. + + The compositor expects that the most recently received + ack_configure request at the time of a commit indicates which + configure event the client is responding to. + + + + + + + The window geometry of a window is its "visible bounds" from the + user's perspective. Client-side decorations often have invisible + portions like drop-shadows which should be ignored for the + purposes of aligning, placing and constraining windows. + + The window geometry is double buffered, and will be applied at the + time wl_surface.commit of the corresponding wl_surface is called. + + Once the window geometry of the surface is set once, it is not + possible to unset it, and it will remain the same until + set_window_geometry is called again, even if a new subsurface or + buffer is attached. + + If never set, the value is the full bounds of the surface, + including any subsurfaces. This updates dynamically on every + commit. This unset mode is meant for extremely simple clients. + + If responding to a configure event, the window geometry in here + must respect the sizing negotiations specified by the states in + the configure event. + + The arguments are given in the surface local coordinate space of + the wl_surface associated with this xdg_surface. + + The width and height must be greater than zero. + + + + + + + + + + Maximize the surface. + + After requesting that the surface should be maximized, the compositor + will respond by emitting a configure event with the "maximized" state + and the required window geometry. The client should then update its + content, drawing it in a maximized state, i.e. without shadow or other + decoration outside of the window geometry. The client must also + acknowledge the configure when committing the new content (see + ack_configure). + + It is up to the compositor to decide how and where to maximize the + surface, for example which output and what region of the screen should + be used. + + If the surface was already maximized, the compositor will still emit + a configure event with the "maximized" state. + + + + + + Unmaximize the surface. + + After requesting that the surface should be unmaximized, the compositor + will respond by emitting a configure event without the "maximized" + state. If available, the compositor will include the window geometry + dimensions the window had prior to being maximized in the configure + request. The client must then update its content, drawing it in a + regular state, i.e. potentially with shadow, etc. The client must also + acknowledge the configure when committing the new content (see + ack_configure). + + It is up to the compositor to position the surface after it was + unmaximized; usually the position the surface had before maximizing, if + applicable. + + If the surface was already not maximized, the compositor will still + emit a configure event without the "maximized" state. + + + + + + Make the surface fullscreen. + + You can specify an output that you would prefer to be fullscreen. + If this value is NULL, it's up to the compositor to choose which + display will be used to map this surface. + + If the surface doesn't cover the whole output, the compositor will + position the surface in the center of the output and compensate with + black borders filling the rest of the output. + + + + + + + + Request that the compositor minimize your surface. There is no + way to know if the surface is currently minimized, nor is there + any way to unset minimization on this surface. + + If you are looking to throttle redrawing when minimized, please + instead use the wl_surface.frame event for this, as this will + also work with live previews on windows in Alt-Tab, Expose or + similar compositor features. + + + + + + The close event is sent by the compositor when the user + wants the surface to be closed. This should be equivalent to + the user clicking the close button in client-side decorations, + if your application has any... + + This is only a request that the user intends to close your + window. The client may choose to ignore this request, or show + a dialog to ask the user to save their data... + + + + + + + A popup surface is a short-lived, temporary surface that can be + used to implement menus. It takes an explicit grab on the surface + that will be dismissed when the user dismisses the popup. This can + be done by the user clicking outside the surface, using the keyboard, + or even locking the screen through closing the lid or a timeout. + + When the popup is dismissed, a popup_done event will be sent out, + and at the same time the surface will be unmapped. The xdg_popup + object is now inert and cannot be reactivated, so clients should + destroy it. Explicitly destroying the xdg_popup object will also + dismiss the popup and unmap the surface. + + Clients will receive events for all their surfaces during this + grab (which is an "owner-events" grab in X11 parlance). This is + done so that users can navigate through submenus and other + "nested" popup windows without having to dismiss the topmost + popup. + + Clients that want to dismiss the popup when another surface of + their own is clicked should dismiss the popup using the destroy + request. + + The parent surface must have either an xdg_surface or xdg_popup + role. + + Specifying an xdg_popup for the parent means that the popups are + nested, with this popup now being the topmost popup. Nested + popups must be destroyed in the reverse order they were created + in, e.g. the only popup you are allowed to destroy at all times + is the topmost one. + + If there is an existing popup when creating a new popup, the + parent must be the current topmost popup. + + A parent surface must be mapped before the new popup is mapped. + + When compositors choose to dismiss a popup, they will likely + dismiss every nested popup as well. When a compositor dismisses + popups, it will follow the same dismissing order as required + from the client. + + The x and y arguments passed when creating the popup object specify + where the top left of the popup should be placed, relative to the + local surface coordinates of the parent surface. See + xdg_shell.get_xdg_popup. + + The client must call wl_surface.commit on the corresponding wl_surface + for the xdg_popup state to take effect. + + For a surface to be mapped by the compositor the client must have + committed both the xdg_popup state and a buffer. + + + + + This destroys the popup. Explicitly destroying the xdg_popup + object will also dismiss the popup, and unmap the surface. + + If this xdg_popup is not the "topmost" popup, a protocol error + will be sent. + + + + + + The popup_done event is sent out when a popup is dismissed by the + compositor. The client should destroy the xdg_popup object at this + point. + + + + + diff -Nru qtwayland-opensource-src-5.11.3/src/3rdparty/protocol/xdg-shell.xml qtwayland-opensource-src-5.12.2/src/3rdparty/protocol/xdg-shell.xml --- qtwayland-opensource-src-5.11.3/src/3rdparty/protocol/xdg-shell.xml 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/3rdparty/protocol/xdg-shell.xml 2019-02-21 12:36:59.000000000 +0000 @@ -6,6 +6,8 @@ Copyright © 2013 Rafael Antognolli Copyright © 2013 Jasper St. Pierre Copyright © 2010-2013 Intel Corporation + Copyright © 2015-2017 Samsung Electronics Co., Ltd + Copyright © 2015-2017 Red Hat Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), @@ -27,59 +29,58 @@ DEALINGS IN THE SOFTWARE. - + - xdg_shell allows clients to turn a wl_surface into a "real window" - which can be dragged, resized, stacked, and moved around by the - user. Everything about this interface is suited towards traditional - desktop environments. + The xdg_wm_base interface is exposed as a global object enabling clients + to turn their wl_surfaces into windows in a desktop environment. It + defines the basic functionality needed for clients and the compositor to + create windows that can be dragged, resized, maximized, etc, as well as + creating transient windows such as popup menus. - - - The 'current' member of this enum gives the version of the - protocol. Implementations can compare this to the version - they implement using static_assert to ensure the protocol and - implementation versions match. - - - - - - - + + + + + - - Destroy this xdg_shell object. + + Destroy this xdg_wm_base object. - Destroying a bound xdg_shell object while there are surfaces - still alive created by this xdg_shell object instance is illegal - and will result in a protocol error. + Destroying a bound xdg_wm_base object while there are surfaces + still alive created by this xdg_wm_base object instance is illegal + and will result in a protocol error. - - - Negotiate the unstable version of the interface. This - mechanism is in place to ensure client and server agree on the - unstable versions of the protocol that they speak or exit - cleanly if they don't agree. This request will go away once - the xdg-shell protocol is stable. + + + Create a positioner object. A positioner object is used to position + surfaces relative to some parent surface. See the interface description + and xdg_surface.get_popup for details. - + - This creates an xdg_surface for the given surface and gives it the - xdg_surface role. A wl_surface can only be given an xdg_surface role - once. If get_xdg_surface is called with a wl_surface that already has - an active xdg_surface associated with it, or if it had any other role, - an error is raised. + This creates an xdg_surface for the given surface. While xdg_surface + itself is not a role, the corresponding surface may only be assigned + a role extending xdg_surface, such as xdg_toplevel or xdg_popup. + + This creates an xdg_surface for the given surface. An xdg_surface is + used as basis to define a role to a given surface, such as xdg_toplevel + or xdg_popup. It also manages functionality shared between xdg_surface + based surface roles. See the documentation of xdg_surface for more details about what an xdg_surface is and how it is used. @@ -88,97 +89,489 @@ - - - This creates an xdg_popup for the given surface and gives it the - xdg_popup role. A wl_surface can only be given an xdg_popup role - once. If get_xdg_popup is called with a wl_surface that already has - an active xdg_popup associated with it, or if it had any other role, - an error is raised. - - This request must be used in response to some sort of user action - like a button press, key press, or touch down event. - - See the documentation of xdg_popup for more details about what an - xdg_popup is and how it is used. + + + A client must respond to a ping event with a pong request or + the client may be deemed unresponsive. See xdg_wm_base.ping. - - - - - - - + - The ping event asks the client if it's still alive. Pass the - serial specified in the event back to the compositor by sending - a "pong" request back with the specified serial. - - Compositors can use this to determine if the client is still - alive. It's unspecified what will happen if the client doesn't - respond to the ping request, or in what timeframe. Clients should - try to respond in a reasonable amount of time. + The ping event asks the client if it's still alive. Pass the + serial specified in the event back to the compositor by sending + a "pong" request back with the specified serial. See xdg_wm_base.ping. + + Compositors can use this to determine if the client is still + alive. It's unspecified what will happen if the client doesn't + respond to the ping request, or in what timeframe. Clients should + try to respond in a reasonable amount of time. - A compositor is free to ping in any way it wants, but a client must - always respond to any xdg_shell object it created. + A compositor is free to ping in any way it wants, but a client must + always respond to any xdg_wm_base object it created. + - - - A client must respond to a ping event with a pong request or - the client may be deemed unresponsive. + + + The xdg_positioner provides a collection of rules for the placement of a + child surface relative to a parent surface. Rules can be defined to ensure + the child surface remains within the visible area's borders, and to + specify how the child surface changes its position, such as sliding along + an axis, or flipping around a rectangle. These positioner-created rules are + constrained by the requirement that a child surface must intersect with or + be at least partially adjacent to its parent surface. + + See the various requests for details about possible rules. + + At the time of the request, the compositor makes a copy of the rules + specified by the xdg_positioner. Thus, after the request is complete the + xdg_positioner object can be destroyed or reused; further changes to the + object will have no effect on previous usages. + + For an xdg_positioner object to be considered complete, it must have a + non-zero size set by set_size, and a non-zero anchor rectangle set by + set_anchor_rect. Passing an incomplete xdg_positioner object when + positioning a surface raises an error. + + + + + + + + + Notify the compositor that the xdg_positioner will no longer be used. - + + + + + Set the size of the surface that is to be positioned with the positioner + object. The size is in surface-local coordinates and corresponds to the + window geometry. See xdg_surface.set_window_geometry. + + If a zero or negative size is set the invalid_input error is raised. + + + + + + + + Specify the anchor rectangle within the parent surface that the child + surface will be placed relative to. The rectangle is relative to the + window geometry as defined by xdg_surface.set_window_geometry of the + parent surface. + + When the xdg_positioner object is used to position a child surface, the + anchor rectangle may not extend outside the window geometry of the + positioned child's parent surface. + + If a negative size is set the invalid_input error is raised. + + + + + + + + + + + + + + + + + + + + + + Defines the anchor point for the anchor rectangle. The specified anchor + is used derive an anchor point that the child surface will be + positioned relative to. If a corner anchor is set (e.g. 'top_left' or + 'bottom_right'), the anchor point will be at the specified corner; + otherwise, the derived anchor point will be centered on the specified + edge, or in the center of the anchor rectangle if no edge is specified. + + + + + + + + + + + + + + + + + + + Defines in what direction a surface should be positioned, relative to + the anchor point of the parent surface. If a corner gravity is + specified (e.g. 'bottom_right' or 'top_left'), then the child surface + will be placed towards the specified gravity; otherwise, the child + surface will be centered over the anchor point on any axis that had no + gravity specified. + + + + + + + The constraint adjustment value define ways the compositor will adjust + the position of the surface, if the unadjusted position would result + in the surface being partly constrained. + + Whether a surface is considered 'constrained' is left to the compositor + to determine. For example, the surface may be partly outside the + compositor's defined 'work area', thus necessitating the child surface's + position be adjusted until it is entirely inside the work area. + + The adjustments can be combined, according to a defined precedence: 1) + Flip, 2) Slide, 3) Resize. + + + + Don't alter the surface position even if it is constrained on some + axis, for example partially outside the edge of an output. + + + + + Slide the surface along the x axis until it is no longer constrained. + + First try to slide towards the direction of the gravity on the x axis + until either the edge in the opposite direction of the gravity is + unconstrained or the edge in the direction of the gravity is + constrained. + + Then try to slide towards the opposite direction of the gravity on the + x axis until either the edge in the direction of the gravity is + unconstrained or the edge in the opposite direction of the gravity is + constrained. + + + + + Slide the surface along the y axis until it is no longer constrained. + + First try to slide towards the direction of the gravity on the y axis + until either the edge in the opposite direction of the gravity is + unconstrained or the edge in the direction of the gravity is + constrained. + + Then try to slide towards the opposite direction of the gravity on the + y axis until either the edge in the direction of the gravity is + unconstrained or the edge in the opposite direction of the gravity is + constrained. + + + + + Invert the anchor and gravity on the x axis if the surface is + constrained on the x axis. For example, if the left edge of the + surface is constrained, the gravity is 'left' and the anchor is + 'left', change the gravity to 'right' and the anchor to 'right'. + + If the adjusted position also ends up being constrained, the resulting + position of the flip_x adjustment will be the one before the + adjustment. + + + + + Invert the anchor and gravity on the y axis if the surface is + constrained on the y axis. For example, if the bottom edge of the + surface is constrained, the gravity is 'bottom' and the anchor is + 'bottom', change the gravity to 'top' and the anchor to 'top'. + + The adjusted position is calculated given the original anchor + rectangle and offset, but with the new flipped anchor and gravity + values. + + If the adjusted position also ends up being constrained, the resulting + position of the flip_y adjustment will be the one before the + adjustment. + + + + + Resize the surface horizontally so that it is completely + unconstrained. + + + + + Resize the surface vertically so that it is completely unconstrained. + + + + + + + Specify how the window should be positioned if the originally intended + position caused the surface to be constrained, meaning at least + partially outside positioning boundaries set by the compositor. The + adjustment is set by constructing a bitmask describing the adjustment to + be made when the surface is constrained on that axis. + + If no bit for one axis is set, the compositor will assume that the child + surface should not change its position on that axis when constrained. + + If more than one bit for one axis is set, the order of how adjustments + are applied is specified in the corresponding adjustment descriptions. + + The default adjustment is none. + + + + + + + Specify the surface position offset relative to the position of the + anchor on the anchor rectangle and the anchor on the surface. For + example if the anchor of the anchor rectangle is at (x, y), the surface + has the gravity bottom|right, and the offset is (ox, oy), the calculated + surface position will be (x + ox, y + oy). The offset position of the + surface is the one used for constraint testing. See + set_constraint_adjustment. + + An example use case is placing a popup menu on top of a user interface + element, while aligning the user interface element of the parent surface + with some user interface element placed somewhere in the popup surface. + + + - + An interface that may be implemented by a wl_surface, for implementations that provide a desktop-style user interface. - It provides requests to treat surfaces like windows, allowing to set - properties like maximized, fullscreen, minimized, and to move and resize - them, and associate metadata like title and app id. + It provides a base set of functionality required to construct user + interface elements requiring management by the compositor, such as + toplevel windows, menus, etc. The types of functionality are split into + xdg_surface roles. + + Creating an xdg_surface does not set the role for a wl_surface. In order + to map an xdg_surface, the client must create a role-specific object + using, e.g., get_toplevel, get_popup. The wl_surface for any given + xdg_surface can have at most one role, and may not be assigned any role + not based on xdg_surface. + + A role must be assigned before any other requests are made to the + xdg_surface object. The client must call wl_surface.commit on the corresponding wl_surface - for the xdg_surface state to take effect. Prior to committing the new - state, it can set up initial configuration, such as maximizing or setting - a window geometry. - - Even without attaching a buffer the compositor must respond to initial - committed configuration, for instance sending a configure event with - expected window geometry if the client maximized its surface during - initialization. + for the xdg_surface state to take effect. + + Creating an xdg_surface from a wl_surface which has a buffer attached or + committed is a client error, and any attempts by a client to attach or + manipulate a buffer prior to the first xdg_surface.configure call must + also be treated as errors. + + Mapping an xdg_surface-based role surface is defined as making it + possible for the surface to be shown by the compositor. Note that + a mapped surface is not guaranteed to be visible once it is mapped. + + For an xdg_surface to be mapped by the compositor, the following + conditions must be met: + (1) the client has assigned an xdg_surface-based role to the surface + (2) the client has set and committed the xdg_surface state and the + role-dependent state to the surface + (3) the client has committed a buffer to the surface + + A newly-unmapped surface is considered to have met condition (1) out + of the 3 required conditions for mapping a surface if its role surface + has not been destroyed. + + + + + + + + + + + Destroy the xdg_surface object. An xdg_surface must only be destroyed + after its role object has been destroyed. + + + + + + This creates an xdg_toplevel object for the given xdg_surface and gives + the associated wl_surface the xdg_toplevel role. + + See the documentation of xdg_toplevel for more details about what an + xdg_toplevel is and how it is used. + + + + + + + This creates an xdg_popup object for the given xdg_surface and gives + the associated wl_surface the xdg_popup role. + + If null is passed as a parent, a parent surface must be specified using + some other protocol, before committing the initial state. + + See the documentation of xdg_popup for more details about what an + xdg_popup is and how it is used. + + + + + + + + + The window geometry of a surface is its "visible bounds" from the + user's perspective. Client-side decorations often have invisible + portions like drop-shadows which should be ignored for the + purposes of aligning, placing and constraining windows. + + The window geometry is double buffered, and will be applied at the + time wl_surface.commit of the corresponding wl_surface is called. + + When maintaining a position, the compositor should treat the (x, y) + coordinate of the window geometry as the top left corner of the window. + A client changing the (x, y) window geometry coordinate should in + general not alter the position of the window. + + Once the window geometry of the surface is set, it is not possible to + unset it, and it will remain the same until set_window_geometry is + called again, even if a new subsurface or buffer is attached. + + If never set, the value is the full bounds of the surface, + including any subsurfaces. This updates dynamically on every + commit. This unset is meant for extremely simple clients. + + The arguments are given in the surface-local coordinate space of + the wl_surface associated with this xdg_surface. + + The width and height must be greater than zero. Setting an invalid size + will raise an error. When applied, the effective window geometry will be + the set window geometry clamped to the bounding rectangle of the + combined geometry of the surface of the xdg_surface and the associated + subsurfaces. + + + + + + + + + + When a configure event is received, if a client commits the + surface in response to the configure event, then the client + must make an ack_configure request sometime before the commit + request, passing along the serial of the configure event. + + For instance, for toplevel surfaces the compositor might use this + information to move a surface to the top left only when the client has + drawn itself for the maximized or fullscreen state. + + If the client receives multiple configure events before it + can respond to one, it only has to ack the last configure event. + + A client is not required to commit immediately after sending + an ack_configure request - it may even ack_configure several times + before its next surface commit. + + A client may send multiple ack_configure requests before committing, but + only the last request sent before a commit indicates which configure + event the client really is responding to. + + + - For a surface to be mapped by the compositor the client must have - committed both an xdg_surface state and a buffer. + + + The configure event marks the end of a configure sequence. A configure + sequence is a set of one or more events configuring the state of the + xdg_surface, including the final xdg_surface.configure event. + + Where applicable, xdg_surface surface roles will during a configure + sequence extend this event as a latched state sent as events before the + xdg_surface.configure event. Such events should be considered to make up + a set of atomically applied configuration states, where the + xdg_surface.configure commits the accumulated state. + + Clients should arrange their surface for the new states, and then send + an ack_configure request with the serial sent in this configure event at + some point before committing the new surface. + + If the client receives multiple configure events before it can respond + to one, it is free to discard all but the last event it received. + + + + + + + + This interface defines an xdg_surface role which allows a surface to, + among other things, set window-like properties such as maximize, + fullscreen, and minimize, set application-specific metadata like title and + id, and well as trigger user interactive operations such as interactive + resize and move. + + Unmapping an xdg_toplevel means that the surface cannot be shown + by the compositor until it is explicitly mapped again. + All active operations (e.g., move, resize) are canceled and all + attributes (e.g. title, state, stacking, ...) are discarded for + an xdg_toplevel surface when it is unmapped. + + Attaching a null buffer to a toplevel unmaps the surface. - - Unmap and destroy the window. The window will be effectively - hidden from the user's point of view, and all state like - maximization, fullscreen, and so on, will be lost. + + This request destroys the role surface and unmaps the surface; + see "Unmapping" behavior in interface section for details. - Set the "parent" of this surface. This window should be stacked - above a parent. The parent surface must be mapped as long as this - surface is mapped. + Set the "parent" of this surface. This surface should be stacked + above the parent surface and all other ancestor surfaces. Parent windows should be set on dialogs, toolboxes, or other "auxiliary" surfaces, so that the parent is raised when the dialog is raised. + + Setting a null parent for a child window removes any parent-child + relationship for the child. Setting a null parent for a window which + currently has no parent is a no-op. + + If the parent is unmapped then its children are managed as + though the parent of the now-unmapped parent has become the + parent of this surface. If no parent exists for the now-unmapped + parent then the children are managed as though they have no + parent surface. - + @@ -206,7 +599,7 @@ service name. The compositor shell will try to group application surfaces together - by their app ID. As a best practice, it is suggested to select app + by their app ID. As a best practice, it is suggested to select app ID's that match the basename of the application's .desktop file. For example, "org.freedesktop.FooViewer" where the .desktop file is "org.freedesktop.FooViewer.desktop". @@ -222,19 +615,18 @@ - Clients implementing client-side decorations might want to show - a context menu when right-clicking on the decorations, giving the - user a menu that they can use to maximize or minimize the window. - - This request asks the compositor to pop up such a window menu at - the given position, relative to the local surface coordinates of - the parent surface. There are no guarantees as to what menu items - the window menu contains. + Clients implementing client-side decorations might want to show + a context menu when right-clicking on the decorations, giving the + user a menu that they can use to maximize or minimize the window. + + This request asks the compositor to pop up such a window menu at + the given position, relative to the local surface coordinates of + the parent surface. There are no guarantees as to what menu items + the window menu contains. - This request must be used in response to some sort of user action - like a button press, key press, or touch down event. + This request must be used in response to some sort of user action + like a button press, key press, or touch down event. - @@ -320,189 +712,228 @@ - The different state values used on the surface. This is designed for - state values like maximized, fullscreen. It is paired with the - configure event to ensure that both the client and the compositor - setting the state can be synchronized. - - States set in this way are double-buffered. They will get applied on - the next commit. - - Desktop environments may extend this enum by taking up a range of - values and documenting the range they chose in this description. - They are not required to document the values for the range that they - chose. Ideally, any good extensions from a desktop environment should - make its way into standardization into this enum. + The different state values used on the surface. This is designed for + state values like maximized, fullscreen. It is paired with the + configure event to ensure that both the client and the compositor + setting the state can be synchronized. - The current reserved ranges are: - - 0x0000 - 0x0FFF: xdg-shell core values, documented below. - 0x1000 - 0x1FFF: GNOME + States set in this way are double-buffered. They will get applied on + the next commit. - The surface is maximized. The window geometry specified in the configure - event must be obeyed by the client. + + The surface is maximized. The window geometry specified in the configure + event must be obeyed by the client. + - The surface is fullscreen. The window geometry specified in the configure - event must be obeyed by the client. + + The surface is fullscreen. The window geometry specified in the + configure event is a maximum; the client cannot resize beyond it. For + a surface to cover the whole fullscreened area, the geometry + dimensions must be obeyed by the client. For more details, see + xdg_toplevel.set_fullscreen. + + + + + The surface is being resized. The window geometry specified in the + configure event is a maximum; the client cannot resize beyond it. + Clients that have aspect ratio or cell sizing configuration can use + a smaller size, however. + - - The surface is being resized. The window geometry specified in the - configure event is a maximum; the client cannot resize beyond it. - Clients that have aspect ratio or cell sizing configuration can use - a smaller size, however. - - - Client window decorations should be painted as if the window is - active. Do not assume this means that the window actually has - keyboard or pointer focus. + + + Client window decorations should be painted as if the window is + active. Do not assume this means that the window actually has + keyboard or pointer focus. + - - - The configure event asks the client to resize its surface or to - change its state. - - The width and height arguments specify a hint to the window - about how its surface should be resized in window geometry - coordinates. See set_window_geometry. - - If the width or height arguments are zero, it means the client - should decide its own window dimension. This may happen when the - compositor need to configure the state of the surface but doesn't - have any information about any previous or expected dimension. - - The states listed in the event specify how the width/height - arguments should be interpreted, and possibly how it should be - drawn. - - Clients should arrange their surface for the new size and - states, and then send a ack_configure request with the serial - sent in this configure event at some point before committing - the new surface. - - If the client receives multiple configure events before it - can respond to one, it is free to discard all but the last - event it received. + + + Set a maximum size for the window. + + The client can specify a maximum size so that the compositor does + not try to configure the window beyond this size. + + The width and height arguments are in window geometry coordinates. + See xdg_surface.set_window_geometry. + + Values set in this way are double-buffered. They will get applied + on the next commit. + + The compositor can use this information to allow or disallow + different states like maximize or fullscreen and draw accurate + animations. + + Similarly, a tiling window manager may use this information to + place and resize client windows in a more effective way. + + The client should not rely on the compositor to obey the maximum + size. The compositor may decide to ignore the values set by the + client and request a larger size. + + If never set, or a value of zero in the request, means that the + client has no expected maximum size in the given dimension. + As a result, a client wishing to reset the maximum size + to an unspecified state can use zero for width and height in the + request. + + Requesting a maximum size to be smaller than the minimum size of + a surface is illegal and will result in a protocol error. + + The width and height must be greater than or equal to zero. Using + strictly negative values for width and height will result in a + protocol error. - - - - - - - - When a configure event is received, if a client commits the - surface in response to the configure event, then the client - must make a ack_configure request before the commit request, - passing along the serial of the configure event. - - For instance, the compositor might use this information to move - a surface to the top left only when the client has drawn itself - for the maximized or fullscreen state. - - If the client receives multiple configure events before it - can respond to one, it only has to ack the last configure event. - - - - - The window geometry of a window is its "visible bounds" from the - user's perspective. Client-side decorations often have invisible - portions like drop-shadows which should be ignored for the - purposes of aligning, placing and constraining windows. - - The window geometry is double buffered, and will be applied at the - time wl_surface.commit of the corresponding wl_surface is called. - - Once the window geometry of the surface is set once, it is not - possible to unset it, and it will remain the same until - set_window_geometry is called again, even if a new subsurface or - buffer is attached. - - If never set, the value is the full bounds of the surface, - including any subsurfaces. This updates dynamically on every - commit. This unset mode is meant for extremely simple clients. - - If responding to a configure event, the window geometry in here - must respect the sizing negotiations specified by the states in - the configure event. - - The arguments are given in the surface local coordinate space of - the wl_surface associated with this xdg_surface. - - The width and height must be greater than zero. + + + Set a minimum size for the window. + + The client can specify a minimum size so that the compositor does + not try to configure the window below this size. + + The width and height arguments are in window geometry coordinates. + See xdg_surface.set_window_geometry. + + Values set in this way are double-buffered. They will get applied + on the next commit. + + The compositor can use this information to allow or disallow + different states like maximize or fullscreen and draw accurate + animations. + + Similarly, a tiling window manager may use this information to + place and resize client windows in a more effective way. + + The client should not rely on the compositor to obey the minimum + size. The compositor may decide to ignore the values set by the + client and request a smaller size. + + If never set, or a value of zero in the request, means that the + client has no expected minimum size in the given dimension. + As a result, a client wishing to reset the minimum size + to an unspecified state can use zero for width and height in the + request. + + Requesting a minimum size to be larger than the maximum size of + a surface is illegal and will result in a protocol error. + + The width and height must be greater than or equal to zero. Using + strictly negative values for width and height will result in a + protocol error. - - - Maximize the surface. - - After requesting that the surface should be maximized, the compositor - will respond by emitting a configure event with the "maximized" state - and the required window geometry. The client should then update its - content, drawing it in a maximized state, i.e. without shadow or other - decoration outside of the window geometry. The client must also - acknowledge the configure when committing the new content (see - ack_configure). - - It is up to the compositor to decide how and where to maximize the - surface, for example which output and what region of the screen should - be used. + Maximize the surface. - If the surface was already maximized, the compositor will still emit - a configure event with the "maximized" state. + After requesting that the surface should be maximized, the compositor + will respond by emitting a configure event with the "maximized" state + and the required window geometry. The client should then update its + content, drawing it in a maximized state, i.e. without shadow or other + decoration outside of the window geometry. The client must also + acknowledge the configure when committing the new content (see + ack_configure). + + It is up to the compositor to decide how and where to maximize the + surface, for example which output and what region of the screen should + be used. + + If the surface was already maximized, the compositor will still emit + a configure event with the "maximized" state. + + If the surface is in a fullscreen state, this request has no direct + effect. It will alter the state the surface is returned to when + unmaximized if not overridden by the compositor. - Unmaximize the surface. + Unmaximize the surface. - After requesting that the surface should be unmaximized, the compositor - will respond by emitting a configure event without the "maximized" - state. If available, the compositor will include the window geometry - dimensions the window had prior to being maximized in the configure - request. The client must then update its content, drawing it in a - regular state, i.e. potentially with shadow, etc. The client must also - acknowledge the configure when committing the new content (see - ack_configure). - - It is up to the compositor to position the surface after it was - unmaximized; usually the position the surface had before maximizing, if - applicable. - - If the surface was already not maximized, the compositor will still - emit a configure event without the "maximized" state. + After requesting that the surface should be unmaximized, the compositor + will respond by emitting a configure event without the "maximized" + state. If available, the compositor will include the window geometry + dimensions the window had prior to being maximized in the configure + event. The client must then update its content, drawing it in a + regular state, i.e. potentially with shadow, etc. The client must also + acknowledge the configure when committing the new content (see + ack_configure). + + It is up to the compositor to position the surface after it was + unmaximized; usually the position the surface had before maximizing, if + applicable. + + If the surface was already not maximized, the compositor will still + emit a configure event without the "maximized" state. + + If the surface is in a fullscreen state, this request has no direct + effect. It will alter the state the surface is returned to when + unmaximized if not overridden by the compositor. - + Make the surface fullscreen. - You can specify an output that you would prefer to be fullscreen. - If this value is NULL, it's up to the compositor to choose which - display will be used to map this surface. - - If the surface doesn't cover the whole output, the compositor will - position the surface in the center of the output and compensate with - black borders filling the rest of the output. + After requesting that the surface should be fullscreened, the + compositor will respond by emitting a configure event with the + "fullscreen" state and the fullscreen window geometry. The client must + also acknowledge the configure when committing the new content (see + ack_configure). + + The output passed by the request indicates the client's preference as + to which display it should be set fullscreen on. If this value is NULL, + it's up to the compositor to choose which display will be used to map + this surface. + + If the surface doesn't cover the whole output, the compositor will + position the surface in the center of the output and compensate with + with border fill covering the rest of the output. The content of the + border fill is undefined, but should be assumed to be in some way that + attempts to blend into the surrounding area (e.g. solid black). + + If the fullscreened surface is not opaque, the compositor must make + sure that other screen content not part of the same surface tree (made + up of subsurfaces, popups or similarly coupled surfaces) are not + visible below the fullscreened surface. - + + + + Make the surface no longer fullscreen. + + After requesting that the surface should be unfullscreened, the + compositor will respond by emitting a configure event without the + "fullscreen" state. + + Making a surface unfullscreen sets states for the surface based on the following: + * the state(s) it may have had before becoming fullscreen + * any state(s) decided by the compositor + * any state(s) requested by the client while the surface was fullscreen + + The compositor may include the previous window geometry dimensions in + the configure event, if applicable. + + The client must also acknowledge the configure when committing the new + content (see ack_configure). + + @@ -517,75 +948,89 @@ + + + This configure event asks the client to resize its toplevel surface or + to change its state. The configured state should not be applied + immediately. See xdg_surface.configure for details. + + The width and height arguments specify a hint to the window + about how its surface should be resized in window geometry + coordinates. See set_window_geometry. + + If the width or height arguments are zero, it means the client + should decide its own window dimension. This may happen when the + compositor needs to configure the state of the surface but doesn't + have any information about any previous or expected dimension. + + The states listed in the event specify how the width/height + arguments should be interpreted, and possibly how it should be + drawn. + + Clients must send an ack_configure in response to this event. See + xdg_surface.configure and xdg_surface.ack_configure for details. + + + + + + - The close event is sent by the compositor when the user - wants the surface to be closed. This should be equivalent to - the user clicking the close button in client-side decorations, - if your application has any... - - This is only a request that the user intends to close your - window. The client may choose to ignore this request, or show - a dialog to ask the user to save their data... + The close event is sent by the compositor when the user + wants the surface to be closed. This should be equivalent to + the user clicking the close button in client-side decorations, + if your application has any. + + This is only a request that the user intends to close the + window. The client may choose to ignore this request, or show + a dialog to ask the user to save their data, etc. - A popup surface is a short-lived, temporary surface that can be - used to implement menus. It takes an explicit grab on the surface - that will be dismissed when the user dismisses the popup. This can - be done by the user clicking outside the surface, using the keyboard, - or even locking the screen through closing the lid or a timeout. - - When the popup is dismissed, a popup_done event will be sent out, - and at the same time the surface will be unmapped. The xdg_popup - object is now inert and cannot be reactivated, so clients should - destroy it. Explicitly destroying the xdg_popup object will also - dismiss the popup and unmap the surface. - - Clients will receive events for all their surfaces during this - grab (which is an "owner-events" grab in X11 parlance). This is - done so that users can navigate through submenus and other - "nested" popup windows without having to dismiss the topmost - popup. - - Clients that want to dismiss the popup when another surface of - their own is clicked should dismiss the popup using the destroy + A popup surface is a short-lived, temporary surface. It can be used to + implement for example menus, popovers, tooltips and other similar user + interface concepts. + + A popup can be made to take an explicit grab. See xdg_popup.grab for + details. + + When the popup is dismissed, a popup_done event will be sent out, and at + the same time the surface will be unmapped. See the xdg_popup.popup_done + event for details. + + Explicitly destroying the xdg_popup object will also dismiss the popup and + unmap the surface. Clients that want to dismiss the popup when another + surface of their own is clicked should dismiss the popup using the destroy request. - The parent surface must have either an xdg_surface or xdg_popup + The parent surface must have either the xdg_toplevel or xdg_popup surface role. - Specifying an xdg_popup for the parent means that the popups are - nested, with this popup now being the topmost popup. Nested - popups must be destroyed in the reverse order they were created - in, e.g. the only popup you are allowed to destroy at all times - is the topmost one. - - If there is an existing popup when creating a new popup, the - parent must be the current topmost popup. - - A parent surface must be mapped before the new popup is mapped. - - When compositors choose to dismiss a popup, they will likely - dismiss every nested popup as well. When a compositor dismisses - popups, it will follow the same dismissing order as required - from the client. + A newly created xdg_popup will be stacked on top of all previously created + xdg_popup surfaces associated with the same xdg_toplevel. + + The parent of an xdg_popup must be mapped (see the xdg_surface + description) before the xdg_popup itself. The x and y arguments passed when creating the popup object specify where the top left of the popup should be placed, relative to the local surface coordinates of the parent surface. See - xdg_shell.get_xdg_popup. + xdg_surface.get_popup. An xdg_popup must intersect with or be at least + partially adjacent to its parent surface. The client must call wl_surface.commit on the corresponding wl_surface for the xdg_popup state to take effect. - - For a surface to be mapped by the compositor the client must have - committed both the xdg_popup state and a buffer. + + + + This destroys the popup. Explicitly destroying the xdg_popup @@ -596,6 +1041,73 @@ + + + This request makes the created popup take an explicit grab. An explicit + grab will be dismissed when the user dismisses the popup, or when the + client destroys the xdg_popup. This can be done by the user clicking + outside the surface, using the keyboard, or even locking the screen + through closing the lid or a timeout. + + If the compositor denies the grab, the popup will be immediately + dismissed. + + This request must be used in response to some sort of user action like a + button press, key press, or touch down event. The serial number of the + event should be passed as 'serial'. + + The parent of a grabbing popup must either be an xdg_toplevel surface or + another xdg_popup with an explicit grab. If the parent is another + xdg_popup it means that the popups are nested, with this popup now being + the topmost popup. + + Nested popups must be destroyed in the reverse order they were created + in, e.g. the only popup you are allowed to destroy at all times is the + topmost one. + + When compositors choose to dismiss a popup, they may dismiss every + nested grabbing popup as well. When a compositor dismisses popups, it + will follow the same dismissing order as required from the client. + + The parent of a grabbing popup must either be another xdg_popup with an + active explicit grab, or an xdg_popup or xdg_toplevel, if there are no + explicit grabs already taken. + + If the topmost grabbing popup is destroyed, the grab will be returned to + the parent of the popup, if that parent previously had an explicit grab. + + If the parent is a grabbing popup which has already been dismissed, this + popup will be immediately dismissed. If the parent is a popup that did + not take an explicit grab, an error will be raised. + + During a popup grab, the client owning the grab will receive pointer + and touch events for all their surfaces as normal (similar to an + "owner-events" grab in X11 parlance), while the top most grabbing popup + will always have keyboard focus. + + + + + + + + This event asks the popup surface to configure itself given the + configuration. The configured state should not be applied immediately. + See xdg_surface.configure for details. + + The x and y arguments represent the position the popup was placed at + given the xdg_positioner rule, relative to the upper left corner of the + window geometry of the parent surface. + + + + + + + The popup_done event is sent out when a popup is dismissed by the diff -Nru qtwayland-opensource-src-5.11.3/src/client/client.pro qtwayland-opensource-src-5.12.2/src/client/client.pro --- qtwayland-opensource-src-5.11.3/src/client/client.pro 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/client.pro 2019-02-21 12:36:59.000000000 +0000 @@ -15,8 +15,8 @@ CONFIG -= precompile_header CONFIG += link_pkgconfig wayland-scanner -qtConfig(xkbcommon-evdev): \ - QMAKE_USE_PRIVATE += xkbcommon_evdev +qtConfig(xkbcommon): \ + QMAKE_USE_PRIVATE += xkbcommon QMAKE_USE += wayland-client @@ -25,11 +25,10 @@ WAYLANDCLIENTSOURCES += \ ../extensions/surface-extension.xml \ ../extensions/touch-extension.xml \ - ../extensions/qtkey-extension.xml \ + ../extensions/qt-key-unstable-v1.xml \ ../extensions/qt-windowmanager.xml \ ../3rdparty/protocol/text-input-unstable-v2.xml \ - ../3rdparty/protocol/xdg-shell.xml \ - ../3rdparty/protocol/xdg-shell-unstable-v6.xml \ + ../3rdparty/protocol/xdg-output-unstable-v1.xml \ WAYLANDCLIENTSOURCES_SYSTEM += \ ../3rdparty/protocol/wayland.xml \ @@ -43,14 +42,6 @@ qwaylandscreen.cpp \ qwaylandshmwindow.cpp \ qwaylandshellsurface.cpp \ - qwaylandwlshellsurface.cpp \ - qwaylandwlshellintegration.cpp \ - qwaylandxdgshell.cpp \ - qwaylandxdgsurface.cpp \ - qwaylandxdgpopup.cpp \ - qwaylandxdgshellintegration.cpp \ - qwaylandxdgshellv6.cpp \ - qwaylandxdgshellv6integration.cpp \ qwaylandextendedsurface.cpp \ qwaylandsubsurface.cpp \ qwaylandtouch.cpp \ @@ -76,14 +67,6 @@ qwaylandbuffer_p.h \ qwaylandshmwindow_p.h \ qwaylandshellsurface_p.h \ - qwaylandwlshellsurface_p.h \ - qwaylandwlshellintegration_p.h \ - qwaylandxdgshell_p.h \ - qwaylandxdgsurface_p.h \ - qwaylandxdgpopup_p.h \ - qwaylandxdgshellintegration_p.h \ - qwaylandxdgshellv6_p.h \ - qwaylandxdgshellv6integration_p.h \ qwaylandextendedsurface_p.h \ qwaylandsubsurface_p.h \ qwaylandtouch_p.h \ diff -Nru qtwayland-opensource-src-5.11.3/src/client/configure.json qtwayland-opensource-src-5.12.2/src/client/configure.json --- qtwayland-opensource-src-5.11.3/src/client/configure.json 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/configure.json 2019-02-21 12:36:59.000000000 +0000 @@ -68,6 +68,12 @@ "type": "compile", "test": "libhybris_egl_server", "use": "egl" + }, + "dmabuf-server-buffer": { + "label": "Linux dma-buf Buffer Sharing", + "type": "compile", + "test": "dmabuf_server_buffer", + "use": "egl" } }, @@ -101,15 +107,25 @@ "condition": "features.wayland-client && features.opengl && !features.opengles2 && features.xlib && libs.xcomposite && libs.glx", "output": [ "privateFeature" ] }, - "drm-egl-server": { + "wayland-drm-egl-server-buffer": { "label": "DRM EGL", "condition": "features.wayland-client && features.opengl && features.egl && tests.drm-egl-server", "output": [ "privateFeature" ] }, - "libhybris-egl-server": { + "wayland-libhybris-egl-server-buffer": { "label": "libhybris EGL", "condition": "features.wayland-client && features.opengl && features.egl && tests.libhybris-egl-server", "output": [ "privateFeature" ] + }, + "wayland-dmabuf-server-buffer": { + "label": "Linux dma-buf server buffer integration", + "condition": "features.wayland-client && features.opengl && features.egl && tests.dmabuf-server-buffer", + "output": [ "privateFeature" ] + }, + "wayland-shm-emulation-server-buffer": { + "label": "Shm emulation server buffer integration", + "condition": "features.wayland-client && features.opengl", + "output": [ "privateFeature" ] } }, @@ -130,8 +146,9 @@ "wayland-brcm", "xcomposite-egl", "xcomposite-glx", - "drm-egl-server", - "libhybris-egl-server" + "wayland-drm-egl-server-buffer", + "wayland-libhybris-egl-server-buffer", + "wayland-shm-emulation-server-buffer" ] }, "wayland-client" diff -Nru qtwayland-opensource-src-5.11.3/src/client/qwaylandabstractdecoration.cpp qtwayland-opensource-src-5.12.2/src/client/qwaylandabstractdecoration.cpp --- qtwayland-opensource-src-5.11.3/src/client/qwaylandabstractdecoration.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/qwaylandabstractdecoration.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -100,6 +100,7 @@ d->m_wayland_window = window; } +// \a size is without margins static QRegion marginsRegion(const QSize &size, const QMargins &margins) { QRegion r; @@ -123,7 +124,7 @@ d->m_decorationContentImage.fill(Qt::transparent); this->paint(&d->m_decorationContentImage); - QRegion damage = marginsRegion(window()->frameGeometry().size(), window()->frameMargins()); + QRegion damage = marginsRegion(window()->geometry().size(), window()->frameMargins()); for (QRect r : damage) waylandWindow()->damage(r); diff -Nru qtwayland-opensource-src-5.11.3/src/client/qwaylandcursor.cpp qtwayland-opensource-src-5.12.2/src/client/qwaylandcursor.cpp --- qtwayland-opensource-src-5.11.3/src/client/qwaylandcursor.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/qwaylandcursor.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -53,65 +53,203 @@ namespace QtWaylandClient { -QWaylandCursor::QWaylandCursor(QWaylandScreen *screen) - : mDisplay(screen->display()) +QWaylandCursorTheme *QWaylandCursorTheme::create(QWaylandShm *shm, int size) { - //TODO: Make wl_cursor_theme_load arguments configurable here - QByteArray cursorTheme = qgetenv("XCURSOR_THEME"); - if (cursorTheme.isEmpty()) - cursorTheme = QByteArray("default"); - QByteArray cursorSizeFromEnv = qgetenv("XCURSOR_SIZE"); - bool hasCursorSize = false; - int cursorSize = cursorSizeFromEnv.toInt(&hasCursorSize); - if (!hasCursorSize || cursorSize <= 0) - cursorSize = 32; - mCursorTheme = wl_cursor_theme_load(cursorTheme, cursorSize, mDisplay->shm()->object()); - if (!mCursorTheme) - qDebug() << "Could not load theme" << cursorTheme; - initCursorMap(); + static QString themeName = qEnvironmentVariable("XCURSOR_THEME", QStringLiteral("default")); + return create(shm, size, themeName); } -QWaylandCursor::~QWaylandCursor() +QWaylandCursorTheme *QWaylandCursorTheme::create(QWaylandShm *shm, int size, const QString &themeName) { - if (mCursorTheme) - wl_cursor_theme_destroy(mCursorTheme); + QByteArray nameBytes = themeName.toLocal8Bit(); + struct ::wl_cursor_theme *theme = wl_cursor_theme_load(nameBytes.constData(), size, shm->object()); + + if (!theme) { + qCWarning(lcQpaWayland) << "Could not load cursor theme" << themeName << "size" << size; + return nullptr; + } + + return new QWaylandCursorTheme(theme); } -struct wl_cursor_image *QWaylandCursor::cursorImage(Qt::CursorShape newShape) +QWaylandCursorTheme::~QWaylandCursorTheme() { - struct wl_cursor *waylandCursor = nullptr; + wl_cursor_theme_destroy(m_theme); +} - /* Hide cursor */ - if (newShape == Qt::BlankCursor) - { - mDisplay->setCursor(nullptr, nullptr); - return nullptr; +wl_cursor *QWaylandCursorTheme::requestCursor(WaylandCursor shape) +{ + if (struct wl_cursor *cursor = m_cursors.value(shape, nullptr)) + return cursor; + + static const QMultiMapcursorNamesMap { + {ArrowCursor, "left_ptr"}, + {ArrowCursor, "default"}, + {ArrowCursor, "top_left_arrow"}, + {ArrowCursor, "left_arrow"}, + + {UpArrowCursor, "up_arrow"}, + + {CrossCursor, "cross"}, + + {WaitCursor, "wait"}, + {WaitCursor, "watch"}, + {WaitCursor, "0426c94ea35c87780ff01dc239897213"}, + + {IBeamCursor, "ibeam"}, + {IBeamCursor, "text"}, + {IBeamCursor, "xterm"}, + + {SizeVerCursor, "size_ver"}, + {SizeVerCursor, "ns-resize"}, + {SizeVerCursor, "v_double_arrow"}, + {SizeVerCursor, "00008160000006810000408080010102"}, + + {SizeHorCursor, "size_hor"}, + {SizeHorCursor, "ew-resize"}, + {SizeHorCursor, "h_double_arrow"}, + {SizeHorCursor, "028006030e0e7ebffc7f7070c0600140"}, + + {SizeBDiagCursor, "size_bdiag"}, + {SizeBDiagCursor, "nesw-resize"}, + {SizeBDiagCursor, "50585d75b494802d0151028115016902"}, + {SizeBDiagCursor, "fcf1c3c7cd4491d801f1e1c78f100000"}, + + {SizeFDiagCursor, "size_fdiag"}, + {SizeFDiagCursor, "nwse-resize"}, + {SizeFDiagCursor, "38c5dff7c7b8962045400281044508d2"}, + {SizeFDiagCursor, "c7088f0f3e6c8088236ef8e1e3e70000"}, + + {SizeAllCursor, "size_all"}, + + {SplitVCursor, "split_v"}, + {SplitVCursor, "row-resize"}, + {SplitVCursor, "sb_v_double_arrow"}, + {SplitVCursor, "2870a09082c103050810ffdffffe0204"}, + {SplitVCursor, "c07385c7190e701020ff7ffffd08103c"}, + + {SplitHCursor, "split_h"}, + {SplitHCursor, "col-resize"}, + {SplitHCursor, "sb_h_double_arrow"}, + {SplitHCursor, "043a9f68147c53184671403ffa811cc5"}, + {SplitHCursor, "14fef782d02440884392942c11205230"}, + + {PointingHandCursor, "pointing_hand"}, + {PointingHandCursor, "pointer"}, + {PointingHandCursor, "hand1"}, + {PointingHandCursor, "e29285e634086352946a0e7090d73106"}, + + {ForbiddenCursor, "forbidden"}, + {ForbiddenCursor, "not-allowed"}, + {ForbiddenCursor, "crossed_circle"}, + {ForbiddenCursor, "circle"}, + {ForbiddenCursor, "03b6e0fcb3499374a867c041f52298f0"}, + + {WhatsThisCursor, "whats_this"}, + {WhatsThisCursor, "help"}, + {WhatsThisCursor, "question_arrow"}, + {WhatsThisCursor, "5c6cd98b3f3ebcb1f9c7f1c204630408"}, + {WhatsThisCursor, "d9ce0ab605698f320427677b458ad60b"}, + + {BusyCursor, "left_ptr_watch"}, + {BusyCursor, "half-busy"}, + {BusyCursor, "progress"}, + {BusyCursor, "00000000000000020006000e7e9ffc3f"}, + {BusyCursor, "08e8e1c95fe2fc01f976f1e063a24ccd"}, + + {OpenHandCursor, "openhand"}, + {OpenHandCursor, "fleur"}, + {OpenHandCursor, "5aca4d189052212118709018842178c0"}, + {OpenHandCursor, "9d800788f1b08800ae810202380a0822"}, + + {ClosedHandCursor, "closedhand"}, + {ClosedHandCursor, "grabbing"}, + {ClosedHandCursor, "208530c400c041818281048008011002"}, + + {DragCopyCursor, "dnd-copy"}, + {DragCopyCursor, "copy"}, + + {DragMoveCursor, "dnd-move"}, + {DragMoveCursor, "move"}, + + {DragLinkCursor, "dnd-link"}, + {DragLinkCursor, "link"}, + + {ResizeNorthCursor, "n-resize"}, + {ResizeNorthCursor, "top_side"}, + + {ResizeSouthCursor, "s-resize"}, + {ResizeSouthCursor, "bottom_side"}, + + {ResizeEastCursor, "e-resize"}, + {ResizeEastCursor, "right_side"}, + + {ResizeWestCursor, "w-resize"}, + {ResizeWestCursor, "left_side"}, + + {ResizeNorthWestCursor, "nw-resize"}, + {ResizeNorthWestCursor, "top_left_corner"}, + + {ResizeSouthEastCursor, "se-resize"}, + {ResizeSouthEastCursor, "bottom_right_corner"}, + + {ResizeNorthEastCursor, "ne-resize"}, + {ResizeNorthEastCursor, "top_right_corner"}, + + {ResizeSouthWestCursor, "sw-resize"}, + {ResizeSouthWestCursor, "bottom_left_corner"}, + }; + + QList cursorNames = cursorNamesMap.values(shape); + for (auto &name : qAsConst(cursorNames)) { + if (wl_cursor *cursor = wl_cursor_theme_get_cursor(m_theme, name.constData())) { + m_cursors.insert(shape, cursor); + return cursor; + } } - if (newShape < Qt::BitmapCursor) { - waylandCursor = requestCursor((WaylandCursor)newShape); - } else if (newShape == Qt::BitmapCursor) { - // cannot create a wl_cursor_image for a CursorShape + // Fallback to arrow cursor + if (shape != ArrowCursor) + return requestCursor(ArrowCursor); + + // Give up + return nullptr; +} + +struct wl_cursor_image *QWaylandCursorTheme::cursorImage(Qt::CursorShape shape) +{ + struct wl_cursor *waylandCursor = nullptr; + + if (shape < Qt::BitmapCursor) { + waylandCursor = requestCursor(WaylandCursor(shape)); + } else if (shape == Qt::BitmapCursor) { + qCWarning(lcQpaWayland) << "cannot create a wl_cursor_image for a CursorShape"; return nullptr; } else { //TODO: Custom cursor logic (for resize arrows) } if (!waylandCursor) { - qDebug("Could not find cursor for shape %d", newShape); + qCWarning(lcQpaWayland) << "Could not find cursor for shape" << shape; return nullptr; } struct wl_cursor_image *image = waylandCursor->images[0]; struct wl_buffer *buffer = wl_cursor_image_get_buffer(image); if (!buffer) { - qDebug("Could not find buffer for cursor"); + qCWarning(lcQpaWayland) << "Could not find buffer for cursor"; return nullptr; } return image; } +QWaylandCursor::QWaylandCursor(QWaylandScreen *screen) + : mDisplay(screen->display()) + , mCursorTheme(mDisplay->loadCursorTheme(screen->devicePixelRatio())) +{ +} + QSharedPointer QWaylandCursor::cursorBitmapImage(const QCursor *cursor) { if (cursor->shape() != Qt::BitmapCursor) @@ -123,24 +261,39 @@ return buffer; } -void QWaylandCursor::changeCursor(QCursor *cursor, QWindow *window) +struct wl_cursor_image *QWaylandCursor::cursorImage(Qt::CursorShape shape) { - Q_UNUSED(window) + if (!mCursorTheme) + return nullptr; + return mCursorTheme->cursorImage(shape); +} +void QWaylandCursor::changeCursor(QCursor *cursor, QWindow *window) +{ const Qt::CursorShape newShape = cursor ? cursor->shape() : Qt::ArrowCursor; + if (newShape == Qt::BlankCursor) { + mDisplay->setCursor(nullptr, nullptr, 1); + return; + } + if (newShape == Qt::BitmapCursor) { - mDisplay->setCursor(cursorBitmapImage(cursor), cursor->hotSpot()); + mDisplay->setCursor(cursorBitmapImage(cursor), cursor->hotSpot(), window->screen()->devicePixelRatio()); return; } - struct wl_cursor_image *image = cursorImage(newShape); - if (!image) { + if (!mCursorTheme) { + qCWarning(lcQpaWayland) << "Can't set cursor from shape with no cursor theme"; return; } - struct wl_buffer *buffer = wl_cursor_image_get_buffer(image); - mDisplay->setCursor(buffer, image); + if (struct ::wl_cursor_image *image = mCursorTheme->cursorImage(newShape)) { + struct wl_buffer *buffer = wl_cursor_image_get_buffer(image); + mDisplay->setCursor(buffer, image, window->screen()->devicePixelRatio()); + return; + } + + qCWarning(lcQpaWayland) << "Unable to change to cursor" << cursor; } void QWaylandCursor::pointerEvent(const QMouseEvent &event) @@ -156,155 +309,7 @@ void QWaylandCursor::setPos(const QPoint &pos) { Q_UNUSED(pos); - qWarning() << "QWaylandCursor::setPos: not implemented"; -} - -wl_cursor *QWaylandCursor::requestCursor(WaylandCursor shape) -{ - struct wl_cursor *cursor = mCursors.value(shape, 0); - - //If the cursor has not been loaded already, load it - if (!cursor) { - if (!mCursorTheme) - return nullptr; - - QList cursorNames = mCursorNamesMap.values(shape); - foreach (const QByteArray &name, cursorNames) { - cursor = wl_cursor_theme_get_cursor(mCursorTheme, name.constData()); - if (cursor) { - mCursors.insert(shape, cursor); - break; - } - } - } - - //If there still no cursor for a shape, use the default cursor - if (!cursor && shape != ArrowCursor) { - cursor = requestCursor(ArrowCursor); - } - - return cursor; -} - - -void QWaylandCursor::initCursorMap() -{ - //Fill the cursor name map will the table of xcursor names - mCursorNamesMap.insert(ArrowCursor, "left_ptr"); - mCursorNamesMap.insert(ArrowCursor, "default"); - mCursorNamesMap.insert(ArrowCursor, "top_left_arrow"); - mCursorNamesMap.insert(ArrowCursor, "left_arrow"); - - mCursorNamesMap.insert(UpArrowCursor, "up_arrow"); - - mCursorNamesMap.insert(CrossCursor, "cross"); - - mCursorNamesMap.insert(WaitCursor, "wait"); - mCursorNamesMap.insert(WaitCursor, "watch"); - mCursorNamesMap.insert(WaitCursor, "0426c94ea35c87780ff01dc239897213"); - - mCursorNamesMap.insert(IBeamCursor, "ibeam"); - mCursorNamesMap.insert(IBeamCursor, "text"); - mCursorNamesMap.insert(IBeamCursor, "xterm"); - - mCursorNamesMap.insert(SizeVerCursor, "size_ver"); - mCursorNamesMap.insert(SizeVerCursor, "ns-resize"); - mCursorNamesMap.insert(SizeVerCursor, "v_double_arrow"); - mCursorNamesMap.insert(SizeVerCursor, "00008160000006810000408080010102"); - - mCursorNamesMap.insert(SizeHorCursor, "size_hor"); - mCursorNamesMap.insert(SizeHorCursor, "ew-resize"); - mCursorNamesMap.insert(SizeHorCursor, "h_double_arrow"); - mCursorNamesMap.insert(SizeHorCursor, "028006030e0e7ebffc7f7070c0600140"); - - mCursorNamesMap.insert(SizeBDiagCursor, "size_bdiag"); - mCursorNamesMap.insert(SizeBDiagCursor, "nesw-resize"); - mCursorNamesMap.insert(SizeBDiagCursor, "50585d75b494802d0151028115016902"); - mCursorNamesMap.insert(SizeBDiagCursor, "fcf1c3c7cd4491d801f1e1c78f100000"); - - mCursorNamesMap.insert(SizeFDiagCursor, "size_fdiag"); - mCursorNamesMap.insert(SizeFDiagCursor, "nwse-resize"); - mCursorNamesMap.insert(SizeFDiagCursor, "38c5dff7c7b8962045400281044508d2"); - mCursorNamesMap.insert(SizeFDiagCursor, "c7088f0f3e6c8088236ef8e1e3e70000"); - - mCursorNamesMap.insert(SizeAllCursor, "size_all"); - - mCursorNamesMap.insert(SplitVCursor, "split_v"); - mCursorNamesMap.insert(SplitVCursor, "row-resize"); - mCursorNamesMap.insert(SplitVCursor, "sb_v_double_arrow"); - mCursorNamesMap.insert(SplitVCursor, "2870a09082c103050810ffdffffe0204"); - mCursorNamesMap.insert(SplitVCursor, "c07385c7190e701020ff7ffffd08103c"); - - mCursorNamesMap.insert(SplitHCursor, "split_h"); - mCursorNamesMap.insert(SplitHCursor, "col-resize"); - mCursorNamesMap.insert(SplitHCursor, "sb_h_double_arrow"); - mCursorNamesMap.insert(SplitHCursor, "043a9f68147c53184671403ffa811cc5"); - mCursorNamesMap.insert(SplitHCursor, "14fef782d02440884392942c11205230"); - - mCursorNamesMap.insert(PointingHandCursor, "pointing_hand"); - mCursorNamesMap.insert(PointingHandCursor, "pointer"); - mCursorNamesMap.insert(PointingHandCursor, "hand1"); - mCursorNamesMap.insert(PointingHandCursor, "e29285e634086352946a0e7090d73106"); - - mCursorNamesMap.insert(ForbiddenCursor, "forbidden"); - mCursorNamesMap.insert(ForbiddenCursor, "not-allowed"); - mCursorNamesMap.insert(ForbiddenCursor, "crossed_circle"); - mCursorNamesMap.insert(ForbiddenCursor, "circle"); - mCursorNamesMap.insert(ForbiddenCursor, "03b6e0fcb3499374a867c041f52298f0"); - - mCursorNamesMap.insert(WhatsThisCursor, "whats_this"); - mCursorNamesMap.insert(WhatsThisCursor, "help"); - mCursorNamesMap.insert(WhatsThisCursor, "question_arrow"); - mCursorNamesMap.insert(WhatsThisCursor, "5c6cd98b3f3ebcb1f9c7f1c204630408"); - mCursorNamesMap.insert(WhatsThisCursor, "d9ce0ab605698f320427677b458ad60b"); - - mCursorNamesMap.insert(BusyCursor, "left_ptr_watch"); - mCursorNamesMap.insert(BusyCursor, "half-busy"); - mCursorNamesMap.insert(BusyCursor, "progress"); - mCursorNamesMap.insert(BusyCursor, "00000000000000020006000e7e9ffc3f"); - mCursorNamesMap.insert(BusyCursor, "08e8e1c95fe2fc01f976f1e063a24ccd"); - - mCursorNamesMap.insert(OpenHandCursor, "openhand"); - mCursorNamesMap.insert(OpenHandCursor, "fleur"); - mCursorNamesMap.insert(OpenHandCursor, "5aca4d189052212118709018842178c0"); - mCursorNamesMap.insert(OpenHandCursor, "9d800788f1b08800ae810202380a0822"); - - mCursorNamesMap.insert(ClosedHandCursor, "closedhand"); - mCursorNamesMap.insert(ClosedHandCursor, "grabbing"); - mCursorNamesMap.insert(ClosedHandCursor, "208530c400c041818281048008011002"); - - mCursorNamesMap.insert(DragCopyCursor, "dnd-copy"); - mCursorNamesMap.insert(DragCopyCursor, "copy"); - - mCursorNamesMap.insert(DragMoveCursor, "dnd-move"); - mCursorNamesMap.insert(DragMoveCursor, "move"); - - mCursorNamesMap.insert(DragLinkCursor, "dnd-link"); - mCursorNamesMap.insert(DragLinkCursor, "link"); - - mCursorNamesMap.insert(ResizeNorthCursor, "n-resize"); - mCursorNamesMap.insert(ResizeNorthCursor, "top_side"); - - mCursorNamesMap.insert(ResizeSouthCursor, "s-resize"); - mCursorNamesMap.insert(ResizeSouthCursor, "bottom_side"); - - mCursorNamesMap.insert(ResizeEastCursor, "e-resize"); - mCursorNamesMap.insert(ResizeEastCursor, "right_side"); - - mCursorNamesMap.insert(ResizeWestCursor, "w-resize"); - mCursorNamesMap.insert(ResizeWestCursor, "left_side"); - - mCursorNamesMap.insert(ResizeNorthWestCursor, "nw-resize"); - mCursorNamesMap.insert(ResizeNorthWestCursor, "top_left_corner"); - - mCursorNamesMap.insert(ResizeSouthEastCursor, "se-resize"); - mCursorNamesMap.insert(ResizeSouthEastCursor, "bottom_right_corner"); - - mCursorNamesMap.insert(ResizeNorthEastCursor, "ne-resize"); - mCursorNamesMap.insert(ResizeNorthEastCursor, "top_right_corner"); - - mCursorNamesMap.insert(ResizeSouthWestCursor, "sw-resize"); - mCursorNamesMap.insert(ResizeSouthWestCursor, "bottom_left_corner"); + qCWarning(lcQpaWayland) << "Setting cursor position is not possible on wayland"; } } diff -Nru qtwayland-opensource-src-5.11.3/src/client/qwaylandcursor_p.h qtwayland-opensource-src-5.12.2/src/client/qwaylandcursor_p.h --- qtwayland-opensource-src-5.11.3/src/client/qwaylandcursor_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/qwaylandcursor_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -68,20 +68,15 @@ class QWaylandBuffer; class QWaylandDisplay; class QWaylandScreen; +class QWaylandShm; -class Q_WAYLAND_CLIENT_EXPORT QWaylandCursor : public QPlatformCursor +class Q_WAYLAND_CLIENT_EXPORT QWaylandCursorTheme { public: - QWaylandCursor(QWaylandScreen *screen); - ~QWaylandCursor() override; - - void changeCursor(QCursor *cursor, QWindow *window) override; - void pointerEvent(const QMouseEvent &event) override; - QPoint pos() const override; - void setPos(const QPoint &pos) override; - + static QWaylandCursorTheme *create(QWaylandShm *shm, int size); + static QWaylandCursorTheme *create(QWaylandShm *shm, int size, const QString &themeName); + ~QWaylandCursorTheme(); struct wl_cursor_image *cursorImage(Qt::CursorShape shape); - QSharedPointer cursorBitmapImage(const QCursor *cursor); private: enum WaylandCursor { @@ -107,6 +102,7 @@ DragCopyCursor, DragMoveCursor, DragLinkCursor, + // The following are used for cursors that don't have equivalents in Qt ResizeNorthCursor = Qt::CustomCursor + 1, ResizeSouthCursor, ResizeEastCursor, @@ -117,13 +113,29 @@ ResizeSouthWestCursor }; - struct wl_cursor* requestCursor(WaylandCursor shape); - void initCursorMap(); + explicit QWaylandCursorTheme(struct ::wl_cursor_theme *theme) : m_theme(theme) {} + struct ::wl_cursor *requestCursor(WaylandCursor shape); + struct ::wl_cursor_theme *m_theme = nullptr; + QMap m_cursors; +}; + +class Q_WAYLAND_CLIENT_EXPORT QWaylandCursor : public QPlatformCursor +{ +public: + QWaylandCursor(QWaylandScreen *screen); + + void changeCursor(QCursor *cursor, QWindow *window) override; + void pointerEvent(const QMouseEvent &event) override; + QPoint pos() const override; + void setPos(const QPoint &pos) override; + + QSharedPointer cursorBitmapImage(const QCursor *cursor); + struct wl_cursor_image *cursorImage(Qt::CursorShape shape); + +private: QWaylandDisplay *mDisplay = nullptr; - struct wl_cursor_theme *mCursorTheme = nullptr; + QWaylandCursorTheme *mCursorTheme = nullptr; QPoint mLastPos; - QMap mCursors; - QMultiMap mCursorNamesMap; }; } diff -Nru qtwayland-opensource-src-5.11.3/src/client/qwaylanddisplay.cpp qtwayland-opensource-src-5.12.2/src/client/qwaylanddisplay.cpp --- qtwayland-opensource-src-5.11.3/src/client/qwaylanddisplay.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/qwaylanddisplay.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -41,6 +41,7 @@ #include "qwaylandintegration_p.h" #include "qwaylandwindow_p.h" +#include "qwaylandabstractdecoration_p.h" #include "qwaylandscreen_p.h" #include "qwaylandcursor_p.h" #include "qwaylandinputdevice_p.h" @@ -50,10 +51,10 @@ #if QT_CONFIG(wayland_datadevice) #include "qwaylanddatadevicemanager_p.h" #endif +#if QT_CONFIG(cursor) +#include +#endif #include "qwaylandhardwareintegration_p.h" -#include "qwaylandxdgshell_p.h" -#include "qwaylandxdgsurface_p.h" -#include "qwaylandwlshellsurface_p.h" #include "qwaylandinputcontext_p.h" #include "qwaylandwindowmanagerintegration_p.h" @@ -66,7 +67,6 @@ #include "qwaylandqtkey_p.h" #include -#include #include #include @@ -155,9 +155,13 @@ mWaylandIntegration->destroyScreen(screen); } mScreens.clear(); + #if QT_CONFIG(wayland_datadevice) delete mDndSelectionHandler.take(); #endif +#if QT_CONFIG(cursor) + qDeleteAll(mCursorThemesBySize); +#endif if (mDisplay) wl_display_disconnect(mDisplay); } @@ -241,7 +245,6 @@ mScreens.append(screen); // We need to get the output events before creating surfaces forceRoundTrip(); - screen->init(); mWaylandIntegration->screenAdded(screen); } else if (interface == QStringLiteral("wl_compositor")) { mCompositorVersion = qMin((int)version, 3); @@ -261,7 +264,7 @@ mSubCompositor.reset(new QtWayland::wl_subcompositor(registry, id, 1)); } else if (interface == QStringLiteral("qt_touch_extension")) { mTouchExtension.reset(new QWaylandTouchExtension(this, id)); - } else if (interface == QStringLiteral("qt_key_extension")) { + } else if (interface == QStringLiteral("zqt_key_v1")) { mQtKeyExtension.reset(new QWaylandQtKeyExtension(this, id)); } else if (interface == QStringLiteral("zwp_text_input_manager_v2")) { mTextInputManager.reset(new QtWayland::zwp_text_input_manager_v2(registry, id, 1)); @@ -273,6 +276,11 @@ // make a roundtrip here since we need to receive the events sent by // qt_hardware_integration before creating windows forceRoundTrip(); + } else if (interface == QLatin1String("zxdg_output_manager_v1")) { + mXdgOutputManager.reset(new QtWayland::zxdg_output_manager_v1(registry, id, 1)); + for (auto *screen : qAsConst(mScreens)) + screen->initXdgOutput(xdgOutputManager()); + forceRoundTrip(); } mGlobals.append(RegistryGlobal(id, interface, version, registry)); @@ -318,6 +326,13 @@ (*l.listener)(l.data, mGlobals[i].registry, mGlobals[i].id, mGlobals[i].interface, mGlobals[i].version); } +void QWaylandDisplay::removeListener(RegistryListener listener, void *data) +{ + std::remove_if(mRegistryListeners.begin(), mRegistryListeners.end(), [=](Listener l){ + return (l.listener == listener && l.data == data); + }); +} + uint32_t QWaylandDisplay::currentTimeMillisec() { //### we throw away the time information @@ -398,6 +413,11 @@ mLastInputWindow = win; } +bool QWaylandDisplay::isWindowActivated(const QWaylandWindow *window) +{ + return mActiveWindows.contains(const_cast(window)); +} + void QWaylandDisplay::handleWindowActivated(QWaylandWindow *window) { if (mActiveWindows.contains(window)) @@ -405,6 +425,9 @@ mActiveWindows.append(window); requestWaylandSync(); + + if (auto *decoration = window->decoration()) + decoration->update(); } void QWaylandDisplay::handleWindowDeactivated(QWaylandWindow *window) @@ -415,6 +438,9 @@ requestWaylandSync(); mActiveWindows.removeOne(window); + + if (auto *decoration = window->decoration()) + decoration->update(); } void QWaylandDisplay::handleKeyboardFocusChanged(QWaylandInputDevice *inputDevice) @@ -477,25 +503,47 @@ } #if QT_CONFIG(cursor) -void QWaylandDisplay::setCursor(struct wl_buffer *buffer, struct wl_cursor_image *image) + +void QWaylandDisplay::setCursor(struct wl_buffer *buffer, struct wl_cursor_image *image, qreal dpr) { /* 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); + inputDevice->setCursor(buffer, image, dpr); } } -void QWaylandDisplay::setCursor(const QSharedPointer &buffer, const QPoint &hotSpot) +void QWaylandDisplay::setCursor(const QSharedPointer &buffer, const QPoint &hotSpot, qreal dpr) { /* 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); + inputDevice->setCursor(buffer, hotSpot, dpr); + } +} + +QWaylandCursorTheme *QWaylandDisplay::loadCursorTheme(qreal devicePixelRatio) +{ + constexpr int defaultCursorSize = 32; + static const int xCursorSize = qEnvironmentVariableIntValue("XCURSOR_SIZE"); + int cursorSize = xCursorSize > 0 ? xCursorSize : defaultCursorSize; + + if (compositorVersion() >= 3) // set_buffer_scale is not supported on earlier versions + cursorSize *= devicePixelRatio; + + if (auto *theme = mCursorThemesBySize.value(cursorSize, nullptr)) + return theme; + + if (auto *theme = QWaylandCursorTheme::create(shm(), cursorSize)) { + mCursorThemesBySize[cursorSize] = theme; + return theme; } + + return nullptr; } + #endif // QT_CONFIG(cursor) } diff -Nru qtwayland-opensource-src-5.11.3/src/client/qwaylanddisplay_p.h qtwayland-opensource-src-5.12.2/src/client/qwaylanddisplay_p.h --- qtwayland-opensource-src-5.11.3/src/client/qwaylanddisplay_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/qwaylanddisplay_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -63,7 +63,6 @@ #include #include -#include #include struct wl_cursor_image; @@ -75,16 +74,14 @@ class QPlatformScreen; namespace QtWayland { - class qt_shell; - class qt_sub_surface_extension; class qt_surface_extension; class zwp_text_input_manager_v2; - class xdg_shell; + class zxdg_output_manager_v1; } namespace QtWaylandClient { -Q_DECLARE_LOGGING_CATEGORY(lcQpaWayland); +Q_WAYLAND_CLIENT_EXPORT Q_DECLARE_LOGGING_CATEGORY(lcQpaWayland); class QWaylandInputDevice; class QWaylandBuffer; @@ -95,11 +92,10 @@ class QWaylandTouchExtension; class QWaylandQtKeyExtension; class QWaylandWindow; -class QWaylandEventThread; class QWaylandIntegration; class QWaylandHardwareIntegration; -class QWaylandXdgShell; class QWaylandShellSurface; +class QWaylandCursorTheme; typedef void (*RegistryListener)(void *data, struct wl_registry *registry, @@ -127,8 +123,9 @@ 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); + void setCursor(struct wl_buffer *buffer, struct wl_cursor_image *image, qreal dpr); + void setCursor(const QSharedPointer &buffer, const QPoint &hotSpot, qreal dpr); + QWaylandCursorTheme *loadCursorTheme(qreal devicePixelRatio); #endif struct wl_display *wl_display() const { return mDisplay; } struct ::wl_registry *wl_registry() { return object(); } @@ -147,6 +144,8 @@ QWaylandTouchExtension *touchExtension() const { return mTouchExtension.data(); } QtWayland::zwp_text_input_manager_v2 *textInputManager() const { return mTextInputManager.data(); } QWaylandHardwareIntegration *hardwareIntegration() const { return mHardwareIntegration.data(); } + QtWayland::zxdg_output_manager_v1 *xdgOutputManager() const { return mXdgOutputManager.data(); } + struct RegistryGlobal { uint32_t id; @@ -162,6 +161,7 @@ /* wl_registry_add_listener does not add but rather sets a listener, so this function is used * to enable many listeners at once. */ void addRegistryListener(RegistryListener listener, void *data); + void removeListener(RegistryListener listener, void *data); QWaylandShm *shm() const { return mShm.data(); } @@ -176,6 +176,7 @@ QWaylandWindow *lastInputWindow() const; void setLastInputDevice(QWaylandInputDevice *device, uint32_t serial, QWaylandWindow *window); + bool isWindowActivated(const QWaylandWindow *window); void handleWindowActivated(QWaylandWindow *window); void handleWindowDeactivated(QWaylandWindow *window); void handleKeyboardFocusChanged(QWaylandInputDevice *inputDevice); @@ -194,6 +195,11 @@ void requestWaylandSync(); struct Listener { + Listener() = default; + Listener(RegistryListener incomingListener, + void* incomingData) + : listener(incomingListener), data(incomingData) + {} RegistryListener listener = nullptr; void *data = nullptr; }; @@ -205,6 +211,9 @@ QList mInputDevices; QList mRegistryListeners; QWaylandIntegration *mWaylandIntegration = nullptr; +#if QT_CONFIG(cursor) + QMap mCursorThemesBySize; +#endif #if QT_CONFIG(wayland_datadevice) QScopedPointer mDndSelectionHandler; #endif @@ -215,6 +224,7 @@ QScopedPointer mWindowManagerIntegration; QScopedPointer mTextInputManager; QScopedPointer mHardwareIntegration; + QScopedPointer mXdgOutputManager; QSocketNotifier *mReadNotifier = nullptr; int mFd; int mWritableNotificationFd; @@ -230,11 +240,6 @@ void registry_global(uint32_t id, const QString &interface, uint32_t version) override; void registry_global_remove(uint32_t id) override; - - static void shellHandleConfigure(void *data, struct wl_shell *shell, - uint32_t time, uint32_t edges, - struct wl_surface *surface, - int32_t width, int32_t height); }; } diff -Nru qtwayland-opensource-src-5.11.3/src/client/qwaylanddnd.cpp qtwayland-opensource-src-5.12.2/src/client/qwaylanddnd.cpp --- qtwayland-opensource-src-5.11.3/src/client/qwaylanddnd.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/qwaylanddnd.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -77,15 +77,19 @@ m_display->currentInputDevice()->dataDevice()->cancelDrag(); } -void QWaylandDrag::move(const QPoint &globalPos) +void QWaylandDrag::move(const QPoint &globalPos, Qt::MouseButtons b, Qt::KeyboardModifiers mods) { Q_UNUSED(globalPos); + Q_UNUSED(b); + Q_UNUSED(mods); // Do nothing } -void QWaylandDrag::drop(const QPoint &globalPos) +void QWaylandDrag::drop(const QPoint &globalPos, Qt::MouseButtons b, Qt::KeyboardModifiers mods) { Q_UNUSED(globalPos); + Q_UNUSED(b); + Q_UNUSED(mods); // Do nothing } diff -Nru qtwayland-opensource-src-5.11.3/src/client/qwaylanddnd_p.h qtwayland-opensource-src-5.12.2/src/client/qwaylanddnd_p.h --- qtwayland-opensource-src-5.11.3/src/client/qwaylanddnd_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/qwaylanddnd_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -78,8 +78,8 @@ protected: void startDrag() override; void cancel() override; - void move(const QPoint &globalPos) override; - void drop(const QPoint &globalPos) override; + void move(const QPoint &globalPos, Qt::MouseButtons b, Qt::KeyboardModifiers mods) override; + void drop(const QPoint &globalPos, Qt::MouseButtons b, Qt::KeyboardModifiers mods) override; void endDrag() override; diff -Nru qtwayland-opensource-src-5.11.3/src/client/qwaylandinputcontext.cpp qtwayland-opensource-src-5.12.2/src/client/qwaylandinputcontext.cpp --- qtwayland-opensource-src-5.11.3/src/client/qwaylandinputcontext.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/qwaylandinputcontext.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -417,6 +417,15 @@ textInput()->commit(); } +static ::wl_surface *surfaceForWindow(QWindow *window) +{ + if (!window || !window->handle()) + return nullptr; + + auto *waylandWindow = static_cast(window->handle()); + return waylandWindow->wl_surface::object(); +} + void QWaylandInputContext::update(Qt::InputMethodQueries queries) { qCDebug(qLcQpaInputMethods) << Q_FUNC_INFO << queries; @@ -424,15 +433,15 @@ if (!QGuiApplication::focusObject() || !textInput()) return; - if (mCurrentWindow && mCurrentWindow->handle() && !inputMethodAccepted()) { - struct ::wl_surface *surface = static_cast(mCurrentWindow->handle())->object(); - textInput()->disable(surface); + auto *currentSurface = surfaceForWindow(mCurrentWindow); + + if (currentSurface && !inputMethodAccepted()) { + textInput()->disable(currentSurface); mCurrentWindow.clear(); - } else if (!mCurrentWindow && inputMethodAccepted()) { + } else if (!currentSurface && inputMethodAccepted()) { QWindow *window = QGuiApplication::focusWindow(); - if (window && window->handle()) { - struct ::wl_surface *surface = static_cast(window->handle())->object(); - textInput()->enable(surface); + if (auto *focusSurface = surfaceForWindow(window)) { + textInput()->enable(focusSurface); mCurrentWindow = window; } } diff -Nru qtwayland-opensource-src-5.11.3/src/client/qwaylandinputdevice.cpp qtwayland-opensource-src-5.12.2/src/client/qwaylandinputdevice.cpp --- qtwayland-opensource-src-5.11.3/src/client/qwaylandinputdevice.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/qwaylandinputdevice.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -70,7 +70,7 @@ #include -#if QT_CONFIG(xkbcommon_evdev) +#if QT_CONFIG(xkbcommon) #include #endif @@ -84,7 +84,7 @@ connect(&mRepeatTimer, SIGNAL(timeout()), this, SLOT(repeatKey())); } -#if QT_CONFIG(xkbcommon_evdev) +#if QT_CONFIG(xkbcommon) bool QWaylandInputDevice::Keyboard::createDefaultKeyMap() { if (mXkbContext && mXkbMap && mXkbState) { @@ -156,7 +156,7 @@ QWaylandInputDevice::Keyboard::~Keyboard() { -#if QT_CONFIG(xkbcommon_evdev) +#if QT_CONFIG(xkbcommon) releaseComposeState(); releaseKeyMap(); #endif @@ -297,7 +297,6 @@ QWaylandDataDevice *QWaylandInputDevice::dataDevice() const { - Q_ASSERT(mDataDevice); return mDataDevice; } #endif @@ -345,7 +344,7 @@ { Qt::KeyboardModifiers ret = Qt::NoModifier; -#if QT_CONFIG(xkbcommon_evdev) +#if QT_CONFIG(xkbcommon) if (!mXkbState) return ret; @@ -371,7 +370,7 @@ } struct wl_buffer *buffer = wl_cursor_image_get_buffer(image); - setCursor(buffer, image); + setCursor(buffer, image, screen->devicePixelRatio()); } void QWaylandInputDevice::setCursor(const QCursor &cursor, QWaylandScreen *screen) @@ -381,20 +380,26 @@ mPointer->mCursorShape = cursor.shape(); if (cursor.shape() == Qt::BitmapCursor) { - setCursor(screen->waylandCursor()->cursorBitmapImage(&cursor), cursor.hotSpot()); + setCursor(screen->waylandCursor()->cursorBitmapImage(&cursor), cursor.hotSpot(), screen->devicePixelRatio()); return; } setCursor(cursor.shape(), screen); } -void QWaylandInputDevice::setCursor(struct wl_buffer *buffer, struct wl_cursor_image *image) +void QWaylandInputDevice::setCursor(struct wl_buffer *buffer, struct wl_cursor_image *image, int bufferScale) { - setCursor(buffer, - image ? QPoint(image->hotspot_x, image->hotspot_y) : QPoint(), - image ? QSize(image->width, image->height) : QSize()); + if (image) { + // Convert from pixel coordinates to surface coordinates + QPoint hotspot = QPoint(image->hotspot_x, image->hotspot_y) / bufferScale; + QSize size = QSize(image->width, image->height) / bufferScale; + setCursor(buffer, hotspot, size, bufferScale); + } else { + setCursor(buffer, QPoint(), QSize(), bufferScale); + } } -void QWaylandInputDevice::setCursor(struct wl_buffer *buffer, const QPoint &hotSpot, const QSize &size) +// size and hotspot are in surface coordinates +void QWaylandInputDevice::setCursor(struct wl_buffer *buffer, const QPoint &hotSpot, const QSize &size, int bufferScale) { if (mCaps & WL_SEAT_CAPABILITY_POINTER) { bool force = mPointer->mEnterSerial > mPointer->mCursorSerial; @@ -417,14 +422,16 @@ mPointer->set_cursor(mPointer->mEnterSerial, pointerSurface, hotSpot.x(), hotSpot.y()); wl_surface_attach(pointerSurface, buffer, 0, 0); + if (mQDisplay->compositorVersion() >= 3) + wl_surface_set_buffer_scale(pointerSurface, bufferScale); wl_surface_damage(pointerSurface, 0, 0, size.width(), size.height()); wl_surface_commit(pointerSurface); } } -void QWaylandInputDevice::setCursor(const QSharedPointer &buffer, const QPoint &hotSpot) +void QWaylandInputDevice::setCursor(const QSharedPointer &buffer, const QPoint &hotSpot, int bufferScale) { - setCursor(buffer->buffer(), hotSpot, buffer->size()); + setCursor(buffer->buffer(), hotSpot, buffer->size(), bufferScale); mPixmapCursor = buffer; } #endif @@ -444,10 +451,6 @@ return; QWaylandWindow *window = QWaylandWindow::fromWlSurface(surface); -#if QT_CONFIG(cursor) - window->window()->setCursor(window->window()->cursor()); -#endif - mFocus = window; mSurfacePos = QPointF(wl_fixed_to_double(sx), wl_fixed_to_double(sy)); mGlobalPos = window->window()->mapToGlobal(mSurfacePos.toPoint()); @@ -455,6 +458,11 @@ mParent->mSerial = serial; mEnterSerial = serial; +#if QT_CONFIG(cursor) + // Depends on mEnterSerial being updated + window->window()->setCursor(window->window()->cursor()); +#endif + QWaylandWindow *grab = QWaylandWindow::mouseGrab(); if (!grab) { EnterEvent evt(mSurfacePos, mGlobalPos); @@ -491,10 +499,9 @@ void QWaylandInputDevice::Pointer::pointer_motion(uint32_t time, wl_fixed_t surface_x, wl_fixed_t surface_y) { QWaylandWindow *window = mFocus; - if (!window) { - // We destroyed the pointer focus surface, but the server - // didn't get the message yet. + // We destroyed the pointer focus surface, but the server didn't get the message yet... + // or the server didn't send an enter event first. In either case, ignore the event. return; } @@ -525,6 +532,12 @@ uint32_t button, uint32_t state) { QWaylandWindow *window = mFocus; + if (!window) { + // We destroyed the pointer focus surface, but the server didn't get the message yet... + // or the server didn't send an enter event first. In either case, ignore the event. + return; + } + Qt::MouseButton qt_button; // translate from kernel (input.h) 'button' to corresponding Qt:MouseButton. @@ -591,15 +604,15 @@ void QWaylandInputDevice::Pointer::pointer_axis(uint32_t time, uint32_t axis, int32_t value) { QWaylandWindow *window = mFocus; - QPoint pixelDelta; - QPoint angleDelta; - if (!window) { - // We destroyed the pointer focus surface, but the server - // didn't get the message yet. + // We destroyed the pointer focus surface, but the server didn't get the message yet... + // or the server didn't send an enter event first. In either case, ignore the event. return; } + QPoint pixelDelta; + QPoint angleDelta; + //normalize value and inverse axis int valueDelta = wl_fixed_to_int(value) * -12; @@ -617,7 +630,7 @@ void QWaylandInputDevice::Keyboard::keyboard_keymap(uint32_t format, int32_t fd, uint32_t size) { -#if QT_CONFIG(xkbcommon_evdev) +#if QT_CONFIG(xkbcommon) if (format != WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1) { close(fd); return; @@ -704,6 +717,12 @@ void QWaylandInputDevice::Keyboard::keyboard_key(uint32_t serial, uint32_t time, uint32_t key, uint32_t state) { QWaylandWindow *window = mFocus; + if (!window) { + // We destroyed the keyboard focus surface, but the server didn't get the message yet... + // or the server didn't send an enter event first. In either case, ignore the event. + return; + } + uint32_t code = key + 8; bool isDown = state != WL_KEYBOARD_KEY_STATE_RELEASED; QEvent::Type type = isDown ? QEvent::KeyPress : QEvent::KeyRelease; @@ -711,16 +730,10 @@ int qtkey = key + 8; // qt-compositor substracts 8 for some reason mParent->mSerial = serial; - if (!window) { - // We destroyed the keyboard focus surface, but the server - // didn't get the message yet. - return; - } - if (isDown) mParent->mQDisplay->setLastInputDevice(mParent, serial, window); -#if QT_CONFIG(xkbcommon_evdev) +#if QT_CONFIG(xkbcommon) if (!createDefaultKeyMap()) { return; } @@ -763,7 +776,7 @@ #endif if (state == WL_KEYBOARD_KEY_STATE_PRESSED -#if QT_CONFIG(xkbcommon_evdev) +#if QT_CONFIG(xkbcommon) && xkb_keymap_key_repeats(mXkbMap, code) #endif ) { @@ -771,7 +784,7 @@ mRepeatCode = code; mRepeatTime = time; mRepeatText = text; -#if QT_CONFIG(xkbcommon_evdev) +#if QT_CONFIG(xkbcommon) mRepeatSym = sym; #endif mRepeatTimer.setInterval(400); @@ -783,9 +796,15 @@ void QWaylandInputDevice::Keyboard::repeatKey() { + if (!mFocus) { + // We destroyed the keyboard focus surface, but the server didn't get the message yet... + // or the server didn't send an enter event first. + return; + } + mRepeatTimer.setInterval(25); sendKey(mFocus->window(), mRepeatTime, QEvent::KeyRelease, mRepeatKey, modifiers(), mRepeatCode, -#if QT_CONFIG(xkbcommon_evdev) +#if QT_CONFIG(xkbcommon) mRepeatSym, mNativeModifiers, #else 0, 0, @@ -793,7 +812,7 @@ mRepeatText, true); sendKey(mFocus->window(), mRepeatTime, QEvent::KeyPress, mRepeatKey, modifiers(), mRepeatCode, -#if QT_CONFIG(xkbcommon_evdev) +#if QT_CONFIG(xkbcommon) mRepeatSym, mNativeModifiers, #else 0, 0, @@ -808,7 +827,7 @@ uint32_t group) { Q_UNUSED(serial); -#if QT_CONFIG(xkbcommon_evdev) +#if QT_CONFIG(xkbcommon) if (mXkbState) xkb_state_update_mask(mXkbState, mods_depressed, mods_latched, mods_locked, diff -Nru qtwayland-opensource-src-5.11.3/src/client/qwaylandinputdevice_p.h qtwayland-opensource-src-5.12.2/src/client/qwaylandinputdevice_p.h --- qtwayland-opensource-src-5.11.3/src/client/qwaylandinputdevice_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/qwaylandinputdevice_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -65,7 +65,7 @@ #include -#if QT_CONFIG(xkbcommon_evdev) +#if QT_CONFIG(xkbcommon) #include #include #endif @@ -77,7 +77,7 @@ struct wl_cursor_image; #endif -#if QT_CONFIG(xkbcommon_evdev) +#if QT_CONFIG(xkbcommon) struct xkb_compose_state; struct xkb_compose_table; #endif @@ -110,9 +110,9 @@ #if QT_CONFIG(cursor) void setCursor(const QCursor &cursor, QWaylandScreen *screen); - void setCursor(struct wl_buffer *buffer, struct ::wl_cursor_image *image); - void setCursor(struct wl_buffer *buffer, const QPoint &hotSpot, const QSize &size); - void setCursor(const QSharedPointer &buffer, const QPoint &hotSpot); + void setCursor(struct wl_buffer *buffer, struct ::wl_cursor_image *image, int bufferScale); + void setCursor(struct wl_buffer *buffer, const QPoint &hotSpot, const QSize &size, int bufferScale); + void setCursor(const QSharedPointer &buffer, const QPoint &hotSpot, int bufferScale); #endif void handleWindowDestroyed(QWaylandWindow *window); void handleEndDrag(); @@ -209,7 +209,7 @@ QWaylandInputDevice *mParent = nullptr; QPointer mFocus; -#if QT_CONFIG(xkbcommon_evdev) +#if QT_CONFIG(xkbcommon) xkb_context *mXkbContext = nullptr; xkb_keymap *mXkbMap = nullptr; xkb_state *mXkbState = nullptr; @@ -222,7 +222,7 @@ uint32_t mRepeatCode; uint32_t mRepeatTime; QString mRepeatText; -#if QT_CONFIG(xkbcommon_evdev) +#if QT_CONFIG(xkbcommon) xkb_keysym_t mRepeatSym; #endif QTimer mRepeatTimer; @@ -233,7 +233,7 @@ void repeatKey(); private: -#if QT_CONFIG(xkbcommon_evdev) +#if QT_CONFIG(xkbcommon) bool createDefaultKeyMap(); void releaseKeyMap(); void createComposeState(); diff -Nru qtwayland-opensource-src-5.11.3/src/client/qwaylandintegration.cpp qtwayland-opensource-src-5.12.2/src/client/qwaylandintegration.cpp --- qtwayland-opensource-src-5.11.3/src/client/qwaylandintegration.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/qwaylandintegration.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -82,9 +82,6 @@ #include "qwaylandshellintegration_p.h" #include "qwaylandshellintegrationfactory_p.h" -#include "qwaylandxdgshellintegration_p.h" -#include "qwaylandwlshellintegration_p.h" -#include "qwaylandxdgshellv6integration_p.h" #include "qwaylandinputdeviceintegration_p.h" #include "qwaylandinputdeviceintegrationfactory_p.h" @@ -342,6 +339,8 @@ targetKey = QString::fromLocal8Bit(clientBufferIntegrationName); } else { targetKey = mDisplay->hardwareIntegration()->clientBufferIntegration(); + if (targetKey == QLatin1String("wayland-eglstream-controller")) + targetKey = QLatin1String("wayland-egl"); } if (targetKey.isEmpty()) { @@ -393,13 +392,14 @@ { mShellIntegrationInitialized = true; - QByteArray integrationName = qgetenv("QT_WAYLAND_SHELL_INTEGRATION"); - QString targetKey = QString::fromLocal8Bit(integrationName); + QByteArray integrationNames = qgetenv("QT_WAYLAND_SHELL_INTEGRATION"); + QString targetKeys = QString::fromLocal8Bit(integrationNames); QStringList preferredShells; - if (!targetKey.isEmpty()) { - preferredShells << targetKey; + if (!targetKeys.isEmpty()) { + preferredShells = targetKeys.split(QLatin1Char(';')); } else { + preferredShells << QLatin1String("xdg-shell"); preferredShells << QLatin1String("xdg-shell-v6"); QString useXdgShell = QString::fromLocal8Bit(qgetenv("QT_WAYLAND_USE_XDG_SHELL")); if (!useXdgShell.isEmpty() && useXdgShell != QLatin1String("0")) { @@ -418,9 +418,9 @@ } } - if (!mShellIntegration || !mShellIntegration->initialize(mDisplay.data())) { - mShellIntegration.reset(); - qWarning("Failed to load shell integration %s", qPrintable(targetKey)); + if (!mShellIntegration) { + qCWarning(lcQpaWayland) << "Loading shell integration failed."; + qCWarning(lcQpaWayland) << "Attempted to load the following shells" << preferredShells; } } @@ -452,15 +452,10 @@ QWaylandShellIntegration *QWaylandIntegration::createShellIntegration(const QString &integrationName) { - if (integrationName == QLatin1Literal("wl-shell")) { - return QWaylandWlShellIntegration::create(mDisplay.data()); - } else if (integrationName == QLatin1Literal("xdg-shell-v5")) { - return QWaylandXdgShellIntegration::create(mDisplay.data()); - } else if (integrationName == QLatin1Literal("xdg-shell-v6")) { - return QWaylandXdgShellV6Integration::create(mDisplay.data()); - } else if (QWaylandShellIntegrationFactory::keys().contains(integrationName)) { - return QWaylandShellIntegrationFactory::create(integrationName, QStringList()); + if (QWaylandShellIntegrationFactory::keys().contains(integrationName)) { + return QWaylandShellIntegrationFactory::create(integrationName, mDisplay.data()); } else { + qCWarning(lcQpaWayland) << "No shell integration named" << integrationName << "found"; return nullptr; } } diff -Nru qtwayland-opensource-src-5.11.3/src/client/qwaylandintegration_p.h qtwayland-opensource-src-5.12.2/src/client/qwaylandintegration_p.h --- qtwayland-opensource-src-5.11.3/src/client/qwaylandintegration_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/qwaylandintegration_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -117,7 +117,8 @@ virtual QWaylandShellIntegration *shellIntegration() const; private: - // NOTE: mDisplay *must* be destructed after mDrag and mClientBufferIntegration. + // NOTE: mDisplay *must* be destructed after mDrag and mClientBufferIntegration + // and mShellIntegration. // Do not move this definition into the private section at the bottom. QScopedPointer mDisplay; diff -Nru qtwayland-opensource-src-5.11.3/src/client/qwaylandnativeinterface.cpp qtwayland-opensource-src-5.12.2/src/client/qwaylandnativeinterface.cpp --- qtwayland-opensource-src-5.11.3/src/client/qwaylandnativeinterface.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/qwaylandnativeinterface.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -40,13 +40,13 @@ #include "qwaylandnativeinterface_p.h" #include "qwaylanddisplay_p.h" #include "qwaylandwindow_p.h" +#include "qwaylandshellintegration_p.h" #include "qwaylandsubsurface_p.h" #include "qwaylandextendedsurface_p.h" #include "qwaylandintegration_p.h" #include "qwaylanddisplay_p.h" #include "qwaylandwindowmanagerintegration_p.h" #include "qwaylandscreen_p.h" -#include "qwaylandwlshellsurface_p.h" #include #include #include @@ -91,18 +91,13 @@ QWaylandWindow *w = static_cast(window->handle()); return w ? w->object() : nullptr; } - if (lowerCaseResource == "wl_shell_surface") { - QWaylandWindow *w = static_cast(window->handle()); - if (!w) - return nullptr; - QWaylandWlShellSurface *s = qobject_cast(w->shellSurface()); - if (!s) - return nullptr; - return s->object(); - } + if (lowerCaseResource == "egldisplay" && m_integration->clientBufferIntegration()) return m_integration->clientBufferIntegration()->nativeResource(QWaylandClientBufferIntegration::EglDisplay); + if (auto shellIntegration = m_integration->shellIntegration()) + return shellIntegration->nativeResourceForWindow(resourceString, window); + return nullptr; } diff -Nru qtwayland-opensource-src-5.11.3/src/client/qwaylandqtkey.cpp qtwayland-opensource-src-5.12.2/src/client/qwaylandqtkey.cpp --- qtwayland-opensource-src-5.11.3/src/client/qwaylandqtkey.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/qwaylandqtkey.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -46,12 +46,12 @@ namespace QtWaylandClient { QWaylandQtKeyExtension::QWaylandQtKeyExtension(QWaylandDisplay *display, uint32_t id) - : QtWayland::qt_key_extension(display->wl_registry(), id, 2) + : QtWayland::zqt_key_v1(display->wl_registry(), id, 1) , m_display(display) { } -void QWaylandQtKeyExtension::key_extension_qtkey(struct wl_surface *surface, +void QWaylandQtKeyExtension::zqt_key_v1_key(struct wl_surface *surface, uint32_t time, uint32_t type, uint32_t key, diff -Nru qtwayland-opensource-src-5.11.3/src/client/qwaylandqtkey_p.h qtwayland-opensource-src-5.12.2/src/client/qwaylandqtkey_p.h --- qtwayland-opensource-src-5.11.3/src/client/qwaylandqtkey_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/qwaylandqtkey_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -54,7 +54,7 @@ #include #include -#include +#include QT_BEGIN_NAMESPACE @@ -62,7 +62,7 @@ class QWaylandDisplay; -class Q_WAYLAND_CLIENT_EXPORT QWaylandQtKeyExtension : public QtWayland::qt_key_extension +class Q_WAYLAND_CLIENT_EXPORT QWaylandQtKeyExtension : public QtWayland::zqt_key_v1 { public: QWaylandQtKeyExtension(QWaylandDisplay *display, uint32_t id); @@ -70,17 +70,17 @@ private: QWaylandDisplay *m_display = nullptr; - void key_extension_qtkey(struct wl_surface *surface, - uint32_t time, - uint32_t type, - uint32_t key, - uint32_t modifiers, - uint32_t nativeScanCode, - uint32_t nativeVirtualKey, - uint32_t nativeModifiers, - const QString &text, - uint32_t autorep, - uint32_t count) override; + void zqt_key_v1_key(struct wl_surface *surface, + uint32_t time, + uint32_t type, + uint32_t key, + uint32_t modifiers, + uint32_t nativeScanCode, + uint32_t nativeVirtualKey, + uint32_t nativeModifiers, + const QString &text, + uint32_t autorep, + uint32_t count) override; }; diff -Nru qtwayland-opensource-src-5.11.3/src/client/qwaylandscreen.cpp qtwayland-opensource-src-5.12.2/src/client/qwaylandscreen.cpp --- qtwayland-opensource-src-5.11.3/src/client/qwaylandscreen.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/qwaylandscreen.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -58,20 +58,23 @@ , mWaylandDisplay(waylandDisplay) , mOutputName(QStringLiteral("Screen%1").arg(id)) { + if (auto *xdgOutputManager = waylandDisplay->xdgOutputManager()) + initXdgOutput(xdgOutputManager); } QWaylandScreen::~QWaylandScreen() { -#if QT_CONFIG(cursor) - delete mWaylandCursor; -#endif + if (zxdg_output_v1::isInitialized()) + zxdg_output_v1::destroy(); } -void QWaylandScreen::init() +void QWaylandScreen::initXdgOutput(QtWayland::zxdg_output_manager_v1 *xdgOutputManager) { -#if QT_CONFIG(cursor) - mWaylandCursor = new QWaylandCursor(this); -#endif + Q_ASSERT(xdgOutputManager); + if (zxdg_output_v1::isInitialized()) + return; + + zxdg_output_v1::init(xdgOutputManager->get_xdg_output(wl_output::object())); } QWaylandDisplay * QWaylandScreen::display() const @@ -91,9 +94,13 @@ QRect QWaylandScreen::geometry() const { - // Scale geometry for QScreen. This makes window and screen - // geometry be in the same coordinate system. - return QRect(mGeometry.topLeft(), mGeometry.size() / mScale); + if (zxdg_output_v1::isInitialized()) { + return mXdgGeometry; + } else { + // Scale geometry for QScreen. This makes window and screen + // geometry be in the same coordinate system. + return QRect(mGeometry.topLeft(), mGeometry.size() / mScale); + } } int QWaylandScreen::depth() const @@ -116,11 +123,15 @@ QDpi QWaylandScreen::logicalDpi() const { - static int force_dpi = !qgetenv("QT_WAYLAND_FORCE_DPI").isEmpty() ? qgetenv("QT_WAYLAND_FORCE_DPI").toInt() : -1; - if (force_dpi > 0) - return QDpi(force_dpi, force_dpi); + static bool physicalDpi = qEnvironmentVariable("QT_WAYLAND_FORCE_DPI") == QStringLiteral("physical"); + if (physicalDpi) + return QPlatformScreen::logicalDpi(); + + static int forceDpi = qgetenv("QT_WAYLAND_FORCE_DPI").toInt(); + if (forceDpi) + return QDpi(forceDpi, forceDpi); - return QPlatformScreen::logicalDpi(); + return QDpi(96, 96); } QList QWaylandScreen::virtualSiblings() const @@ -165,11 +176,20 @@ } #if QT_CONFIG(cursor) + QPlatformCursor *QWaylandScreen::cursor() const { - return mWaylandCursor; + return const_cast(this)->waylandCursor(); } -#endif + +QWaylandCursor *QWaylandScreen::waylandCursor() +{ + if (!mWaylandCursor) + mWaylandCursor.reset(new QWaylandCursor(this)); + return mWaylandCursor.data(); +} + +#endif // QT_CONFIG(cursor) QWaylandScreen * QWaylandScreen::waylandScreenFromWindow(QWindow *window) { @@ -189,7 +209,6 @@ return; QSize size(width, height); - if (size != mGeometry.size()) mGeometry.setSize(size); @@ -252,8 +271,25 @@ QWindowSystemInterface::handleScreenOrientationChange(screen(), m_orientation); mTransform = -1; } - QWindowSystemInterface::handleScreenGeometryChange(screen(), geometry(), geometry()); QWindowSystemInterface::handleScreenRefreshRateChange(screen(), refreshRate()); + if (!zxdg_output_v1::isInitialized()) + QWindowSystemInterface::handleScreenGeometryChange(screen(), geometry(), geometry()); +} + + +void QWaylandScreen::zxdg_output_v1_logical_position(int32_t x, int32_t y) +{ + mXdgGeometry.moveTopLeft(QPoint(x, y)); +} + +void QWaylandScreen::zxdg_output_v1_logical_size(int32_t width, int32_t height) +{ + mXdgGeometry.setSize(QSize(width, height)); +} + +void QWaylandScreen::zxdg_output_v1_done() +{ + QWindowSystemInterface::handleScreenGeometryChange(screen(), geometry(), geometry()); } } diff -Nru qtwayland-opensource-src-5.11.3/src/client/qwaylandscreen_p.h qtwayland-opensource-src-5.12.2/src/client/qwaylandscreen_p.h --- qtwayland-opensource-src-5.11.3/src/client/qwaylandscreen_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/qwaylandscreen_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -55,6 +55,8 @@ #include #include +#include + QT_BEGIN_NAMESPACE @@ -63,13 +65,14 @@ class QWaylandDisplay; class QWaylandCursor; -class Q_WAYLAND_CLIENT_EXPORT QWaylandScreen : public QPlatformScreen, QtWayland::wl_output +class Q_WAYLAND_CLIENT_EXPORT QWaylandScreen : public QPlatformScreen, QtWayland::wl_output, QtWayland::zxdg_output_v1 { public: QWaylandScreen(QWaylandDisplay *waylandDisplay, int version, uint32_t id); ~QWaylandScreen() override; - void init(); + void initXdgOutput(QtWayland::zxdg_output_manager_v1 *xdgOutputManager); + QWaylandDisplay *display() const; QString manufacturer() const override; @@ -95,11 +98,11 @@ #if QT_CONFIG(cursor) QPlatformCursor *cursor() const override; - QWaylandCursor *waylandCursor() const { return mWaylandCursor; } + QWaylandCursor *waylandCursor(); #endif uint32_t outputId() const { return m_outputId; } - ::wl_output *output() { return object(); } + ::wl_output *output() { return QtWayland::wl_output::object(); } static QWaylandScreen *waylandScreenFromWindow(QWindow *window); static QWaylandScreen *fromWlOutput(::wl_output *output); @@ -115,11 +118,17 @@ void output_scale(int32_t factor) override; void output_done() override; + // XdgOutput + void zxdg_output_v1_logical_position(int32_t x, int32_t y) override; + void zxdg_output_v1_logical_size(int32_t width, int32_t height) override; + void zxdg_output_v1_done() override; + int m_outputId; QWaylandDisplay *mWaylandDisplay = nullptr; QString mManufacturer; QString mModel; QRect mGeometry; + QRect mXdgGeometry; int mScale = 1; int mDepth = 32; int mRefreshRate = 60000; @@ -130,7 +139,7 @@ Qt::ScreenOrientation m_orientation = Qt::PrimaryOrientation; #if QT_CONFIG(cursor) - QWaylandCursor *mWaylandCursor = nullptr; + QScopedPointer mWaylandCursor; #endif }; diff -Nru qtwayland-opensource-src-5.11.3/src/client/qwaylandshellsurface_p.h qtwayland-opensource-src-5.12.2/src/client/qwaylandshellsurface_p.h --- qtwayland-opensource-src-5.11.3/src/client/qwaylandshellsurface_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/qwaylandshellsurface_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -95,13 +95,9 @@ inline QWaylandWindow *window() { return m_window; } - virtual void setType(Qt::WindowType type, QWaylandWindow *transientParent) = 0; - -protected: - virtual void setMaximized() {} - virtual void setFullscreen() {} - virtual void setNormal() {} - virtual void setMinimized() {} + virtual void applyConfigure() {} + virtual void requestWindowStates(Qt::WindowStates states) {Q_UNUSED(states);} + virtual bool wantsDecorations() const { return false; } private: QWaylandWindow *m_window = nullptr; diff -Nru qtwayland-opensource-src-5.11.3/src/client/qwaylandshmbackingstore.cpp qtwayland-opensource-src-5.12.2/src/client/qwaylandshmbackingstore.cpp --- qtwayland-opensource-src-5.11.3/src/client/qwaylandshmbackingstore.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/qwaylandshmbackingstore.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -234,8 +234,7 @@ mFrontBuffer = mBackBuffer; QMargins margins = windowDecorationMargins(); - - waylandWindow()->commit(mFrontBuffer, region.translated(margins.left(), margins.top())); + waylandWindow()->safeCommit(mFrontBuffer, region.translated(margins.left(), margins.top())); } void QWaylandShmBackingStore::resize(const QSize &size, const QRegion &) diff -Nru qtwayland-opensource-src-5.11.3/src/client/qwaylandwindow.cpp qtwayland-opensource-src-5.12.2/src/client/qwaylandwindow.cpp --- qtwayland-opensource-src-5.11.3/src/client/qwaylandwindow.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/qwaylandwindow.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -44,8 +44,6 @@ #include "qwaylandinputdevice_p.h" #include "qwaylandscreen_p.h" #include "qwaylandshellsurface_p.h" -#include "qwaylandwlshellsurface_p.h" -#include "qwaylandxdgsurface_p.h" #include "qwaylandsubsurface_p.h" #include "qwaylandabstractdecoration_p.h" #include "qwaylandwindowmanagerintegration_p.h" @@ -69,7 +67,7 @@ #include -#include +#include QT_BEGIN_NAMESPACE @@ -143,8 +141,6 @@ mShellSurface = mDisplay->createShellSurface(this); if (mShellSurface) { - mShellSurface->setType(window()->type(), transientParent()); - // Set initial surface title setWindowTitle(window()->title()); @@ -202,11 +198,8 @@ else setGeometry_helper(window()->geometry()); setMask(window()->mask()); - // setWindowStateInternal is a no-op if the argument is equal to mState, - // but since we're creating the shellsurface only now we reset mState to - // make sure the state gets sent out to the compositor - mState = Qt::WindowNoState; - setWindowStateInternal(window()->windowStates()); + if (mShellSurface) + mShellSurface->requestWindowStates(window()->windowStates()); handleContentOrientationChange(window()->contentOrientation()); mFlags = window()->flags(); } @@ -255,6 +248,7 @@ } mMask = QRegion(); + mQueuedBuffer = nullptr; } QWaylandWindow *QWaylandWindow::fromWlSurface(::wl_surface *surface) @@ -344,15 +338,27 @@ mSentInitialResize = true; } - sendExposeEvent(QRect(QPoint(), geometry().size())); + QRect exposeGeometry(QPoint(), geometry().size()); + if (exposeGeometry != mLastExposeGeometry) + sendExposeEvent(exposeGeometry); } +void QWaylandWindow::resizeFromApplyConfigure(const QSize &sizeWithMargins, const QPoint &offset) +{ + QMargins margins = frameMargins(); + int widthWithoutMargins = qMax(sizeWithMargins.width() - (margins.left()+margins.right()), 1); + int heightWithoutMargins = qMax(sizeWithMargins.height() - (margins.top()+margins.bottom()), 1); + QRect geometry(windowGeometry().topLeft(), QSize(widthWithoutMargins, heightWithoutMargins)); + mOffset += offset; + setGeometry(geometry); +} void QWaylandWindow::sendExposeEvent(const QRect &rect) { if (!(mShellSurface && mShellSurface->handleExpose(rect))) QWindowSystemInterface::handleExposeEvent(window(), rect); + mLastExposeGeometry = rect; } @@ -378,7 +384,7 @@ void QWaylandWindow::setVisible(bool visible) { if (visible) { - if (window()->type() == Qt::Popup) + if (window()->type() & (Qt::Popup | Qt::ToolTip)) activePopups << this; initWindow(); mDisplay->flushRequests(); @@ -389,14 +395,9 @@ // QWaylandShmBackingStore::beginPaint(). } else { sendExposeEvent(QRect()); - // when flushing the event queue, it could contain a close event, in which - // case 'this' will be deleted. When that happens, we must abort right away. - QPointer deleteGuard(this); - QWindowSystemInterface::flushWindowSystemEvents(); - if (!deleteGuard.isNull() && window()->type() == Qt::Popup) + if (window()->type() == Qt::Popup) closePopups(this); - if (!deleteGuard.isNull()) - reset(); + reset(); } } @@ -435,46 +436,24 @@ wl_surface::commit(); } -void QWaylandWindow::configure(uint32_t edges, int32_t width, int32_t height) +void QWaylandWindow::applyConfigureWhenPossible() { QMutexLocker resizeLocker(&mResizeLock); - mConfigure.edges |= edges; - mConfigure.width = width; - mConfigure.height = height; - - if (!mRequestResizeSent && !mConfigure.isEmpty()) { - mRequestResizeSent= true; - QMetaObject::invokeMethod(this, "requestResize", Qt::QueuedConnection); + if (!mWaitingToApplyConfigure) { + mWaitingToApplyConfigure = true; + QMetaObject::invokeMethod(this, "applyConfigure", Qt::QueuedConnection); } } -void QWaylandWindow::doResize() +void QWaylandWindow::doApplyConfigure() { - if (mConfigure.isEmpty()) { + if (!mWaitingToApplyConfigure) return; - } - - int widthWithoutMargins = qMax(mConfigure.width-(frameMargins().left() +frameMargins().right()),1); - int heightWithoutMargins = qMax(mConfigure.height-(frameMargins().top()+frameMargins().bottom()),1); - - widthWithoutMargins = qMax(widthWithoutMargins, window()->minimumSize().width()); - heightWithoutMargins = qMax(heightWithoutMargins, window()->minimumSize().height()); - QRect geometry = QRect(0,0, widthWithoutMargins, heightWithoutMargins); - int x = 0; - int y = 0; - QSize size = this->geometry().size(); - if (mConfigure.edges & WL_SHELL_SURFACE_RESIZE_LEFT) { - x = size.width() - geometry.width(); - } - if (mConfigure.edges & WL_SHELL_SURFACE_RESIZE_TOP) { - y = size.height() - geometry.height(); - } - mOffset += QPoint(x, y); - - setGeometry(geometry); + if (mShellSurface) + mShellSurface->applyConfigure(); - mConfigure.clear(); + mWaitingToApplyConfigure = false; } void QWaylandWindow::setCanResize(bool canResize) @@ -486,8 +465,8 @@ if (mResizeDirty) { QWindowSystemInterface::handleGeometryChange(window(), geometry()); } - if (!mConfigure.isEmpty()) { - doResize(); + if (mWaitingToApplyConfigure) { + doApplyConfigure(); sendExposeEvent(QRect(QPoint(), geometry().size())); } else if (mResizeDirty) { mResizeDirty = false; @@ -496,15 +475,13 @@ } } -void QWaylandWindow::requestResize() +void QWaylandWindow::applyConfigure() { QMutexLocker lock(&mResizeLock); - if (mCanResize || !mSentInitialResize) { - doResize(); - } + if (mCanResize || !mSentInitialResize) + doApplyConfigure(); - mRequestResizeSent = false; lock.unlock(); sendExposeEvent(QRect(QPoint(), geometry().size())); QWindowSystemInterface::flushWindowSystemEvents(); @@ -588,8 +565,29 @@ damage(rect.x(), rect.y(), rect.width(), rect.height()); } +void QWaylandWindow::safeCommit(QWaylandBuffer *buffer, const QRegion &damage) +{ + if (isExposed()) { + commit(buffer, damage); + } else { + mQueuedBuffer = buffer; + mQueuedBufferDamage = damage; + } +} + +void QWaylandWindow::handleExpose(const QRegion ®ion) +{ + QWindowSystemInterface::handleExposeEvent(window(), region); + if (mQueuedBuffer) { + commit(mQueuedBuffer, mQueuedBufferDamage); + mQueuedBuffer = nullptr; + mQueuedBufferDamage = QRegion(); + } +} + void QWaylandWindow::commit(QWaylandBuffer *buffer, const QRegion &damage) { + Q_ASSERT(isExposed()); if (buffer->committed()) { qCDebug(lcWaylandBackingstore) << "Buffer already committed, ignoring."; return; @@ -617,9 +615,8 @@ self->mWaitingForFrameSync = false; if (self->mUpdateRequested) { - QWindowPrivate *w = QWindowPrivate::get(self->window()); self->mUpdateRequested = false; - w->deliverUpdateRequest(); + self->deliverUpdateRequest(); } } @@ -694,10 +691,10 @@ mShellSurface->setContentOrientationMask(mask); } -void QWaylandWindow::setWindowState(Qt::WindowStates state) +void QWaylandWindow::setWindowState(Qt::WindowStates states) { - if (setWindowStateInternal(state)) - QWindowSystemInterface::flushWindowSystemEvents(); // Required for oldState to work on WindowStateChanged + if (mShellSurface) + mShellSurface->requestWindowStates(states); } void QWaylandWindow::setWindowFlags(Qt::WindowFlags flags) @@ -711,20 +708,6 @@ bool QWaylandWindow::createDecoration() { - // so far only xdg-shell support this "unminimize" trick, may be moved elsewhere - if (mState & Qt::WindowMinimized) { - QWaylandXdgSurface *xdgSurface = qobject_cast(mShellSurface); - if ( xdgSurface ) { - Qt::WindowStates states; - if (xdgSurface->isFullscreen()) - states |= Qt::WindowFullScreen; - if (xdgSurface->isMaximized()) - states |= Qt::WindowMaximized; - - setWindowStateInternal(states); - } - } - if (!mDisplay->supportsWindowDecoration()) return false; @@ -741,12 +724,14 @@ default: break; } - if (mFlags & Qt::FramelessWindowHint || isFullscreen()) + if (mFlags & Qt::FramelessWindowHint) decoration = false; if (mFlags & Qt::BypassWindowManagerHint) decoration = false; if (mSubSurfaceWindow) decoration = false; + if (mShellSurface && !mShellSurface->wantsDecorations()) + decoration = false; bool hadDecoration = mWindowDecoration; if (decoration && !decorationPluginFailed) { @@ -847,8 +832,13 @@ } #if QT_CONFIG(cursor) - if (e.type == QWaylandPointerEvent::Enter) - restoreMouseCursor(inputDevice); + if (e.type == QWaylandPointerEvent::Enter) { + QRect windowGeometry = window()->frameGeometry(); + windowGeometry.moveTopLeft({0, 0}); // convert to wayland surface coordinates + QRect contentGeometry = windowGeometry.marginsRemoved(frameMargins()); + if (contentGeometry.contains(e.local.toPoint())) + restoreMouseCursor(inputDevice); + } #endif } @@ -877,8 +867,10 @@ { if (mMousePressedInContentArea == Qt::NoButton && mWindowDecoration->handleMouse(inputDevice, e.local, e.global, e.buttons, e.modifiers)) { - if (mMouseEventsInContentArea) + if (mMouseEventsInContentArea) { QWindowSystemInterface::handleLeaveEvent(window()); + mMouseEventsInContentArea = false; + } return; } @@ -971,6 +963,11 @@ return QPlatformWindow::isExposed(); } +bool QWaylandWindow::isActive() const +{ + return mDisplay->isWindowActivated(this); +} + int QWaylandWindow::scale() const { return mScale; @@ -992,31 +989,11 @@ return true; } -bool QWaylandWindow::setWindowStateInternal(Qt::WindowStates state) +void QWaylandWindow::handleWindowStatesChanged(Qt::WindowStates states) { - if (mState == state) { - return false; - } - - // As of february 2013 QWindow::setWindowState sets the new state value after - // QPlatformWindow::setWindowState returns, so we cannot rely on QWindow::windowState - // here. We use then this mState variable. - mState = state; - - if (mShellSurface) { - createDecoration(); - if (state & Qt::WindowMaximized) - mShellSurface->setMaximized(); - if (state & Qt::WindowFullScreen) - mShellSurface->setFullscreen(); - if (state & Qt::WindowMinimized) - mShellSurface->setMinimized(); - if (!state) - mShellSurface->setNormal(); - } - - QWindowSystemInterface::handleWindowStateChanged(window(), mState); - return true; + createDecoration(); + QWindowSystemInterface::handleWindowStateChanged(window(), states, mLastReportedWindowStates); + mLastReportedWindowStates = states; } void QWaylandWindow::sendProperty(const QString &name, const QVariant &value) diff -Nru qtwayland-opensource-src-5.11.3/src/client/qwaylandwindow_p.h qtwayland-opensource-src-5.12.2/src/client/qwaylandwindow_p.h --- qtwayland-opensource-src-5.11.3/src/client/qwaylandwindow_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/qwaylandwindow_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -80,23 +80,6 @@ class QWaylandShmBackingStore; class QWaylandPointerEvent; -class Q_WAYLAND_CLIENT_EXPORT QWaylandWindowConfigure -{ -public: - QWaylandWindowConfigure() - { } - - void clear() - { width = height = edges = 0; } - - bool isEmpty() const - { return !height || !width; } - - int width = 0; - int height = 0; - uint32_t edges = 0; -}; - class Q_WAYLAND_CLIENT_EXPORT QWaylandWindow : public QObject, public QPlatformWindow, public QtWayland::wl_surface { Q_OBJECT @@ -121,8 +104,9 @@ void setWindowIcon(const QIcon &icon) override; void setGeometry(const QRect &rect) override; + void resizeFromApplyConfigure(const QSize &sizeWithMargins, const QPoint &offset = {0, 0}); - void configure(uint32_t edges, int32_t width, int32_t height); + void applyConfigureWhenPossible(); //rename to possible? using QtWayland::wl_surface::attach; void attach(QWaylandBuffer *buffer, int x, int y); @@ -132,6 +116,8 @@ using QtWayland::wl_surface::damage; void damage(const QRect &rect); + void safeCommit(QWaylandBuffer *buffer, const QRegion &damage); + void handleExpose(const QRegion ®ion); void commit(QWaylandBuffer *buffer, const QRegion &damage); void waitForFrameSync(); @@ -148,8 +134,9 @@ void handleContentOrientationChange(Qt::ScreenOrientation orientation) override; void setOrientationMask(Qt::ScreenOrientations mask); - void setWindowState(Qt::WindowStates state) override; + void setWindowState(Qt::WindowStates states) override; void setWindowFlags(Qt::WindowFlags flags) override; + void handleWindowStatesChanged(Qt::WindowStates states); void raise() override; void lower() override; @@ -161,6 +148,7 @@ void requestActivateWindow() override; bool isExposed() const override; + bool isActive() const override; void unfocus(); QWaylandAbstractDecoration *decoration() const; @@ -173,9 +161,6 @@ bool createDecoration(); - inline bool isMaximized() const { return mState & Qt::WindowMaximized; } - inline bool isFullscreen() const { return mState & Qt::WindowFullScreen; } - #if QT_CONFIG(cursor) void setMouseCursor(QWaylandInputDevice *device, const QCursor &cursor); void restoreMouseCursor(QWaylandInputDevice *device); @@ -184,7 +169,7 @@ QWaylandWindow *transientParent() const; QMutex *resizeMutex() { return &mResizeLock; } - void doResize(); + void doApplyConfigure(); void setCanResize(bool canResize); bool setMouseGrabEnabled(bool grab) override; @@ -209,7 +194,7 @@ void requestUpdate() override; public slots: - void requestResize(); + void applyConfigure(); protected: void surface_enter(struct ::wl_output *output) override; @@ -231,8 +216,7 @@ QWaitCondition mFrameSyncWait; QMutex mResizeLock; - QWaylandWindowConfigure mConfigure; - bool mRequestResizeSent = false; + bool mWaitingToApplyConfigure = false; bool mCanResize = true; bool mResizeDirty = false; bool mResizeAfterSwap; @@ -244,17 +228,18 @@ QIcon mWindowIcon; - Qt::WindowStates mState = Qt::WindowNoState; Qt::WindowFlags mFlags; QRegion mMask; + Qt::WindowStates mLastReportedWindowStates = Qt::WindowNoState; QWaylandShmBackingStore *mBackingStore = nullptr; + QWaylandBuffer *mQueuedBuffer = nullptr; + QRegion mQueuedBufferDamage; private slots: void handleScreenRemoved(QScreen *qScreen); private: - bool setWindowStateInternal(Qt::WindowStates flags); void setGeometry_helper(const QRect &rect); void initWindow(); void initializeWlSurface(); @@ -269,6 +254,7 @@ void handleScreenChanged(); bool mUpdateRequested = false; + QRect mLastExposeGeometry; static const wl_callback_listener callbackListener; static void frameCallback(void *data, struct wl_callback *wl_callback, uint32_t time); diff -Nru qtwayland-opensource-src-5.11.3/src/client/qwaylandwlshellintegration.cpp qtwayland-opensource-src-5.12.2/src/client/qwaylandwlshellintegration.cpp --- qtwayland-opensource-src-5.11.3/src/client/qwaylandwlshellintegration.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/qwaylandwlshellintegration.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,80 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** 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 https://www.qt.io/terms-conditions. For further -** information use the contact form at https://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 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qwaylandwlshellintegration_p.h" - -#include -#include -#include - -QT_BEGIN_NAMESPACE - -namespace QtWaylandClient { - -QWaylandWlShellIntegration *QWaylandWlShellIntegration::create(QWaylandDisplay *display) -{ - if (display->hasRegistryGlobal(QLatin1String("wl_shell"))) - return new QWaylandWlShellIntegration(display); - return nullptr; -} - -QWaylandWlShellIntegration::QWaylandWlShellIntegration(QWaylandDisplay *display) -{ - Q_FOREACH (QWaylandDisplay::RegistryGlobal global, display->globals()) { - if (global.interface == QLatin1String("wl_shell")) { - m_wlShell = new QtWayland::wl_shell(display->wl_registry(), global.id, 1); - break; - } - } -} - -bool QWaylandWlShellIntegration::initialize(QWaylandDisplay *display) -{ - QWaylandShellIntegration::initialize(display); - return m_wlShell != nullptr; -}; - -QWaylandShellSurface *QWaylandWlShellIntegration::createShellSurface(QWaylandWindow *window) -{ - return new QWaylandWlShellSurface(m_wlShell->get_shell_surface(window->object()), window); -} - -} - -QT_END_NAMESPACE diff -Nru qtwayland-opensource-src-5.11.3/src/client/qwaylandwlshellintegration_p.h qtwayland-opensource-src-5.12.2/src/client/qwaylandwlshellintegration_p.h --- qtwayland-opensource-src-5.11.3/src/client/qwaylandwlshellintegration_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/qwaylandwlshellintegration_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,80 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** 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 https://www.qt.io/terms-conditions. For further -** information use the contact form at https://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 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWAYLANDWLSHELLINTEGRATION_P_H -#define QWAYLANDWLSHELLINTEGRATION_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include -#include - -#include - -QT_BEGIN_NAMESPACE - -namespace QtWaylandClient { - -class Q_WAYLAND_CLIENT_EXPORT QWaylandWlShellIntegration : public QWaylandShellIntegration -{ -public: - static QWaylandWlShellIntegration *create(QWaylandDisplay* display); - bool initialize(QWaylandDisplay *) override; - QWaylandShellSurface *createShellSurface(QWaylandWindow *window) override; - -private: - QWaylandWlShellIntegration(QWaylandDisplay* display); - - QtWayland::wl_shell *m_wlShell = nullptr; -}; - -} - -QT_END_NAMESPACE - -#endif // QWAYLANDWLSHELLINTEGRATION_P_H diff -Nru qtwayland-opensource-src-5.11.3/src/client/qwaylandwlshellsurface.cpp qtwayland-opensource-src-5.12.2/src/client/qwaylandwlshellsurface.cpp --- qtwayland-opensource-src-5.11.3/src/client/qwaylandwlshellsurface.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/qwaylandwlshellsurface.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,247 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the config.tests of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** 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 https://www.qt.io/terms-conditions. For further -** information use the contact form at https://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 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qwaylandwlshellsurface_p.h" - -#include "qwaylanddisplay_p.h" -#include "qwaylandwindow_p.h" -#include "qwaylandinputdevice_p.h" -#include "qwaylandabstractdecoration_p.h" -#include "qwaylandscreen_p.h" -#include "qwaylandextendedsurface_p.h" - -#include - -QT_BEGIN_NAMESPACE - -namespace QtWaylandClient { - -QWaylandWlShellSurface::QWaylandWlShellSurface(struct ::wl_shell_surface *shell_surface, QWaylandWindow *window) - : QWaylandShellSurface(window) - , QtWayland::wl_shell_surface(shell_surface) - , m_window(window) -{ - if (window->display()->windowExtension()) - m_extendedWindow = new QWaylandExtendedSurface(window); -} - -QWaylandWlShellSurface::~QWaylandWlShellSurface() -{ - wl_shell_surface_destroy(object()); - delete m_extendedWindow; -} - -void QWaylandWlShellSurface::resize(QWaylandInputDevice *inputDevice, enum wl_shell_surface_resize edges) -{ - resize(inputDevice->wl_seat(), - inputDevice->serial(), - edges); -} - -bool QWaylandWlShellSurface::move(QWaylandInputDevice *inputDevice) -{ - move(inputDevice->wl_seat(), - inputDevice->serial()); - return true; -} - -void QWaylandWlShellSurface::setTitle(const QString & title) -{ - return QtWayland::wl_shell_surface::set_title(title); -} - -void QWaylandWlShellSurface::setAppId(const QString & appId) -{ - return QtWayland::wl_shell_surface::set_class(appId); -} - -void QWaylandWlShellSurface::raise() -{ - if (m_extendedWindow) - m_extendedWindow->raise(); -} - -void QWaylandWlShellSurface::lower() -{ - if (m_extendedWindow) - m_extendedWindow->lower(); -} - -void QWaylandWlShellSurface::setContentOrientationMask(Qt::ScreenOrientations orientation) -{ - if (m_extendedWindow) - m_extendedWindow->setContentOrientationMask(orientation); -} - -void QWaylandWlShellSurface::setWindowFlags(Qt::WindowFlags flags) -{ - if (m_extendedWindow) - m_extendedWindow->setWindowFlags(flags); -} - -void QWaylandWlShellSurface::sendProperty(const QString &name, const QVariant &value) -{ - if (m_extendedWindow) - m_extendedWindow->updateGenericProperty(name, value); -} - -void QWaylandWlShellSurface::setMaximized() -{ - m_maximized = true; - m_size = m_window->window()->geometry().size(); - set_maximized(nullptr); -} - -void QWaylandWlShellSurface::setFullscreen() -{ - m_fullscreen = true; - m_size = m_window->window()->geometry().size(); - set_fullscreen(WL_SHELL_SURFACE_FULLSCREEN_METHOD_DEFAULT, 0, nullptr); -} - -void QWaylandWlShellSurface::setNormal() -{ - if (m_fullscreen || m_maximized) { - m_fullscreen = m_maximized = false; - setTopLevel(); - QMargins m = m_window->frameMargins(); - m_window->configure(0, m_size.width() + m.left() + m.right(), m_size.height() + m.top() + m.bottom()); - } -} - -void QWaylandWlShellSurface::setMinimized() -{ - qCWarning(lcQpaWayland) << "Minimization is not supported on wl-shell. Consider using xdg-shell instead."; -} - -void QWaylandWlShellSurface::setTopLevel() -{ - set_toplevel(); -} - -static inline bool testShowWithoutActivating(const QWindow *window) -{ - // QWidget-attribute Qt::WA_ShowWithoutActivating. - const QVariant showWithoutActivating = window->property("_q_showWithoutActivating"); - return showWithoutActivating.isValid() && showWithoutActivating.toBool(); -} - -void QWaylandWlShellSurface::updateTransientParent(QWindow *parent) -{ - QWaylandWindow *parent_wayland_window = static_cast(parent->handle()); - if (!parent_wayland_window) - return; - - // set_transient expects a position relative to the parent - QPoint transientPos = m_window->geometry().topLeft(); // this is absolute - transientPos -= parent->geometry().topLeft(); - if (parent_wayland_window->decoration()) { - transientPos.setX(transientPos.x() + parent_wayland_window->decoration()->margins().left()); - transientPos.setY(transientPos.y() + parent_wayland_window->decoration()->margins().top()); - } - - uint32_t flags = 0; - Qt::WindowFlags wf = m_window->window()->flags(); - if (wf.testFlag(Qt::ToolTip) - || wf.testFlag(Qt::WindowTransparentForInput) - || testShowWithoutActivating(m_window->window())) - flags |= WL_SHELL_SURFACE_TRANSIENT_INACTIVE; - - Q_ASSERT(parent_wayland_window->object()); - set_transient(parent_wayland_window->object(), - transientPos.x(), - transientPos.y(), - flags); -} - -void QWaylandWlShellSurface::setPopup(QWaylandWindow *parent, QWaylandInputDevice *device, uint serial) -{ - QWaylandWindow *parent_wayland_window = parent; - if (!parent_wayland_window) { - qWarning("setPopup called without parent window"); - return; - } - if (!device) { - qWarning("setPopup called without input device"); - return; - } - - // set_popup expects a position relative to the parent - QPoint transientPos = m_window->geometry().topLeft(); // this is absolute - transientPos -= parent_wayland_window->geometry().topLeft(); - if (parent_wayland_window->decoration()) { - transientPos.setX(transientPos.x() + parent_wayland_window->decoration()->margins().left()); - transientPos.setY(transientPos.y() + parent_wayland_window->decoration()->margins().top()); - } - - Q_ASSERT(parent_wayland_window->object()); - set_popup(device->wl_seat(), serial, parent_wayland_window->object(), - transientPos.x(), transientPos.y(), 0); -} - -void QWaylandWlShellSurface::setType(Qt::WindowType type, QWaylandWindow *transientParent) -{ - if (type == Qt::Popup && transientParent && transientParent->object()) - setPopup(transientParent, m_window->display()->lastInputDevice(), m_window->display()->lastInputSerial()); - else if (transientParent && transientParent->object()) - updateTransientParent(transientParent->window()); - else - setTopLevel(); -} - -void QWaylandWlShellSurface::shell_surface_ping(uint32_t serial) -{ - pong(serial); -} - -void QWaylandWlShellSurface::shell_surface_configure(uint32_t edges, - int32_t width, - int32_t height) -{ - m_window->configure(edges, width, height); -} - -void QWaylandWlShellSurface::shell_surface_popup_done() -{ - QCoreApplication::postEvent(m_window->window(), new QCloseEvent()); -} - -} - -QT_END_NAMESPACE diff -Nru qtwayland-opensource-src-5.11.3/src/client/qwaylandwlshellsurface_p.h qtwayland-opensource-src-5.12.2/src/client/qwaylandwlshellsurface_p.h --- qtwayland-opensource-src-5.11.3/src/client/qwaylandwlshellsurface_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/qwaylandwlshellsurface_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,126 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the config.tests of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** 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 https://www.qt.io/terms-conditions. For further -** information use the contact form at https://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 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWAYLANDWLSHELLSURFACE_H -#define QWAYLANDWLSHELLSURFACE_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include - -#include - -#include -#include -#include - -QT_BEGIN_NAMESPACE - -class QWindow; - -namespace QtWaylandClient { - -class QWaylandWindow; -class QWaylandInputDevice; -class QWaylandExtendedSurface; - -class Q_WAYLAND_CLIENT_EXPORT QWaylandWlShellSurface : public QWaylandShellSurface - , public QtWayland::wl_shell_surface -{ - Q_OBJECT -public: - QWaylandWlShellSurface(struct ::wl_shell_surface *shell_surface, QWaylandWindow *window); - ~QWaylandWlShellSurface() override; - - using QtWayland::wl_shell_surface::resize; - void resize(QWaylandInputDevice *inputDevice, enum wl_shell_surface_resize edges) override; - - using QtWayland::wl_shell_surface::move; - bool move(QWaylandInputDevice *inputDevice) override; - - void setTitle(const QString & title) override; - void setAppId(const QString &appId) override; - - void raise() override; - void lower() override; - void setContentOrientationMask(Qt::ScreenOrientations orientation) override; - void setWindowFlags(Qt::WindowFlags flags) override; - void sendProperty(const QString &name, const QVariant &value) override; - - void setType(Qt::WindowType type, QWaylandWindow *transientParent) override; - -private: - void setMaximized() override; - void setFullscreen() override; - void setNormal() override; - void setMinimized() override; - - void setTopLevel(); - void updateTransientParent(QWindow *parent); - void setPopup(QWaylandWindow *parent, QWaylandInputDevice *device, uint serial); - - QWaylandWindow *m_window = nullptr; - bool m_maximized = false; - bool m_fullscreen = false; - QSize m_size; - QWaylandExtendedSurface *m_extendedWindow = nullptr; - - void shell_surface_ping(uint32_t serial) override; - void shell_surface_configure(uint32_t edges, - int32_t width, - int32_t height) override; - void shell_surface_popup_done() override; - - friend class QWaylandWindow; -}; - -QT_END_NAMESPACE - -} - -#endif // QWAYLANDSHELLSURFACE_H diff -Nru qtwayland-opensource-src-5.11.3/src/client/qwaylandxdgpopup.cpp qtwayland-opensource-src-5.12.2/src/client/qwaylandxdgpopup.cpp --- qtwayland-opensource-src-5.11.3/src/client/qwaylandxdgpopup.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/qwaylandxdgpopup.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,78 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** 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 https://www.qt.io/terms-conditions. For further -** information use the contact form at https://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 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qwaylandxdgpopup_p.h" - -#include "qwaylandwindow_p.h" -#include "qwaylanddisplay_p.h" -#include "qwaylandextendedsurface_p.h" - -QT_BEGIN_NAMESPACE - -namespace QtWaylandClient { - -QWaylandXdgPopup::QWaylandXdgPopup(struct ::xdg_popup *popup, QWaylandWindow *window) - : QWaylandShellSurface(window) - , QtWayland::xdg_popup(popup) - , m_window(window) -{ - if (window->display()->windowExtension()) - m_extendedWindow = new QWaylandExtendedSurface(window); -} - -QWaylandXdgPopup::~QWaylandXdgPopup() -{ - xdg_popup_destroy(object()); - delete m_extendedWindow; -} - -void QWaylandXdgPopup::setType(Qt::WindowType type, QWaylandWindow *transientParent) -{ - Q_UNUSED(type); - Q_UNUSED(transientParent); -} - -void QWaylandXdgPopup::xdg_popup_popup_done() -{ - m_window->window()->close(); -} - -} - -QT_END_NAMESPACE diff -Nru qtwayland-opensource-src-5.11.3/src/client/qwaylandxdgpopup_p.h qtwayland-opensource-src-5.12.2/src/client/qwaylandxdgpopup_p.h --- qtwayland-opensource-src-5.11.3/src/client/qwaylandxdgpopup_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/qwaylandxdgpopup_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,91 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the config.tests of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** 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 https://www.qt.io/terms-conditions. For further -** information use the contact form at https://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 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWAYLANDXDGPOPUP_P_H -#define QWAYLANDXDGPOPUP_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include - -#include -#include -#include - -QT_BEGIN_NAMESPACE - -class QWindow; - -namespace QtWaylandClient { - -class QWaylandWindow; -class QWaylandExtendedSurface; - -class Q_WAYLAND_CLIENT_EXPORT QWaylandXdgPopup : public QWaylandShellSurface - , public QtWayland::xdg_popup -{ - Q_OBJECT -public: - QWaylandXdgPopup(struct ::xdg_popup *popup, QWaylandWindow *window); - ~QWaylandXdgPopup() override; - - void setType(Qt::WindowType type, QWaylandWindow *transientParent) override; - -protected: - void xdg_popup_popup_done() override; - -private: - QWaylandExtendedSurface *m_extendedWindow = nullptr; - QWaylandWindow *m_window = nullptr; -}; - -QT_END_NAMESPACE - -} - -#endif // QWAYLANDXDGPOPUP_P_H diff -Nru qtwayland-opensource-src-5.11.3/src/client/qwaylandxdgshell.cpp qtwayland-opensource-src-5.12.2/src/client/qwaylandxdgshell.cpp --- qtwayland-opensource-src-5.11.3/src/client/qwaylandxdgshell.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/qwaylandxdgshell.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,106 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 Eurogiciel, author: -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the config.tests of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** 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 https://www.qt.io/terms-conditions. For further -** information use the contact form at https://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 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qwaylandxdgshell_p.h" - -#include "qwaylanddisplay_p.h" -#include "qwaylandwindow_p.h" -#include "qwaylandinputdevice_p.h" -#include "qwaylandscreen_p.h" -#include "qwaylandxdgpopup_p.h" -#include "qwaylandxdgsurface_p.h" - -#include - -QT_BEGIN_NAMESPACE - -namespace QtWaylandClient { - -QWaylandXdgShell::QWaylandXdgShell(struct ::xdg_shell *shell) - : QtWayland::xdg_shell(shell) -{ -} - -QWaylandXdgShell::QWaylandXdgShell(struct ::wl_registry *registry, uint32_t id) - : QtWayland::xdg_shell(registry, id, 1) -{ - use_unstable_version(QtWayland::xdg_shell::version_current); -} - -QWaylandXdgShell::~QWaylandXdgShell() -{ - xdg_shell_destroy(object()); -} - -QWaylandXdgSurface *QWaylandXdgShell::createXdgSurface(QWaylandWindow *window) -{ - return new QWaylandXdgSurface(this, window); -} - -QWaylandXdgPopup *QWaylandXdgShell::createXdgPopup(QWaylandWindow *window, QWaylandInputDevice *inputDevice) -{ - QWaylandWindow *parentWindow = m_popups.empty() ? window->transientParent() : m_popups.last(); - ::wl_surface *parentSurface = parentWindow->object(); - - if (m_popupSerial == 0) - m_popupSerial = inputDevice->serial(); - ::wl_seat *seat = inputDevice->wl_seat(); - - QPoint position = window->geometry().topLeft() - parentWindow->geometry().topLeft(); - int x = position.x() + parentWindow->frameMargins().left(); - int y = position.y() + parentWindow->frameMargins().top(); - - auto popup = new QWaylandXdgPopup(get_xdg_popup(window->object(), parentSurface, seat, m_popupSerial, x, y), window); - m_popups.append(window); - QObject::connect(popup, &QWaylandXdgPopup::destroyed, [this, window](){ - m_popups.removeOne(window); - if (m_popups.empty()) - m_popupSerial = 0; - }); - return popup; -} - -void QWaylandXdgShell::xdg_shell_ping(uint32_t serial) -{ - pong(serial); -} - -} - -QT_END_NAMESPACE diff -Nru qtwayland-opensource-src-5.11.3/src/client/qwaylandxdgshellintegration.cpp qtwayland-opensource-src-5.12.2/src/client/qwaylandxdgshellintegration.cpp --- qtwayland-opensource-src-5.11.3/src/client/qwaylandxdgshellintegration.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/qwaylandxdgshellintegration.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,93 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** 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 https://www.qt.io/terms-conditions. For further -** information use the contact form at https://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 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qwaylandxdgshellintegration_p.h" - -#include -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -namespace QtWaylandClient { - -QWaylandXdgShellIntegration *QWaylandXdgShellIntegration::create(QWaylandDisplay *display) -{ - if (display->hasRegistryGlobal(QLatin1String("xdg_shell"))) - return new QWaylandXdgShellIntegration(display); - return nullptr; -} - -QWaylandXdgShellIntegration::QWaylandXdgShellIntegration(QWaylandDisplay *display) -{ - Q_FOREACH (QWaylandDisplay::RegistryGlobal global, display->globals()) { - if (global.interface == QLatin1String("xdg_shell")) { - m_xdgShell = new QWaylandXdgShell(display->wl_registry(), global.id); - break; - } - } -} - -bool QWaylandXdgShellIntegration::initialize(QWaylandDisplay *display) -{ - QWaylandShellIntegration::initialize(display); - return m_xdgShell != nullptr; -} - -QWaylandShellSurface *QWaylandXdgShellIntegration::createShellSurface(QWaylandWindow *window) -{ - QWaylandInputDevice *inputDevice = window->display()->lastInputDevice(); - if (window->window()->type() == Qt::WindowType::Popup && inputDevice) - return m_xdgShell->createXdgPopup(window, inputDevice); - else - return m_xdgShell->createXdgSurface(window); -} - -void QWaylandXdgShellIntegration::handleKeyboardFocusChanged(QWaylandWindow *newFocus, QWaylandWindow *oldFocus) { - if (newFocus && qobject_cast(newFocus->shellSurface())) - m_display->handleWindowActivated(newFocus); - if (oldFocus && qobject_cast(oldFocus->shellSurface())) - m_display->handleWindowDeactivated(oldFocus); -} - -} - -QT_END_NAMESPACE diff -Nru qtwayland-opensource-src-5.11.3/src/client/qwaylandxdgshellintegration_p.h qtwayland-opensource-src-5.12.2/src/client/qwaylandxdgshellintegration_p.h --- qtwayland-opensource-src-5.11.3/src/client/qwaylandxdgshellintegration_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/qwaylandxdgshellintegration_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,82 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** 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 https://www.qt.io/terms-conditions. For further -** information use the contact form at https://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 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWAYLANDXDGSHELLINTEGRATION_P_H -#define QWAYLANDXDGSHELLINTEGRATION_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include - -#include - -QT_BEGIN_NAMESPACE - -namespace QtWaylandClient { - -class QWaylandXdgShell; - -class Q_WAYLAND_CLIENT_EXPORT QWaylandXdgShellIntegration : public QWaylandShellIntegration -{ -public: - static QWaylandXdgShellIntegration *create(QWaylandDisplay* display); - bool initialize(QWaylandDisplay *display) override; - QWaylandShellSurface *createShellSurface(QWaylandWindow *window) override; - void handleKeyboardFocusChanged(QWaylandWindow *newFocus, QWaylandWindow *oldFocus) override; - -private: - QWaylandXdgShellIntegration(QWaylandDisplay *display); - - QWaylandXdgShell *m_xdgShell = nullptr; -}; - -} - -QT_END_NAMESPACE - -#endif // QWAYLANDXDGSHELLINTEGRATION_P_H diff -Nru qtwayland-opensource-src-5.11.3/src/client/qwaylandxdgshell_p.h qtwayland-opensource-src-5.12.2/src/client/qwaylandxdgshell_p.h --- qtwayland-opensource-src-5.11.3/src/client/qwaylandxdgshell_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/qwaylandxdgshell_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,95 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 Eurogiciel, author: -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the config.tests of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** 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 https://www.qt.io/terms-conditions. For further -** information use the contact form at https://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 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWAYLANDXDGSHELL_H -#define QWAYLANDXDGSHELL_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include -#include - -#include - -#include -#include -#include - -QT_BEGIN_NAMESPACE - -class QWindow; - -namespace QtWaylandClient { - -class QWaylandWindow; -class QWaylandInputDevice; -class QWaylandXdgSurface; -class QWaylandXdgPopup; - -class Q_WAYLAND_CLIENT_EXPORT QWaylandXdgShell : public QtWayland::xdg_shell -{ -public: - QWaylandXdgShell(struct ::xdg_shell *shell); - QWaylandXdgShell(struct ::wl_registry *registry, uint32_t id); - ~QWaylandXdgShell() override; - - QWaylandXdgSurface *createXdgSurface(QWaylandWindow *window); - QWaylandXdgPopup *createXdgPopup(QWaylandWindow *window, QWaylandInputDevice *inputDevice); - -private: - void xdg_shell_ping(uint32_t serial) override; - - QVector m_popups; - uint m_popupSerial = 0; -}; - -QT_END_NAMESPACE - -} - -#endif // QWAYLANDXDGSHELL_H diff -Nru qtwayland-opensource-src-5.11.3/src/client/qwaylandxdgshellv6.cpp qtwayland-opensource-src-5.12.2/src/client/qwaylandxdgshellv6.cpp --- qtwayland-opensource-src-5.11.3/src/client/qwaylandxdgshellv6.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/qwaylandxdgshellv6.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,285 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Copyright (C) 2017 Eurogiciel, author: -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the config.tests of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** 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 https://www.qt.io/terms-conditions. For further -** information use the contact form at https://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 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qwaylandxdgshellv6_p.h" - -#include "qwaylanddisplay_p.h" -#include "qwaylandwindow_p.h" -#include "qwaylandinputdevice_p.h" -#include "qwaylandscreen_p.h" -#include "qwaylandabstractdecoration_p.h" - -#include - -QT_BEGIN_NAMESPACE - -namespace QtWaylandClient { - -QWaylandXdgSurfaceV6::Toplevel::Toplevel(QWaylandXdgSurfaceV6 *xdgSurface) - : QtWayland::zxdg_toplevel_v6(xdgSurface->get_toplevel()) - , m_xdgSurface(xdgSurface) -{ -} - -QWaylandXdgSurfaceV6::Toplevel::~Toplevel() -{ - if (isInitialized()) - destroy(); -} - -void QWaylandXdgSurfaceV6::Toplevel::applyConfigure() -{ - //TODO: resize, activate etc - m_xdgSurface->m_window->configure(0, m_configureState.width, m_configureState.height); -} - -void QWaylandXdgSurfaceV6::Toplevel::zxdg_toplevel_v6_configure(int32_t width, int32_t height, wl_array *states) -{ - m_configureState.width = width; - m_configureState.height = height; - - uint32_t *state = reinterpret_cast(states->data); - size_t numStates = states->size / sizeof(uint32_t); - m_configureState.states.reserve(numStates); - m_configureState.states.clear(); - - for (size_t i = 0; i < numStates; i++) - m_configureState.states << state[i]; -} - -void QWaylandXdgSurfaceV6::Toplevel::zxdg_toplevel_v6_close() -{ - m_xdgSurface->m_window->window()->close(); -} - -QWaylandXdgSurfaceV6::Popup::Popup(QWaylandXdgSurfaceV6 *xdgSurface, QWaylandXdgSurfaceV6 *parent, - QtWayland::zxdg_positioner_v6 *positioner) - : zxdg_popup_v6(xdgSurface->get_popup(parent->object(), positioner->object())) - , m_xdgSurface(xdgSurface) - , m_parent(parent) -{ -} - -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::applyConfigure() -{ - -} - -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() -{ - m_xdgSurface->m_window->window()->close(); -} - -QWaylandXdgSurfaceV6::QWaylandXdgSurfaceV6(QWaylandXdgShellV6 *shell, ::zxdg_surface_v6 *surface, QWaylandWindow *window) - : QWaylandShellSurface(window) - , zxdg_surface_v6(surface) - , m_shell(shell) - , m_window(window) -{ -} - -QWaylandXdgSurfaceV6::~QWaylandXdgSurfaceV6() -{ - if (m_toplevel) { - delete m_toplevel; - m_toplevel = nullptr; - } - if (m_popup) { - delete m_popup; - m_popup = nullptr; - } - destroy(); -} - -void QWaylandXdgSurfaceV6::resize(QWaylandInputDevice *inputDevice, zxdg_toplevel_v6_resize_edge edges) -{ - Q_ASSERT(m_toplevel && m_toplevel->isInitialized()); - m_toplevel->resize(inputDevice->wl_seat(), inputDevice->serial(), edges); -} - -void QWaylandXdgSurfaceV6::resize(QWaylandInputDevice *inputDevice, enum wl_shell_surface_resize edges) -{ - auto xdgEdges = reinterpret_cast(&edges); - resize(inputDevice, *xdgEdges); -} - - -bool QWaylandXdgSurfaceV6::move(QWaylandInputDevice *inputDevice) -{ - if (m_toplevel && m_toplevel->isInitialized()) { - m_toplevel->move(inputDevice->wl_seat(), inputDevice->serial()); - return true; - } - return false; -} - -void QWaylandXdgSurfaceV6::setTitle(const QString &title) -{ - if (m_toplevel) - m_toplevel->set_title(title); -} - -void QWaylandXdgSurfaceV6::setAppId(const QString &appId) -{ - if (m_toplevel) - m_toplevel->set_app_id(appId); -} - -void QWaylandXdgSurfaceV6::setType(Qt::WindowType type, QWaylandWindow *transientParent) -{ - QWaylandDisplay *display = m_window->display(); - if ((type == Qt::Popup || type == Qt::ToolTip) && transientParent && display->lastInputDevice()) { - setPopup(transientParent, display->lastInputDevice(), display->lastInputSerial(), type == Qt::Popup); - } else { - setToplevel(); - if (transientParent) { - auto parentXdgSurface = static_cast(transientParent->shellSurface()); - if (parentXdgSurface) - m_toplevel->set_parent(parentXdgSurface->m_toplevel->object()); - } - } -} - -bool QWaylandXdgSurfaceV6::handleExpose(const QRegion ®ion) -{ - if (!m_configured && !region.isEmpty()) { - m_exposeRegion = region; - return true; - } - return false; -} - -void QWaylandXdgSurfaceV6::setToplevel() -{ - Q_ASSERT(!m_toplevel && !m_popup); - m_toplevel = new Toplevel(this); -} - -void QWaylandXdgSurfaceV6::setPopup(QWaylandWindow *parent, QWaylandInputDevice *device, int serial, bool grab) -{ - Q_ASSERT(!m_toplevel && !m_popup); - - auto parentXdgSurface = static_cast(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 - transientPos -= parent->geometry().topLeft(); - if (parent->decoration()) { - transientPos.setX(transientPos.x() + parent->decoration()->margins().left()); - transientPos.setY(transientPos.y() + parent->decoration()->margins().top()); - } - 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; - if (grab) - m_popup->grab(device, serial); -} - -void QWaylandXdgSurfaceV6::zxdg_surface_v6_configure(uint32_t serial) -{ - m_configured = true; - if (m_toplevel) - m_toplevel->applyConfigure(); - else if (m_popup) - m_popup->applyConfigure(); - - if (!m_exposeRegion.isEmpty()) { - QWindowSystemInterface::handleExposeEvent(m_window->window(), m_exposeRegion); - m_exposeRegion = QRegion(); - } - ack_configure(serial); -} - - - -QWaylandXdgShellV6::QWaylandXdgShellV6(struct ::wl_registry *registry, uint32_t id, uint32_t availableVersion) - : QtWayland::zxdg_shell_v6(registry, id, qMin(availableVersion, 1u)) -{ -} - -QWaylandXdgShellV6::~QWaylandXdgShellV6() -{ - destroy(); -} - -QWaylandXdgSurfaceV6 *QWaylandXdgShellV6::getXdgSurface(QWaylandWindow *window) -{ - return new QWaylandXdgSurfaceV6(this, get_xdg_surface(window->object()), window); -} - -void QWaylandXdgShellV6::zxdg_shell_v6_ping(uint32_t serial) -{ - pong(serial); -} - -} - -QT_END_NAMESPACE diff -Nru qtwayland-opensource-src-5.11.3/src/client/qwaylandxdgshellv6integration.cpp qtwayland-opensource-src-5.12.2/src/client/qwaylandxdgshellv6integration.cpp --- qtwayland-opensource-src-5.11.3/src/client/qwaylandxdgshellv6integration.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/qwaylandxdgshellv6integration.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,83 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** 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 https://www.qt.io/terms-conditions. For further -** information use the contact form at https://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 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qwaylandxdgshellv6integration_p.h" - -#include -#include -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -namespace QtWaylandClient { - -QWaylandXdgShellV6Integration::QWaylandXdgShellV6Integration(QWaylandDisplay *display) -{ - for (QWaylandDisplay::RegistryGlobal global : display->globals()) { - if (global.interface == QLatin1String("zxdg_shell_v6")) { - m_xdgShell = new QWaylandXdgShellV6(display->wl_registry(), global.id, global.version); - break; - } - } -} - -QWaylandXdgShellV6Integration *QWaylandXdgShellV6Integration::create(QWaylandDisplay *display) -{ - if (display->hasRegistryGlobal(QLatin1String("zxdg_shell_v6"))) - return new QWaylandXdgShellV6Integration(display); - return nullptr; -} - -bool QWaylandXdgShellV6Integration::initialize(QWaylandDisplay *display) -{ - QWaylandShellIntegration::initialize(display); - return m_xdgShell != nullptr; -} - -QWaylandShellSurface *QWaylandXdgShellV6Integration::createShellSurface(QWaylandWindow *window) -{ - return m_xdgShell->getXdgSurface(window); -} - -} - -QT_END_NAMESPACE diff -Nru qtwayland-opensource-src-5.11.3/src/client/qwaylandxdgshellv6integration_p.h qtwayland-opensource-src-5.12.2/src/client/qwaylandxdgshellv6integration_p.h --- qtwayland-opensource-src-5.11.3/src/client/qwaylandxdgshellv6integration_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/qwaylandxdgshellv6integration_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,81 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** 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 https://www.qt.io/terms-conditions. For further -** information use the contact form at https://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 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWAYLANDXDGSHELLV6INTEGRATION_P_H -#define QWAYLANDXDGSHELLV6INTEGRATION_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include - -#include - -QT_BEGIN_NAMESPACE - -namespace QtWaylandClient { - -class QWaylandXdgShellV6; - -class Q_WAYLAND_CLIENT_EXPORT QWaylandXdgShellV6Integration : public QWaylandShellIntegration -{ -public: - static QWaylandXdgShellV6Integration *create(QWaylandDisplay* display); - bool initialize(QWaylandDisplay *display) override; - QWaylandShellSurface *createShellSurface(QWaylandWindow *window) override; - -private: - QWaylandXdgShellV6Integration(QWaylandDisplay *display); - - QWaylandXdgShellV6 *m_xdgShell = nullptr; -}; - -} - -QT_END_NAMESPACE - -#endif // QWAYLANDXDGSHELLV6INTEGRATION_P_H diff -Nru qtwayland-opensource-src-5.11.3/src/client/qwaylandxdgshellv6_p.h qtwayland-opensource-src-5.12.2/src/client/qwaylandxdgshellv6_p.h --- qtwayland-opensource-src-5.11.3/src/client/qwaylandxdgshellv6_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/qwaylandxdgshellv6_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,159 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Copyright (C) 2017 Eurogiciel, author: -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the config.tests of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** 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 https://www.qt.io/terms-conditions. For further -** information use the contact form at https://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 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWAYLANDXDGSHELLV6_H -#define QWAYLANDXDGSHELLV6_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include -#include - -#include - -#include -#include -#include "qwaylandshellsurface_p.h" - -QT_BEGIN_NAMESPACE - -class QWindow; - -namespace QtWaylandClient { - -class QWaylandWindow; -class QWaylandInputDevice; -class QWaylandXdgShellV6; - -class Q_WAYLAND_CLIENT_EXPORT QWaylandXdgSurfaceV6 : public QWaylandShellSurface, public QtWayland::zxdg_surface_v6 -{ -public: - QWaylandXdgSurfaceV6(QWaylandXdgShellV6 *shell, ::zxdg_surface_v6 *surface, QWaylandWindow *window); - ~QWaylandXdgSurfaceV6() override; - - void resize(QWaylandInputDevice *inputDevice, enum zxdg_toplevel_v6_resize_edge edges); - void resize(QWaylandInputDevice *inputDevice, enum wl_shell_surface_resize edges) override; - bool move(QWaylandInputDevice *inputDevice) override; - void setTitle(const QString &title) override; - void setAppId(const QString &appId) override; - - void setType(Qt::WindowType type, QWaylandWindow *transientParent) override; - bool handleExpose(const QRegion &) override; - -protected: - void zxdg_surface_v6_configure(uint32_t serial) override; - -private: - class Toplevel: public QtWayland::zxdg_toplevel_v6 - { - public: - Toplevel(QWaylandXdgSurfaceV6 *xdgSurface); - ~Toplevel() override; - - void applyConfigure(); - - void zxdg_toplevel_v6_configure(int32_t width, int32_t height, wl_array *states) override; - void zxdg_toplevel_v6_close() override; - - struct { - int32_t width, height; - QVarLengthArray states; - } m_configureState; - - QWaylandXdgSurfaceV6 *m_xdgSurface = nullptr; - }; - - class Popup : public QtWayland::zxdg_popup_v6 { - public: - Popup(QWaylandXdgSurfaceV6 *xdgSurface, QWaylandXdgSurfaceV6 *parent, QtWayland::zxdg_positioner_v6 *positioner); - ~Popup() override; - - void applyConfigure(); - 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(); - void setPopup(QWaylandWindow *parent, QWaylandInputDevice *device, int serial, bool grab); - - QWaylandXdgShellV6 *m_shell = nullptr; - QWaylandWindow *m_window = nullptr; - Toplevel *m_toplevel = nullptr; - Popup *m_popup = nullptr; - bool m_configured = false; - QRegion m_exposeRegion; - - friend class QWaylandXdgShellV6; -}; - -class Q_WAYLAND_CLIENT_EXPORT QWaylandXdgShellV6 : public QtWayland::zxdg_shell_v6 -{ -public: - QWaylandXdgShellV6(struct ::wl_registry *registry, uint32_t id, uint32_t availableVersion); - - QWaylandXdgSurfaceV6 *getXdgSurface(QWaylandWindow *window); - - ~QWaylandXdgShellV6() override; - -private: - void zxdg_shell_v6_ping(uint32_t serial) override; - QWaylandXdgSurfaceV6::Popup *m_topmostPopup = nullptr; - - friend class QWaylandXdgSurfaceV6; -}; - -QT_END_NAMESPACE - -} - -#endif // QWAYLANDXDGSHELLV6_H diff -Nru qtwayland-opensource-src-5.11.3/src/client/qwaylandxdgsurface.cpp qtwayland-opensource-src-5.12.2/src/client/qwaylandxdgsurface.cpp --- qtwayland-opensource-src-5.11.3/src/client/qwaylandxdgsurface.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/qwaylandxdgsurface.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,257 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the config.tests of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** 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 https://www.qt.io/terms-conditions. For further -** information use the contact form at https://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 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qwaylandxdgsurface_p.h" - -#include "qwaylanddisplay_p.h" -#include "qwaylandwindow_p.h" -#include "qwaylandinputdevice_p.h" -#include "qwaylandabstractdecoration_p.h" -#include "qwaylandscreen_p.h" -#include "qwaylandextendedsurface_p.h" -#include "qwaylandxdgshell_p.h" - - -QT_BEGIN_NAMESPACE - -namespace QtWaylandClient { - -QWaylandXdgSurface::QWaylandXdgSurface(QWaylandXdgShell *shell, QWaylandWindow *window) - : QWaylandShellSurface(window) - , QtWayland::xdg_surface(shell->get_xdg_surface(window->object())) - , m_window(window) - , m_shell(shell) -{ - if (window->display()->windowExtension()) - m_extendedWindow = new QWaylandExtendedSurface(window); -} - -QWaylandXdgSurface::~QWaylandXdgSurface() -{ - if (m_active) - window()->display()->handleWindowDeactivated(m_window); - - xdg_surface_destroy(object()); - delete m_extendedWindow; -} - -void QWaylandXdgSurface::resize(QWaylandInputDevice *inputDevice, enum wl_shell_surface_resize edges) -{ - // May need some conversion if types get incompatibles, ATM they're identical - enum resize_edge const * const arg = reinterpret_cast(&edges); - resize(inputDevice, *arg); -} - -void QWaylandXdgSurface::resize(QWaylandInputDevice *inputDevice, enum resize_edge edges) -{ - resize(inputDevice->wl_seat(), - inputDevice->serial(), - edges); -} - -bool QWaylandXdgSurface::move(QWaylandInputDevice *inputDevice) -{ - move(inputDevice->wl_seat(), - inputDevice->serial()); - return true; -} - -void QWaylandXdgSurface::setMaximized() -{ - if (!m_maximized) - set_maximized(); -} - -void QWaylandXdgSurface::setFullscreen() -{ - if (!m_fullscreen) - set_fullscreen(nullptr); -} - -void QWaylandXdgSurface::setNormal() -{ - if (m_fullscreen || m_maximized || m_minimized) { - if (m_maximized) { - unset_maximized(); - } - if (m_fullscreen) { - unset_fullscreen(); - } - - m_fullscreen = m_maximized = m_minimized = false; - } -} - -void QWaylandXdgSurface::setMinimized() -{ - m_minimized = true; - set_minimized(); -} - -void QWaylandXdgSurface::updateTransientParent(QWaylandWindow *parent) -{ - if (!parent) - return; - auto parentXdgSurface = qobject_cast(parent->shellSurface()); - Q_ASSERT(parentXdgSurface); - set_parent(parentXdgSurface->object()); -} - -void QWaylandXdgSurface::setTitle(const QString & title) -{ - return QtWayland::xdg_surface::set_title(title); -} - -void QWaylandXdgSurface::setAppId(const QString & appId) -{ - return QtWayland::xdg_surface::set_app_id(appId); -} - -void QWaylandXdgSurface::raise() -{ - if (m_extendedWindow) - m_extendedWindow->raise(); -} - -void QWaylandXdgSurface::lower() -{ - if (m_extendedWindow) - m_extendedWindow->lower(); -} - -void QWaylandXdgSurface::setContentOrientationMask(Qt::ScreenOrientations orientation) -{ - if (m_extendedWindow) - m_extendedWindow->setContentOrientationMask(orientation); -} - -void QWaylandXdgSurface::setWindowFlags(Qt::WindowFlags flags) -{ - if (m_extendedWindow) - m_extendedWindow->setWindowFlags(flags); -} - -void QWaylandXdgSurface::sendProperty(const QString &name, const QVariant &value) -{ - if (m_extendedWindow) - m_extendedWindow->updateGenericProperty(name, value); -} - -void QWaylandXdgSurface::setType(Qt::WindowType type, QWaylandWindow *transientParent) -{ - Q_UNUSED(type) - if (transientParent) - updateTransientParent(transientParent); -} - -void QWaylandXdgSurface::xdg_surface_configure(int32_t width, int32_t height, struct wl_array *states,uint32_t serial) -{ - uint32_t *state = reinterpret_cast(states->data); - size_t numStates = states->size / sizeof(uint32_t); - bool aboutToMaximize = false; - bool aboutToFullScreen = false; - bool aboutToActivate = false; - - for (size_t i = 0; i < numStates; i++) { - switch (state[i]) { - case XDG_SURFACE_STATE_MAXIMIZED: - aboutToMaximize = ((width > 0) && (height > 0)); - break; - case XDG_SURFACE_STATE_FULLSCREEN: - aboutToFullScreen = true; - break; - case XDG_SURFACE_STATE_RESIZING: - m_normalSize = QSize(width, height); - break; - case XDG_SURFACE_STATE_ACTIVATED: - aboutToActivate = true; - break; - default: - break; - } - } - - if (!m_active && aboutToActivate) { - m_active = true; - window()->display()->handleWindowActivated(m_window); - } else if (m_active && !aboutToActivate) { - m_active = false; - window()->display()->handleWindowDeactivated(m_window); - } - - if (!m_fullscreen && aboutToFullScreen) { - if (!m_maximized) - m_normalSize = m_window->window()->frameGeometry().size(); - m_fullscreen = true; - m_window->window()->showFullScreen(); - } else if (m_fullscreen && !aboutToFullScreen) { - m_fullscreen = false; - if ( m_maximized ) { - m_window->window()->showMaximized(); - } else { - m_window->window()->showNormal(); - } - } else if (!m_maximized && aboutToMaximize) { - if (!m_fullscreen) - m_normalSize = m_window->window()->frameGeometry().size(); - m_maximized = true; - m_window->window()->showMaximized(); - } else if (m_maximized && !aboutToMaximize) { - m_maximized = false; - m_window->window()->showNormal(); - } - - if (width <= 0 || height <= 0) { - if (!m_normalSize.isEmpty()) - m_window->configure(0, m_normalSize.width(), m_normalSize.height()); - } else { - m_window->configure(0, width, height); - } - - ack_configure(serial); -} - -void QWaylandXdgSurface::xdg_surface_close() -{ - m_window->window()->close(); -} - -} - -QT_END_NAMESPACE diff -Nru qtwayland-opensource-src-5.11.3/src/client/qwaylandxdgsurface_p.h qtwayland-opensource-src-5.12.2/src/client/qwaylandxdgsurface_p.h --- qtwayland-opensource-src-5.11.3/src/client/qwaylandxdgsurface_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/qwaylandxdgsurface_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,136 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the config.tests of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** 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 https://www.qt.io/terms-conditions. For further -** information use the contact form at https://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 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWAYLANDXDGSURFACE_H -#define QWAYLANDXDGSURFACE_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include -#include - -#include - -#include -#include -#include - -QT_BEGIN_NAMESPACE - -class QWindow; - -namespace QtWaylandClient { - -class QWaylandWindow; -class QWaylandInputDevice; -class QWaylandExtendedSurface; -class QWaylandXdgShell; - -class Q_WAYLAND_CLIENT_EXPORT QWaylandXdgSurface : public QWaylandShellSurface - , public QtWayland::xdg_surface -{ - Q_OBJECT -public: - QWaylandXdgSurface(QWaylandXdgShell *shell, QWaylandWindow *window); - ~QWaylandXdgSurface() override; - - using QtWayland::xdg_surface::resize; - void resize(QWaylandInputDevice *inputDevice, enum resize_edge edges); - - void resize(QWaylandInputDevice *inputDevice, enum wl_shell_surface_resize edges) override; - - using QtWayland::xdg_surface::move; - bool move(QWaylandInputDevice *inputDevice) override; - - void setTitle(const QString &title) override; - void setAppId(const QString &appId) override; - - void raise() override; - void lower() override; - void setContentOrientationMask(Qt::ScreenOrientations orientation) override; - void setWindowFlags(Qt::WindowFlags flags) override; - void sendProperty(const QString &name, const QVariant &value) override; - - bool isFullscreen() const { return m_fullscreen; } - bool isMaximized() const { return m_maximized; } - - void setType(Qt::WindowType type, QWaylandWindow *transientParent) override; - -private: - void setMaximized() override; - void setFullscreen() override; - void setNormal() override; - void setMinimized() override; - - void updateTransientParent(QWaylandWindow *parent); - -private: - QWaylandWindow *m_window = nullptr; - QWaylandXdgShell* m_shell = nullptr; - bool m_maximized = false; - bool m_minimized = false; - bool m_fullscreen = false; - bool m_active = false; - QSize m_normalSize; - QMargins m_margins; - QWaylandExtendedSurface *m_extendedWindow = nullptr; - - void xdg_surface_configure(int32_t width, - int32_t height, - struct wl_array *states, - uint32_t serial) override; - void xdg_surface_close() override; - - friend class QWaylandWindow; -}; - -QT_END_NAMESPACE - -} - -#endif // QWAYLANDXDGSURFACE_H diff -Nru qtwayland-opensource-src-5.11.3/src/client/shellintegration/qwaylandshellintegrationfactory.cpp qtwayland-opensource-src-5.12.2/src/client/shellintegration/qwaylandshellintegrationfactory.cpp --- qtwayland-opensource-src-5.11.3/src/client/shellintegration/qwaylandshellintegrationfactory.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/shellintegration/qwaylandshellintegrationfactory.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -78,19 +78,24 @@ #endif } -QWaylandShellIntegration *QWaylandShellIntegrationFactory::create(const QString &name, const QStringList &args, const QString &pluginPath) +QWaylandShellIntegration *QWaylandShellIntegrationFactory::create(const QString &name, QWaylandDisplay *display, const QStringList &args, const QString &pluginPath) { #if QT_CONFIG(library) + QScopedPointer integration; + // Try loading the plugin from platformPluginPath first: if (!pluginPath.isEmpty()) { QCoreApplication::addLibraryPath(pluginPath); - if (QWaylandShellIntegration *ret = qLoadPlugin(directLoader(), name, args)) - return ret; + integration.reset(qLoadPlugin(directLoader(), name, args)); } - if (QWaylandShellIntegration *ret = qLoadPlugin(loader(), name, args)) - return ret; + if (!integration) + integration.reset(qLoadPlugin(loader(), name, args)); #endif - return nullptr; + + if (integration && !integration->initialize(display)) + return nullptr; + + return integration.take(); } } diff -Nru qtwayland-opensource-src-5.11.3/src/client/shellintegration/qwaylandshellintegrationfactory_p.h qtwayland-opensource-src-5.12.2/src/client/shellintegration/qwaylandshellintegrationfactory_p.h --- qtwayland-opensource-src-5.11.3/src/client/shellintegration/qwaylandshellintegrationfactory_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/shellintegration/qwaylandshellintegrationfactory_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -51,7 +51,10 @@ // We mean it. // +#include + #include + #include QT_BEGIN_NAMESPACE @@ -64,7 +67,7 @@ { public: static QStringList keys(const QString &pluginPath = QString()); - static QWaylandShellIntegration *create(const QString &name, const QStringList &args, const QString &pluginPath = QString()); + static QWaylandShellIntegration *create(const QString &name, QWaylandDisplay *display, const QStringList &args = QStringList(), const QString &pluginPath = QString()); }; } diff -Nru qtwayland-opensource-src-5.11.3/src/client/shellintegration/qwaylandshellintegration_p.h qtwayland-opensource-src-5.12.2/src/client/shellintegration/qwaylandshellintegration_p.h --- qtwayland-opensource-src-5.11.3/src/client/shellintegration/qwaylandshellintegration_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/client/shellintegration/qwaylandshellintegration_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -79,6 +79,11 @@ if (oldFocus) m_display->handleWindowDeactivated(oldFocus); } + virtual void *nativeResourceForWindow(const QByteArray &resource, QWindow *window) { + Q_UNUSED(resource); + Q_UNUSED(window); + return nullptr; + } protected: QWaylandDisplay *m_display = nullptr; diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/compositor_api.pri qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/compositor_api.pri --- qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/compositor_api.pri 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/compositor_api.pri 2019-02-21 12:36:59.000000000 +0000 @@ -27,6 +27,7 @@ compositor_api/qwaylandresource.h \ compositor_api/qwaylandsurfacegrabber.h \ compositor_api/qwaylandoutputmode_p.h \ + compositor_api/qwaylandquickchildren.h SOURCES += \ compositor_api/qwaylandcompositor.cpp \ diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandcompositor.cpp qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandcompositor.cpp --- qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandcompositor.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandcompositor.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -96,7 +96,9 @@ QT_BEGIN_NAMESPACE -Q_LOGGING_CATEGORY(qLcCompositorInputMethods, "qt.compositor.input.methods") +Q_LOGGING_CATEGORY(qLcWaylandCompositor, "qt.waylandcompositor") +Q_LOGGING_CATEGORY(qLcWaylandCompositorHardwareIntegration, "qt.waylandcompositor.hardwareintegration") +Q_LOGGING_CATEGORY(qLcWaylandCompositorInputMethods, "qt.waylandcompositor.inputmethods") namespace QtWayland { @@ -107,39 +109,48 @@ bool sendEvent(QWindowSystemInterfacePrivate::WindowSystemEvent *e) override { if (e->type == QWindowSystemInterfacePrivate::Key) { - QWindowSystemInterfacePrivate::KeyEvent *ke = static_cast(e); - QWaylandKeyboardPrivate *keyb = QWaylandKeyboardPrivate::get(compositor->defaultSeat()->keyboard()); - - uint32_t code = ke->nativeScanCode; - bool isDown = ke->keyType == QEvent::KeyPress; + QWindowSystemInterfacePrivate::KeyEvent *keyEvent = static_cast(e); + handleKeyEvent(keyEvent); + } else { + QWindowSystemEventHandler::sendEvent(e); + } + return true; + } -#if QT_CONFIG(xkbcommon_evdev) - QString text; - Qt::KeyboardModifiers modifiers = QWaylandXkb::modifiers(keyb->xkbState()); - - const xkb_keysym_t sym = xkb_state_key_get_one_sym(keyb->xkbState(), code); - int qtkey; - std::tie(qtkey, text) = QWaylandXkb::keysymToQtKey(sym, modifiers); - - ke->key = qtkey; - ke->modifiers = modifiers; - ke->nativeVirtualKey = sym; - ke->nativeModifiers = keyb->xkbModsMask(); - ke->unicode = text; + void handleKeyEvent(QWindowSystemInterfacePrivate::KeyEvent *ke) + { + auto *seat = compositor->defaultSeat(); + if (!seat) + return; + + QWaylandKeyboardPrivate *keyb = QWaylandKeyboardPrivate::get(seat->keyboard()); + + uint32_t code = ke->nativeScanCode; + bool isDown = ke->keyType == QEvent::KeyPress; + +#if QT_CONFIG(xkbcommon) + QString text; + Qt::KeyboardModifiers modifiers = QWaylandXkb::modifiers(keyb->xkbState()); + + const xkb_keysym_t sym = xkb_state_key_get_one_sym(keyb->xkbState(), code); + int qtkey; + std::tie(qtkey, text) = QWaylandXkb::keysymToQtKey(sym, modifiers); + + ke->key = qtkey; + ke->modifiers = modifiers; + ke->nativeVirtualKey = sym; + ke->nativeModifiers = keyb->xkbModsMask(); + ke->unicode = text; #endif - if (!ke->repeat) - keyb->keyEvent(code, isDown ? WL_KEYBOARD_KEY_STATE_PRESSED : WL_KEYBOARD_KEY_STATE_RELEASED); + if (!ke->repeat) + keyb->keyEvent(code, isDown ? WL_KEYBOARD_KEY_STATE_PRESSED : WL_KEYBOARD_KEY_STATE_RELEASED); - QWindowSystemEventHandler::sendEvent(e); + QWindowSystemEventHandler::sendEvent(ke); - if (!ke->repeat) { - keyb->maybeUpdateKeymap(); - keyb->updateModifierState(code, isDown ? WL_KEYBOARD_KEY_STATE_PRESSED : WL_KEYBOARD_KEY_STATE_RELEASED); - } - } else { - QWindowSystemEventHandler::sendEvent(e); + if (!ke->repeat) { + keyb->maybeUpdateKeymap(); + keyb->updateModifierState(code, isDown ? WL_KEYBOARD_KEY_STATE_PRESSED : WL_KEYBOARD_KEY_STATE_RELEASED); } - return true; } QWaylandCompositor *compositor = nullptr; @@ -193,6 +204,10 @@ emit q->socketNameChanged(socket_name); } +#if WAYLAND_VERSION_MAJOR >= 1 && (WAYLAND_VERSION_MAJOR != 1 || WAYLAND_VERSION_MINOR >= 10) + connectToExternalSockets(); +#endif + loop = wl_display_get_event_loop(display); int fd = wl_event_loop_get_fd(loop); @@ -274,6 +289,18 @@ } } +#if WAYLAND_VERSION_MAJOR >= 1 && (WAYLAND_VERSION_MAJOR != 1 || WAYLAND_VERSION_MINOR >= 10) +void QWaylandCompositorPrivate::connectToExternalSockets() +{ + // Clear out any backlog of user-supplied external socket descriptors + for (int fd : qAsConst(externally_added_socket_fds)) { + if (wl_display_add_socket_fd(display, fd) != 0) + qWarning() << "Failed to integrate user-supplied socket fd into the Wayland event loop"; + } + externally_added_socket_fds.clear(); +} +#endif + void QWaylandCompositorPrivate::compositor_create_surface(wl_compositor::Resource *resource, uint32_t id) { Q_Q(QWaylandCompositor); @@ -553,6 +580,47 @@ } /*! + * \qmlmethod QtWaylandCompositor::WaylandCompositor::addSocketDescriptor(fd) + * \since 5.12 + * + * Listen for client connections on a file descriptor referring to a + * server socket already bound and listening. + * + * Does not take ownership of the file descriptor; it must be closed + * explicitly if needed. + * + * \note This method is only available with libwayland 1.10.0 or + * newer. If built against an earlier libwayland runtime, this + * method is a noop. + */ + +/*! + * Listen for client connections on a file descriptor referring to a + * server socket already bound and listening. + * + * Does not take ownership of the file descriptor; it must be closed + * explicitly if needed. + * + * \note This method is only available with libwayland 1.10.0 or + * newer. If built against an earlier libwayland runtime, this + * method is a noop. + * + * \since 5.12 + */ +void QWaylandCompositor::addSocketDescriptor(int fd) +{ +#if WAYLAND_VERSION_MAJOR >= 1 && (WAYLAND_VERSION_MAJOR != 1 || WAYLAND_VERSION_MINOR >= 10) + Q_D(QWaylandCompositor); + d->externally_added_socket_fds.append(fd); + if (isCreated()) + d->connectToExternalSockets(); +#else + Q_UNUSED(fd); + qWarning() << "QWaylandCompositor::addSocketDescriptor() does nothing on libwayland versions prior to 1.10.0"; +#endif +} + +/*! * \internal */ struct wl_display *QWaylandCompositor::display() const @@ -683,9 +751,11 @@ Q_D(QWaylandCompositor); if (d->outputs.size() && d->outputs.first() == output) return; - d->outputs.removeOne(output); + bool alreadyAdded = d->outputs.removeOne(output); d->outputs.prepend(output); - defaultOutputChanged(); + emit defaultOutputChanged(); + if (!alreadyAdded) + emit outputAdded(output); } /*! diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandcompositor.h qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandcompositor.h --- qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandcompositor.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandcompositor.h 2019-02-21 12:36:59.000000000 +0000 @@ -70,7 +70,9 @@ class QWaylandSurfaceGrabber; class QWaylandBufferRef; -Q_DECLARE_LOGGING_CATEGORY(qLcCompositorInputMethods) +Q_WAYLAND_COMPOSITOR_EXPORT Q_DECLARE_LOGGING_CATEGORY(qLcWaylandCompositor) +Q_WAYLAND_COMPOSITOR_EXPORT Q_DECLARE_LOGGING_CATEGORY(qLcWaylandCompositorHardwareIntegration) +Q_DECLARE_LOGGING_CATEGORY(qLcWaylandCompositorInputMethods) class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandCompositor : public QWaylandObject { @@ -93,6 +95,8 @@ void setSocketName(const QByteArray &name); QByteArray socketName() const; + Q_INVOKABLE void addSocketDescriptor(int fd); + ::wl_display *display() const; uint32_t nextSerial(); @@ -117,8 +121,6 @@ QWaylandSeat *defaultSeat() const; - QWaylandView *createSurfaceView(QWaylandSurface *surface); - QWaylandSeat *seatFor(QInputEvent *inputEvent); bool useHardwareIntegrationExtension() const; diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandcompositor_p.h qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandcompositor_p.h --- qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandcompositor_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandcompositor_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -112,6 +112,11 @@ inline void addOutput(QWaylandOutput *output); inline void removeOutput(QWaylandOutput *output); + +#if WAYLAND_VERSION_MAJOR >= 1 && (WAYLAND_VERSION_MAJOR != 1 || WAYLAND_VERSION_MINOR >= 10) + void connectToExternalSockets(); +#endif + protected: void compositor_create_surface(wl_compositor::Resource *resource, uint32_t id) override; void compositor_create_region(wl_compositor::Resource *resource, uint32_t id) override; @@ -128,6 +133,9 @@ void loadServerBufferIntegration(); QByteArray socket_name; +#if WAYLAND_VERSION_MAJOR >= 1 && (WAYLAND_VERSION_MAJOR != 1 || WAYLAND_VERSION_MINOR >= 10) + QList externally_added_socket_fds; +#endif struct wl_display *display = nullptr; QList seats; diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandkeyboard.cpp qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandkeyboard.cpp --- qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandkeyboard.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandkeyboard.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -51,9 +51,10 @@ #include #include -#if QT_CONFIG(xkbcommon_evdev) +#if QT_CONFIG(xkbcommon) #include #include +#include #endif QT_BEGIN_NAMESPACE @@ -65,7 +66,7 @@ QWaylandKeyboardPrivate::~QWaylandKeyboardPrivate() { -#if QT_CONFIG(xkbcommon_evdev) +#if QT_CONFIG(xkbcommon) if (xkb_context) { if (keymap_area) munmap(keymap_area, keymap_size); @@ -91,7 +92,7 @@ return; // check if new wl_keyboard resource is from the client owning the focus surface - if (focus->resource()->client == keyboardResource->client()) { + if (wl_resource_get_client(focus->resource()) == keyboardResource->client()) { sendEnter(focus, keyboardResource); focusResource = keyboardResource; } @@ -135,7 +136,7 @@ if (resource->version() >= WL_KEYBOARD_REPEAT_INFO_SINCE_VERSION) send_repeat_info(resource->handle, repeatRate, repeatDelay); -#if QT_CONFIG(xkbcommon_evdev) +#if QT_CONFIG(xkbcommon) if (xkb_context) { send_keymap(resource->handle, WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1, keymap_fd, keymap_size); @@ -163,7 +164,7 @@ void QWaylandKeyboardPrivate::keyEvent(uint code, uint32_t state) { -#if QT_CONFIG(xkbcommon_evdev) +#if QT_CONFIG(xkbcommon) uint key = toWaylandXkbV1Key(code); #else uint key = code; @@ -179,7 +180,7 @@ { uint32_t time = compositor()->currentTimeMsecs(); uint32_t serial = compositor()->nextSerial(); -#if QT_CONFIG(xkbcommon_evdev) +#if QT_CONFIG(xkbcommon) uint key = toWaylandXkbV1Key(code); #else uint key = code; @@ -196,9 +197,35 @@ } } +#if QT_CONFIG(xkbcommon) +void QWaylandKeyboardPrivate::maybeUpdateXkbScanCodeTable() +{ + if (!scanCodesByQtKey.isEmpty() || !xkbState()) + return; + + if (xkb_keymap *keymap = xkb_state_get_keymap(xkb_state)) { + xkb_keymap_key_for_each(keymap, [](xkb_keymap *keymap, xkb_keycode_t keycode, void *d){ + auto *scanCodesByQtKey = static_cast*>(d); + uint numLayouts = xkb_keymap_num_layouts_for_key(keymap, keycode); + for (uint layout = 0; layout < numLayouts; ++layout) { + const xkb_keysym_t *syms = nullptr; + xkb_keymap_key_get_syms_by_level(keymap, keycode, layout, 0, &syms); + if (!syms) + continue; + + Qt::KeyboardModifiers mods = {}; + int qtKey = QWaylandXkb::keysymToQtKey(syms[0], mods).first; + if (qtKey != 0) + scanCodesByQtKey->insert({layout, qtKey}, keycode); + } + }, &scanCodesByQtKey); + } +} +#endif + void QWaylandKeyboardPrivate::updateModifierState(uint code, uint32_t state) { -#if QT_CONFIG(xkbcommon_evdev) +#if QT_CONFIG(xkbcommon) if (!xkb_context) return; @@ -238,7 +265,7 @@ return; pendingKeymap = false; -#if QT_CONFIG(xkbcommon_evdev) +#if QT_CONFIG(xkbcommon) if (!xkb_context) return; @@ -258,7 +285,7 @@ #endif } -#if QT_CONFIG(xkbcommon_evdev) +#if QT_CONFIG(xkbcommon) static int createAnonymousFile(size_t size) { QString path = QStandardPaths::writableLocation(QStandardPaths::RuntimeLocation); @@ -355,6 +382,7 @@ struct xkb_keymap *xkbKeymap = xkb_keymap_new_from_names(xkb_context, &rule_names, static_cast(0)); if (xkbKeymap) { + scanCodesByQtKey.clear(); createXKBState(xkbKeymap); xkb_keymap_unref(xkbKeymap); } else { @@ -401,7 +429,7 @@ connect(keymap, &QWaylandKeymap::optionsChanged, this, &QWaylandKeyboard::updateKeymap); connect(keymap, &QWaylandKeymap::rulesChanged, this, &QWaylandKeyboard::updateKeymap); connect(keymap, &QWaylandKeymap::modelChanged, this, &QWaylandKeyboard::updateKeymap); -#if QT_CONFIG(xkbcommon_evdev) +#if QT_CONFIG(xkbcommon) d->initXKB(); #endif } @@ -561,4 +589,17 @@ d->add(client->client(), id, qMin(QtWaylandServer::wl_keyboard::interfaceVersion(), version)); } +uint QWaylandKeyboard::keyToScanCode(int qtKey) const +{ + uint scanCode = 0; +#if QT_CONFIG(xkbcommon) + Q_D(const QWaylandKeyboard); + const_cast(d)->maybeUpdateXkbScanCodeTable(); + scanCode = d->scanCodesByQtKey.value({d->group, qtKey}, 0); +#else + Q_UNUSED(qtKey); +#endif + return scanCode; +} + QT_END_NAMESPACE diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandkeyboard.h qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandkeyboard.h --- qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandkeyboard.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandkeyboard.h 2019-02-21 12:36:59.000000000 +0000 @@ -82,6 +82,8 @@ virtual void addClient(QWaylandClient *client, uint32_t id, uint32_t version); + uint keyToScanCode(int qtKey) const; + Q_SIGNALS: void focusChanged(QWaylandSurface *surface); void repeatRateChanged(quint32 repeatRate); diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandkeyboard_p.h qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandkeyboard_p.h --- qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandkeyboard_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandkeyboard_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -62,7 +62,7 @@ #include -#if QT_CONFIG(xkbcommon_evdev) +#if QT_CONFIG(xkbcommon) #include #endif @@ -86,9 +86,10 @@ void modifiers(uint32_t serial, uint32_t mods_depressed, uint32_t mods_latched, uint32_t mods_locked, uint32_t group); -#if QT_CONFIG(xkbcommon_evdev) +#if QT_CONFIG(xkbcommon) struct xkb_state *xkbState() const { return xkb_state; } uint32_t xkbModsMask() const { return modsDepressed | modsLatched | modsLocked; } + void maybeUpdateXkbScanCodeTable(); #endif void keyEvent(uint code, uint32_t state); @@ -105,7 +106,7 @@ void keyboard_release(Resource *resource) override; private: -#if QT_CONFIG(xkbcommon_evdev) +#if QT_CONFIG(xkbcommon) void initXKB(); void createXKBKeymap(); void createXKBState(xkb_keymap *keymap); @@ -127,10 +128,12 @@ uint32_t group = 0; bool pendingKeymap = false; -#if QT_CONFIG(xkbcommon_evdev) +#if QT_CONFIG(xkbcommon) size_t keymap_size; int keymap_fd = -1; char *keymap_area = nullptr; + using ScanCodeKey = std::pair; // group/layout and QtKey + QMap scanCodesByQtKey; struct xkb_context *xkb_context = nullptr; struct xkb_state *xkb_state = nullptr; #endif diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandkeymap.h qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandkeymap.h --- qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandkeymap.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandkeymap.h 2019-02-21 12:36:59.000000000 +0000 @@ -42,6 +42,7 @@ #include #include +#include QT_BEGIN_NAMESPACE @@ -51,6 +52,7 @@ { Q_OBJECT Q_DECLARE_PRIVATE(QWaylandKeymap) + Q_WAYLAND_COMPOSITOR_DECLARE_QUICK_CHILDREN(QWaylandKeymap) Q_PROPERTY(QString layout READ layout WRITE setLayout NOTIFY layoutChanged) Q_PROPERTY(QString variant READ variant WRITE setVariant NOTIFY variantChanged) Q_PROPERTY(QString options READ options WRITE setOptions NOTIFY optionsChanged) diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandoutput.cpp qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandoutput.cpp --- qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandoutput.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandoutput.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -124,6 +124,27 @@ } } +void QWaylandOutputPrivate::_q_handleMaybeWindowPixelSizeChanged() +{ + if (!window) + return; + + const QSize pixelSize = window->size() * window->devicePixelRatio(); + + if (pixelSize != windowPixelSize) { + windowPixelSize = pixelSize; + handleWindowPixelSizeChanged(); + } +} + +void QWaylandOutputPrivate::_q_handleWindowDestroyed() +{ + Q_Q(QWaylandOutput); + window = nullptr; + emit q->windowChanged(); + emit q->windowDestroyed(); +} + void QWaylandOutputPrivate::sendGeometry(const Resource *resource) { send_geometry(resource->handle, @@ -165,6 +186,33 @@ } } +void QWaylandOutputPrivate::handleWindowPixelSizeChanged() +{ + Q_Q(QWaylandOutput); + Q_ASSERT(window); + if (sizeFollowsWindow && currentMode <= modes.size() - 1) { + if (currentMode >= 0) { + QWaylandOutputMode mode = modes.at(currentMode); + mode.setSize(windowPixelSize); + modes.replace(currentMode, mode); + emit q->geometryChanged(); + if (!availableGeometry.isValid()) + emit q->availableGeometryChanged(); + sendModesInfo(); + } else { + // We didn't add a mode during the initialization because the window + // size was invalid, let's add it now + int mHzRefreshRate = qFloor(window->screen()->refreshRate() * 1000); + QWaylandOutputMode mode(windowPixelSize, mHzRefreshRate); + if (mode.isValid()) { + modes.clear(); + q->addMode(mode, true); + q->setCurrentMode(mode); + } + } + } +} + void QWaylandOutputPrivate::addView(QWaylandView *view, QWaylandSurface *surface) { for (int i = 0; i < surfaceViews.size(); i++) { @@ -267,6 +315,10 @@ Q_ASSERT(d->compositor); Q_ASSERT(d->compositor->isCreated()); + if (!d->window && d->sizeFollowsWindow) { + qWarning("Setting QWaylandOutput::sizeFollowsWindow without a window has no effect"); + } + // Replace modes with one that follows the window size and refresh rate, // but only if window size is valid if (d->window && d->sizeFollowsWindow) { @@ -282,9 +334,10 @@ QWaylandCompositorPrivate::get(d->compositor)->addOutput(this); if (d->window) { - QObject::connect(d->window, &QWindow::widthChanged, this, &QWaylandOutput::handleSetWidth); - QObject::connect(d->window, &QWindow::heightChanged, this, &QWaylandOutput::handleSetHeight); - QObject::connect(d->window, &QObject::destroyed, this, &QWaylandOutput::handleWindowDestroyed); + QObjectPrivate::connect(d->window, &QWindow::widthChanged, d, &QWaylandOutputPrivate::_q_handleMaybeWindowPixelSizeChanged); + QObjectPrivate::connect(d->window, &QWindow::heightChanged, d, &QWaylandOutputPrivate::_q_handleMaybeWindowPixelSizeChanged); + QObjectPrivate::connect(d->window, &QWindow::screenChanged, d, &QWaylandOutputPrivate::_q_handleMaybeWindowPixelSizeChanged); + QObjectPrivate::connect(d->window, &QObject::destroyed, d, &QWaylandOutputPrivate::_q_handleWindowDestroyed); } d->init(d->compositor->display(), 2); @@ -297,7 +350,9 @@ */ QWaylandOutput *QWaylandOutput::fromResource(wl_resource *resource) { - return static_cast(QWaylandOutputPrivate::Resource::fromResource(resource)->output_object)->q_func(); + if (auto *r = QWaylandOutputPrivate::Resource::fromResource(resource)) + return static_cast(r->output_object)->q_func(); + return nullptr; } /*! @@ -817,11 +872,6 @@ { Q_D(QWaylandOutput); - if (!d->window) { - qWarning("Setting QWaylandOutput::sizeFollowsWindow without a window has no effect"); - return; - } - if (follow != d->sizeFollowsWindow) { d->sizeFollowsWindow = follow; Q_EMIT sizeFollowsWindowChanged(); @@ -924,83 +974,6 @@ /*! * \internal */ -void QWaylandOutput::handleSetWidth(int newWidth) -{ - Q_D(QWaylandOutput); - - if (!d->window || !d->sizeFollowsWindow) - return; - - if (d->currentMode <= d->modes.size() - 1) { - if (d->currentMode >= 0) { - QWaylandOutputMode mode = d->modes.at(d->currentMode); - mode.setWidth(newWidth * d->window->devicePixelRatio()); - d->modes.replace(d->currentMode, mode); - emit geometryChanged(); - if (!d->availableGeometry.isValid()) - emit availableGeometryChanged(); - d->sendModesInfo(); - } else { - // We didn't add a mode during the initialization because the window - // size was invalid, let's add it now - QWaylandOutputMode mode(d->window->size() * d->window->devicePixelRatio(), - qFloor(d->window->screen()->refreshRate() * 1000)); - if (mode.isValid()) { - d->modes.clear(); - addMode(mode, true); - setCurrentMode(mode); - } - } - } -} - -/*! - * \internal - */ -void QWaylandOutput::handleSetHeight(int newHeight) -{ - Q_D(QWaylandOutput); - - if (!d->window || !d->sizeFollowsWindow) - return; - - if (d->currentMode <= d->modes.size() - 1) { - if (d->currentMode >= 0) { - QWaylandOutputMode mode = d->modes.at(d->currentMode); - mode.setHeight(newHeight * d->window->devicePixelRatio()); - d->modes.replace(d->currentMode, mode); - emit geometryChanged(); - if (!d->availableGeometry.isValid()) - emit availableGeometryChanged(); - d->sendModesInfo(); - } else { - // We didn't add a mode during the initialization because the window - // size was invalid, let's add it now - QWaylandOutputMode mode(d->window->size() * d->window->devicePixelRatio(), - qFloor(d->window->screen()->refreshRate() * 1000)); - if (mode.isValid()) { - d->modes.clear(); - addMode(mode, true); - setCurrentMode(mode); - } - } - } -} - -/*! - * \internal - */ -void QWaylandOutput::handleWindowDestroyed() -{ - Q_D(QWaylandOutput); - d->window = nullptr; - emit windowChanged(); - emit windowDestroyed(); -} - -/*! - * \internal - */ bool QWaylandOutput::event(QEvent *event) { if (event->type() == QEvent::Polish) @@ -1009,3 +982,5 @@ } QT_END_NAMESPACE + +#include "moc_qwaylandoutput.cpp" diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandoutput.h qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandoutput.h --- qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandoutput.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandoutput.h 2019-02-21 12:36:59.000000000 +0000 @@ -180,15 +180,14 @@ void modelChanged(); void windowDestroyed(); -private Q_SLOTS: - void handleSetWidth(int newWidth); - void handleSetHeight(int newHeight); - void handleWindowDestroyed(); - protected: bool event(QEvent *event) override; virtual void initialize(); + +private: + Q_PRIVATE_SLOT(d_func(), void _q_handleMaybeWindowPixelSizeChanged()) + Q_PRIVATE_SLOT(d_func(), void _q_handleWindowDestroyed()) }; QT_END_NAMESPACE diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandoutputmode.cpp qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandoutputmode.cpp --- qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandoutputmode.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandoutputmode.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -89,7 +89,7 @@ */ bool QWaylandOutputMode::operator==(const QWaylandOutputMode &other) const { - return size() == other.size() && refreshRate() == refreshRate(); + return size() == other.size() && refreshRate() == other.refreshRate(); } /*! @@ -98,7 +98,7 @@ */ bool QWaylandOutputMode::operator!=(const QWaylandOutputMode &other) const { - return size() != other.size() || refreshRate() != refreshRate(); + return size() != other.size() || refreshRate() != other.refreshRate(); } /*! @@ -128,15 +128,7 @@ /*! * \internal */ -void QWaylandOutputMode::setWidth(int width) +void QWaylandOutputMode::setSize(const QSize &size) { - d->size.setWidth(width); -} - -/*! - * \internal - */ -void QWaylandOutputMode::setHeight(int height) -{ - d->size.setHeight(height); + d->size = size; } diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandoutputmode.h qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandoutputmode.h --- qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandoutputmode.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandoutputmode.h 2019-02-21 12:36:59.000000000 +0000 @@ -64,10 +64,9 @@ private: class QWaylandOutputModePrivate *const d; - friend class QWaylandOutput; + friend class QWaylandOutputPrivate; - void setWidth(int width); - void setHeight(int height); + void setSize(const QSize &size); }; Q_DECLARE_TYPEINFO(QWaylandOutputMode, Q_MOVABLE_TYPE); diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandoutput_p.h qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandoutput_p.h --- qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandoutput_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandoutput_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -108,10 +108,15 @@ void sendMode(const Resource *resource, const QWaylandOutputMode &mode); void sendModesInfo(); + void handleWindowPixelSizeChanged(); + protected: void output_bind_resource(Resource *resource) override; private: + void _q_handleMaybeWindowPixelSizeChanged(); + void _q_handleWindowDestroyed(); + QWaylandCompositor *compositor = nullptr; QWindow *window = nullptr; QString manufacturer; @@ -128,6 +133,7 @@ int scaleFactor = 1; bool sizeFollowsWindow = false; bool initialized = false; + QSize windowPixelSize; Q_DECLARE_PUBLIC(QWaylandOutput) Q_DISABLE_COPY(QWaylandOutputPrivate) diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandquickchildren.h qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandquickchildren.h --- qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandquickchildren.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandquickchildren.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,100 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWAYLANDQUICKCHILDREN_H +#define QWAYLANDQUICKCHILDREN_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#ifdef QT_WAYLAND_COMPOSITOR_QUICK +#include +#include +#endif + +#include + +QT_BEGIN_NAMESPACE + +#ifdef QT_WAYLAND_COMPOSITOR_QUICK +#define Q_WAYLAND_COMPOSITOR_DECLARE_QUICK_CHILDREN(className) \ + Q_PROPERTY(QQmlListProperty data READ data DESIGNABLE false) \ + Q_CLASSINFO("DefaultProperty", "data") \ + public: \ + QQmlListProperty data() \ + { \ + return QQmlListProperty(this, this, \ + &className::appendFunction, \ + &className::countFunction, \ + &className::atFunction, \ + &className::clearFunction); \ + } \ + static void appendFunction(QQmlListProperty *list, QObject *object) \ + { \ + static_cast(list->data)->m_children.append(object); \ + } \ + static int countFunction(QQmlListProperty *list) \ + { \ + return static_cast(list->data)->m_children.size(); \ + } \ + static QObject *atFunction(QQmlListProperty *list, int index) \ + { \ + return static_cast(list->data)->m_children.at(index); \ + } \ + static void clearFunction(QQmlListProperty *list) \ + { \ + static_cast(list->data)->m_children.clear(); \ + } \ + private: \ + QVector m_children; +#else +#define Q_WAYLAND_COMPOSITOR_DECLARE_QUICK_CHILDREN(className) +#endif + +QT_END_NAMESPACE + +#endif // QWAYLANDQUICKCHILDREN_H diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandquickitem.cpp qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandquickitem.cpp --- qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandquickitem.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandquickitem.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -731,7 +731,39 @@ } } +void QWaylandQuickItem::handlePlaceAbove(QWaylandSurface *referenceSurface) +{ + Q_D(QWaylandQuickItem); + auto *parent = qobject_cast(parentItem()); + if (!parent) + return; + + if (parent->surface() == referenceSurface) { + d->placeAboveParent(); + } else if (auto *sibling = d->findSibling(referenceSurface)) { + d->placeAboveSibling(sibling); + } else { + qWarning() << "Couldn't find QWaylandQuickItem for surface" << referenceSurface + << "when handling wl_subsurface.place_above"; + } +} + +void QWaylandQuickItem::handlePlaceBelow(QWaylandSurface *referenceSurface) +{ + Q_D(QWaylandQuickItem); + QWaylandQuickItem *parent = qobject_cast(parentItem()); + if (!parent) + return; + if (parent->surface() == referenceSurface) { + d->placeBelowParent(); + } else if (auto *sibling = d->findSibling(referenceSurface)) { + d->placeBelowSibling(sibling); + } else { + qWarning() << "Couldn't find QWaylandQuickItem for surface" << referenceSurface + << "when handling wl_subsurface.place_below"; + } +} /*! \qmlproperty object QtWaylandCompositor::WaylandQuickItem::subsurfaceHandler @@ -789,7 +821,7 @@ } /*! - * \property QWaylandQuickItem::bufferLocked + * \property QWaylandQuickItem::isBufferLocked * * This property holds whether the item's buffer is currently locked. As long as * the buffer is locked, it will not be released and returned to the client. @@ -852,15 +884,17 @@ { Q_D(QWaylandQuickItem); if (d->oldSurface) { - disconnect(d->oldSurface, &QWaylandSurface::hasContentChanged, this, &QWaylandQuickItem::surfaceMappedChanged); - disconnect(d->oldSurface, &QWaylandSurface::parentChanged, this, &QWaylandQuickItem::parentChanged); - disconnect(d->oldSurface, &QWaylandSurface::sizeChanged, this, &QWaylandQuickItem::updateSize); - disconnect(d->oldSurface, &QWaylandSurface::bufferScaleChanged, this, &QWaylandQuickItem::updateSize); - disconnect(d->oldSurface, &QWaylandSurface::configure, this, &QWaylandQuickItem::updateBuffer); - disconnect(d->oldSurface, &QWaylandSurface::redraw, this, &QQuickItem::update); - disconnect(d->oldSurface, &QWaylandSurface::childAdded, this, &QWaylandQuickItem::handleSubsurfaceAdded); + disconnect(d->oldSurface.data(), &QWaylandSurface::hasContentChanged, this, &QWaylandQuickItem::surfaceMappedChanged); + disconnect(d->oldSurface.data(), &QWaylandSurface::parentChanged, this, &QWaylandQuickItem::parentChanged); + disconnect(d->oldSurface.data(), &QWaylandSurface::sizeChanged, this, &QWaylandQuickItem::updateSize); + disconnect(d->oldSurface.data(), &QWaylandSurface::bufferScaleChanged, this, &QWaylandQuickItem::updateSize); + disconnect(d->oldSurface.data(), &QWaylandSurface::configure, this, &QWaylandQuickItem::updateBuffer); + disconnect(d->oldSurface.data(), &QWaylandSurface::redraw, this, &QQuickItem::update); + disconnect(d->oldSurface.data(), &QWaylandSurface::childAdded, this, &QWaylandQuickItem::handleSubsurfaceAdded); + disconnect(d->oldSurface.data(), &QWaylandSurface::subsurfacePlaceAbove, this, &QWaylandQuickItem::handlePlaceAbove); + disconnect(d->oldSurface.data(), &QWaylandSurface::subsurfacePlaceBelow, this, &QWaylandQuickItem::handlePlaceBelow); #if QT_CONFIG(draganddrop) - disconnect(d->oldSurface, &QWaylandSurface::dragStarted, this, &QWaylandQuickItem::handleDragStarted); + disconnect(d->oldSurface.data(), &QWaylandSurface::dragStarted, this, &QWaylandQuickItem::handleDragStarted); #endif #if QT_CONFIG(im) disconnect(d->oldSurface->inputMethodControl(), &QWaylandInputMethodControl::updateInputMethod, this, &QWaylandQuickItem::updateInputMethod); @@ -874,6 +908,8 @@ connect(newSurface, &QWaylandSurface::configure, this, &QWaylandQuickItem::updateBuffer); connect(newSurface, &QWaylandSurface::redraw, this, &QQuickItem::update); connect(newSurface, &QWaylandSurface::childAdded, this, &QWaylandQuickItem::handleSubsurfaceAdded); + connect(newSurface, &QWaylandSurface::subsurfacePlaceAbove, this, &QWaylandQuickItem::handlePlaceAbove); + connect(newSurface, &QWaylandSurface::subsurfacePlaceBelow, this, &QWaylandQuickItem::handlePlaceBelow); #if QT_CONFIG(draganddrop) connect(newSurface, &QWaylandSurface::dragStarted, this, &QWaylandQuickItem::handleDragStarted); #endif @@ -1000,13 +1036,23 @@ * Returns \c true if the input region of this item's surface contains the * position given by \a localPosition. */ -bool QWaylandQuickItem::inputRegionContains(const QPointF &localPosition) +bool QWaylandQuickItem::inputRegionContains(const QPointF &localPosition) const { if (QWaylandSurface *s = surface()) return s->inputRegionContains(mapToSurface(localPosition).toPoint()); return false; } +// Qt 6: Remove the non-const version +/*! + * Returns \c true if the input region of this item's surface contains the + * position given by \a localPosition. + */ +bool QWaylandQuickItem::inputRegionContains(const QPointF &localPosition) +{ + return const_cast(this)->inputRegionContains(localPosition); +} + /*! * Maps the given \a point in this item's coordinate system to the equivalent * point within the Wayland surface's coordinate system, and returns the mapped @@ -1133,12 +1179,14 @@ if (d->connectedWindow) { disconnect(d->connectedWindow, &QQuickWindow::beforeSynchronizing, this, &QWaylandQuickItem::beforeSync); + disconnect(d->connectedWindow, &QQuickWindow::screenChanged, this, &QWaylandQuickItem::updateSize); } d->connectedWindow = newWindow; if (d->connectedWindow) { connect(d->connectedWindow, &QQuickWindow::beforeSynchronizing, this, &QWaylandQuickItem::beforeSync, Qt::DirectConnection); + connect(d->connectedWindow, &QQuickWindow::screenChanged, this, &QWaylandQuickItem::updateSize); // new screen may have new dpr } if (compositor() && d->connectedWindow) { @@ -1146,6 +1194,25 @@ Q_ASSERT(output); d->view->setOutput(output); } + + updateSize(); // because scaleFactor depends on devicePixelRatio, which may be different for the new window +} + +void QWaylandQuickItem::updateOutput() +{ + Q_D(QWaylandQuickItem); + if (d->view->output() == d->connectedOutput) + return; + + if (d->connectedOutput) + disconnect(d->connectedOutput, &QWaylandOutput::scaleFactorChanged, this, &QWaylandQuickItem::updateSize); + + d->connectedOutput = d->view->output(); + + if (d->connectedOutput) + connect(d->connectedOutput, &QWaylandOutput::scaleFactorChanged, this, &QWaylandQuickItem::updateSize); + + updateSize(); } void QWaylandQuickItem::beforeSync() @@ -1178,7 +1245,7 @@ * If an animation is started, bufferLocked should be set to ensure the item keeps its content * until the animation finishes * - * \sa bufferLocked + * \sa isBufferLocked */ /*! @@ -1320,6 +1387,19 @@ stackAfter(top); } +void QWaylandQuickItem::sendMouseMoveEvent(const QPointF &position, QWaylandSeat *seat) +{ + if (seat == nullptr) + seat = compositor()->defaultSeat(); + + if (!seat) { + qWarning() << "No seat, can't send mouse event"; + return; + } + + seat->sendMouseMoveEvent(view(), position); +} + /*! * \internal * @@ -1351,4 +1431,86 @@ return f; } +QWaylandQuickItem *QWaylandQuickItemPrivate::findSibling(QWaylandSurface *surface) const +{ + Q_Q(const QWaylandQuickItem); + auto *parent = q->parentItem(); + if (!parent) + return nullptr; + + const auto siblings = q->parentItem()->childItems(); + for (auto *sibling : siblings) { + auto *waylandItem = qobject_cast(sibling); + if (waylandItem && waylandItem->surface() == surface) + return waylandItem; + } + return nullptr; +} + +void QWaylandQuickItemPrivate::placeAboveSibling(QWaylandQuickItem *sibling) +{ + Q_Q(QWaylandQuickItem); + q->stackAfter(sibling); + q->setZ(sibling->z()); + belowParent = sibling->d_func()->belowParent; +} + +void QWaylandQuickItemPrivate::placeBelowSibling(QWaylandQuickItem *sibling) +{ + Q_Q(QWaylandQuickItem); + q->stackBefore(sibling); + q->setZ(sibling->z()); + belowParent = sibling->d_func()->belowParent; +} + +//### does not handle changes in z value if parent is a subsurface +void QWaylandQuickItemPrivate::placeAboveParent() +{ + Q_Q(QWaylandQuickItem); + const auto siblings = q->parentItem()->childItems(); + + // Stack below first (bottom) sibling above parent + bool foundSibling = false; + for (auto it = siblings.cbegin(); it != siblings.cend(); ++it) { + QWaylandQuickItem *sibling = qobject_cast(*it); + if (sibling && !sibling->d_func()->belowParent) { + q->stackBefore(sibling); + foundSibling = true; + break; + } + } + + // No other subsurfaces above parent + if (!foundSibling && siblings.last() != q) + q->stackAfter(siblings.last()); + + q->setZ(q->parentItem()->z()); + belowParent = false; +} + +//### does not handle changes in z value if parent is a subsurface +void QWaylandQuickItemPrivate::placeBelowParent() +{ + Q_Q(QWaylandQuickItem); + const auto siblings = q->parentItem()->childItems(); + + // Stack above last (top) sibling below parent + bool foundSibling = false; + for (auto it = siblings.crbegin(); it != siblings.crend(); ++it) { + QWaylandQuickItem *sibling = qobject_cast(*it); + if (sibling && sibling->d_func()->belowParent) { + q->stackAfter(sibling); + foundSibling = true; + break; + } + } + + // No other subsurfaces below parent + if (!foundSibling && siblings.first() != q) + q->stackBefore(siblings.first()); + + q->setZ(q->parentItem()->z() - 1.0); + belowParent = true; +} + QT_END_NAMESPACE diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandquickitem.h qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandquickitem.h --- qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandquickitem.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandquickitem.h 2019-02-21 12:36:59.000000000 +0000 @@ -99,6 +99,7 @@ bool focusOnClick() const; void setFocusOnClick(bool focus); + bool inputRegionContains(const QPointF &localPosition) const; bool inputRegionContains(const QPointF &localPosition); Q_INVOKABLE QPointF mapToSurface(const QPointF &point) const; @@ -151,6 +152,7 @@ void setPaintEnabled(bool paintEnabled); void raise(); void lower(); + void sendMouseMoveEvent(const QPointF &position, QWaylandSeat *seat = nullptr); private Q_SLOTS: void surfaceMappedChanged(); @@ -159,9 +161,12 @@ void updateSize(); void updateBuffer(bool hasBuffer); void updateWindow(); + void updateOutput(); void beforeSync(); void handleSubsurfaceAdded(QWaylandSurface *childSurface); void handleSubsurfacePosition(const QPoint &pos); + void handlePlaceAbove(QWaylandSurface *referenceSurface); + void handlePlaceBelow(QWaylandSurface *referenceSurface); #if QT_CONFIG(draganddrop) void handleDragStarted(QWaylandDrag *drag); #endif diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandquickitem_p.h qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandquickitem_p.h --- qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandquickitem_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandquickitem_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -128,6 +128,7 @@ QObject::connect(view.data(), &QWaylandView::surfaceChanged, q, &QWaylandQuickItem::handleSurfaceChanged); QObject::connect(view.data(), &QWaylandView::surfaceDestroyed, q, &QWaylandQuickItem::surfaceDestroyed); QObject::connect(view.data(), &QWaylandView::outputChanged, q, &QWaylandQuickItem::outputChanged); + QObject::connect(view.data(), &QWaylandView::outputChanged, q, &QWaylandQuickItem::updateOutput); QObject::connect(view.data(), &QWaylandView::bufferLockedChanged, q, &QWaylandQuickItem::bufferLockedChanged); QObject::connect(view.data(), &QWaylandView::allowDiscardFrontBufferChanged, q, &QWaylandQuickItem::allowDiscardFrontBuffer); @@ -151,6 +152,12 @@ bool shouldSendInputEvents() const { return view->surface() && inputEventsEnabled; } qreal scaleFactor() const; + QWaylandQuickItem *findSibling(QWaylandSurface *surface) const; + void placeAboveSibling(QWaylandQuickItem *sibling); + void placeBelowSibling(QWaylandQuickItem *sibling); + void placeAboveParent(); + void placeBelowParent(); + static QMutex *mutex; QScopedPointer view; @@ -163,10 +170,12 @@ bool newTexture = false; bool focusOnClick = true; bool sizeFollowsSurface = true; + bool belowParent = false; QPoint hoverPos; QMatrix4x4 lastMatrix; QQuickWindow *connectedWindow = nullptr; + QWaylandOutput *connectedOutput = nullptr; QWaylandSurface::Origin origin = QWaylandSurface::OriginTopLeft; QPointer subsurfaceHandler; QVector touchingSeats; diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandquickoutput.cpp qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandquickoutput.cpp --- qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandquickoutput.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandquickoutput.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -66,7 +66,7 @@ this, &QWaylandQuickOutput::updateStarted, Qt::DirectConnection); - connect(quickWindow, &QQuickWindow::beforeRendering, + connect(quickWindow, &QQuickWindow::afterRendering, this, &QWaylandQuickOutput::doFrameCallbacks); } diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandquickoutput.h qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandquickoutput.h --- qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandquickoutput.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandquickoutput.h 2019-02-21 12:36:59.000000000 +0000 @@ -43,6 +43,7 @@ #include #include +#include QT_BEGIN_NAMESPACE @@ -53,6 +54,7 @@ { Q_INTERFACES(QQmlParserStatus) Q_OBJECT + Q_WAYLAND_COMPOSITOR_DECLARE_QUICK_CHILDREN(QWaylandQuickOutput) Q_PROPERTY(bool automaticFrameCallback READ automaticFrameCallback WRITE setAutomaticFrameCallback NOTIFY automaticFrameCallbackChanged) public: QWaylandQuickOutput(); diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandquicksurface.h qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandquicksurface.h --- qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandquicksurface.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandquicksurface.h 2019-02-21 12:36:59.000000000 +0000 @@ -41,6 +41,7 @@ #define QQUICKWAYLANDSURFACE_H #include +#include struct wl_client; @@ -53,6 +54,7 @@ { Q_OBJECT Q_DECLARE_PRIVATE(QWaylandQuickSurface) + Q_WAYLAND_COMPOSITOR_DECLARE_QUICK_CHILDREN(QWaylandQuickSurface) Q_PROPERTY(bool useTextureAlpha READ useTextureAlpha WRITE setUseTextureAlpha NOTIFY useTextureAlphaChanged) Q_PROPERTY(bool clientRenderingEnabled READ clientRenderingEnabled WRITE setClientRenderingEnabled NOTIFY clientRenderingEnabledChanged) public: diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandseat.cpp qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandseat.cpp --- qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandseat.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandseat.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -440,10 +440,50 @@ return; if (!d->keyboard.isNull() && !event->isAutoRepeat()) { + + uint scanCode = event->nativeScanCode(); + if (scanCode == 0) + scanCode = d->keyboard->keyToScanCode(event->key()); + + if (scanCode == 0) { + qWarning() << "Can't send Wayland key event: Unable to get a valid scan code"; + return; + } + if (event->type() == QEvent::KeyPress) - d->keyboard->sendKeyPressEvent(event->nativeScanCode()); + d->keyboard->sendKeyPressEvent(scanCode); else if (event->type() == QEvent::KeyRelease) - d->keyboard->sendKeyReleaseEvent(event->nativeScanCode()); + d->keyboard->sendKeyReleaseEvent(scanCode); + } +} + +/*! + * \qmlmethod void QtWaylandCompositor::WaylandSeat::sendKeyEvent(int qtKey, bool pressed) + * \since 5.12 + * + * Sends a key press or release to the keyboard device. + */ + +/*! + * Sends a key press or release to the keyboard device. + * + * \since 5.12 + */ +void QWaylandSeat::sendKeyEvent(int qtKey, bool pressed) +{ + Q_D(QWaylandSeat); + if (!keyboardFocus()) { + qWarning("Cannot send Wayland key event, no keyboard focus, fix the compositor"); + return; + } + + if (auto scanCode = d->keyboard->keyToScanCode(qtKey)) { + if (pressed) + d->keyboard->sendKeyPressEvent(scanCode); + else + d->keyboard->sendKeyReleaseEvent(scanCode); + } else { + qWarning() << "Can't send Wayland key event: Unable to get scan code for" << Qt::Key(qtKey); } } @@ -591,7 +631,9 @@ */ QWaylandSeat *QWaylandSeat::fromSeatResource(struct ::wl_resource *resource) { - return static_cast(QWaylandSeatPrivate::Resource::fromResource(resource)->seat_object)->q_func(); + if (auto *r = QWaylandSeatPrivate::Resource::fromResource(resource)) + return static_cast(r->seat_object)->q_func(); + return nullptr; } /*! diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandseat.h qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandseat.h --- qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandseat.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandseat.h 2019-02-21 12:36:59.000000000 +0000 @@ -97,6 +97,7 @@ void sendKeyReleaseEvent(uint code); void sendFullKeyEvent(QKeyEvent *event); + Q_INVOKABLE void sendKeyEvent(int qtKey, bool pressed); uint sendTouchPointEvent(QWaylandSurface *surface, int id, const QPointF &point, Qt::TouchPointState state); Q_INVOKABLE uint sendTouchPointPressed(QWaylandSurface *surface, int id, const QPointF &position); diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandsurface.cpp qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandsurface.cpp --- qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandsurface.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandsurface.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -76,12 +76,7 @@ : surface(surf) , resource(res) { -#if WAYLAND_VERSION_MAJOR < 1 || (WAYLAND_VERSION_MAJOR == 1 && WAYLAND_VERSION_MINOR <= 2) - res->data = this; - res->destroy = destroyCallback; -#else wl_resource_set_implementation(res, nullptr, this, destroyCallback); -#endif } ~FrameCallback() { @@ -100,11 +95,7 @@ } static void destroyCallback(wl_resource *res) { -#if WAYLAND_VERSION_MAJOR < 1 || (WAYLAND_VERSION_MAJOR == 1 && WAYLAND_VERSION_MINOR <= 2) - FrameCallback *_this = static_cast(res->data); -#else FrameCallback *_this = static_cast(wl_resource_get_user_data(res)); -#endif if (_this->surface) QWaylandSurfacePrivate::get(_this->surface)->removeFrameCallback(_this); delete _this; @@ -150,25 +141,6 @@ c->destroy(); } -void QWaylandSurfacePrivate::setSize(const QSize &s) -{ - Q_Q(QWaylandSurface); - if (size != s) { - opaqueRegion = QRegion(); - size = s; - q->sizeChanged(); - } -} - -void QWaylandSurfacePrivate::setBufferScale(int scale) -{ - Q_Q(QWaylandSurface); - if (scale == bufferScale) - return; - bufferScale = scale; - emit q->bufferScaleChanged(); -} - void QWaylandSurfacePrivate::removeFrameCallback(QtWayland::FrameCallback *callback) { pendingFrameCallbacks.removeOne(callback); @@ -244,7 +216,7 @@ void QWaylandSurfacePrivate::surface_set_opaque_region(Resource *, struct wl_resource *region) { - opaqueRegion = region ? QtWayland::Region::fromResource(region)->region() : QRegion(); + pending.opaqueRegion = region ? QtWayland::Region::fromResource(region)->region() : QRegion(); } void QWaylandSurfacePrivate::surface_set_input_region(Resource *, struct wl_resource *region) @@ -260,42 +232,53 @@ { Q_Q(QWaylandSurface); + // Needed in order to know whether we want to emit signals later + QSize oldBufferSize = bufferSize; + bool oldHasContent = hasContent; + int oldBufferScale = bufferScale; + + // Update all internal state if (pending.buffer.hasBuffer() || pending.newlyAttached) bufferRef = pending.buffer; - - auto buffer = bufferRef.buffer(); - if (buffer) - buffer->setCommitted(pending.damage); - - setSize(bufferRef.size()); - damage = pending.damage.intersected(QRect(QPoint(), size)); - - for (int i = 0; i < views.size(); i++) { - views.at(i)->bufferCommitted(bufferRef, damage); - } - - emit q->damaged(damage); - - bool oldHasContent = hasContent; + bufferSize = bufferRef.size(); + damage = pending.damage.intersected(QRect(QPoint(), bufferSize)); hasContent = bufferRef.hasContent(); - if (oldHasContent != hasContent) - emit q->hasContentChanged(); - - if (!pending.offset.isNull()) - emit q->offsetForNextFrame(pending.offset); - - setBufferScale(pending.bufferScale); - + bufferScale = pending.bufferScale; + frameCallbacks << pendingFrameCallbacks; + inputRegion = pending.inputRegion.intersected(QRect(QPoint(), bufferSize)); + opaqueRegion = pending.opaqueRegion.intersected(QRect(QPoint(), bufferSize)); + QPoint offsetForNextFrame = pending.offset; + // Clear per-commit state pending.buffer = QWaylandBufferRef(); pending.offset = QPoint(); pending.newlyAttached = false; pending.damage = QRegion(); - - frameCallbacks << pendingFrameCallbacks; pendingFrameCallbacks.clear(); - inputRegion = pending.inputRegion.intersected(QRect(QPoint(), size)); + // Notify buffers and views + if (auto *buffer = bufferRef.buffer()) + buffer->setCommitted(damage); + for (auto *view : qAsConst(views)) + view->bufferCommitted(bufferRef, damage); + + // Now all double-buffered state has been applied so it's safe to emit general signals + // i.e. we won't have inconsistensies such as mismatched surface size and buffer scale in + // signal handlers. + + emit q->damaged(damage); + + if (oldBufferSize != bufferSize) + emit q->sizeChanged(); + + if (oldBufferScale != bufferScale) + emit q->bufferScaleChanged(); + + if (oldHasContent != hasContent) + emit q->hasContentChanged(); + + if (!offsetForNextFrame.isNull()) + emit q->offsetForNextFrame(offsetForNextFrame); emit q->redraw(); } @@ -448,6 +431,19 @@ } /*! + * \property QWaylandSurface::waylandClient + * + * This property holds the \c wl_client using this QWaylandSurface. + */ +::wl_client *QWaylandSurface::waylandClient() const +{ + if (auto *c = client()) + return c->client(); + + return nullptr; +} + +/*! * \qmlproperty bool QtWaylandCompositor::WaylandSurface::hasContent * * This property holds whether the WaylandSurface has content. @@ -478,7 +474,7 @@ QSize QWaylandSurface::size() const { Q_D(const QWaylandSurface); - return d->size; + return d->bufferSize; } /*! @@ -748,7 +744,9 @@ */ QWaylandSurface *QWaylandSurface::fromResource(::wl_resource *res) { - return static_cast(QWaylandSurfacePrivate::Resource::fromResource(res)->surface_object)->q_func(); + if (auto *r = QWaylandSurfacePrivate::Resource::fromResource(res)) + return static_cast(r->surface_object)->q_func(); + return nullptr; } /*! @@ -882,7 +880,6 @@ * This signal is emitted when a wl_subsurface, \a child, has been added to the surface. */ - void surfaceDestroyed(); /*! * \qmlsignal QtWaylandCompositor::WaylandSurface::surfaceDestroyed() * diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandsurface.h qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandsurface.h --- qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandsurface.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandsurface.h 2019-02-21 12:36:59.000000000 +0000 @@ -103,7 +103,7 @@ bool isInitialized() const; QWaylandClient *client() const; - struct wl_client *waylandClient() const { return client()->client(); } + ::wl_client *waylandClient() const; bool setRole(QWaylandSurfaceRole *role, wl_resource *errorResource, uint32_t errorCode); QWaylandSurfaceRole *role() const; diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandsurface_p.h qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandsurface_p.h --- qtwayland-opensource-src-5.11.3/src/compositor/compositor_api/qwaylandsurface_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/compositor_api/qwaylandsurface_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -102,9 +102,6 @@ using QtWaylandServer::wl_surface::resource; - void setSize(const QSize &size); - void setBufferScale(int bufferScale); - void removeFrameCallback(QtWayland::FrameCallback *callback); void notifyViewsAboutDestruction(); @@ -155,6 +152,7 @@ bool newlyAttached; QRegion inputRegion; int bufferScale; + QRegion opaqueRegion; } pending; QPoint lastLocalMousePos; @@ -168,7 +166,7 @@ QRegion inputRegion; QRegion opaqueRegion; - QSize size; + QSize bufferSize; int bufferScale = 1; bool isCursorSurface = false; bool destroyed = false; diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/configure.json qtwayland-opensource-src-5.12.2/src/compositor/configure.json --- qtwayland-opensource-src-5.11.3/src/compositor/configure.json 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/configure.json 2019-02-21 12:36:59.000000000 +0000 @@ -73,6 +73,12 @@ "type": "compile", "test": "libhybris_egl_server", "use": "egl" + }, + "dmabuf-server-buffer": { + "label": "Linux dma-buf Buffer Sharing", + "type": "compile", + "test": "dmabuf_server_buffer", + "use": "egl" } }, @@ -106,16 +112,26 @@ "condition": "features.wayland-server && features.opengl && !features.opengles2 && libs.xcomposite && libs.glx", "output": [ "privateFeature" ] }, - "drm-egl-server": { + "wayland-drm-egl-server-buffer": { "label": "DRM EGL", "condition": "features.wayland-server && features.opengl && features.egl && tests.drm-egl-server", "output": [ "privateFeature" ] }, - "libhybris-egl-server": { + "wayland-libhybris-egl-server-buffer": { "label": "libhybris EGL", "condition": "features.wayland-server && features.opengl && features.egl && tests.libhybris-egl-server", "output": [ "privateFeature" ] }, + "wayland-dmabuf-server-buffer": { + "label": "Linux dma-buf server buffer integration", + "condition": "features.wayland-server && features.opengl && features.egl && tests.dmabuf-server-buffer", + "output": [ "privateFeature" ] + }, + "wayland-shm-emulation-server-buffer": { + "label": "Shm emulation server buffer", + "condition": "features.wayland-server && features.opengl", + "output": [ "privateFeature" ] + }, "wayland-layer-integration-vsp2": { "label": "VSP2 hardware layer integration", "condition": "features.wayland-server && features.eglfs_vsp2 && libs.wayland-kms", diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/doc/qtwaylandcompositor.qdocconf qtwayland-opensource-src-5.12.2/src/compositor/doc/qtwaylandcompositor.qdocconf --- qtwayland-opensource-src-5.11.3/src/compositor/doc/qtwaylandcompositor.qdocconf 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/doc/qtwaylandcompositor.qdocconf 2019-02-21 12:36:59.000000000 +0000 @@ -7,7 +7,7 @@ qhp.projects = QtWaylandCompositor qhp.QtWaylandCompositor.file = qtwaylandcompositor.qhp -qhp.QtWaylandCompositor.namespace = org.qtproject.qtwaylandcompositor.$QT_VERSION_TAG +qhp.QtWaylandCompositor.namespace = org.qt-project.qtwaylandcompositor.$QT_VERSION_TAG qhp.QtWaylandCompositor.virtualFolder = qtwaylandcompositor qhp.QtWaylandCompositor.indexTitle = Qt Wayland Compositor qhp.QtWaylandCompositor.indexRoot = diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/extensions/extensions.pri qtwayland-opensource-src-5.12.2/src/compositor/extensions/extensions.pri --- qtwayland-opensource-src-5.11.3/src/compositor/extensions/extensions.pri 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/extensions/extensions.pri 2019-02-21 12:36:59.000000000 +0000 @@ -6,11 +6,12 @@ WAYLANDSERVERSOURCES += \ ../extensions/touch-extension.xml \ - ../extensions/qtkey-extension.xml \ + ../extensions/qt-key-unstable-v1.xml \ ../extensions/qt-windowmanager.xml \ ../3rdparty/protocol/text-input-unstable-v2.xml \ - ../3rdparty/protocol/xdg-shell.xml \ ../3rdparty/protocol/xdg-shell-unstable-v6.xml \ + ../3rdparty/protocol/xdg-shell.xml \ + ../3rdparty/protocol/xdg-decoration-unstable-v1.xml \ ../3rdparty/protocol/ivi-application.xml \ HEADERS += \ @@ -30,6 +31,10 @@ extensions/qwaylandxdgshellv5_p.h \ extensions/qwaylandxdgshellv6.h \ extensions/qwaylandxdgshellv6_p.h \ + extensions/qwaylandxdgshell.h \ + extensions/qwaylandxdgshell_p.h \ + extensions/qwaylandxdgdecorationv1.h \ + extensions/qwaylandxdgdecorationv1_p.h \ extensions/qwaylandshellsurface.h \ extensions/qwaylandiviapplication.h \ extensions/qwaylandiviapplication_p.h \ @@ -46,6 +51,8 @@ extensions/qwaylandqtwindowmanager.cpp \ extensions/qwaylandxdgshellv5.cpp \ extensions/qwaylandxdgshellv6.cpp \ + extensions/qwaylandxdgshell.cpp \ + extensions/qwaylandxdgdecorationv1.cpp \ extensions/qwaylandshellsurface.cpp \ extensions/qwaylandiviapplication.cpp \ extensions/qwaylandivisurface.cpp \ @@ -58,6 +65,7 @@ extensions/qwaylandwlshellintegration_p.h \ extensions/qwaylandxdgshellv5integration_p.h \ extensions/qwaylandxdgshellv6integration_p.h \ + extensions/qwaylandxdgshellintegration_p.h SOURCES += \ extensions/qwaylandquickshellsurfaceitem.cpp \ @@ -65,7 +73,10 @@ extensions/qwaylandwlshellintegration.cpp \ extensions/qwaylandxdgshellv5integration.cpp \ extensions/qwaylandxdgshellv6integration.cpp \ + extensions/qwaylandxdgshellintegration.cpp } +include ($$PWD/pregenerated/xdg-shell-v5.pri) + INCLUDEPATH += extensions diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/extensions/pregenerated/3rdparty/qwayland-server-xdg-shell-unstable-v5.cpp qtwayland-opensource-src-5.12.2/src/compositor/extensions/pregenerated/3rdparty/qwayland-server-xdg-shell-unstable-v5.cpp --- qtwayland-opensource-src-5.11.3/src/compositor/extensions/pregenerated/3rdparty/qwayland-server-xdg-shell-unstable-v5.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/extensions/pregenerated/3rdparty/qwayland-server-xdg-shell-unstable-v5.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,890 @@ +/* + * Copyright © 2008-2013 Kristian Høgsberg + * Copyright © 2013 Rafael Antognolli + * Copyright © 2013 Jasper St. Pierre + * Copyright © 2010-2013 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#include + +QT_BEGIN_NAMESPACE +QT_WARNING_PUSH +QT_WARNING_DISABLE_GCC("-Wmissing-field-initializers") + +namespace QtWaylandServer { + xdg_shell_v5::xdg_shell_v5(struct ::wl_client *client, int id, int version) + : m_resource_map() + , m_resource(nullptr) + , m_global(nullptr) + { + init(client, id, version); + } + + xdg_shell_v5::xdg_shell_v5(struct ::wl_display *display, int version) + : m_resource_map() + , m_resource(nullptr) + , m_global(nullptr) + { + init(display, version); + } + + xdg_shell_v5::xdg_shell_v5(struct ::wl_resource *resource) + : m_resource_map() + , m_resource(nullptr) + , m_global(nullptr) + { + init(resource); + } + + xdg_shell_v5::xdg_shell_v5() + : m_resource_map() + , m_resource(nullptr) + , m_global(nullptr) + { + } + + xdg_shell_v5::~xdg_shell_v5() + { + for (auto resource : qAsConst(m_resource_map)) + wl_resource_set_implementation(resource->handle, nullptr, nullptr, nullptr); + + if (m_global) { + wl_global_destroy(m_global); + wl_list_remove(&m_displayDestroyedListener.link); + } + } + + void xdg_shell_v5::init(struct ::wl_client *client, int id, int version) + { + m_resource = bind(client, id, version); + } + + void xdg_shell_v5::init(struct ::wl_resource *resource) + { + m_resource = bind(resource); + } + + xdg_shell_v5::Resource *xdg_shell_v5::add(struct ::wl_client *client, int version) + { + Resource *resource = bind(client, 0, version); + m_resource_map.insert(client, resource); + return resource; + } + + xdg_shell_v5::Resource *xdg_shell_v5::add(struct ::wl_client *client, int id, int version) + { + Resource *resource = bind(client, id, version); + m_resource_map.insert(client, resource); + return resource; + } + + void xdg_shell_v5::init(struct ::wl_display *display, int version) + { + m_global = wl_global_create(display, &::xdg_shell_v5_interface, version, this, bind_func); + m_globalVersion = version; + m_displayDestroyedListener.notify = xdg_shell_v5::display_destroy_func; + m_displayDestroyedListener.parent = this; + wl_display_add_destroy_listener(display, &m_displayDestroyedListener); + } + + const struct wl_interface *xdg_shell_v5::interface() + { + return &::xdg_shell_v5_interface; + } + + xdg_shell_v5::Resource *xdg_shell_v5::xdg_shell_allocate() + { + return new Resource; + } + + void xdg_shell_v5::xdg_shell_bind_resource(Resource *) + { + } + + void xdg_shell_v5::xdg_shell_destroy_resource(Resource *) + { + } + + void xdg_shell_v5::bind_func(struct ::wl_client *client, void *data, uint32_t version, uint32_t id) + { + xdg_shell_v5 *that = static_cast(data); + that->add(client, id, qMin(that->m_globalVersion, version)); + } + + void xdg_shell_v5::display_destroy_func(struct ::wl_listener *listener, void *data) + { + Q_UNUSED(data); + xdg_shell_v5 *that = static_cast(listener)->parent; + that->m_global = nullptr; + } + + void xdg_shell_v5::destroy_func(struct ::wl_resource *client_resource) + { + Resource *resource = Resource::fromResource(client_resource); + xdg_shell_v5 *that = resource->xdg_shell_object; + that->m_resource_map.remove(resource->client(), resource); + that->xdg_shell_destroy_resource(resource); + delete resource; + } + + xdg_shell_v5::Resource *xdg_shell_v5::bind(struct ::wl_client *client, uint32_t id, int version) + { + Q_ASSERT_X(!wl_client_get_object(client, id), "QWaylandObject bind", QStringLiteral("binding to object %1 more than once").arg(id).toLocal8Bit().constData()); + struct ::wl_resource *handle = wl_resource_create(client, &::xdg_shell_v5_interface, version, id); + return bind(handle); + } + + xdg_shell_v5::Resource *xdg_shell_v5::bind(struct ::wl_resource *handle) + { + Resource *resource = xdg_shell_allocate(); + resource->xdg_shell_object = this; + + wl_resource_set_implementation(handle, &m_xdg_shell_interface, resource, destroy_func); + resource->handle = handle; + xdg_shell_bind_resource(resource); + return resource; + } + xdg_shell_v5::Resource *xdg_shell_v5::Resource::fromResource(struct ::wl_resource *resource) + { + if (wl_resource_instance_of(resource, &::xdg_shell_v5_interface, &m_xdg_shell_interface)) + return static_cast(resource->data); + return nullptr; + } + + const struct ::xdg_shell_v5_interface xdg_shell_v5::m_xdg_shell_interface = { + xdg_shell_v5::handle_destroy, + xdg_shell_v5::handle_use_unstable_version, + xdg_shell_v5::handle_get_xdg_surface, + xdg_shell_v5::handle_get_xdg_popup, + xdg_shell_v5::handle_pong + }; + + void xdg_shell_v5::xdg_shell_destroy(Resource *) + { + } + + void xdg_shell_v5::xdg_shell_use_unstable_version(Resource *, int32_t ) + { + } + + void xdg_shell_v5::xdg_shell_get_xdg_surface(Resource *, uint32_t, struct ::wl_resource *) + { + } + + void xdg_shell_v5::xdg_shell_get_xdg_popup(Resource *, uint32_t, struct ::wl_resource *, struct ::wl_resource *, struct ::wl_resource *, uint32_t , int32_t , int32_t ) + { + } + + void xdg_shell_v5::xdg_shell_pong(Resource *, uint32_t ) + { + } + + + void xdg_shell_v5::handle_destroy( + ::wl_client *client, + struct wl_resource *resource) + { + Q_UNUSED(client); + Resource *r = Resource::fromResource(resource); + static_cast(r->xdg_shell_object)->xdg_shell_destroy( + r); + } + + void xdg_shell_v5::handle_use_unstable_version( + ::wl_client *client, + struct wl_resource *resource, + int32_t version) + { + Q_UNUSED(client); + Resource *r = Resource::fromResource(resource); + static_cast(r->xdg_shell_object)->xdg_shell_use_unstable_version( + r, + version); + } + + void xdg_shell_v5::handle_get_xdg_surface( + ::wl_client *client, + struct wl_resource *resource, + uint32_t id, + struct ::wl_resource *surface) + { + Q_UNUSED(client); + Resource *r = Resource::fromResource(resource); + static_cast(r->xdg_shell_object)->xdg_shell_get_xdg_surface( + r, + id, + surface); + } + + void xdg_shell_v5::handle_get_xdg_popup( + ::wl_client *client, + struct wl_resource *resource, + uint32_t id, + struct ::wl_resource *surface, + struct ::wl_resource *parent, + struct ::wl_resource *seat, + uint32_t serial, + int32_t x, + int32_t y) + { + Q_UNUSED(client); + Resource *r = Resource::fromResource(resource); + static_cast(r->xdg_shell_object)->xdg_shell_get_xdg_popup( + r, + id, + surface, + parent, + seat, + serial, + x, + y); + } + + void xdg_shell_v5::handle_pong( + ::wl_client *client, + struct wl_resource *resource, + uint32_t serial) + { + Q_UNUSED(client); + Resource *r = Resource::fromResource(resource); + static_cast(r->xdg_shell_object)->xdg_shell_pong( + r, + serial); + } + + void xdg_shell_v5::send_ping(uint32_t serial) + { + send_ping( + m_resource->handle, + serial); + } + + void xdg_shell_v5::send_ping(struct ::wl_resource *resource, uint32_t serial) + { + xdg_shell_send_ping( + resource, + serial); + } + + + xdg_surface_v5::xdg_surface_v5(struct ::wl_client *client, int id, int version) + : m_resource_map() + , m_resource(nullptr) + , m_global(nullptr) + { + init(client, id, version); + } + + xdg_surface_v5::xdg_surface_v5(struct ::wl_display *display, int version) + : m_resource_map() + , m_resource(nullptr) + , m_global(nullptr) + { + init(display, version); + } + + xdg_surface_v5::xdg_surface_v5(struct ::wl_resource *resource) + : m_resource_map() + , m_resource(nullptr) + , m_global(nullptr) + { + init(resource); + } + + xdg_surface_v5::xdg_surface_v5() + : m_resource_map() + , m_resource(nullptr) + , m_global(nullptr) + { + } + + xdg_surface_v5::~xdg_surface_v5() + { + for (auto resource : qAsConst(m_resource_map)) + wl_resource_set_implementation(resource->handle, nullptr, nullptr, nullptr); + + if (m_global) { + wl_global_destroy(m_global); + wl_list_remove(&m_displayDestroyedListener.link); + } + } + + void xdg_surface_v5::init(struct ::wl_client *client, int id, int version) + { + m_resource = bind(client, id, version); + } + + void xdg_surface_v5::init(struct ::wl_resource *resource) + { + m_resource = bind(resource); + } + + xdg_surface_v5::Resource *xdg_surface_v5::add(struct ::wl_client *client, int version) + { + Resource *resource = bind(client, 0, version); + m_resource_map.insert(client, resource); + return resource; + } + + xdg_surface_v5::Resource *xdg_surface_v5::add(struct ::wl_client *client, int id, int version) + { + Resource *resource = bind(client, id, version); + m_resource_map.insert(client, resource); + return resource; + } + + void xdg_surface_v5::init(struct ::wl_display *display, int version) + { + m_global = wl_global_create(display, &::xdg_surface_v5_interface, version, this, bind_func); + m_globalVersion = version; + m_displayDestroyedListener.notify = xdg_surface_v5::display_destroy_func; + m_displayDestroyedListener.parent = this; + wl_display_add_destroy_listener(display, &m_displayDestroyedListener); + } + + const struct wl_interface *xdg_surface_v5::interface() + { + return &::xdg_surface_v5_interface; + } + + xdg_surface_v5::Resource *xdg_surface_v5::xdg_surface_allocate() + { + return new Resource; + } + + void xdg_surface_v5::xdg_surface_bind_resource(Resource *) + { + } + + void xdg_surface_v5::xdg_surface_destroy_resource(Resource *) + { + } + + void xdg_surface_v5::bind_func(struct ::wl_client *client, void *data, uint32_t version, uint32_t id) + { + xdg_surface_v5 *that = static_cast(data); + that->add(client, id, qMin(that->m_globalVersion, version)); + } + + void xdg_surface_v5::display_destroy_func(struct ::wl_listener *listener, void *data) + { + Q_UNUSED(data); + xdg_surface_v5 *that = static_cast(listener)->parent; + that->m_global = nullptr; + } + + void xdg_surface_v5::destroy_func(struct ::wl_resource *client_resource) + { + Resource *resource = Resource::fromResource(client_resource); + xdg_surface_v5 *that = resource->xdg_surface_object; + that->m_resource_map.remove(resource->client(), resource); + that->xdg_surface_destroy_resource(resource); + delete resource; + } + + xdg_surface_v5::Resource *xdg_surface_v5::bind(struct ::wl_client *client, uint32_t id, int version) + { + Q_ASSERT_X(!wl_client_get_object(client, id), "QWaylandObject bind", QStringLiteral("binding to object %1 more than once").arg(id).toLocal8Bit().constData()); + struct ::wl_resource *handle = wl_resource_create(client, &::xdg_surface_v5_interface, version, id); + return bind(handle); + } + + xdg_surface_v5::Resource *xdg_surface_v5::bind(struct ::wl_resource *handle) + { + Resource *resource = xdg_surface_allocate(); + resource->xdg_surface_object = this; + + wl_resource_set_implementation(handle, &m_xdg_surface_interface, resource, destroy_func); + resource->handle = handle; + xdg_surface_bind_resource(resource); + return resource; + } + xdg_surface_v5::Resource *xdg_surface_v5::Resource::fromResource(struct ::wl_resource *resource) + { + if (wl_resource_instance_of(resource, &::xdg_surface_v5_interface, &m_xdg_surface_interface)) + return static_cast(resource->data); + return nullptr; + } + + const struct ::xdg_surface_v5_interface xdg_surface_v5::m_xdg_surface_interface = { + xdg_surface_v5::handle_destroy, + xdg_surface_v5::handle_set_parent, + xdg_surface_v5::handle_set_title, + xdg_surface_v5::handle_set_app_id, + xdg_surface_v5::handle_show_window_menu, + xdg_surface_v5::handle_move, + xdg_surface_v5::handle_resize, + xdg_surface_v5::handle_ack_configure, + xdg_surface_v5::handle_set_window_geometry, + xdg_surface_v5::handle_set_maximized, + xdg_surface_v5::handle_unset_maximized, + xdg_surface_v5::handle_set_fullscreen, + xdg_surface_v5::handle_unset_fullscreen, + xdg_surface_v5::handle_set_minimized + }; + + void xdg_surface_v5::xdg_surface_destroy(Resource *) + { + } + + void xdg_surface_v5::xdg_surface_set_parent(Resource *, struct ::wl_resource *) + { + } + + void xdg_surface_v5::xdg_surface_set_title(Resource *, const QString &) + { + } + + void xdg_surface_v5::xdg_surface_set_app_id(Resource *, const QString &) + { + } + + void xdg_surface_v5::xdg_surface_show_window_menu(Resource *, struct ::wl_resource *, uint32_t , int32_t , int32_t ) + { + } + + void xdg_surface_v5::xdg_surface_move(Resource *, struct ::wl_resource *, uint32_t ) + { + } + + void xdg_surface_v5::xdg_surface_resize(Resource *, struct ::wl_resource *, uint32_t , uint32_t ) + { + } + + void xdg_surface_v5::xdg_surface_ack_configure(Resource *, uint32_t ) + { + } + + void xdg_surface_v5::xdg_surface_set_window_geometry(Resource *, int32_t , int32_t , int32_t , int32_t ) + { + } + + void xdg_surface_v5::xdg_surface_set_maximized(Resource *) + { + } + + void xdg_surface_v5::xdg_surface_unset_maximized(Resource *) + { + } + + void xdg_surface_v5::xdg_surface_set_fullscreen(Resource *, struct ::wl_resource *) + { + } + + void xdg_surface_v5::xdg_surface_unset_fullscreen(Resource *) + { + } + + void xdg_surface_v5::xdg_surface_set_minimized(Resource *) + { + } + + + void xdg_surface_v5::handle_destroy( + ::wl_client *client, + struct wl_resource *resource) + { + Q_UNUSED(client); + Resource *r = Resource::fromResource(resource); + static_cast(r->xdg_surface_object)->xdg_surface_destroy( + r); + } + + void xdg_surface_v5::handle_set_parent( + ::wl_client *client, + struct wl_resource *resource, + struct ::wl_resource *parent) + { + Q_UNUSED(client); + Resource *r = Resource::fromResource(resource); + static_cast(r->xdg_surface_object)->xdg_surface_set_parent( + r, + parent); + } + + void xdg_surface_v5::handle_set_title( + ::wl_client *client, + struct wl_resource *resource, + const char *title) + { + Q_UNUSED(client); + Resource *r = Resource::fromResource(resource); + static_cast(r->xdg_surface_object)->xdg_surface_set_title( + r, + QString::fromUtf8(title)); + } + + void xdg_surface_v5::handle_set_app_id( + ::wl_client *client, + struct wl_resource *resource, + const char *app_id) + { + Q_UNUSED(client); + Resource *r = Resource::fromResource(resource); + static_cast(r->xdg_surface_object)->xdg_surface_set_app_id( + r, + QString::fromUtf8(app_id)); + } + + void xdg_surface_v5::handle_show_window_menu( + ::wl_client *client, + struct wl_resource *resource, + struct ::wl_resource *seat, + uint32_t serial, + int32_t x, + int32_t y) + { + Q_UNUSED(client); + Resource *r = Resource::fromResource(resource); + static_cast(r->xdg_surface_object)->xdg_surface_show_window_menu( + r, + seat, + serial, + x, + y); + } + + void xdg_surface_v5::handle_move( + ::wl_client *client, + struct wl_resource *resource, + struct ::wl_resource *seat, + uint32_t serial) + { + Q_UNUSED(client); + Resource *r = Resource::fromResource(resource); + static_cast(r->xdg_surface_object)->xdg_surface_move( + r, + seat, + serial); + } + + void xdg_surface_v5::handle_resize( + ::wl_client *client, + struct wl_resource *resource, + struct ::wl_resource *seat, + uint32_t serial, + uint32_t edges) + { + Q_UNUSED(client); + Resource *r = Resource::fromResource(resource); + static_cast(r->xdg_surface_object)->xdg_surface_resize( + r, + seat, + serial, + edges); + } + + void xdg_surface_v5::handle_ack_configure( + ::wl_client *client, + struct wl_resource *resource, + uint32_t serial) + { + Q_UNUSED(client); + Resource *r = Resource::fromResource(resource); + static_cast(r->xdg_surface_object)->xdg_surface_ack_configure( + r, + serial); + } + + void xdg_surface_v5::handle_set_window_geometry( + ::wl_client *client, + struct wl_resource *resource, + int32_t x, + int32_t y, + int32_t width, + int32_t height) + { + Q_UNUSED(client); + Resource *r = Resource::fromResource(resource); + static_cast(r->xdg_surface_object)->xdg_surface_set_window_geometry( + r, + x, + y, + width, + height); + } + + void xdg_surface_v5::handle_set_maximized( + ::wl_client *client, + struct wl_resource *resource) + { + Q_UNUSED(client); + Resource *r = Resource::fromResource(resource); + static_cast(r->xdg_surface_object)->xdg_surface_set_maximized( + r); + } + + void xdg_surface_v5::handle_unset_maximized( + ::wl_client *client, + struct wl_resource *resource) + { + Q_UNUSED(client); + Resource *r = Resource::fromResource(resource); + static_cast(r->xdg_surface_object)->xdg_surface_unset_maximized( + r); + } + + void xdg_surface_v5::handle_set_fullscreen( + ::wl_client *client, + struct wl_resource *resource, + struct ::wl_resource *output) + { + Q_UNUSED(client); + Resource *r = Resource::fromResource(resource); + static_cast(r->xdg_surface_object)->xdg_surface_set_fullscreen( + r, + output); + } + + void xdg_surface_v5::handle_unset_fullscreen( + ::wl_client *client, + struct wl_resource *resource) + { + Q_UNUSED(client); + Resource *r = Resource::fromResource(resource); + static_cast(r->xdg_surface_object)->xdg_surface_unset_fullscreen( + r); + } + + void xdg_surface_v5::handle_set_minimized( + ::wl_client *client, + struct wl_resource *resource) + { + Q_UNUSED(client); + Resource *r = Resource::fromResource(resource); + static_cast(r->xdg_surface_object)->xdg_surface_set_minimized( + r); + } + + void xdg_surface_v5::send_configure(int32_t width, int32_t height, const QByteArray &states, uint32_t serial) + { + send_configure( + m_resource->handle, + width, + height, + states, + serial); + } + + void xdg_surface_v5::send_configure(struct ::wl_resource *resource, int32_t width, int32_t height, const QByteArray &states, uint32_t serial) + { + struct wl_array states_data; + states_data.size = states.size(); + states_data.data = static_cast(const_cast(states.constData())); + states_data.alloc = 0; + + xdg_surface_send_configure( + resource, + width, + height, + &states_data, + serial); + } + + + void xdg_surface_v5::send_close() + { + send_close( + m_resource->handle); + } + + void xdg_surface_v5::send_close(struct ::wl_resource *resource) + { + xdg_surface_send_close( + resource); + } + + + xdg_popup_v5::xdg_popup_v5(struct ::wl_client *client, int id, int version) + : m_resource_map() + , m_resource(nullptr) + , m_global(nullptr) + { + init(client, id, version); + } + + xdg_popup_v5::xdg_popup_v5(struct ::wl_display *display, int version) + : m_resource_map() + , m_resource(nullptr) + , m_global(nullptr) + { + init(display, version); + } + + xdg_popup_v5::xdg_popup_v5(struct ::wl_resource *resource) + : m_resource_map() + , m_resource(nullptr) + , m_global(nullptr) + { + init(resource); + } + + xdg_popup_v5::xdg_popup_v5() + : m_resource_map() + , m_resource(nullptr) + , m_global(nullptr) + { + } + + xdg_popup_v5::~xdg_popup_v5() + { + for (auto resource : qAsConst(m_resource_map)) + wl_resource_set_implementation(resource->handle, nullptr, nullptr, nullptr); + + if (m_global) { + wl_global_destroy(m_global); + wl_list_remove(&m_displayDestroyedListener.link); + } + } + + void xdg_popup_v5::init(struct ::wl_client *client, int id, int version) + { + m_resource = bind(client, id, version); + } + + void xdg_popup_v5::init(struct ::wl_resource *resource) + { + m_resource = bind(resource); + } + + xdg_popup_v5::Resource *xdg_popup_v5::add(struct ::wl_client *client, int version) + { + Resource *resource = bind(client, 0, version); + m_resource_map.insert(client, resource); + return resource; + } + + xdg_popup_v5::Resource *xdg_popup_v5::add(struct ::wl_client *client, int id, int version) + { + Resource *resource = bind(client, id, version); + m_resource_map.insert(client, resource); + return resource; + } + + void xdg_popup_v5::init(struct ::wl_display *display, int version) + { + m_global = wl_global_create(display, &::xdg_popup_v5_interface, version, this, bind_func); + m_globalVersion = version; + m_displayDestroyedListener.notify = xdg_popup_v5::display_destroy_func; + m_displayDestroyedListener.parent = this; + wl_display_add_destroy_listener(display, &m_displayDestroyedListener); + } + + const struct wl_interface *xdg_popup_v5::interface() + { + return &::xdg_popup_v5_interface; + } + + xdg_popup_v5::Resource *xdg_popup_v5::xdg_popup_allocate() + { + return new Resource; + } + + void xdg_popup_v5::xdg_popup_bind_resource(Resource *) + { + } + + void xdg_popup_v5::xdg_popup_destroy_resource(Resource *) + { + } + + void xdg_popup_v5::bind_func(struct ::wl_client *client, void *data, uint32_t version, uint32_t id) + { + xdg_popup_v5 *that = static_cast(data); + that->add(client, id, qMin(that->m_globalVersion, version)); + } + + void xdg_popup_v5::display_destroy_func(struct ::wl_listener *listener, void *data) + { + Q_UNUSED(data); + xdg_popup_v5 *that = static_cast(listener)->parent; + that->m_global = nullptr; + } + + void xdg_popup_v5::destroy_func(struct ::wl_resource *client_resource) + { + Resource *resource = Resource::fromResource(client_resource); + xdg_popup_v5 *that = resource->xdg_popup_object; + that->m_resource_map.remove(resource->client(), resource); + that->xdg_popup_destroy_resource(resource); + delete resource; + } + + xdg_popup_v5::Resource *xdg_popup_v5::bind(struct ::wl_client *client, uint32_t id, int version) + { + Q_ASSERT_X(!wl_client_get_object(client, id), "QWaylandObject bind", QStringLiteral("binding to object %1 more than once").arg(id).toLocal8Bit().constData()); + struct ::wl_resource *handle = wl_resource_create(client, &::xdg_popup_v5_interface, version, id); + return bind(handle); + } + + xdg_popup_v5::Resource *xdg_popup_v5::bind(struct ::wl_resource *handle) + { + Resource *resource = xdg_popup_allocate(); + resource->xdg_popup_object = this; + + wl_resource_set_implementation(handle, &m_xdg_popup_interface, resource, destroy_func); + resource->handle = handle; + xdg_popup_bind_resource(resource); + return resource; + } + xdg_popup_v5::Resource *xdg_popup_v5::Resource::fromResource(struct ::wl_resource *resource) + { + if (wl_resource_instance_of(resource, &::xdg_popup_v5_interface, &m_xdg_popup_interface)) + return static_cast(resource->data); + return nullptr; + } + + const struct ::xdg_popup_v5_interface xdg_popup_v5::m_xdg_popup_interface = { + xdg_popup_v5::handle_destroy + }; + + void xdg_popup_v5::xdg_popup_destroy(Resource *) + { + } + + + void xdg_popup_v5::handle_destroy( + ::wl_client *client, + struct wl_resource *resource) + { + Q_UNUSED(client); + Resource *r = Resource::fromResource(resource); + static_cast(r->xdg_popup_object)->xdg_popup_destroy( + r); + } + + void xdg_popup_v5::send_popup_done() + { + send_popup_done( + m_resource->handle); + } + + void xdg_popup_v5::send_popup_done(struct ::wl_resource *resource) + { + xdg_popup_send_popup_done( + resource); + } + +} + +QT_WARNING_POP +QT_END_NAMESPACE diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/extensions/pregenerated/3rdparty/qwayland-server-xdg-shell-unstable-v5_p.h qtwayland-opensource-src-5.12.2/src/compositor/extensions/pregenerated/3rdparty/qwayland-server-xdg-shell-unstable-v5_p.h --- qtwayland-opensource-src-5.11.3/src/compositor/extensions/pregenerated/3rdparty/qwayland-server-xdg-shell-unstable-v5_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/extensions/pregenerated/3rdparty/qwayland-server-xdg-shell-unstable-v5_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,436 @@ +/* + * Copyright © 2008-2013 Kristian Høgsberg + * Copyright © 2013 Rafael Antognolli + * Copyright © 2013 Jasper St. Pierre + * Copyright © 2010-2013 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#ifndef QT_WAYLAND_SERVER_XDG_SHELL_UNSTABLE_V5 +#define QT_WAYLAND_SERVER_XDG_SHELL_UNSTABLE_V5 + +#include "wayland-server.h" +#include +#include +#include +#include + +#ifndef WAYLAND_VERSION_CHECK +#define WAYLAND_VERSION_CHECK(major, minor, micro) \ + ((WAYLAND_VERSION_MAJOR > (major)) || \ + (WAYLAND_VERSION_MAJOR == (major) && WAYLAND_VERSION_MINOR > (minor)) || \ + (WAYLAND_VERSION_MAJOR == (major) && WAYLAND_VERSION_MINOR == (minor) && WAYLAND_VERSION_MICRO >= (micro))) +#endif + +QT_BEGIN_NAMESPACE +QT_WARNING_PUSH +QT_WARNING_DISABLE_GCC("-Wmissing-field-initializers") +QT_WARNING_DISABLE_CLANG("-Wmissing-field-initializers") + +#if !defined(Q_WAYLAND_SERVER_XDG_SHELL_UNSTABLE_V5_EXPORT) +# if defined(QT_SHARED) +# define Q_WAYLAND_SERVER_XDG_SHELL_UNSTABLE_V5_EXPORT Q_DECL_EXPORT +# else +# define Q_WAYLAND_SERVER_XDG_SHELL_UNSTABLE_V5_EXPORT +# endif +#endif + +namespace QtWaylandServer { + class Q_WAYLAND_SERVER_XDG_SHELL_UNSTABLE_V5_EXPORT xdg_shell_v5 + { + public: + xdg_shell_v5(struct ::wl_client *client, int id, int version); + xdg_shell_v5(struct ::wl_display *display, int version); + xdg_shell_v5(struct ::wl_resource *resource); + xdg_shell_v5(); + + virtual ~xdg_shell_v5(); + + class Resource + { + public: + Resource() : xdg_shell_object(nullptr), handle(nullptr) {} + virtual ~Resource() {} + + xdg_shell_v5 *xdg_shell_object; + struct ::wl_resource *handle; + + struct ::wl_client *client() const { return wl_resource_get_client(handle); } + int version() const { return wl_resource_get_version(handle); } + + static Resource *fromResource(struct ::wl_resource *resource); + }; + + void init(struct ::wl_client *client, int id, int version); + void init(struct ::wl_display *display, int version); + void init(struct ::wl_resource *resource); + + Resource *add(struct ::wl_client *client, int version); + Resource *add(struct ::wl_client *client, int id, int version); + Resource *add(struct wl_list *resource_list, struct ::wl_client *client, int id, int version); + + Resource *resource() { return m_resource; } + const Resource *resource() const { return m_resource; } + + QMultiMap resourceMap() { return m_resource_map; } + const QMultiMap resourceMap() const { return m_resource_map; } + + bool isGlobal() const { return m_global != nullptr; } + bool isResource() const { return m_resource != nullptr; } + + static const struct ::wl_interface *interface(); + static QByteArray interfaceName() { return interface()->name; } + static int interfaceVersion() { return interface()->version; } + + + enum version { + version_current = 5 // Always the latest version + }; + + enum error { + error_role = 0, // given wl_surface has another role + error_defunct_surfaces = 1, // xdg_shell was destroyed before children + error_not_the_topmost_popup = 2, // the client tried to map or destroy a non-topmost popup + error_invalid_popup_parent = 3 // the client specified an invalid popup parent surface + }; + + void send_ping(uint32_t serial); + void send_ping(struct ::wl_resource *resource, uint32_t serial); + + protected: + virtual Resource *xdg_shell_allocate(); + + virtual void xdg_shell_bind_resource(Resource *resource); + virtual void xdg_shell_destroy_resource(Resource *resource); + + virtual void xdg_shell_destroy(Resource *resource); + virtual void xdg_shell_use_unstable_version(Resource *resource, int32_t version); + virtual void xdg_shell_get_xdg_surface(Resource *resource, uint32_t id, struct ::wl_resource *surface); + virtual void xdg_shell_get_xdg_popup(Resource *resource, uint32_t id, struct ::wl_resource *surface, struct ::wl_resource *parent, struct ::wl_resource *seat, uint32_t serial, int32_t x, int32_t y); + virtual void xdg_shell_pong(Resource *resource, uint32_t serial); + + private: + static void bind_func(struct ::wl_client *client, void *data, uint32_t version, uint32_t id); + static void destroy_func(struct ::wl_resource *client_resource); + static void display_destroy_func(struct ::wl_listener *listener, void *data); + + Resource *bind(struct ::wl_client *client, uint32_t id, int version); + Resource *bind(struct ::wl_resource *handle); + + static const struct ::xdg_shell_v5_interface m_xdg_shell_interface; + + static void handle_destroy( + ::wl_client *client, + struct wl_resource *resource); + static void handle_use_unstable_version( + ::wl_client *client, + struct wl_resource *resource, + int32_t version); + static void handle_get_xdg_surface( + ::wl_client *client, + struct wl_resource *resource, + uint32_t id, + struct ::wl_resource *surface); + static void handle_get_xdg_popup( + ::wl_client *client, + struct wl_resource *resource, + uint32_t id, + struct ::wl_resource *surface, + struct ::wl_resource *parent, + struct ::wl_resource *seat, + uint32_t serial, + int32_t x, + int32_t y); + static void handle_pong( + ::wl_client *client, + struct wl_resource *resource, + uint32_t serial); + + QMultiMap m_resource_map; + Resource *m_resource; + struct ::wl_global *m_global; + uint32_t m_globalVersion; + struct DisplayDestroyedListener : ::wl_listener { + xdg_shell_v5 *parent; + }; + DisplayDestroyedListener m_displayDestroyedListener; + }; + + class Q_WAYLAND_SERVER_XDG_SHELL_UNSTABLE_V5_EXPORT xdg_surface_v5 + { + public: + xdg_surface_v5(struct ::wl_client *client, int id, int version); + xdg_surface_v5(struct ::wl_display *display, int version); + xdg_surface_v5(struct ::wl_resource *resource); + xdg_surface_v5(); + + virtual ~xdg_surface_v5(); + + class Resource + { + public: + Resource() : xdg_surface_object(nullptr), handle(nullptr) {} + virtual ~Resource() {} + + xdg_surface_v5 *xdg_surface_object; + struct ::wl_resource *handle; + + struct ::wl_client *client() const { return wl_resource_get_client(handle); } + int version() const { return wl_resource_get_version(handle); } + + static Resource *fromResource(struct ::wl_resource *resource); + }; + + void init(struct ::wl_client *client, int id, int version); + void init(struct ::wl_display *display, int version); + void init(struct ::wl_resource *resource); + + Resource *add(struct ::wl_client *client, int version); + Resource *add(struct ::wl_client *client, int id, int version); + Resource *add(struct wl_list *resource_list, struct ::wl_client *client, int id, int version); + + Resource *resource() { return m_resource; } + const Resource *resource() const { return m_resource; } + + QMultiMap resourceMap() { return m_resource_map; } + const QMultiMap resourceMap() const { return m_resource_map; } + + bool isGlobal() const { return m_global != nullptr; } + bool isResource() const { return m_resource != nullptr; } + + static const struct ::wl_interface *interface(); + static QByteArray interfaceName() { return interface()->name; } + static int interfaceVersion() { return interface()->version; } + + + enum resize_edge { + resize_edge_none = 0, + resize_edge_top = 1, + resize_edge_bottom = 2, + resize_edge_left = 4, + resize_edge_top_left = 5, + resize_edge_bottom_left = 6, + resize_edge_right = 8, + resize_edge_top_right = 9, + resize_edge_bottom_right = 10 + }; + + enum state { + state_maximized = 1, // the surface is maximized + state_fullscreen = 2, // the surface is fullscreen + state_resizing = 3, + state_activated = 4 + }; + + void send_configure(int32_t width, int32_t height, const QByteArray &states, uint32_t serial); + void send_configure(struct ::wl_resource *resource, int32_t width, int32_t height, const QByteArray &states, uint32_t serial); + void send_close(); + void send_close(struct ::wl_resource *resource); + + protected: + virtual Resource *xdg_surface_allocate(); + + virtual void xdg_surface_bind_resource(Resource *resource); + virtual void xdg_surface_destroy_resource(Resource *resource); + + virtual void xdg_surface_destroy(Resource *resource); + virtual void xdg_surface_set_parent(Resource *resource, struct ::wl_resource *parent); + virtual void xdg_surface_set_title(Resource *resource, const QString &title); + virtual void xdg_surface_set_app_id(Resource *resource, const QString &app_id); + virtual void xdg_surface_show_window_menu(Resource *resource, struct ::wl_resource *seat, uint32_t serial, int32_t x, int32_t y); + virtual void xdg_surface_move(Resource *resource, struct ::wl_resource *seat, uint32_t serial); + virtual void xdg_surface_resize(Resource *resource, struct ::wl_resource *seat, uint32_t serial, uint32_t edges); + virtual void xdg_surface_ack_configure(Resource *resource, uint32_t serial); + virtual void xdg_surface_set_window_geometry(Resource *resource, int32_t x, int32_t y, int32_t width, int32_t height); + virtual void xdg_surface_set_maximized(Resource *resource); + virtual void xdg_surface_unset_maximized(Resource *resource); + virtual void xdg_surface_set_fullscreen(Resource *resource, struct ::wl_resource *output); + virtual void xdg_surface_unset_fullscreen(Resource *resource); + virtual void xdg_surface_set_minimized(Resource *resource); + + private: + static void bind_func(struct ::wl_client *client, void *data, uint32_t version, uint32_t id); + static void destroy_func(struct ::wl_resource *client_resource); + static void display_destroy_func(struct ::wl_listener *listener, void *data); + + Resource *bind(struct ::wl_client *client, uint32_t id, int version); + Resource *bind(struct ::wl_resource *handle); + + static const struct ::xdg_surface_v5_interface m_xdg_surface_interface; + + static void handle_destroy( + ::wl_client *client, + struct wl_resource *resource); + static void handle_set_parent( + ::wl_client *client, + struct wl_resource *resource, + struct ::wl_resource *parent); + static void handle_set_title( + ::wl_client *client, + struct wl_resource *resource, + const char *title); + static void handle_set_app_id( + ::wl_client *client, + struct wl_resource *resource, + const char *app_id); + static void handle_show_window_menu( + ::wl_client *client, + struct wl_resource *resource, + struct ::wl_resource *seat, + uint32_t serial, + int32_t x, + int32_t y); + static void handle_move( + ::wl_client *client, + struct wl_resource *resource, + struct ::wl_resource *seat, + uint32_t serial); + static void handle_resize( + ::wl_client *client, + struct wl_resource *resource, + struct ::wl_resource *seat, + uint32_t serial, + uint32_t edges); + static void handle_ack_configure( + ::wl_client *client, + struct wl_resource *resource, + uint32_t serial); + static void handle_set_window_geometry( + ::wl_client *client, + struct wl_resource *resource, + int32_t x, + int32_t y, + int32_t width, + int32_t height); + static void handle_set_maximized( + ::wl_client *client, + struct wl_resource *resource); + static void handle_unset_maximized( + ::wl_client *client, + struct wl_resource *resource); + static void handle_set_fullscreen( + ::wl_client *client, + struct wl_resource *resource, + struct ::wl_resource *output); + static void handle_unset_fullscreen( + ::wl_client *client, + struct wl_resource *resource); + static void handle_set_minimized( + ::wl_client *client, + struct wl_resource *resource); + + QMultiMap m_resource_map; + Resource *m_resource; + struct ::wl_global *m_global; + uint32_t m_globalVersion; + struct DisplayDestroyedListener : ::wl_listener { + xdg_surface_v5 *parent; + }; + DisplayDestroyedListener m_displayDestroyedListener; + }; + + class Q_WAYLAND_SERVER_XDG_SHELL_UNSTABLE_V5_EXPORT xdg_popup_v5 + { + public: + xdg_popup_v5(struct ::wl_client *client, int id, int version); + xdg_popup_v5(struct ::wl_display *display, int version); + xdg_popup_v5(struct ::wl_resource *resource); + xdg_popup_v5(); + + virtual ~xdg_popup_v5(); + + class Resource + { + public: + Resource() : xdg_popup_object(nullptr), handle(nullptr) {} + virtual ~Resource() {} + + xdg_popup_v5 *xdg_popup_object; + struct ::wl_resource *handle; + + struct ::wl_client *client() const { return wl_resource_get_client(handle); } + int version() const { return wl_resource_get_version(handle); } + + static Resource *fromResource(struct ::wl_resource *resource); + }; + + void init(struct ::wl_client *client, int id, int version); + void init(struct ::wl_display *display, int version); + void init(struct ::wl_resource *resource); + + Resource *add(struct ::wl_client *client, int version); + Resource *add(struct ::wl_client *client, int id, int version); + Resource *add(struct wl_list *resource_list, struct ::wl_client *client, int id, int version); + + Resource *resource() { return m_resource; } + const Resource *resource() const { return m_resource; } + + QMultiMap resourceMap() { return m_resource_map; } + const QMultiMap resourceMap() const { return m_resource_map; } + + bool isGlobal() const { return m_global != nullptr; } + bool isResource() const { return m_resource != nullptr; } + + static const struct ::wl_interface *interface(); + static QByteArray interfaceName() { return interface()->name; } + static int interfaceVersion() { return interface()->version; } + + + void send_popup_done(); + void send_popup_done(struct ::wl_resource *resource); + + protected: + virtual Resource *xdg_popup_allocate(); + + virtual void xdg_popup_bind_resource(Resource *resource); + virtual void xdg_popup_destroy_resource(Resource *resource); + + virtual void xdg_popup_destroy(Resource *resource); + + private: + static void bind_func(struct ::wl_client *client, void *data, uint32_t version, uint32_t id); + static void destroy_func(struct ::wl_resource *client_resource); + static void display_destroy_func(struct ::wl_listener *listener, void *data); + + Resource *bind(struct ::wl_client *client, uint32_t id, int version); + Resource *bind(struct ::wl_resource *handle); + + static const struct ::xdg_popup_v5_interface m_xdg_popup_interface; + + static void handle_destroy( + ::wl_client *client, + struct wl_resource *resource); + + QMultiMap m_resource_map; + Resource *m_resource; + struct ::wl_global *m_global; + uint32_t m_globalVersion; + struct DisplayDestroyedListener : ::wl_listener { + xdg_popup_v5 *parent; + }; + DisplayDestroyedListener m_displayDestroyedListener; + }; +} + +QT_WARNING_POP +QT_END_NAMESPACE + +#endif diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/extensions/pregenerated/3rdparty/wayland-xdg-shell-unstable-v5-protocol.c qtwayland-opensource-src-5.12.2/src/compositor/extensions/pregenerated/3rdparty/wayland-xdg-shell-unstable-v5-protocol.c --- qtwayland-opensource-src-5.11.3/src/compositor/extensions/pregenerated/3rdparty/wayland-xdg-shell-unstable-v5-protocol.c 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/extensions/pregenerated/3rdparty/wayland-xdg-shell-unstable-v5-protocol.c 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,126 @@ +/* Generated by wayland-scanner 1.15.92 */ +// Hand edited to resolve conflicts with xdg-shell stable + +/* + * Copyright © 2008-2013 Kristian Høgsberg + * Copyright © 2013 Rafael Antognolli + * Copyright © 2013 Jasper St. Pierre + * Copyright © 2010-2013 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#include +#include +#include "wayland-util.h" + +extern const struct wl_interface wl_output_interface; +extern const struct wl_interface wl_seat_interface; +extern const struct wl_interface wl_surface_interface; +extern const struct wl_interface xdg_popup_v5_interface; +extern const struct wl_interface xdg_surface_v5_interface; + +static const struct wl_interface *types[] = { + NULL, + NULL, + NULL, + NULL, + &xdg_surface_v5_interface, + &wl_surface_interface, + &xdg_popup_v5_interface, + &wl_surface_interface, + &wl_surface_interface, + &wl_seat_interface, + NULL, + NULL, + NULL, + &xdg_surface_v5_interface, + &wl_seat_interface, + NULL, + NULL, + NULL, + &wl_seat_interface, + NULL, + &wl_seat_interface, + NULL, + NULL, + &wl_output_interface, +}; + +static const struct wl_message xdg_shell_requests[] = { + { "destroy", "", types + 0 }, + { "use_unstable_version", "i", types + 0 }, + { "get_xdg_surface", "no", types + 4 }, + { "get_xdg_popup", "nooouii", types + 6 }, + { "pong", "u", types + 0 }, +}; + +static const struct wl_message xdg_shell_events[] = { + { "ping", "u", types + 0 }, +}; + +WL_EXPORT const struct wl_interface xdg_shell_v5_interface = { + "xdg_shell", 1, + 5, xdg_shell_requests, + 1, xdg_shell_events, +}; + +static const struct wl_message xdg_surface_requests[] = { + { "destroy", "", types + 0 }, + { "set_parent", "?o", types + 13 }, + { "set_title", "s", types + 0 }, + { "set_app_id", "s", types + 0 }, + { "show_window_menu", "ouii", types + 14 }, + { "move", "ou", types + 18 }, + { "resize", "ouu", types + 20 }, + { "ack_configure", "u", types + 0 }, + { "set_window_geometry", "iiii", types + 0 }, + { "set_maximized", "", types + 0 }, + { "unset_maximized", "", types + 0 }, + { "set_fullscreen", "?o", types + 23 }, + { "unset_fullscreen", "", types + 0 }, + { "set_minimized", "", types + 0 }, +}; + +static const struct wl_message xdg_surface_events[] = { + { "configure", "iiau", types + 0 }, + { "close", "", types + 0 }, +}; + +WL_EXPORT const struct wl_interface xdg_surface_v5_interface = { + "xdg_surface", 1, + 14, xdg_surface_requests, + 2, xdg_surface_events, +}; + +static const struct wl_message xdg_popup_requests[] = { + { "destroy", "", types + 0 }, +}; + +static const struct wl_message xdg_popup_events[] = { + { "popup_done", "", types + 0 }, +}; + +WL_EXPORT const struct wl_interface xdg_popup_v5_interface = { + "xdg_popup", 1, + 1, xdg_popup_requests, + 1, xdg_popup_events, +}; + diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/extensions/pregenerated/3rdparty/wayland-xdg-shell-unstable-v5-server-protocol_p.h qtwayland-opensource-src-5.12.2/src/compositor/extensions/pregenerated/3rdparty/wayland-xdg-shell-unstable-v5-server-protocol_p.h --- qtwayland-opensource-src-5.11.3/src/compositor/extensions/pregenerated/3rdparty/wayland-xdg-shell-unstable-v5-server-protocol_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/extensions/pregenerated/3rdparty/wayland-xdg-shell-unstable-v5-server-protocol_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,905 @@ +/* Generated by wayland-scanner 1.15.92 */ +// Hand edited to resolve conflicts with xdg-shell stable + +#ifndef XDG_SHELL_UNSTABLE_V5_SERVER_PROTOCOL_H +#define XDG_SHELL_UNSTABLE_V5_SERVER_PROTOCOL_H + +#include +#include +#include "wayland-server.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct wl_client; +struct wl_resource; + +/** + * @page page_xdg_shell_unstable_v5 The xdg_shell_unstable_v5 protocol + * @section page_ifaces_xdg_shell_unstable_v5 Interfaces + * - @subpage page_iface_xdg_shell - create desktop-style surfaces + * - @subpage page_iface_xdg_surface - A desktop window + * - @subpage page_iface_xdg_popup - short-lived, popup surfaces for menus + * @section page_copyright_xdg_shell_unstable_v5 Copyright + *
+ *
+ * Copyright © 2008-2013 Kristian Høgsberg
+ * Copyright © 2013      Rafael Antognolli
+ * Copyright © 2013      Jasper St. Pierre
+ * Copyright © 2010-2013 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ * 
+ */ +struct wl_output; +struct wl_seat; +struct wl_surface; +struct xdg_popup; +struct xdg_shell; +struct xdg_surface; + +/** + * @page page_iface_xdg_shell xdg_shell + * @section page_iface_xdg_shell_desc Description + * + * xdg_shell allows clients to turn a wl_surface into a "real window" + * which can be dragged, resized, stacked, and moved around by the + * user. Everything about this interface is suited towards traditional + * desktop environments. + * @section page_iface_xdg_shell_api API + * See @ref iface_xdg_shell. + */ +/** + * @defgroup iface_xdg_shell The xdg_shell interface + * + * xdg_shell allows clients to turn a wl_surface into a "real window" + * which can be dragged, resized, stacked, and moved around by the + * user. Everything about this interface is suited towards traditional + * desktop environments. + */ +extern const struct wl_interface xdg_shell_v5_interface; +/** + * @page page_iface_xdg_surface xdg_surface + * @section page_iface_xdg_surface_desc Description + * + * An interface that may be implemented by a wl_surface, for + * implementations that provide a desktop-style user interface. + * + * It provides requests to treat surfaces like windows, allowing to set + * properties like maximized, fullscreen, minimized, and to move and resize + * them, and associate metadata like title and app id. + * + * The client must call wl_surface.commit on the corresponding wl_surface + * for the xdg_surface state to take effect. Prior to committing the new + * state, it can set up initial configuration, such as maximizing or setting + * a window geometry. + * + * Even without attaching a buffer the compositor must respond to initial + * committed configuration, for instance sending a configure event with + * expected window geometry if the client maximized its surface during + * initialization. + * + * For a surface to be mapped by the compositor the client must have + * committed both an xdg_surface state and a buffer. + * @section page_iface_xdg_surface_api API + * See @ref iface_xdg_surface. + */ +/** + * @defgroup iface_xdg_surface The xdg_surface interface + * + * An interface that may be implemented by a wl_surface, for + * implementations that provide a desktop-style user interface. + * + * It provides requests to treat surfaces like windows, allowing to set + * properties like maximized, fullscreen, minimized, and to move and resize + * them, and associate metadata like title and app id. + * + * The client must call wl_surface.commit on the corresponding wl_surface + * for the xdg_surface state to take effect. Prior to committing the new + * state, it can set up initial configuration, such as maximizing or setting + * a window geometry. + * + * Even without attaching a buffer the compositor must respond to initial + * committed configuration, for instance sending a configure event with + * expected window geometry if the client maximized its surface during + * initialization. + * + * For a surface to be mapped by the compositor the client must have + * committed both an xdg_surface state and a buffer. + */ +extern const struct wl_interface xdg_surface_v5_interface; +/** + * @page page_iface_xdg_popup xdg_popup + * @section page_iface_xdg_popup_desc Description + * + * A popup surface is a short-lived, temporary surface that can be + * used to implement menus. It takes an explicit grab on the surface + * that will be dismissed when the user dismisses the popup. This can + * be done by the user clicking outside the surface, using the keyboard, + * or even locking the screen through closing the lid or a timeout. + * + * When the popup is dismissed, a popup_done event will be sent out, + * and at the same time the surface will be unmapped. The xdg_popup + * object is now inert and cannot be reactivated, so clients should + * destroy it. Explicitly destroying the xdg_popup object will also + * dismiss the popup and unmap the surface. + * + * Clients will receive events for all their surfaces during this + * grab (which is an "owner-events" grab in X11 parlance). This is + * done so that users can navigate through submenus and other + * "nested" popup windows without having to dismiss the topmost + * popup. + * + * Clients that want to dismiss the popup when another surface of + * their own is clicked should dismiss the popup using the destroy + * request. + * + * The parent surface must have either an xdg_surface or xdg_popup + * role. + * + * Specifying an xdg_popup for the parent means that the popups are + * nested, with this popup now being the topmost popup. Nested + * popups must be destroyed in the reverse order they were created + * in, e.g. the only popup you are allowed to destroy at all times + * is the topmost one. + * + * If there is an existing popup when creating a new popup, the + * parent must be the current topmost popup. + * + * A parent surface must be mapped before the new popup is mapped. + * + * When compositors choose to dismiss a popup, they will likely + * dismiss every nested popup as well. When a compositor dismisses + * popups, it will follow the same dismissing order as required + * from the client. + * + * The x and y arguments passed when creating the popup object specify + * where the top left of the popup should be placed, relative to the + * local surface coordinates of the parent surface. See + * xdg_shell.get_xdg_popup. + * + * The client must call wl_surface.commit on the corresponding wl_surface + * for the xdg_popup state to take effect. + * + * For a surface to be mapped by the compositor the client must have + * committed both the xdg_popup state and a buffer. + * @section page_iface_xdg_popup_api API + * See @ref iface_xdg_popup. + */ +/** + * @defgroup iface_xdg_popup The xdg_popup interface + * + * A popup surface is a short-lived, temporary surface that can be + * used to implement menus. It takes an explicit grab on the surface + * that will be dismissed when the user dismisses the popup. This can + * be done by the user clicking outside the surface, using the keyboard, + * or even locking the screen through closing the lid or a timeout. + * + * When the popup is dismissed, a popup_done event will be sent out, + * and at the same time the surface will be unmapped. The xdg_popup + * object is now inert and cannot be reactivated, so clients should + * destroy it. Explicitly destroying the xdg_popup object will also + * dismiss the popup and unmap the surface. + * + * Clients will receive events for all their surfaces during this + * grab (which is an "owner-events" grab in X11 parlance). This is + * done so that users can navigate through submenus and other + * "nested" popup windows without having to dismiss the topmost + * popup. + * + * Clients that want to dismiss the popup when another surface of + * their own is clicked should dismiss the popup using the destroy + * request. + * + * The parent surface must have either an xdg_surface or xdg_popup + * role. + * + * Specifying an xdg_popup for the parent means that the popups are + * nested, with this popup now being the topmost popup. Nested + * popups must be destroyed in the reverse order they were created + * in, e.g. the only popup you are allowed to destroy at all times + * is the topmost one. + * + * If there is an existing popup when creating a new popup, the + * parent must be the current topmost popup. + * + * A parent surface must be mapped before the new popup is mapped. + * + * When compositors choose to dismiss a popup, they will likely + * dismiss every nested popup as well. When a compositor dismisses + * popups, it will follow the same dismissing order as required + * from the client. + * + * The x and y arguments passed when creating the popup object specify + * where the top left of the popup should be placed, relative to the + * local surface coordinates of the parent surface. See + * xdg_shell.get_xdg_popup. + * + * The client must call wl_surface.commit on the corresponding wl_surface + * for the xdg_popup state to take effect. + * + * For a surface to be mapped by the compositor the client must have + * committed both the xdg_popup state and a buffer. + */ +extern const struct wl_interface xdg_popup_v5_interface; + +#ifndef XDG_SHELL_VERSION_ENUM +#define XDG_SHELL_VERSION_ENUM +/** + * @ingroup iface_xdg_shell + * latest protocol version + * + * The 'current' member of this enum gives the version of the + * protocol. Implementations can compare this to the version + * they implement using static_assert to ensure the protocol and + * implementation versions match. + */ +enum xdg_shell_version { + /** + * Always the latest version + */ + XDG_SHELL_VERSION_CURRENT = 5, +}; +#endif /* XDG_SHELL_VERSION_ENUM */ + +#ifndef XDG_SHELL_ERROR_ENUM +#define XDG_SHELL_ERROR_ENUM +enum xdg_shell_error { + /** + * given wl_surface has another role + */ + XDG_SHELL_ERROR_ROLE = 0, + /** + * xdg_shell was destroyed before children + */ + XDG_SHELL_ERROR_DEFUNCT_SURFACES = 1, + /** + * the client tried to map or destroy a non-topmost popup + */ + XDG_SHELL_ERROR_NOT_THE_TOPMOST_POPUP = 2, + /** + * the client specified an invalid popup parent surface + */ + XDG_SHELL_ERROR_INVALID_POPUP_PARENT = 3, +}; +#endif /* XDG_SHELL_ERROR_ENUM */ + +/** + * @ingroup iface_xdg_shell + * @struct xdg_shell_v5_interface + */ +struct xdg_shell_v5_interface { + /** + * destroy xdg_shell + * + * Destroy this xdg_shell object. + * + * Destroying a bound xdg_shell object while there are surfaces + * still alive created by this xdg_shell object instance is illegal + * and will result in a protocol error. + */ + void (*destroy)(struct wl_client *client, + struct wl_resource *resource); + /** + * enable use of this unstable version + * + * Negotiate the unstable version of the interface. This + * mechanism is in place to ensure client and server agree on the + * unstable versions of the protocol that they speak or exit + * cleanly if they don't agree. This request will go away once the + * xdg-shell protocol is stable. + */ + void (*use_unstable_version)(struct wl_client *client, + struct wl_resource *resource, + int32_t version); + /** + * create a shell surface from a surface + * + * This creates an xdg_surface for the given surface and gives it + * the xdg_surface role. A wl_surface can only be given an + * xdg_surface role once. If get_xdg_surface is called with a + * wl_surface that already has an active xdg_surface associated + * with it, or if it had any other role, an error is raised. + * + * See the documentation of xdg_surface for more details about what + * an xdg_surface is and how it is used. + */ + void (*get_xdg_surface)(struct wl_client *client, + struct wl_resource *resource, + uint32_t id, + struct wl_resource *surface); + /** + * create a popup for a surface + * + * This creates an xdg_popup for the given surface and gives it + * the xdg_popup role. A wl_surface can only be given an xdg_popup + * role once. If get_xdg_popup is called with a wl_surface that + * already has an active xdg_popup associated with it, or if it had + * any other role, an error is raised. + * + * This request must be used in response to some sort of user + * action like a button press, key press, or touch down event. + * + * See the documentation of xdg_popup for more details about what + * an xdg_popup is and how it is used. + * @param seat the wl_seat of the user event + * @param serial the serial of the user event + */ + void (*get_xdg_popup)(struct wl_client *client, + struct wl_resource *resource, + uint32_t id, + struct wl_resource *surface, + struct wl_resource *parent, + struct wl_resource *seat, + uint32_t serial, + int32_t x, + int32_t y); + /** + * respond to a ping event + * + * A client must respond to a ping event with a pong request or + * the client may be deemed unresponsive. + * @param serial serial of the ping event + */ + void (*pong)(struct wl_client *client, + struct wl_resource *resource, + uint32_t serial); +}; + +#define XDG_SHELL_PING 0 + +/** + * @ingroup iface_xdg_shell + */ +#define XDG_SHELL_PING_SINCE_VERSION 1 + +/** + * @ingroup iface_xdg_shell + */ +#define XDG_SHELL_DESTROY_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_shell + */ +#define XDG_SHELL_USE_UNSTABLE_VERSION_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_shell + */ +#define XDG_SHELL_GET_XDG_SURFACE_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_shell + */ +#define XDG_SHELL_GET_XDG_POPUP_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_shell + */ +#define XDG_SHELL_PONG_SINCE_VERSION 1 + +/** + * @ingroup iface_xdg_shell + * Sends an ping event to the client owning the resource. + * @param resource_ The client's resource + * @param serial pass this to the pong request + */ +static inline void +xdg_shell_send_ping(struct wl_resource *resource_, uint32_t serial) +{ + wl_resource_post_event(resource_, XDG_SHELL_PING, serial); +} + +#ifndef XDG_SURFACE_RESIZE_EDGE_ENUM +#define XDG_SURFACE_RESIZE_EDGE_ENUM +/** + * @ingroup iface_xdg_surface + * edge values for resizing + * + * These values are used to indicate which edge of a surface + * is being dragged in a resize operation. + */ +enum xdg_surface_resize_edge { + XDG_SURFACE_RESIZE_EDGE_NONE = 0, + XDG_SURFACE_RESIZE_EDGE_TOP = 1, + XDG_SURFACE_RESIZE_EDGE_BOTTOM = 2, + XDG_SURFACE_RESIZE_EDGE_LEFT = 4, + XDG_SURFACE_RESIZE_EDGE_TOP_LEFT = 5, + XDG_SURFACE_RESIZE_EDGE_BOTTOM_LEFT = 6, + XDG_SURFACE_RESIZE_EDGE_RIGHT = 8, + XDG_SURFACE_RESIZE_EDGE_TOP_RIGHT = 9, + XDG_SURFACE_RESIZE_EDGE_BOTTOM_RIGHT = 10, +}; +#endif /* XDG_SURFACE_RESIZE_EDGE_ENUM */ + +#ifndef XDG_SURFACE_STATE_ENUM +#define XDG_SURFACE_STATE_ENUM +/** + * @ingroup iface_xdg_surface + * types of state on the surface + * + * The different state values used on the surface. This is designed for + * state values like maximized, fullscreen. It is paired with the + * configure event to ensure that both the client and the compositor + * setting the state can be synchronized. + * + * States set in this way are double-buffered. They will get applied on + * the next commit. + * + * Desktop environments may extend this enum by taking up a range of + * values and documenting the range they chose in this description. + * They are not required to document the values for the range that they + * chose. Ideally, any good extensions from a desktop environment should + * make its way into standardization into this enum. + * + * The current reserved ranges are: + * + * 0x0000 - 0x0FFF: xdg-shell core values, documented below. + * 0x1000 - 0x1FFF: GNOME + */ +enum xdg_surface_state { + /** + * the surface is maximized + */ + XDG_SURFACE_STATE_MAXIMIZED = 1, + /** + * the surface is fullscreen + */ + XDG_SURFACE_STATE_FULLSCREEN = 2, + XDG_SURFACE_STATE_RESIZING = 3, + XDG_SURFACE_STATE_ACTIVATED = 4, +}; +#endif /* XDG_SURFACE_STATE_ENUM */ + +/** + * @ingroup iface_xdg_surface + * @struct xdg_surface_v5_interface + */ +struct xdg_surface_v5_interface { + /** + * Destroy the xdg_surface + * + * Unmap and destroy the window. The window will be effectively + * hidden from the user's point of view, and all state like + * maximization, fullscreen, and so on, will be lost. + */ + void (*destroy)(struct wl_client *client, + struct wl_resource *resource); + /** + * set the parent of this surface + * + * Set the "parent" of this surface. This window should be + * stacked above a parent. The parent surface must be mapped as + * long as this surface is mapped. + * + * Parent windows should be set on dialogs, toolboxes, or other + * "auxiliary" surfaces, so that the parent is raised when the + * dialog is raised. + */ + void (*set_parent)(struct wl_client *client, + struct wl_resource *resource, + struct wl_resource *parent); + /** + * set surface title + * + * Set a short title for the surface. + * + * This string may be used to identify the surface in a task bar, + * window list, or other user interface elements provided by the + * compositor. + * + * The string must be encoded in UTF-8. + */ + void (*set_title)(struct wl_client *client, + struct wl_resource *resource, + const char *title); + /** + * set application ID + * + * Set an application identifier for the surface. + * + * The app ID identifies the general class of applications to which + * the surface belongs. The compositor can use this to group + * multiple surfaces together, or to determine how to launch a new + * application. + * + * For D-Bus activatable applications, the app ID is used as the + * D-Bus service name. + * + * The compositor shell will try to group application surfaces + * together by their app ID. As a best practice, it is suggested to + * select app ID's that match the basename of the application's + * .desktop file. For example, "org.freedesktop.FooViewer" where + * the .desktop file is "org.freedesktop.FooViewer.desktop". + * + * See the desktop-entry specification [0] for more details on + * application identifiers and how they relate to well-known D-Bus + * names and .desktop files. + * + * [0] http://standards.freedesktop.org/desktop-entry-spec/ + */ + void (*set_app_id)(struct wl_client *client, + struct wl_resource *resource, + const char *app_id); + /** + * show the window menu + * + * Clients implementing client-side decorations might want to + * show a context menu when right-clicking on the decorations, + * giving the user a menu that they can use to maximize or minimize + * the window. + * + * This request asks the compositor to pop up such a window menu at + * the given position, relative to the local surface coordinates of + * the parent surface. There are no guarantees as to what menu + * items the window menu contains. + * + * This request must be used in response to some sort of user + * action like a button press, key press, or touch down event. + * @param seat the wl_seat of the user event + * @param serial the serial of the user event + * @param x the x position to pop up the window menu at + * @param y the y position to pop up the window menu at + */ + void (*show_window_menu)(struct wl_client *client, + struct wl_resource *resource, + struct wl_resource *seat, + uint32_t serial, + int32_t x, + int32_t y); + /** + * start an interactive move + * + * Start an interactive, user-driven move of the surface. + * + * This request must be used in response to some sort of user + * action like a button press, key press, or touch down event. The + * passed serial is used to determine the type of interactive move + * (touch, pointer, etc). + * + * The server may ignore move requests depending on the state of + * the surface (e.g. fullscreen or maximized), or if the passed + * serial is no longer valid. + * + * If triggered, the surface will lose the focus of the device + * (wl_pointer, wl_touch, etc) used for the move. It is up to the + * compositor to visually indicate that the move is taking place, + * such as updating a pointer cursor, during the move. There is no + * guarantee that the device focus will return when the move is + * completed. + * @param seat the wl_seat of the user event + * @param serial the serial of the user event + */ + void (*move)(struct wl_client *client, + struct wl_resource *resource, + struct wl_resource *seat, + uint32_t serial); + /** + * start an interactive resize + * + * Start a user-driven, interactive resize of the surface. + * + * This request must be used in response to some sort of user + * action like a button press, key press, or touch down event. The + * passed serial is used to determine the type of interactive + * resize (touch, pointer, etc). + * + * The server may ignore resize requests depending on the state of + * the surface (e.g. fullscreen or maximized). + * + * If triggered, the client will receive configure events with the + * "resize" state enum value and the expected sizes. See the + * "resize" enum value for more details about what is required. The + * client must also acknowledge configure events using + * "ack_configure". After the resize is completed, the client will + * receive another "configure" event without the resize state. + * + * If triggered, the surface also will lose the focus of the device + * (wl_pointer, wl_touch, etc) used for the resize. It is up to the + * compositor to visually indicate that the resize is taking place, + * such as updating a pointer cursor, during the resize. There is + * no guarantee that the device focus will return when the resize + * is completed. + * + * The edges parameter specifies how the surface should be resized, + * and is one of the values of the resize_edge enum. The compositor + * may use this information to update the surface position for + * example when dragging the top left corner. The compositor may + * also use this information to adapt its behavior, e.g. choose an + * appropriate cursor image. + * @param seat the wl_seat of the user event + * @param serial the serial of the user event + * @param edges which edge or corner is being dragged + */ + void (*resize)(struct wl_client *client, + struct wl_resource *resource, + struct wl_resource *seat, + uint32_t serial, + uint32_t edges); + /** + * ack a configure event + * + * When a configure event is received, if a client commits the + * surface in response to the configure event, then the client must + * make a ack_configure request before the commit request, passing + * along the serial of the configure event. + * + * For instance, the compositor might use this information to move + * a surface to the top left only when the client has drawn itself + * for the maximized or fullscreen state. + * + * If the client receives multiple configure events before it can + * respond to one, it only has to ack the last configure event. + * @param serial the serial from the configure event + */ + void (*ack_configure)(struct wl_client *client, + struct wl_resource *resource, + uint32_t serial); + /** + * set the new window geometry + * + * The window geometry of a window is its "visible bounds" from + * the user's perspective. Client-side decorations often have + * invisible portions like drop-shadows which should be ignored for + * the purposes of aligning, placing and constraining windows. + * + * The window geometry is double buffered, and will be applied at + * the time wl_surface.commit of the corresponding wl_surface is + * called. + * + * Once the window geometry of the surface is set once, it is not + * possible to unset it, and it will remain the same until + * set_window_geometry is called again, even if a new subsurface or + * buffer is attached. + * + * If never set, the value is the full bounds of the surface, + * including any subsurfaces. This updates dynamically on every + * commit. This unset mode is meant for extremely simple clients. + * + * If responding to a configure event, the window geometry in here + * must respect the sizing negotiations specified by the states in + * the configure event. + * + * The arguments are given in the surface local coordinate space of + * the wl_surface associated with this xdg_surface. + * + * The width and height must be greater than zero. + */ + void (*set_window_geometry)(struct wl_client *client, + struct wl_resource *resource, + int32_t x, + int32_t y, + int32_t width, + int32_t height); + /** + * maximize the window + * + * Maximize the surface. + * + * After requesting that the surface should be maximized, the + * compositor will respond by emitting a configure event with the + * "maximized" state and the required window geometry. The client + * should then update its content, drawing it in a maximized state, + * i.e. without shadow or other decoration outside of the window + * geometry. The client must also acknowledge the configure when + * committing the new content (see ack_configure). + * + * It is up to the compositor to decide how and where to maximize + * the surface, for example which output and what region of the + * screen should be used. + * + * If the surface was already maximized, the compositor will still + * emit a configure event with the "maximized" state. + */ + void (*set_maximized)(struct wl_client *client, + struct wl_resource *resource); + /** + * unmaximize the window + * + * Unmaximize the surface. + * + * After requesting that the surface should be unmaximized, the + * compositor will respond by emitting a configure event without + * the "maximized" state. If available, the compositor will include + * the window geometry dimensions the window had prior to being + * maximized in the configure request. The client must then update + * its content, drawing it in a regular state, i.e. potentially + * with shadow, etc. The client must also acknowledge the configure + * when committing the new content (see ack_configure). + * + * It is up to the compositor to position the surface after it was + * unmaximized; usually the position the surface had before + * maximizing, if applicable. + * + * If the surface was already not maximized, the compositor will + * still emit a configure event without the "maximized" state. + */ + void (*unset_maximized)(struct wl_client *client, + struct wl_resource *resource); + /** + * set the window as fullscreen on a monitor + * + * Make the surface fullscreen. + * + * You can specify an output that you would prefer to be + * fullscreen. If this value is NULL, it's up to the compositor to + * choose which display will be used to map this surface. + * + * If the surface doesn't cover the whole output, the compositor + * will position the surface in the center of the output and + * compensate with black borders filling the rest of the output. + */ + void (*set_fullscreen)(struct wl_client *client, + struct wl_resource *resource, + struct wl_resource *output); + /** + */ + void (*unset_fullscreen)(struct wl_client *client, + struct wl_resource *resource); + /** + * set the window as minimized + * + * Request that the compositor minimize your surface. There is no + * way to know if the surface is currently minimized, nor is there + * any way to unset minimization on this surface. + * + * If you are looking to throttle redrawing when minimized, please + * instead use the wl_surface.frame event for this, as this will + * also work with live previews on windows in Alt-Tab, Expose or + * similar compositor features. + */ + void (*set_minimized)(struct wl_client *client, + struct wl_resource *resource); +}; + +#define XDG_SURFACE_CONFIGURE 0 +#define XDG_SURFACE_CLOSE 1 + +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_CONFIGURE_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_CLOSE_SINCE_VERSION 1 + +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_DESTROY_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_SET_PARENT_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_SET_TITLE_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_SET_APP_ID_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_SHOW_WINDOW_MENU_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_MOVE_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_RESIZE_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_ACK_CONFIGURE_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_SET_WINDOW_GEOMETRY_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_SET_MAXIMIZED_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_UNSET_MAXIMIZED_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_SET_FULLSCREEN_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_UNSET_FULLSCREEN_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_SET_MINIMIZED_SINCE_VERSION 1 + +/** + * @ingroup iface_xdg_surface + * Sends an configure event to the client owning the resource. + * @param resource_ The client's resource + */ +static inline void +xdg_surface_send_configure(struct wl_resource *resource_, int32_t width, int32_t height, struct wl_array *states, uint32_t serial) +{ + wl_resource_post_event(resource_, XDG_SURFACE_CONFIGURE, width, height, states, serial); +} + +/** + * @ingroup iface_xdg_surface + * Sends an close event to the client owning the resource. + * @param resource_ The client's resource + */ +static inline void +xdg_surface_send_close(struct wl_resource *resource_) +{ + wl_resource_post_event(resource_, XDG_SURFACE_CLOSE); +} + +/** + * @ingroup iface_xdg_popup + * @struct xdg_popup_v5_interface + */ +struct xdg_popup_v5_interface { + /** + * remove xdg_popup interface + * + * This destroys the popup. Explicitly destroying the xdg_popup + * object will also dismiss the popup, and unmap the surface. + * + * If this xdg_popup is not the "topmost" popup, a protocol error + * will be sent. + */ + void (*destroy)(struct wl_client *client, + struct wl_resource *resource); +}; + +#define XDG_POPUP_POPUP_DONE 0 + +/** + * @ingroup iface_xdg_popup + */ +#define XDG_POPUP_POPUP_DONE_SINCE_VERSION 1 + +/** + * @ingroup iface_xdg_popup + */ +#define XDG_POPUP_DESTROY_SINCE_VERSION 1 + +/** + * @ingroup iface_xdg_popup + * Sends an popup_done event to the client owning the resource. + * @param resource_ The client's resource + */ +static inline void +xdg_popup_send_popup_done(struct wl_resource *resource_) +{ + wl_resource_post_event(resource_, XDG_POPUP_POPUP_DONE); +} + +#ifdef __cplusplus +} +#endif + +#endif diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/extensions/pregenerated/xdg-shell-v5.pri qtwayland-opensource-src-5.12.2/src/compositor/extensions/pregenerated/xdg-shell-v5.pri --- qtwayland-opensource-src-5.11.3/src/compositor/extensions/pregenerated/xdg-shell-v5.pri 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/extensions/pregenerated/xdg-shell-v5.pri 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,10 @@ +# Putting pregenerated files in a 3rdparty directory to avoid +# qtqa's license checking failing. + +HEADERS += \ + $$PWD/3rdparty/qwayland-server-xdg-shell-unstable-v5_p.h \ + $$PWD/3rdparty/wayland-xdg-shell-unstable-v5-server-protocol_p.h + +SOURCES += \ + $$PWD/3rdparty/qwayland-server-xdg-shell-unstable-v5.cpp \ + $$PWD/3rdparty/wayland-xdg-shell-unstable-v5-protocol.c diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandivisurface.cpp qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandivisurface.cpp --- qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandivisurface.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandivisurface.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -45,6 +45,7 @@ #endif #include +#include QT_BEGIN_NAMESPACE @@ -198,6 +199,10 @@ */ void QWaylandIviSurface::sendConfigure(const QSize &size) { + if (!size.isValid()) { + qWarning() << "Can't configure ivi_surface with an invalid size" << size; + return; + } Q_D(QWaylandIviSurface); d->send_configure(size.width(), size.height()); } diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandivisurface.h qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandivisurface.h --- qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandivisurface.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandivisurface.h 2019-02-21 12:36:59.000000000 +0000 @@ -41,6 +41,7 @@ #define QWAYLANDIVISURFACE_H #include +#include struct wl_resource; @@ -56,6 +57,7 @@ { Q_OBJECT Q_DECLARE_PRIVATE(QWaylandIviSurface) + Q_WAYLAND_COMPOSITOR_DECLARE_QUICK_CHILDREN(QWaylandIviSurface) Q_PROPERTY(QWaylandSurface *surface READ surface NOTIFY surfaceChanged) Q_PROPERTY(uint iviId READ iviId NOTIFY iviIdChanged) diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandquickshellsurfaceitem.cpp qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandquickshellsurfaceitem.cpp --- qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandquickshellsurfaceitem.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandquickshellsurfaceitem.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -45,6 +45,21 @@ QT_BEGIN_NAMESPACE +QWaylandQuickShellSurfaceItem *QWaylandQuickShellSurfaceItemPrivate::maybeCreateAutoPopup(QWaylandShellSurface* shellSurface) +{ + if (!m_autoCreatePopupItems) + return nullptr; + + Q_Q(QWaylandQuickShellSurfaceItem); + auto *popupItem = new QWaylandQuickShellSurfaceItem(q); + popupItem->setShellSurface(shellSurface); + popupItem->setAutoCreatePopupItems(true); + QObject::connect(popupItem, &QWaylandQuickShellSurfaceItem::surfaceDestroyed, [popupItem](){ + popupItem->deleteLater(); + }); + return popupItem; +} + /*! * \qmltype ShellSurfaceItem * \inherits WaylandQuickItem @@ -163,6 +178,36 @@ moveItemChanged(); } +/*! + * \qmlproperty bool QtWaylandCompositor::ShellSurfaceItem::autoCreatePopupItems + * + * This property holds whether ShellSurfaceItems for popups parented to the shell + * surface managed by this item should automatically be created. + */ + +/*! + * \property QWaylandQuickShellSurfaceItem::autoCreatePopupItems + * + * This property holds whether QWaylandQuickShellSurfaceItems for popups + * parented to the shell surface managed by this item should automatically be created. + */ +bool QWaylandQuickShellSurfaceItem::autoCreatePopupItems() +{ + Q_D(const QWaylandQuickShellSurfaceItem); + return d->m_autoCreatePopupItems; +} + +void QWaylandQuickShellSurfaceItem::setAutoCreatePopupItems(bool enabled) +{ + Q_D(QWaylandQuickShellSurfaceItem); + + if (enabled == d->m_autoCreatePopupItems) + return; + + d->m_autoCreatePopupItems = enabled; + emit autoCreatePopupItemsChanged(); +} + void QWaylandQuickShellSurfaceItem::mouseMoveEvent(QMouseEvent *event) { Q_D(QWaylandQuickShellSurfaceItem); diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandquickshellsurfaceitem.h qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandquickshellsurfaceitem.h --- qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandquickshellsurfaceitem.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandquickshellsurfaceitem.h 2019-02-21 12:36:59.000000000 +0000 @@ -54,6 +54,7 @@ Q_DECLARE_PRIVATE(QWaylandQuickShellSurfaceItem) Q_PROPERTY(QWaylandShellSurface *shellSurface READ shellSurface WRITE setShellSurface NOTIFY shellSurfaceChanged) Q_PROPERTY(QQuickItem *moveItem READ moveItem WRITE setMoveItem NOTIFY moveItemChanged) + Q_PROPERTY(bool autoCreatePopupItems READ autoCreatePopupItems WRITE setAutoCreatePopupItems NOTIFY autoCreatePopupItemsChanged) public: QWaylandQuickShellSurfaceItem(QQuickItem *parent = nullptr); ~QWaylandQuickShellSurfaceItem() override; @@ -64,9 +65,13 @@ QQuickItem *moveItem() const; void setMoveItem(QQuickItem *moveItem); + bool autoCreatePopupItems(); + void setAutoCreatePopupItems(bool enabled); + Q_SIGNALS: void shellSurfaceChanged(); void moveItemChanged(); + void autoCreatePopupItemsChanged(); protected: QWaylandQuickShellSurfaceItem(QWaylandQuickShellSurfaceItemPrivate &dd, QQuickItem *parent); diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandquickshellsurfaceitem_p.h qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandquickshellsurfaceitem_p.h --- qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandquickshellsurfaceitem_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandquickshellsurfaceitem_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -40,6 +40,7 @@ #ifndef QWAYLANDQUICKSHELLSURFACEITEM_P_H #define QWAYLANDQUICKSHELLSURFACEITEM_P_H +#include #include #include @@ -60,15 +61,20 @@ class QWaylandQuickShellIntegration; class QWaylandShellSurface; +class QWaylandQuickShellSurfaceItem; class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandQuickShellSurfaceItemPrivate : public QWaylandQuickItemPrivate { + Q_DECLARE_PUBLIC(QWaylandQuickShellSurfaceItem) public: - QWaylandQuickShellSurfaceItemPrivate() - {} + QWaylandQuickShellSurfaceItemPrivate() {} + QWaylandQuickShellSurfaceItem *maybeCreateAutoPopup(QWaylandShellSurface* shellSurface); + static QWaylandQuickShellSurfaceItemPrivate *get(QWaylandQuickShellSurfaceItem *item) { return item->d_func(); } + QWaylandQuickShellIntegration *m_shellIntegration = nullptr; QWaylandShellSurface *m_shellSurface = nullptr; QQuickItem *m_moveItem = nullptr; + bool m_autoCreatePopupItems = false; }; class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandQuickShellIntegration : public QObject diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandtextinput.cpp qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandtextinput.cpp --- qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandtextinput.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandtextinput.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -190,7 +190,7 @@ currentState->anchorPosition = afterCommit.anchorPosition; if (queries) { - qCDebug(qLcCompositorInputMethods) << "QInputMethod::update() after QInputMethodEvent" << queries; + qCDebug(qLcWaylandCompositorInputMethods) << "QInputMethod::update() after QInputMethodEvent" << queries; emit q->updateInputMethod(queries); } @@ -377,13 +377,13 @@ { Q_Q(QWaylandTextInput); - qCDebug(qLcCompositorInputMethods) << "update_state" << serial << flags; + qCDebug(qLcWaylandCompositorInputMethods) << "update_state" << serial << flags; if (resource != focusResource) return; if (flags == update_state_reset || flags == update_state_enter) { - qCDebug(qLcCompositorInputMethods) << "QInputMethod::reset()"; + qCDebug(qLcWaylandCompositorInputMethods) << "QInputMethod::reset()"; qApp->inputMethod()->reset(); } @@ -400,7 +400,7 @@ pendingState.reset(new QWaylandTextInputClientState); if (queries) { - qCDebug(qLcCompositorInputMethods) << "QInputMethod::update()" << queries; + qCDebug(qLcWaylandCompositorInputMethods) << "QInputMethod::update()" << queries; emit q->updateInputMethod(queries); } diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandwlshell.h qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandwlshell.h --- qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandwlshell.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandwlshell.h 2019-02-21 12:36:59.000000000 +0000 @@ -44,6 +44,7 @@ #include #include #include +#include #include @@ -87,6 +88,7 @@ { Q_OBJECT Q_DECLARE_PRIVATE(QWaylandWlShellSurface) + Q_WAYLAND_COMPOSITOR_DECLARE_QUICK_CHILDREN(QWaylandWlShellSurface) Q_PROPERTY(QWaylandSurface *surface READ surface NOTIFY surfaceChanged) Q_PROPERTY(QWaylandWlShell *shell READ shell NOTIFY shellChanged) Q_PROPERTY(QString title READ title NOTIFY titleChanged) diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandwlshellintegration.cpp qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandwlshellintegration.cpp --- qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandwlshellintegration.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandwlshellintegration.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -99,6 +99,12 @@ // so we need to unset the flags here but we save the previous state and move // to the initial position when redrawing nextState = State::Windowed; + + // Any handlers for making maximized or fullscreen state track the size of + // the designated output, are unneeded now that we're going to windowed + // state. + nonwindowedState.output = nullptr; + disconnect(nonwindowedState.sizeChangedConnection); } void WlShellIntegration::handleSetTransient(QWaylandSurface *parentSurface, const QPoint &relativeToParent, bool inactive) @@ -129,8 +135,23 @@ nextState = State::Maximized; finalPosition = designatedOutput->position() + designatedOutput->availableGeometry().topLeft(); - auto scaleFactor = m_item->view()->output()->scaleFactor(); - m_shellSurface->sendConfigure(designatedOutput->availableGeometry().size() / scaleFactor, QWaylandWlShellSurface::NoneEdge); + // Any prior output-resize handlers are irrelevant at this point + disconnect(nonwindowedState.sizeChangedConnection); + nonwindowedState.output = designatedOutput; + nonwindowedState.sizeChangedConnection = connect(designatedOutput, &QWaylandOutput::availableGeometryChanged, this, &WlShellIntegration::handleMaximizedSizeChanged); + handleMaximizedSizeChanged(); +} + +void WlShellIntegration::handleMaximizedSizeChanged() +{ + if (!m_shellSurface) + return; + + if (nextState == State::Maximized) { + QWaylandOutput *designatedOutput = nonwindowedState.output; + auto scaleFactor = designatedOutput->scaleFactor(); + m_shellSurface->sendConfigure(designatedOutput->availableGeometry().size() / scaleFactor, QWaylandWlShellSurface::NoneEdge); + } } void WlShellIntegration::handleSetFullScreen(QWaylandWlShellSurface::FullScreenMethod method, uint framerate, QWaylandOutput *output) @@ -154,7 +175,22 @@ nextState = State::FullScreen; finalPosition = designatedOutput->position(); - m_shellSurface->sendConfigure(designatedOutput->geometry().size(), QWaylandWlShellSurface::NoneEdge); + // Any prior output-resize handlers are irrelevant at this point + disconnect(nonwindowedState.sizeChangedConnection); + nonwindowedState.output = designatedOutput; + nonwindowedState.sizeChangedConnection = connect(designatedOutput, &QWaylandOutput::geometryChanged, this, &WlShellIntegration::handleFullScreenSizeChanged); + handleFullScreenSizeChanged(); +} + +void WlShellIntegration::handleFullScreenSizeChanged() +{ + if (!m_shellSurface) + return; + + if (nextState == State::FullScreen) { + QWaylandOutput *designatedOutput = nonwindowedState.output; + m_shellSurface->sendConfigure(designatedOutput->geometry().size(), QWaylandWlShellSurface::NoneEdge); + } } void WlShellIntegration::handleSetPopup(QWaylandSeat *seat, QWaylandSurface *parent, const QPoint &relativeToParent) @@ -221,6 +257,11 @@ { if (isPopup) handlePopupRemoved(); + + // Disarm any handlers that might fire and attempt to use the now-stale pointer + nonwindowedState.output = nullptr; + disconnect(nonwindowedState.sizeChangedConnection); + m_shellSurface = nullptr; } diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandwlshellintegration_p.h qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandwlshellintegration_p.h --- qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandwlshellintegration_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandwlshellintegration_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -80,6 +80,8 @@ void handleSurfaceHasContentChanged(); void handleRedraw(); void adjustOffsetForNextFrame(const QPointF &offset); + void handleFullScreenSizeChanged(); + void handleMaximizedSizeChanged(); private: enum class GrabberState { @@ -118,6 +120,14 @@ State currentState = State::Windowed; State nextState = State::Windowed; + + struct { + QWaylandOutput *output = nullptr; + QMetaObject::Connection sizeChangedConnection; // Depending on whether maximized or fullscreen, + // will be hooked to geometry-changed or available- + // geometry-changed. + } nonwindowedState; + QPointF normalPosition; QPointF finalPosition; }; diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandxdgdecorationv1.cpp qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandxdgdecorationv1.cpp --- qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandxdgdecorationv1.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandxdgdecorationv1.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,260 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the QtWaylandCompositor module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwaylandxdgdecorationv1_p.h" + +#include +#include + +#include +#include + +QT_BEGIN_NAMESPACE + +/*! + \qmltype XdgDecorationManagerV1 + \inqmlmodule QtWayland.Compositor + \since 5.12 + \brief Provides an extension for negotiation of server-side and client-side window decorations + + The XdgDecorationManagerV1 extension provides a way for a compositor to announce support for + server-side window decorations, and for xdg-shell clients to communicate whether they prefer + client-side or server-side decorations. + + XdgDecorationManagerV1 corresponds to the Wayland interface, \c zxdg_decoration_manager_v1. + + To provide the functionality of the extension in a compositor, create an instance of the + XdgDecorationManagerV1 component and add it to the list of extensions supported by the compositor: + + \code + import QtWayland.Compositor 1.3 + + WaylandCompositor { + // Xdg decoration manager assumes xdg-shell is being used + XdgShell { + onToplevelCreated: // ... + } + XdgDecorationManagerV1 { + // Provide a hint to clients that support the extension they should use server-side + // decorations. + preferredMode: XdgToplevel.ServerSideDecoration + } + } + \endcode + + \sa XdgToplevel::decorationMode +*/ + +/*! + \class QWaylandXdgDecorationManagerV1 + \inmodule QtWaylandCompositor + \since 5.12 + \brief Provides an extension for negotiation of server-side and client-side window decorations + + The QWaylandXdgDecorationManagerV1 extension provides a way for a compositor to announce support + for server-side window decorations, and for xdg-shell clients to communicate whether they prefer + client-side or server-side decorations. + + QWaylandXdgDecorationManagerV1 corresponds to the Wayland interface, \c zxdg_decoration_manager_v1. + + \sa QWaylandXdgToplevel::decorationMode +*/ + +/*! + Constructs a QWaylandXdgDecorationManagerV1 object. +*/ +QWaylandXdgDecorationManagerV1::QWaylandXdgDecorationManagerV1() + : QWaylandCompositorExtensionTemplate(*new QWaylandXdgDecorationManagerV1Private) +{ +} + +/*! + Initializes the extension. +*/ +void QWaylandXdgDecorationManagerV1::initialize() +{ + Q_D(QWaylandXdgDecorationManagerV1); + + QWaylandCompositorExtensionTemplate::initialize(); + QWaylandCompositor *compositor = static_cast(extensionContainer()); + if (!compositor) { + qWarning() << "Failed to find QWaylandCompositor when initializing QWaylandXdgDecorationV1"; + return; + } + d->init(compositor->display(), 1); +} + +/*! + \qmlproperty string QtWaylandCompositor::XdgDecorationManagerV1::preferredMode + + This property holds the decoration mode the compositor prefers. + + This is the mode used for clients that don't indicate a preference for server-side or + client-side decorations. +*/ +/*! + \property QWaylandXdgDecorationManagerV1::preferredMode + + This property holds the decoration mode the compositor prefers. + + This is the mode used for clients that don't indicate a preference for server-side or + client-side decorations. +*/ +QWaylandXdgToplevel::DecorationMode QWaylandXdgDecorationManagerV1::preferredMode() const +{ + Q_D(const QWaylandXdgDecorationManagerV1); + return d->m_preferredMode; +} + +void QWaylandXdgDecorationManagerV1::setPreferredMode(QWaylandXdgToplevel::DecorationMode preferredMode) +{ + Q_D(QWaylandXdgDecorationManagerV1); + if (d->m_preferredMode == preferredMode) + return; + + d->m_preferredMode = preferredMode; + emit preferredModeChanged(); +} + +/*! + Returns the Wayland interface for the QWaylandXdgDecorationManagerV1. +*/ +const wl_interface *QWaylandXdgDecorationManagerV1::interface() +{ + return QWaylandXdgDecorationManagerV1Private::interface(); +} + +void QWaylandXdgDecorationManagerV1Private::zxdg_decoration_manager_v1_get_toplevel_decoration( + Resource *resource, uint id, wl_resource *toplevelResource) +{ + Q_Q(QWaylandXdgDecorationManagerV1); + + auto *toplevel = QWaylandXdgToplevel::fromResource(toplevelResource); + if (!toplevel) { + qWarning() << "Couldn't find toplevel for decoration"; + return; + } + + //TODO: verify that the xdg surface is unconfigured, and post protocol error/warning + + auto *toplevelPrivate = QWaylandXdgToplevelPrivate::get(toplevel); + + if (toplevelPrivate->m_decoration) { + qWarning() << "zxdg_decoration_manager_v1.get_toplevel_decoration:" + << toplevel << "already has a decoration object, ignoring"; + //TODO: protocol error as well? + return; + } + + new QWaylandXdgToplevelDecorationV1(toplevel, q, resource->client(), id); +} + +QWaylandXdgToplevelDecorationV1::QWaylandXdgToplevelDecorationV1(QWaylandXdgToplevel *toplevel, + QWaylandXdgDecorationManagerV1 *manager, + wl_client *client, int id) + : QtWaylandServer::zxdg_toplevel_decoration_v1(client, id, /*version*/ 1) + , m_toplevel(toplevel) + , m_manager(manager) +{ + Q_ASSERT(toplevel); + auto *toplevelPrivate = QWaylandXdgToplevelPrivate::get(toplevel); + Q_ASSERT(!toplevelPrivate->m_decoration); + toplevelPrivate->m_decoration = this; + sendConfigure(manager->preferredMode()); +} + +QWaylandXdgToplevelDecorationV1::~QWaylandXdgToplevelDecorationV1() +{ + QWaylandXdgToplevelPrivate::get(m_toplevel)->m_decoration = nullptr; +} + +void QWaylandXdgToplevelDecorationV1::sendConfigure(QWaylandXdgToplevelDecorationV1::DecorationMode mode) +{ + if (configuredMode() == mode) + return; + + switch (mode) { + case DecorationMode::ClientSideDecoration: + send_configure(mode_client_side); + break; + case DecorationMode::ServerSideDecoration: + send_configure(mode_server_side); + break; + default: + qWarning() << "Illegal mode in QWaylandXdgToplevelDecorationV1::sendConfigure" << mode; + break; + } + + m_configuredMode = mode; + emit m_toplevel->decorationModeChanged(); +} + +void QWaylandXdgToplevelDecorationV1::zxdg_toplevel_decoration_v1_destroy_resource(Resource *resource) +{ + Q_UNUSED(resource); + delete this; +} + +void QWaylandXdgToplevelDecorationV1::zxdg_toplevel_decoration_v1_destroy(Resource *resource) +{ + wl_resource_destroy(resource->handle); +} + +void QWaylandXdgToplevelDecorationV1::zxdg_toplevel_decoration_v1_set_mode(Resource *resource, uint32_t mode) +{ + Q_UNUSED(resource); + m_clientPreferredMode = mode; + handleClientPreferredModeChanged(); +} + +void QWaylandXdgToplevelDecorationV1::zxdg_toplevel_decoration_v1_unset_mode(Resource *resource) +{ + Q_UNUSED(resource); + m_clientPreferredMode = 0; + handleClientPreferredModeChanged(); +} + +void QWaylandXdgToplevelDecorationV1::handleClientPreferredModeChanged() +{ + if (m_clientPreferredMode != m_configuredMode) { + if (m_clientPreferredMode == 0) + sendConfigure(m_manager->preferredMode()); + else + sendConfigure(DecorationMode(m_clientPreferredMode)); + } +} + +QT_END_NAMESPACE diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandxdgdecorationv1.h qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandxdgdecorationv1.h --- qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandxdgdecorationv1.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandxdgdecorationv1.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the QtWaylandCompositor module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWAYLANDXDGDECORATIONV1_H +#define QWAYLANDXDGDECORATIONV1_H + +#include +#include + +QT_BEGIN_NAMESPACE + +class QWaylandXdgDecorationManagerV1Private; + +class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandXdgDecorationManagerV1 : public QWaylandCompositorExtensionTemplate +{ + Q_OBJECT + Q_DECLARE_PRIVATE(QWaylandXdgDecorationManagerV1) + Q_PROPERTY(QWaylandXdgToplevel::DecorationMode preferredMode READ preferredMode WRITE setPreferredMode NOTIFY preferredModeChanged) + +public: + explicit QWaylandXdgDecorationManagerV1(); + + void initialize() override; + + QWaylandXdgToplevel::DecorationMode preferredMode() const; + void setPreferredMode(QWaylandXdgToplevel::DecorationMode preferredMode); + + static const struct wl_interface *interface(); + +Q_SIGNALS: + void preferredModeChanged(); +}; + +QT_END_NAMESPACE + +#endif // QWAYLANDXDGDECORATIONV1_H diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandxdgdecorationv1_p.h qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandxdgdecorationv1_p.h --- qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandxdgdecorationv1_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandxdgdecorationv1_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,108 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the QtWaylandCompositor module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWAYLANDXDGDECORATIONV1_P_H +#define QWAYLANDXDGDECORATIONV1_P_H + +#include "qwaylandxdgdecorationv1.h" + +#include +#include + +#include + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +QT_BEGIN_NAMESPACE + +class QWaylandXdgToplevel; + +class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandXdgDecorationManagerV1Private + : public QWaylandCompositorExtensionPrivate + , public QtWaylandServer::zxdg_decoration_manager_v1 +{ + Q_DECLARE_PUBLIC(QWaylandXdgDecorationManagerV1) +public: + using DecorationMode = QWaylandXdgToplevel::DecorationMode; + explicit QWaylandXdgDecorationManagerV1Private() {} + +protected: + void zxdg_decoration_manager_v1_get_toplevel_decoration(Resource *resource, uint id, ::wl_resource *toplevelResource) override; + +private: + DecorationMode m_preferredMode = DecorationMode::ClientSideDecoration; +}; + +class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandXdgToplevelDecorationV1 + : public QtWaylandServer::zxdg_toplevel_decoration_v1 +{ +public: + using DecorationMode = QWaylandXdgToplevel::DecorationMode; + explicit QWaylandXdgToplevelDecorationV1(QWaylandXdgToplevel *toplevel, + QWaylandXdgDecorationManagerV1 *manager, + wl_client *client, int id); + ~QWaylandXdgToplevelDecorationV1() override; + + DecorationMode configuredMode() const { return DecorationMode(m_configuredMode); } + void sendConfigure(DecorationMode mode); + +protected: + void zxdg_toplevel_decoration_v1_destroy_resource(Resource *resource) override; + void zxdg_toplevel_decoration_v1_destroy(Resource *resource) override; + void zxdg_toplevel_decoration_v1_set_mode(Resource *resource, uint32_t mode) override; + void zxdg_toplevel_decoration_v1_unset_mode(Resource *resource) override; + +private: + void handleClientPreferredModeChanged(); + + QWaylandXdgToplevel *m_toplevel = nullptr; + QWaylandXdgDecorationManagerV1 *m_manager = nullptr; + uint m_configuredMode = 0; + uint m_clientPreferredMode = 0; +}; + +QT_END_NAMESPACE + +#endif // QWAYLANDXDGDECORATIONV1_P_H diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandxdgshell.cpp qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandxdgshell.cpp --- qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandxdgshell.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandxdgshell.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,2105 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the QtWaylandCompositor module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwaylandxdgshell.h" +#include "qwaylandxdgshell_p.h" + +#ifdef QT_WAYLAND_COMPOSITOR_QUICK +#include "qwaylandxdgshellintegration_p.h" +#endif + +#include +#include +#include +#include +#include + +#include + +#include + +QT_BEGIN_NAMESPACE + +QWaylandXdgShellPrivate::QWaylandXdgShellPrivate() +{ +} + +void QWaylandXdgShellPrivate::ping(QtWaylandServer::xdg_wm_base::Resource *resource, uint32_t serial) +{ + m_pings.insert(serial); + send_ping(resource->handle, serial); +} + +void QWaylandXdgShellPrivate::registerXdgSurface(QWaylandXdgSurface *xdgSurface) +{ + m_xdgSurfaces.insert(xdgSurface->surface()->client()->client(), xdgSurface); +} + +void QWaylandXdgShellPrivate::unregisterXdgSurface(QWaylandXdgSurface *xdgSurface) +{ + auto xdgSurfacePrivate = QWaylandXdgSurfacePrivate::get(xdgSurface); + if (!m_xdgSurfaces.remove(xdgSurfacePrivate->resource()->client(), xdgSurface)) + qWarning("%s Unexpected state. Can't find registered xdg surface\n", Q_FUNC_INFO); +} + +QWaylandXdgSurface *QWaylandXdgShellPrivate::xdgSurfaceFromSurface(QWaylandSurface *surface) +{ + for (QWaylandXdgSurface *xdgSurface : qAsConst(m_xdgSurfaces)) { + if (surface == xdgSurface->surface()) + return xdgSurface; + } + return nullptr; +} + +void QWaylandXdgShellPrivate::xdg_wm_base_destroy(Resource *resource) +{ + if (!m_xdgSurfaces.values(resource->client()).empty()) + wl_resource_post_error(resource->handle, XDG_WM_BASE_ERROR_DEFUNCT_SURFACES, + "xdg_shell was destroyed before children"); + + wl_resource_destroy(resource->handle); +} + +void QWaylandXdgShellPrivate::xdg_wm_base_create_positioner(QtWaylandServer::xdg_wm_base::Resource *resource, uint32_t id) +{ + QWaylandResource positionerResource(wl_resource_create(resource->client(), &xdg_positioner_interface, + wl_resource_get_version(resource->handle), id)); + + new QWaylandXdgPositioner(positionerResource); +} + +void QWaylandXdgShellPrivate::xdg_wm_base_get_xdg_surface(Resource *resource, uint32_t id, wl_resource *surfaceResource) +{ + Q_Q(QWaylandXdgShell); + QWaylandSurface *surface = QWaylandSurface::fromResource(surfaceResource); + + if (surface->role() != nullptr) { + wl_resource_post_error(resource->handle, XDG_WM_BASE_ERROR_ROLE, + "wl_surface@%d, already has role %s\n", + wl_resource_get_id(surface->resource()), + surface->role()->name().constData()); + return; + } + + if (surface->hasContent()) { + //TODO: According to the spec, this is a client error, but there's no appropriate error code + qWarning() << "get_xdg_surface requested on a xdg_surface with content"; + } + + QWaylandResource xdgSurfaceResource(wl_resource_create(resource->client(), &xdg_surface_interface, + wl_resource_get_version(resource->handle), id)); + + QWaylandXdgSurface *xdgSurface = new QWaylandXdgSurface(q, surface, xdgSurfaceResource); + + registerXdgSurface(xdgSurface); + emit q->xdgSurfaceCreated(xdgSurface); +} + +void QWaylandXdgShellPrivate::xdg_wm_base_pong(Resource *resource, uint32_t serial) +{ + Q_UNUSED(resource); + Q_Q(QWaylandXdgShell); + if (m_pings.remove(serial)) + emit q->pong(serial); + else + qWarning("Received an unexpected pong!"); +} + +/*! + * \qmltype XdgShell + * \inqmlmodule QtWayland.Compositor + * \since 5.12 + * \brief Provides an extension for desktop-style user interfaces. + * + * The XdgShell extension provides a way to associate a XdgToplevel or XdgPopup + * with a regular Wayland surface. Using the XdgToplevel interface, the client + * can request that the surface is resized, moved, and so on. + * + * XdgShell corresponds to the Wayland interface, \c xdg_shell. + * + * To provide the functionality of the shell extension in a compositor, create + * an instance of the XdgShell component and add it to the list of extensions + * supported by the compositor: + * \code + * import QtWayland.Compositor 1.3 + * + * WaylandCompositor { + * XdgShell { + * // ... + * } + * } + * \endcode + */ + +/*! + * \class QWaylandXdgShell + * \inmodule QtWaylandCompositor + * \since 5.12 + * \brief The QWaylandXdgShell class is an extension for desktop-style user interfaces. + * + * The QWaylandXdgShell extension provides a way to associate a QWaylandXdgToplevel or + * QWaylandXdgPopup with a regular Wayland surface. Using the QWaylandXdgToplevel interface, + * the client can request that the surface is resized, moved, and so on. + * + * QWaylandXdgShell corresponds to the Wayland interface, \c xdg_shell. + */ + +/*! + * Constructs a QWaylandXdgShell object. + */ +QWaylandXdgShell::QWaylandXdgShell() + : QWaylandShellTemplate(*new QWaylandXdgShellPrivate()) +{ +} + +/*! + * Constructs a QWaylandXdgShell object for the provided \a compositor. + */ +QWaylandXdgShell::QWaylandXdgShell(QWaylandCompositor *compositor) + : QWaylandShellTemplate(compositor, *new QWaylandXdgShellPrivate()) +{ +} + +/*! + * Initializes the shell extension. + */ +void QWaylandXdgShell::initialize() +{ + Q_D(QWaylandXdgShell); + QWaylandShellTemplate::initialize(); + QWaylandCompositor *compositor = static_cast(extensionContainer()); + if (!compositor) { + qWarning() << "Failed to find QWaylandCompositor when initializing QWaylandXdgShell"; + return; + } + d->init(compositor->display(), 1); + + handleSeatChanged(compositor->defaultSeat(), nullptr); + + connect(compositor, &QWaylandCompositor::defaultSeatChanged, + this, &QWaylandXdgShell::handleSeatChanged); +} + +/*! + * Returns the Wayland interface for the QWaylandXdgShell. + */ +const struct wl_interface *QWaylandXdgShell::interface() +{ + return QWaylandXdgShellPrivate::interface(); +} + +QByteArray QWaylandXdgShell::interfaceName() +{ + return QWaylandXdgShellPrivate::interfaceName(); +} + +/*! + * \qmlmethod void QtWaylandCompositor::XdgShell::ping(WaylandClient client) + * + * Sends a ping event to \a client. If the client replies to the event the + * \l pong signal will be emitted. + */ + +/*! + * Sends a ping event to \a client. If the client replies to the event the + * \l pong signal will be emitted. + */ +uint QWaylandXdgShell::ping(QWaylandClient *client) +{ + Q_D(QWaylandXdgShell); + + QWaylandCompositor *compositor = static_cast(extensionContainer()); + Q_ASSERT(compositor); + + uint32_t serial = compositor->nextSerial(); + + QWaylandXdgShellPrivate::Resource *clientResource = d->resourceMap().value(client->client(), nullptr); + Q_ASSERT(clientResource); + + d->ping(clientResource, serial); + return serial; +} + +void QWaylandXdgShell::handleSeatChanged(QWaylandSeat *newSeat, QWaylandSeat *oldSeat) +{ + if (oldSeat != nullptr) { + disconnect(oldSeat, &QWaylandSeat::keyboardFocusChanged, + this, &QWaylandXdgShell::handleFocusChanged); + } + + if (newSeat != nullptr) { + connect(newSeat, &QWaylandSeat::keyboardFocusChanged, + this, &QWaylandXdgShell::handleFocusChanged); + } +} + +void QWaylandXdgShell::handleFocusChanged(QWaylandSurface *newSurface, QWaylandSurface *oldSurface) +{ + Q_D(QWaylandXdgShell); + + QWaylandXdgSurface *newXdgSurface = d->xdgSurfaceFromSurface(newSurface); + QWaylandXdgSurface *oldXdgSurface = d->xdgSurfaceFromSurface(oldSurface); + + if (newXdgSurface) + QWaylandXdgSurfacePrivate::get(newXdgSurface)->handleFocusReceived(); + + if (oldXdgSurface) + QWaylandXdgSurfacePrivate::get(oldXdgSurface)->handleFocusLost(); +} + +QWaylandXdgSurfacePrivate::QWaylandXdgSurfacePrivate() +{ +} + +void QWaylandXdgSurfacePrivate::setWindowType(Qt::WindowType windowType) +{ + if (m_windowType == windowType) + return; + + m_windowType = windowType; + + Q_Q(QWaylandXdgSurface); + emit q->windowTypeChanged(); +} + +void QWaylandXdgSurfacePrivate::handleFocusLost() +{ + if (m_toplevel) + QWaylandXdgToplevelPrivate::get(m_toplevel)->handleFocusLost(); +} + +void QWaylandXdgSurfacePrivate::handleFocusReceived() +{ + if (m_toplevel) + QWaylandXdgToplevelPrivate::get(m_toplevel)->handleFocusReceived(); +} + +QRect QWaylandXdgSurfacePrivate::calculateFallbackWindowGeometry() const +{ + // TODO: The unset window geometry should include subsurfaces as well, so this solution + // won't work too well on those kinds of clients. + return QRect(QPoint(0, 0), m_surface->size() / m_surface->bufferScale()); +} + +void QWaylandXdgSurfacePrivate::updateFallbackWindowGeometry() +{ + Q_Q(QWaylandXdgSurface); + if (!m_unsetWindowGeometry) + return; + + const QRect unsetGeometry = calculateFallbackWindowGeometry(); + if (unsetGeometry == m_windowGeometry) + return; + + m_windowGeometry = unsetGeometry; + emit q->windowGeometryChanged(); +} + +void QWaylandXdgSurfacePrivate::xdg_surface_destroy_resource(QtWaylandServer::xdg_surface::Resource *resource) +{ + Q_UNUSED(resource); + Q_Q(QWaylandXdgSurface); + QWaylandXdgShellPrivate::get(m_xdgShell)->unregisterXdgSurface(q); + delete q; +} + +void QWaylandXdgSurfacePrivate::xdg_surface_destroy(QtWaylandServer::xdg_surface::Resource *resource) +{ + wl_resource_destroy(resource->handle); +} + +void QWaylandXdgSurfacePrivate::xdg_surface_get_toplevel(QtWaylandServer::xdg_surface::Resource *resource, uint32_t id) +{ + Q_Q(QWaylandXdgSurface); + + if (m_toplevel || m_popup) { + wl_resource_post_error(resource->handle, XDG_SURFACE_ERROR_ALREADY_CONSTRUCTED, + "xdg_surface already has a role object"); + return; + } + + if (!m_surface->setRole(QWaylandXdgToplevel::role(), resource->handle, XDG_WM_BASE_ERROR_ROLE)) + return; + + QWaylandResource topLevelResource(wl_resource_create(resource->client(), &xdg_toplevel_interface, + wl_resource_get_version(resource->handle), id)); + + m_toplevel = new QWaylandXdgToplevel(q, topLevelResource); + emit q->toplevelCreated(); + emit m_xdgShell->toplevelCreated(m_toplevel, q); +} + +void QWaylandXdgSurfacePrivate::xdg_surface_get_popup(QtWaylandServer::xdg_surface::Resource *resource, uint32_t id, wl_resource *parentResource, wl_resource *positionerResource) +{ + Q_Q(QWaylandXdgSurface); + + if (m_toplevel || m_popup) { + wl_resource_post_error(resource->handle, XDG_SURFACE_ERROR_ALREADY_CONSTRUCTED, + "xdg_surface already has a role object"); + return; + } + + QWaylandXdgSurface *parent = QWaylandXdgSurface::fromResource(parentResource); + if (!parent) { + wl_resource_post_error(resource->handle, XDG_WM_BASE_ERROR_INVALID_POPUP_PARENT, + "xdg_surface.get_popup with invalid popup parent"); + return; + } + + QWaylandXdgPositioner *positioner = QWaylandXdgPositioner::fromResource(positionerResource); + if (!positioner) { + wl_resource_post_error(resource->handle, XDG_WM_BASE_ERROR_INVALID_POSITIONER, + "xdg_surface.get_popup without positioner"); + return; + } + if (!positioner->m_data.isComplete()) { + QWaylandXdgPositionerData p = positioner->m_data; + wl_resource_post_error(resource->handle, XDG_WM_BASE_ERROR_INVALID_POSITIONER, + "xdg_surface.get_popup with invalid positioner (size: %dx%d, anchorRect: %dx%d)", + p.size.width(), p.size.height(), p.anchorRect.width(), p.anchorRect.height()); + return; + } + + if (!m_surface->setRole(QWaylandXdgPopup::role(), resource->handle, XDG_WM_BASE_ERROR_ROLE)) + return; + + QWaylandResource popupResource(wl_resource_create(resource->client(), &xdg_popup_interface, + wl_resource_get_version(resource->handle), id)); + + m_popup = new QWaylandXdgPopup(q, parent, positioner, popupResource); + emit q->popupCreated(); + emit m_xdgShell->popupCreated(m_popup, q); +} + +void QWaylandXdgSurfacePrivate::xdg_surface_ack_configure(QtWaylandServer::xdg_surface::Resource *resource, uint32_t serial) +{ + if (m_toplevel) { + QWaylandXdgToplevelPrivate::get(m_toplevel)->handleAckConfigure(serial); + } else if (m_popup) { + QWaylandXdgPopupPrivate::get(m_popup)->handleAckConfigure(serial); + } else { + wl_resource_post_error(resource->handle, XDG_SURFACE_ERROR_NOT_CONSTRUCTED, + "ack_configure requested on an unconstructed xdg_surface"); + } +} + +void QWaylandXdgSurfacePrivate::xdg_surface_set_window_geometry(QtWaylandServer::xdg_surface::Resource *resource, int32_t x, int32_t y, int32_t width, int32_t height) +{ + Q_Q(QWaylandXdgSurface); + + if (!q->surface()->role()) { + wl_resource_post_error(resource->handle, XDG_SURFACE_ERROR_NOT_CONSTRUCTED, + "set_window_geometry requested on an unconstructed xdg_surface"); + return; + } + + if (width <= 0 || height <= 0) { + // The protocol spec says "setting an invalid size will raise an error". But doesn't tell + // which error to raise, and there's no fitting error in the xdg_surface_error enum. + // So until this is fixed, just output a warning and return. + qWarning() << "Invalid (non-positive) dimensions received in set_window_geometry"; + return; + } + + m_unsetWindowGeometry = false; + + QRect geometry(x, y, width, height); + + if (m_windowGeometry == geometry) + return; + + m_windowGeometry = geometry; + emit q->windowGeometryChanged(); +} + +/*! + * \qmltype XdgSurface + * \inqmlmodule QtWayland.Compositor + * \since 5.12 + * \brief XdgSurface provides desktop-style compositor-specific features to an xdg surface. + * + * This type is part of the \l{XdgShell} extension and provides a way to + * extend the functionality of an existing \l{WaylandSurface} with features + * specific to desktop-style compositors, such as resizing and moving the + * surface. + * + * It corresponds to the Wayland interface \c xdg_surface. + */ + +/*! + * \class QWaylandXdgSurface + * \inmodule QtWaylandCompositor + * \since 5.12 + * \brief The QWaylandXdgSurface class provides desktop-style compositor-specific features to an xdg surface. + * + * This class is part of the QWaylandXdgShell extension and provides a way to + * extend the functionality of an existing QWaylandSurface with features + * specific to desktop-style compositors, such as resizing and moving the + * surface. + * + * It corresponds to the Wayland interface \c xdg_surface. + */ + +/*! + * Constructs a QWaylandXdgSurface. + */ +QWaylandXdgSurface::QWaylandXdgSurface() + : QWaylandShellSurfaceTemplate(*new QWaylandXdgSurfacePrivate) +{ +} + +/*! + * Constructs a QWaylandXdgSurface for \a surface and initializes it with the + * given \a xdgShell, \a surface, and resource \a res. + */ +QWaylandXdgSurface::QWaylandXdgSurface(QWaylandXdgShell *xdgShell, QWaylandSurface *surface, const QWaylandResource &res) + : QWaylandShellSurfaceTemplate(*new QWaylandXdgSurfacePrivate) +{ + initialize(xdgShell, surface, res); +} + +/*! + * \qmlmethod void QtWaylandCompositor::XdgSurface::initialize(object xdgShell, object surface, object client, int id) + * + * Initializes the XdgSurface, associating it with the given \a xdgShell, \a surface, + * \a client, and \a id. + */ + +/*! + * Initializes the QWaylandXdgSurface, associating it with the given \a xdgShell, \a surface + * and \a resource. + */ +void QWaylandXdgSurface::initialize(QWaylandXdgShell *xdgShell, QWaylandSurface *surface, const QWaylandResource &resource) +{ + Q_D(QWaylandXdgSurface); + d->m_xdgShell = xdgShell; + d->m_surface = surface; + d->init(resource.resource()); + setExtensionContainer(surface); + d->m_windowGeometry = d->calculateFallbackWindowGeometry(); + connect(surface, &QWaylandSurface::sizeChanged, this, &QWaylandXdgSurface::handleSurfaceSizeChanged); + connect(surface, &QWaylandSurface::bufferScaleChanged, this, &QWaylandXdgSurface::handleBufferScaleChanged); + emit shellChanged(); + emit surfaceChanged(); + QWaylandCompositorExtension::initialize(); +} + +/*! + * \qmlproperty enum QtWaylandCompositor::XdgSurface::windowType + * + * This property holds the window type of the XdgSurface. + */ +Qt::WindowType QWaylandXdgSurface::windowType() const +{ + Q_D(const QWaylandXdgSurface); + return d->m_windowType; +} + +/*! + * \qmlproperty rect QtWaylandCompositor::XdgSurface::windowGeometry + * + * This property holds the window geometry of the QWaylandXdgSurface. The window + * geometry describes the window's visible bounds from the user's perspective. + * The geometry includes title bars and borders if drawn by the client, but + * excludes drop shadows. It is meant to be used for aligning and tiling + * windows. + */ + +/*! + * \property QWaylandXdgSurface::windowGeometry + * + * This property holds the window geometry of the QWaylandXdgSurface. The window + * geometry describes the window's visible bounds from the user's perspective. + * The geometry includes title bars and borders if drawn by the client, but + * excludes drop shadows. It is meant to be used for aligning and tiling + * windows. + */ +QRect QWaylandXdgSurface::windowGeometry() const +{ + Q_D(const QWaylandXdgSurface); + return d->m_windowGeometry; +} + +/*! + * \internal + */ +void QWaylandXdgSurface::initialize() +{ + QWaylandCompositorExtension::initialize(); +} + +void QWaylandXdgSurface::handleSurfaceSizeChanged() +{ + Q_D(QWaylandXdgSurface); + d->updateFallbackWindowGeometry(); +} + +void QWaylandXdgSurface::handleBufferScaleChanged() +{ + Q_D(QWaylandXdgSurface); + d->updateFallbackWindowGeometry(); +} + +/*! + * \qmlproperty XdgShell QtWaylandCompositor::XdgSurface::shell + * + * This property holds the shell associated with this XdgSurface. + */ + +/*! + * \property QWaylandXdgSurface::shell + * + * This property holds the shell associated with this QWaylandXdgSurface. + */ +QWaylandXdgShell *QWaylandXdgSurface::shell() const +{ + Q_D(const QWaylandXdgSurface); + return d->m_xdgShell; +} + +/*! + * \qmlproperty WaylandSurface QtWaylandCompositor::XdgSurface::surface + * + * This property holds the surface associated with this XdgSurface. + */ + +/*! + * \property QWaylandXdgSurface::surface + * + * This property holds the surface associated with this QWaylandXdgSurface. + */ +QWaylandSurface *QWaylandXdgSurface::surface() const +{ + Q_D(const QWaylandXdgSurface); + return d->m_surface; +} + +/*! + * \qmlproperty XdgToplevel QtWaylandCompositor::XdgSurface::toplevel + * + * This property holds the properties and methods that are specific to the + * toplevel XdgSurface. + * + * \sa popup, XdgShell::toplevelCreated + */ + +/*! + * \property QWaylandXdgSurface::toplevel + * + * This property holds the properties and methods that are specific to the + * toplevel QWaylandXdgSurface. + * + * \sa QWaylandXdgSurface::popup, QWaylandXdgShell::toplevelCreated + */ +QWaylandXdgToplevel *QWaylandXdgSurface::toplevel() const +{ + Q_D(const QWaylandXdgSurface); + return d->m_toplevel; +} + +/*! + * \qmlproperty XdgPopup QtWaylandCompositor::XdgSurface::popup + * + * This property holds the properties and methods that are specific to the + * popup XdgSurface. + * + * \sa toplevel, XdgShell::popupCreated + */ + +/*! + * \property QWaylandXdgSurface::popup + * + * This property holds the properties and methods that are specific to the + * popup QWaylandXdgSurface. + * + * \sa QWaylandXdgSurface::toplevel, QWaylandXdgShell::popupCreated + */ +QWaylandXdgPopup *QWaylandXdgSurface::popup() const +{ + Q_D(const QWaylandXdgSurface); + return d->m_popup; +} + +/*! + * Returns the Wayland interface for the QWaylandXdgSurface. + */ +const wl_interface *QWaylandXdgSurface::interface() +{ + return QWaylandXdgSurfacePrivate::interface(); +} + +/*! + * \internal + */ +QByteArray QWaylandXdgSurface::interfaceName() +{ + return QWaylandXdgSurfacePrivate::interfaceName(); +} + +/*! + * Returns the QWaylandXdgSurface corresponding to the \a resource. + */ +QWaylandXdgSurface *QWaylandXdgSurface::fromResource(wl_resource *resource) +{ + auto xsResource = QWaylandXdgSurfacePrivate::Resource::fromResource(resource); + if (!xsResource) + return nullptr; + return static_cast(xsResource->xdg_surface_object)->q_func(); +} + +#ifdef QT_WAYLAND_COMPOSITOR_QUICK +QWaylandQuickShellIntegration *QWaylandXdgSurface::createIntegration(QWaylandQuickShellSurfaceItem *item) +{ + Q_D(const QWaylandXdgSurface); + + if (d->m_toplevel) + return new QtWayland::XdgToplevelIntegration(item); + + if (d->m_popup) + return new QtWayland::XdgPopupIntegration(item); + + return nullptr; +} +#endif + +/*! + * \qmltype XdgToplevel + * \inqmlmodule QtWayland.Compositor + * \since 5.12 + * \brief XdgToplevel represents the toplevel window specific parts of an xdg surface. + * + * This type is part of the \l{XdgShell} extension and provides a way to + * extend the functionality of an XdgSurface with features + * specific to desktop-style windows. + * + * It corresponds to the Wayland interface \c xdg_toplevel. + */ + +/*! + * \class QWaylandXdgToplevel + * \inmodule QtWaylandCompositor + * \since 5.12 + * \brief The QWaylandXdgToplevel class represents the toplevel window specific parts of an xdg surface. + * + * This class is part of the QWaylandXdgShell extension and provides a way to + * extend the functionality of an QWaylandXdgSurface with features + * specific to desktop-style windows. + * + * It corresponds to the Wayland interface \c xdg_toplevel. + */ + +/*! + * Constructs a QWaylandXdgToplevel for the given \a xdgSurface and \a resource. + */ +QWaylandXdgToplevel::QWaylandXdgToplevel(QWaylandXdgSurface *xdgSurface, QWaylandResource &resource) + : QObject(*new QWaylandXdgToplevelPrivate(xdgSurface, resource)) +{ + QVector states; + sendConfigure({0, 0}, states); +} + +QWaylandXdgToplevel::~QWaylandXdgToplevel() +{ + Q_D(QWaylandXdgToplevel); + // Usually, the decoration is destroyed by the client (according to the protocol), + // but if the client misbehaves, or is shut down, we need to clean up here. + if (Q_UNLIKELY(d->m_decoration)) + wl_resource_destroy(d->m_decoration->resource()->handle); + Q_ASSERT(!d->m_decoration); +} + +/*! + * \qmlproperty XdgSurface QtWaylandCompositor::XdgToplevel::xdgSurface + * + * This property holds the XdgSurface for this XdgToplevel. + */ + +/*! + * \property QWaylandXdgToplevel::xdgSurface + * + * This property holds the QWaylandXdgSurface for this QWaylandXdgToplevel. + */ +QWaylandXdgSurface *QWaylandXdgToplevel::xdgSurface() const +{ + Q_D(const QWaylandXdgToplevel); + return d->m_xdgSurface; +} + +/*! + * \qmlproperty XdgToplevel QtWaylandCompositor::XdgToplevel::parentToplevel + * + * This property holds the XdgToplevel parent of this XdgToplevel. + */ + +/*! + * \property QWaylandXdgToplevel::parentToplevel + * + * This property holds the XdgToplevel parent of this XdgToplevel. + * + */ +QWaylandXdgToplevel *QWaylandXdgToplevel::parentToplevel() const +{ + Q_D(const QWaylandXdgToplevel); + return d->m_parentToplevel; +} + +/*! + * \qmlproperty string QtWaylandCompositor::XdgToplevel::title + * + * This property holds the title of the XdgToplevel. + */ + +/*! + * \property QWaylandXdgToplevel::title + * + * This property holds the title of the QWaylandXdgToplevel. + */ +QString QWaylandXdgToplevel::title() const +{ + Q_D(const QWaylandXdgToplevel); + return d->m_title; +} + +/*! + * \qmlproperty string QtWaylandCompositor::XdgToplevel::appId + * + * This property holds the app id of the XdgToplevel. + */ + +/*! + * \property QWaylandXdgToplevel::appId + * + * This property holds the app id of the QWaylandXdgToplevel. + */ +QString QWaylandXdgToplevel::appId() const +{ + Q_D(const QWaylandXdgToplevel); + return d->m_appId; +} + +/*! + * \qmlproperty size QtWaylandCompositor::XdgToplevel::maxSize + * + * This property holds the maximum size of the XdgToplevel as requested by the client. + * + * The compositor is free to ignore this value and request a larger size. + */ + +/*! + * \property QWaylandXdgToplevel::maxSize + * + * This property holds the maximum size of the QWaylandXdgToplevel. + * + * The compositor is free to ignore this value and request a larger size. + */ +QSize QWaylandXdgToplevel::maxSize() const +{ + Q_D(const QWaylandXdgToplevel); + return d->m_maxSize; +} + +/*! + * \qmlproperty size QtWaylandCompositor::XdgToplevel::minSize + * + * This property holds the minimum size of the XdgToplevel as requested by the client. + * + * The compositor is free to ignore this value and request a smaller size. + */ + +/*! + * \property QWaylandXdgToplevel::minSize + * + * This property holds the minimum size of the QWaylandXdgToplevel. + * + * The compositor is free to ignore this value and request a smaller size. + */ +QSize QWaylandXdgToplevel::minSize() const +{ + Q_D(const QWaylandXdgToplevel); + return d->m_minSize; +} + +/*! + * \property QWaylandXdgToplevel::states + * + * This property holds the last states the client acknowledged for this QWaylandToplevel. + */ +QVector QWaylandXdgToplevel::states() const +{ + Q_D(const QWaylandXdgToplevel); + return d->m_lastAckedConfigure.states; +} + +/*! + * \qmlproperty bool QtWaylandCompositor::XdgToplevel::maximized + * + * This property holds whether the client has acknowledged that it should be maximized. + */ + +/*! + * \property QWaylandXdgToplevel::maximized + * + * This property holds whether the client has acknowledged that it should be maximized. + */ +bool QWaylandXdgToplevel::maximized() const +{ + Q_D(const QWaylandXdgToplevel); + return d->m_lastAckedConfigure.states.contains(QWaylandXdgToplevel::State::MaximizedState); +} + +/*! + * \qmlproperty bool QtWaylandCompositor::XdgToplevel::fullscreen + * + * This property holds whether the client has acknowledged that it should be fullscreen. + */ + +/*! + * \property QWaylandXdgToplevel::fullscreen + * + * This property holds whether the client has acknowledged that it should be fullscreen. + */ +bool QWaylandXdgToplevel::fullscreen() const +{ + Q_D(const QWaylandXdgToplevel); + return d->m_lastAckedConfigure.states.contains(QWaylandXdgToplevel::State::FullscreenState); +} + +/*! + * \qmlproperty bool QtWaylandCompositor::XdgToplevel::resizing + * + * This property holds whether the client has acknowledged that it is being resized. + */ + +/*! + * \property QWaylandXdgToplevel::resizing + * + * This property holds whether the client has acknowledged that it is being resized. + */ +bool QWaylandXdgToplevel::resizing() const +{ + Q_D(const QWaylandXdgToplevel); + return d->m_lastAckedConfigure.states.contains(QWaylandXdgToplevel::State::ResizingState); +} + +/*! + * \qmlproperty bool QtWaylandCompositor::XdgToplevel::activated + * + * This property holds whether toplevel is drawing itself as having input focus. + */ + +/*! + * \property QWaylandXdgToplevel::activated + * + * This property holds whether toplevel is drawing itself as having input focus. + */ +bool QWaylandXdgToplevel::activated() const +{ + Q_D(const QWaylandXdgToplevel); + return d->m_lastAckedConfigure.states.contains(QWaylandXdgToplevel::State::ActivatedState); +} + +/*! + * \enum QWaylandXdgToplevel::DecorationMode + * + * This enum type is used to specify the window decoration mode for toplevel windows. + * + * \value ServerSideDecoration The compositor should draw window decorations. + * \value ClientSideDecoration The client should draw window decorations. + */ + +/*! + * \qmlproperty enumeration QtWaylandCompositor::XdgToplevel::decorationMode + * + * This property holds the current window decoration mode for this toplevel. + * + * The possible values are: + * \value XdgToplevel.ServerSideDecoration The compositor should draw window decorations. + * \value XdgToplevel.ClientSideDecoration The client should draw window decorations. + * + * \sa XdgDecorationManagerV1 + */ + +/*! + * \property QWaylandXdgToplevel::decorationMode + * + * This property holds the current window decoration mode for this toplevel. + * + * \sa QWaylandXdgDecorationManagerV1 + */ +QWaylandXdgToplevel::DecorationMode QWaylandXdgToplevel::decorationMode() const +{ + Q_D(const QWaylandXdgToplevel); + return d->m_decoration ? d->m_decoration->configuredMode() : DecorationMode::ClientSideDecoration; +} + +/*! + * \qmlmethod size QtWaylandCompositor::XdgToplevel::sizeForResize(size size, point delta, uint edges) + * + * Convenience for computing the new size given the current \a size, a \a delta, and + * the \a edges active in the drag. + */ + +/*! + * Convenience for computing the new size given the current \a size, a \a delta, and + * the \a edges active in the drag. + */ +QSize QWaylandXdgToplevel::sizeForResize(const QSizeF &size, const QPointF &delta, Qt::Edges edges) const +{ + qreal width = size.width(); + qreal height = size.height(); + if (edges & Qt::LeftEdge) + width -= delta.x(); + else if (edges & Qt::RightEdge) + width += delta.x(); + + if (edges & Qt::TopEdge) + height -= delta.y(); + else if (edges & Qt::BottomEdge) + height += delta.y(); + + QSize newSize = QSize(width, height) + .expandedTo(minSize()) + .expandedTo({1, 1}); // We don't want to send a size of (0,0) as that means that the client decides + + if (maxSize().isValid()) + newSize = newSize.boundedTo(maxSize()); + + return newSize; +} + +/*! + * Sends a configure event to the client. Parameter \a size contains the pixel size + * of the surface. A size of zero means the client is free to decide the size. + * Known \a states are enumerated in QWaylandXdgToplevel::State. + */ +uint QWaylandXdgToplevel::sendConfigure(const QSize &size, const QVector &states) +{ + if (!size.isValid()) { + qWarning() << "Can't configure xdg_toplevel with an invalid size" << size; + return 0; + } + Q_D(QWaylandXdgToplevel); + auto statesBytes = QByteArray::fromRawData(reinterpret_cast(states.data()), + states.size() * static_cast(sizeof(State))); + uint32_t serial = d->m_xdgSurface->surface()->compositor()->nextSerial(); + d->m_pendingConfigures.append(QWaylandXdgToplevelPrivate::ConfigureEvent{states, size, serial}); + d->send_configure(size.width(), size.height(), statesBytes); + QWaylandXdgSurfacePrivate::get(d->m_xdgSurface)->send_configure(serial); + return serial; +} + +/*! + * \qmlmethod int QtWaylandCompositor::XdgToplevel::sendConfigure(size size, list states) + * + * Sends a configure event to the client. \a size contains the pixel size of the surface. + * A size of zero means the client is free to decide the size. + * Known \a states are enumerated in XdgToplevel::State. + */ +uint QWaylandXdgToplevel::sendConfigure(const QSize &size, const QVector &states) +{ + QVector s; + for (auto state : states) + s << State(state); + return sendConfigure(size, s); +} + +/*! + * \qmlmethod void QtWaylandCompositor::XdgToplevel::sendClose() + * + * Sends a close event to the client. The client may choose to ignore the event. + */ + +/*! + * Sends a close event to the client. The client may choose to ignore the event. + */ +void QWaylandXdgToplevel::sendClose() +{ + Q_D(QWaylandXdgToplevel); + d->send_close(); +} + +/*! + * \qmlmethod void QtWaylandCompositor::XdgToplevel::sendMaximized(size size) + * + * Convenience for sending a configure event with the maximized state set, and + * fullscreen and resizing removed. The activated state is left in its current state. + * + * \a size is the new size of the window. + */ + +/*! + * Convenience for sending a configure event with the maximized state set, and + * fullscreen and resizing removed. The activated state is left in its current state. + * + * \a size is the new size of the window. + */ +uint QWaylandXdgToplevel::sendMaximized(const QSize &size) +{ + Q_D(QWaylandXdgToplevel); + QWaylandXdgToplevelPrivate::ConfigureEvent conf = d->lastSentConfigure(); + + if (!conf.states.contains(QWaylandXdgToplevel::State::MaximizedState)) + conf.states.append(QWaylandXdgToplevel::State::MaximizedState); + conf.states.removeOne(QWaylandXdgToplevel::State::FullscreenState); + conf.states.removeOne(QWaylandXdgToplevel::State::ResizingState); + + return sendConfigure(size, conf.states); +} + +/*! + * \qmlmethod void QtWaylandCompositor::XdgToplevel::sendUnmaximized(size size) + * + * Convenience for sending a configure event with the maximized, fullscreen and + * resizing states removed, and fullscreen and resizing removed. The activated + * state is left in its current state. + * + * \a size is the new size of the window. If \a size is zero, the client decides the size. + */ + +/*! + * Convenience for sending a configure event with the maximized, fullscreen and + * resizing states removed, and fullscreen and resizing removed. The activated + * state is left in its current state. + * + * \a size is the new size of the window. If \a size is zero, the client decides the size. + */ +uint QWaylandXdgToplevel::sendUnmaximized(const QSize &size) +{ + Q_D(QWaylandXdgToplevel); + QWaylandXdgToplevelPrivate::ConfigureEvent conf = d->lastSentConfigure(); + + conf.states.removeOne(QWaylandXdgToplevel::State::MaximizedState); + conf.states.removeOne(QWaylandXdgToplevel::State::FullscreenState); + conf.states.removeOne(QWaylandXdgToplevel::State::ResizingState); + + return sendConfigure(size, conf.states); + +} + +/*! + * \qmlmethod void QtWaylandCompositor::XdgToplevel::sendFullscreen(size size) + * + * Convenience for sending a configure event with the fullscreen state set, and + * maximized and resizing removed. The activated state is left in its current state. + * + * \sa sendUnmaximized + * + * \a size is the new size of the window. + */ + +/*! + * Convenience for sending a configure event with the fullscreen state set, and + * maximized and resizing removed. The activated state is left in its current state. + * + * \sa sendUnmaximized + * + * \a size is the new size of the window. + */ +uint QWaylandXdgToplevel::sendFullscreen(const QSize &size) +{ + Q_D(QWaylandXdgToplevel); + QWaylandXdgToplevelPrivate::ConfigureEvent conf = d->lastSentConfigure(); + + if (!conf.states.contains(QWaylandXdgToplevel::State::FullscreenState)) + conf.states.append(QWaylandXdgToplevel::State::FullscreenState); + conf.states.removeOne(QWaylandXdgToplevel::State::MaximizedState); + conf.states.removeOne(QWaylandXdgToplevel::State::ResizingState); + + return sendConfigure(size, conf.states); +} + +/*! + * \qmlmethod void QtWaylandCompositor::XdgToplevel::sendResizing(size maxSize) + * + * Convenience for sending a configure event with the resizing state set, and + * maximized and fullscreen removed. The activated state is left in its current state. + * + * \a maxSize is the new size of the window. + */ + +/*! + * Convenience for sending a configure event with the resizing state set, and + * maximized and fullscreen removed. The activated state is left in its current state. + * + * \a maxSize is the new size of the window. + */ +uint QWaylandXdgToplevel::sendResizing(const QSize &maxSize) +{ + Q_D(QWaylandXdgToplevel); + QWaylandXdgToplevelPrivate::ConfigureEvent conf = d->lastSentConfigure(); + + if (!conf.states.contains(QWaylandXdgToplevel::State::ResizingState)) + conf.states.append(QWaylandXdgToplevel::State::ResizingState); + conf.states.removeOne(QWaylandXdgToplevel::State::MaximizedState); + conf.states.removeOne(QWaylandXdgToplevel::State::FullscreenState); + + return sendConfigure(maxSize, conf.states); +} + +/*! + * Returns the surface role for the QWaylandToplevel. + */ +QWaylandSurfaceRole *QWaylandXdgToplevel::role() +{ + return &QWaylandXdgToplevelPrivate::s_role; +} + +/*! + * Returns the QWaylandXdgToplevel corresponding to the \a resource. + */ +QWaylandXdgToplevel *QWaylandXdgToplevel::fromResource(wl_resource *resource) +{ + if (auto *r = QWaylandXdgToplevelPrivate::Resource::fromResource(resource)) + return static_cast(r->xdg_toplevel_object)->q_func(); + return nullptr; +} + +/*! + * \qmlsignal QtWaylandCompositor::XdgShell::xdgSurfaceCreated(XdgSurface xdgSurface) + * + * This signal is emitted when the client has created a \c xdg_surface. + * Note that \a xdgSurface is not mapped, i.e. according to the \c xdg-shell + * protocol it should not be displayed, until it has received a role object. + * + * \sa toplevelCreated(), popupCreated() + */ + +/*! + * \fn void QWaylandXdgShell::xdgSurfaceCreated(QWaylandXdgSurface *xdgSurface) + * + * This signal is emitted when the client has created a \c xdg_surface. + * Note that \a xdgSurface is not mapped, i.e. according to the \c xdg-shell + * protocol it should not be displayed, until it has received a role object. + * + * \sa toplevelCreated(), popupCreated() + */ + +/*! + * \qmlsignal QtWaylandCompositor::XdgShell::toplevelCreated(XdgToplevel toplevel, XdgSurface xdgSurface) + * + * This signal is emitted when the client has created a \c xdg_toplevel. + * A common use case is to let the handler of this signal instantiate a ShellSurfaceItem or + * WaylandQuickItem for displaying \a toplevel in a QtQuick scene. + * + * \a xdgSurface is the XdgSurface \a toplevel is the role object for. + */ + +/*! + * \fn void QWaylandXdgShell::toplevelCreated(QWaylandXdgToplevel *toplevel, QWaylandXdgSurface *xdgSurface) + * + * This signal is emitted when the client has created a \c xdg_toplevel. + * A common use case is to let the handler of this signal instantiate a QWaylandShellSurfaceItem or + * QWaylandQuickItem for displaying \a toplevel in a QtQuick scene. + * + * \a xdgSurface is the XdgSurface \a toplevel is the role object for. + */ + +/*! + * \qmlsignal QtWaylandCompositor::XdgShell::popupCreated(XdgPopup popup, XdgSurface xdgSurface) + * + * This signal is emitted when the client has created a \c xdg_popup. + * A common use case is to let the handler of this signal instantiate a ShellSurfaceItem or + * WaylandQuickItem for displaying \a popup in a QtQuick scene. + * + * \a xdgSurface is the XdgSurface \a popup is the role object for. + */ + +/*! + * \fn void QWaylandXdgShell::popupCreated(QWaylandXdgPopup *popup, QWaylandXdgSurface *xdgSurface) + * + * This signal is emitted when the client has created a \c xdg_popup. + * A common use case is to let the handler of this signal instantiate a QWaylandShellSurfaceItem or + * QWaylandQuickItem for displaying \a popup in a QtQuick scene. + * + * \a xdgSurface is the XdgSurface \a popup is the role object for. + */ + +/*! + * \qmlsignal QtWaylandCompositor::XdgShell::pong(int serial) + * + * This signal is emitted when the client has responded to a ping event with serial, \a serial. + * + * \sa ping() + */ + +/*! + * \fn void QWaylandXdgShell::pong(uint serial) + * + * This signal is emitted when the client has responded to a ping event with serial, \a serial. + * + * \sa QWaylandXdgShell::ping() + */ + +QList QWaylandXdgToplevel::statesAsInts() const +{ + QList list; + Q_FOREACH (uint state, states()) { + list << static_cast(state); + } + return list; +} + +QWaylandSurfaceRole QWaylandXdgToplevelPrivate::s_role("xdg_toplevel"); + +QWaylandXdgToplevelPrivate::QWaylandXdgToplevelPrivate(QWaylandXdgSurface *xdgSurface, const QWaylandResource &resource) + : m_xdgSurface(xdgSurface) +{ + init(resource.resource()); +} + +void QWaylandXdgToplevelPrivate::handleAckConfigure(uint serial) +{ + Q_Q(QWaylandXdgToplevel); + ConfigureEvent config; + Q_FOREVER { + if (m_pendingConfigures.empty()) { + qWarning("Toplevel received an unexpected ack_configure!"); + return; + } + + // This won't work unless there always is a toplevel.configure for each xdgsurface.configure + config = m_pendingConfigures.takeFirst(); + + if (config.serial == serial) + break; + } + + QVector changedStates; + std::set_symmetric_difference( + m_lastAckedConfigure.states.begin(), m_lastAckedConfigure.states.end(), + config.states.begin(), config.states.end(), + std::back_inserter(changedStates)); + + m_lastAckedConfigure = config; + + for (uint state : changedStates) { + switch (state) { + case state_maximized: + emit q->maximizedChanged(); + break; + case state_fullscreen: + emit q->fullscreenChanged(); + break; + case state_resizing: + emit q->resizingChanged(); + break; + case state_activated: + emit q->activatedChanged(); + break; + } + } + + if (!changedStates.empty()) + emit q->statesChanged(); +} + +void QWaylandXdgToplevelPrivate::handleFocusLost() +{ + Q_Q(QWaylandXdgToplevel); + QWaylandXdgToplevelPrivate::ConfigureEvent current = lastSentConfigure(); + current.states.removeOne(QWaylandXdgToplevel::State::ActivatedState); + q->sendConfigure(current.size, current.states); +} + +void QWaylandXdgToplevelPrivate::handleFocusReceived() +{ + Q_Q(QWaylandXdgToplevel); + QWaylandXdgToplevelPrivate::ConfigureEvent current = lastSentConfigure(); + if (!current.states.contains(QWaylandXdgToplevel::State::ActivatedState)) { + current.states.push_back(QWaylandXdgToplevel::State::ActivatedState); + q->sendConfigure(current.size, current.states); + } +} + +Qt::Edges QWaylandXdgToplevelPrivate::convertToEdges(resize_edge edge) +{ + return Qt::Edges(((edge & 0b1100) >> 1) | ((edge & 0b0010) << 2) | (edge & 0b0001)); +} + +void QWaylandXdgToplevelPrivate::xdg_toplevel_destroy_resource(QtWaylandServer::xdg_toplevel::Resource *resource) +{ + Q_UNUSED(resource); + Q_Q(QWaylandXdgToplevel); + delete q; +} + +void QWaylandXdgToplevelPrivate::xdg_toplevel_destroy(QtWaylandServer::xdg_toplevel::Resource *resource) +{ + if (Q_UNLIKELY(m_decoration)) + qWarning() << "Client error: xdg_toplevel destroyed before its decoration object"; + + wl_resource_destroy(resource->handle); + //TODO: Should the xdg surface be desroyed as well? Or is it allowed to recreate a new toplevel for it? +} + +void QWaylandXdgToplevelPrivate::xdg_toplevel_set_parent(QtWaylandServer::xdg_toplevel::Resource *resource, wl_resource *parent) +{ + Q_UNUSED(resource); + QWaylandXdgToplevel *parentToplevel = QWaylandXdgToplevel::fromResource(parent); + + Q_Q(QWaylandXdgToplevel); + + if (m_parentToplevel != parentToplevel) { + m_parentToplevel = parentToplevel; + emit q->parentToplevelChanged(); + } + + if (m_parentToplevel && m_xdgSurface->windowType() != Qt::WindowType::SubWindow) { + // There's a parent now, which means the surface is transient + QWaylandXdgSurfacePrivate::get(m_xdgSurface)->setWindowType(Qt::WindowType::SubWindow); + } else if (!m_parentToplevel && m_xdgSurface->windowType() != Qt::WindowType::Window) { + // When the surface has no parent it is toplevel + QWaylandXdgSurfacePrivate::get(m_xdgSurface)->setWindowType(Qt::WindowType::Window); + } +} + +void QWaylandXdgToplevelPrivate::xdg_toplevel_set_title(QtWaylandServer::xdg_toplevel::Resource *resource, const QString &title) +{ + Q_UNUSED(resource); + if (title == m_title) + return; + Q_Q(QWaylandXdgToplevel); + m_title = title; + emit q->titleChanged(); +} + +void QWaylandXdgToplevelPrivate::xdg_toplevel_set_app_id(QtWaylandServer::xdg_toplevel::Resource *resource, const QString &app_id) +{ + Q_UNUSED(resource); + if (app_id == m_appId) + return; + Q_Q(QWaylandXdgToplevel); + m_appId = app_id; + emit q->appIdChanged(); +} + +void QWaylandXdgToplevelPrivate::xdg_toplevel_show_window_menu(QtWaylandServer::xdg_toplevel::Resource *resource, wl_resource *seatResource, uint32_t serial, int32_t x, int32_t y) +{ + Q_UNUSED(resource); + Q_UNUSED(serial); + QPoint position(x, y); + auto seat = QWaylandSeat::fromSeatResource(seatResource); + Q_Q(QWaylandXdgToplevel); + emit q->showWindowMenu(seat, position); +} + +void QWaylandXdgToplevelPrivate::xdg_toplevel_move(Resource *resource, wl_resource *seatResource, uint32_t serial) +{ + Q_UNUSED(resource); + Q_UNUSED(serial); + Q_Q(QWaylandXdgToplevel); + QWaylandSeat *seat = QWaylandSeat::fromSeatResource(seatResource); + emit q->startMove(seat); +} + +void QWaylandXdgToplevelPrivate::xdg_toplevel_resize(QtWaylandServer::xdg_toplevel::Resource *resource, wl_resource *seatResource, uint32_t serial, uint32_t edges) +{ + Q_UNUSED(resource); + Q_UNUSED(serial); + Q_Q(QWaylandXdgToplevel); + QWaylandSeat *seat = QWaylandSeat::fromSeatResource(seatResource); + emit q->startResize(seat, convertToEdges(resize_edge(edges))); +} + +void QWaylandXdgToplevelPrivate::xdg_toplevel_set_max_size(QtWaylandServer::xdg_toplevel::Resource *resource, int32_t width, int32_t height) +{ + Q_UNUSED(resource); + + QSize maxSize(width, height); + if (width == 0 && height == 0) + maxSize = QSize(); // Wayland size of zero means unspecified which best translates to invalid + + if (m_maxSize == maxSize) + return; + + if (width < 0 || height < 0) { + // The spec says raise a protocol error, but there's no matching error defined + qWarning() << "Received a xdg_toplevel.set_max_size request with a negative size"; + return; + } + + if (m_minSize.isValid() && maxSize.isValid() && + (maxSize.width() < m_minSize.width() || maxSize.height() < m_minSize.height())) { + // The spec says raise a protocol error, but there's no matching error defined + qWarning() << "Received a xdg_toplevel.set_max_size request with a size smaller than the minimium size"; + return; + } + + m_maxSize = maxSize; + + Q_Q(QWaylandXdgToplevel); + emit q->maxSizeChanged(); +} + +void QWaylandXdgToplevelPrivate::xdg_toplevel_set_min_size(QtWaylandServer::xdg_toplevel::Resource *resource, int32_t width, int32_t height) +{ + Q_UNUSED(resource); + + QSize minSize(width, height); + if (width == 0 && height == 0) + minSize = QSize(); // Wayland size of zero means unspecified + + if (m_minSize == minSize) + return; + + if (width < 0 || height < 0) { + // The spec says raise a protocol error, but there's no matching error defined + qWarning() << "Received a xdg_toplevel.set_min_size request with a negative size"; + return; + } + + if (m_maxSize.isValid() && minSize.isValid() && + (minSize.width() > m_maxSize.width() || minSize.height() > m_maxSize.height())) { + // The spec says raise a protocol error, but there's no matching error defined + qWarning() << "Received a xdg_toplevel.set_min_size request with a size larger than the maximum size"; + return; + } + + m_minSize = minSize; + + Q_Q(QWaylandXdgToplevel); + emit q->minSizeChanged(); +} + +void QWaylandXdgToplevelPrivate::xdg_toplevel_set_maximized(QtWaylandServer::xdg_toplevel::Resource *resource) +{ + Q_UNUSED(resource); + Q_Q(QWaylandXdgToplevel); + emit q->setMaximized(); +} + +void QWaylandXdgToplevelPrivate::xdg_toplevel_unset_maximized(QtWaylandServer::xdg_toplevel::Resource *resource) +{ + Q_UNUSED(resource); + Q_Q(QWaylandXdgToplevel); + emit q->unsetMaximized(); +} + +void QWaylandXdgToplevelPrivate::xdg_toplevel_set_fullscreen(QtWaylandServer::xdg_toplevel::Resource *resource, wl_resource *output_res) +{ + Q_UNUSED(resource); + Q_Q(QWaylandXdgToplevel); + QWaylandOutput *output = output_res ? QWaylandOutput::fromResource(output_res) : nullptr; + emit q->setFullscreen(output); +} + +void QWaylandXdgToplevelPrivate::xdg_toplevel_unset_fullscreen(QtWaylandServer::xdg_toplevel::Resource *resource) +{ + Q_UNUSED(resource); + Q_Q(QWaylandXdgToplevel); + emit q->unsetFullscreen(); +} + +void QWaylandXdgToplevelPrivate::xdg_toplevel_set_minimized(QtWaylandServer::xdg_toplevel::Resource *resource) +{ + Q_UNUSED(resource); + Q_Q(QWaylandXdgToplevel); + emit q->setMinimized(); +} + +/*! + * \qmltype XdgPopup + * \inqmlmodule QtWayland.Compositor + * \since 5.12 + * \brief XdgPopup represents the popup specific parts of and xdg surface. + * + * This type is part of the \l{XdgShell} extension and provides a way to extend + * extend the functionality of an \l{XdgSurface} with features + * specific to desktop-style menus for an xdg surface. + * + * It corresponds to the Wayland interface \c xdg_popup. + */ + +/*! + * \class QWaylandXdgPopup + * \inmodule QtWaylandCompositor + * \since 5.12 + * \brief The QWaylandXdgPopup class represents the popup specific parts of an xdg surface. + * + * This class is part of the QWaylandXdgShell extension and provides a way to + * extend the functionality of a QWaylandXdgSurface with features + * specific to desktop-style menus for an xdg surface. + * + * It corresponds to the Wayland interface \c xdg_popup. + */ + +/*! + * Constructs a QWaylandXdgPopup. + */ +QWaylandXdgPopup::QWaylandXdgPopup(QWaylandXdgSurface *xdgSurface, QWaylandXdgSurface *parentXdgSurface, + QWaylandXdgPositioner *positioner, QWaylandResource &resource) + : QObject(*new QWaylandXdgPopupPrivate(xdgSurface, parentXdgSurface, positioner, resource)) +{ +} + +/*! + * \qmlproperty XdgSurface QtWaylandCompositor::XdgPopup::xdgSurface + * + * This property holds the XdgSurface associated with this XdgPopup. + */ + +/*! + * \property QWaylandXdgPopup::xdgSurface + * + * This property holds the QWaylandXdgSurface associated with this QWaylandXdgPopup. + */ +QWaylandXdgSurface *QWaylandXdgPopup::xdgSurface() const +{ + Q_D(const QWaylandXdgPopup); + return d->m_xdgSurface; +} + +/*! + * \qmlproperty XdgSurface QtWaylandCompositor::XdgPopup::parentXdgSurface + * + * This property holds the XdgSurface associated with the parent of this XdgPopup. + */ + +/*! + * \property QWaylandXdgPopup::parentXdgSurface + * + * This property holds the QWaylandXdgSurface associated with the parent of this + * QWaylandXdgPopup. + */ +QWaylandXdgSurface *QWaylandXdgPopup::parentXdgSurface() const +{ + Q_D(const QWaylandXdgPopup); + return d->m_parentXdgSurface; +} + +/*! + * \qmlproperty rect QtWaylandCompositor::XdgPopup::configuredGeometry + * + * The window geometry the popup received in the configure event. Relative to the + * upper left corner of the parent surface. + */ + +/*! + * \property QWaylandXdgPopup::configuredGeometry + * + * The window geometry the popup received in the configure event. Relative to the + * upper left corner of the parent surface. + */ +QRect QWaylandXdgPopup::configuredGeometry() const +{ + Q_D(const QWaylandXdgPopup); + return d->m_geometry; +} + +/*! + * \qmlproperty rect QtWaylandCompositor::XdgPopup::anchorRect + * + * The anchor rectangle relative to the parent window geometry that the child + * surface should be placed relative to. + */ + +/*! + * \property QWaylandXdgPopup::anchorRect + * + * Returns the anchor rectangle relative to the parent window geometry that the child + * surface should be placed relative to. + */ +QRect QWaylandXdgPopup::anchorRect() const +{ + Q_D(const QWaylandXdgPopup); + return d->m_positionerData.anchorRect; +} + +/*! + * \qmlproperty enumeration QtWaylandCompositor::XdgPopup::anchorEdges + * + * This property holds the set of edges on the anchor rect that the child surface should be placed + * relative to. If no edges are specified in a direction, the anchor point should be + * centered between the edges. + * + * The possible values are: + * \value Qt.TopEdge The top edge of the rectangle. + * \value Qt.LeftEdge The left edge of the rectangle. + * \value Qt.RightEdge The right edge of the rectangle. + * \value Qt.BottomEdge The bottom edge of the rectangle. + */ + +/*! + * \property QWaylandXdgPopup::anchorEdges + * + * Returns the set of edges on the anchor rect that the child surface should be placed + * relative to. If no edges are specified in a direction, the anchor point should be + * centered between the edges. + */ +Qt::Edges QWaylandXdgPopup::anchorEdges() const +{ + Q_D(const QWaylandXdgPopup); + return d->m_positionerData.anchorEdges; +} + +/*! + * \qmlproperty rect QtWaylandCompositor::XdgPopup::gravityEdges + * + * Specifies in what direction the surface should be positioned, relative to the anchor + * point. + * + * The possible values are: + * \value Qt.TopEdge The surface should slide towards the top of the screen. + * \value Qt.LeftEdge The surface should slide towards the left of the screen. + * \value Qt.RightEdge The surface should slide towards the right of the screen. + * \value Qt.BottomEdge The surface should slide towards the bottom of the screen. + */ + +/*! + * \property QWaylandXdgPopup::gravityEdges + * + * Specifies in what direction the surface should be positioned, relative to the anchor + * point. + */ +Qt::Edges QWaylandXdgPopup::gravityEdges() const +{ + Q_D(const QWaylandXdgPopup); + return d->m_positionerData.gravityEdges; +} + +/*! + * \qmlproperty enumeration QtWaylandCompositor::XdgPopup::slideConstraints + * + * This property holds the orientations in which the child should slide to fit within the screen. + * + * Possible values: + * \value Qt.Horizontal Horizontal + * \value Qt.Vertical Vertical + */ + +/*! + * \property QWaylandXdgPopup::slideConstraints + * + * This property holds the orientations in which the child should slide to fit within the screen. + */ +Qt::Orientations QWaylandXdgPopup::slideConstraints() const +{ + Q_D(const QWaylandXdgPopup); + const uint flags = d->m_positionerData.constraintAdjustments; + + Qt::Orientations constraints = 0; + + if (flags & XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_SLIDE_X) + constraints |= Qt::Horizontal; + if (flags & XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_SLIDE_Y) + constraints |= Qt::Vertical; + + return constraints; +} + +/*! + * \qmlproperty enumeration QtWaylandCompositor::XdgPopup::flipConstraints + * + * This property holds the orientations in which the child should flip to fit within the screen. + * + * Possible values: + * \value Qt.Horizontal Horizontal + * \value Qt.Vertical Vertical + */ + +/*! + * \property QWaylandXdgPopup::flipConstraints + * + * This property holds the orientations in which the child should flip to fit within the screen. + */ +Qt::Orientations QWaylandXdgPopup::flipConstraints() const +{ + Q_D(const QWaylandXdgPopup); + const uint flags = d->m_positionerData.constraintAdjustments; + + Qt::Orientations constraints = 0; + + if (flags & XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_FLIP_X) + constraints |= Qt::Horizontal; + if (flags & XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_FLIP_Y) + constraints |= Qt::Vertical; + + return constraints; +} + +/*! + * \qmlproperty enumeration QtWaylandCompositor::XdgPopup::resizeConstraints + * + * This property holds the orientations in which the child should resize to fit within the screen. + * + * Possible values: + * \value Qt.Horizontal Horizontal + * \value Qt.Vertical Vertical + */ + +/*! + * \property QWaylandXdgPopup::resizeConstraints + * + * This property holds the orientations in which the child should resize to fit within the screen. + */ +Qt::Orientations QWaylandXdgPopup::resizeConstraints() const +{ + Q_D(const QWaylandXdgPopup); + const uint flags = d->m_positionerData.constraintAdjustments; + + Qt::Orientations constraints = 0; + + if (flags & XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_RESIZE_X) + constraints |= Qt::Horizontal; + if (flags & XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_RESIZE_Y) + constraints |= Qt::Vertical; + + return constraints; +} + +/*! + * \qmlproperty point QtWaylandCompositor::XdgPopup::offset + * + * The position relative to the position of the anchor on the anchor rectangle and + * the anchor on the surface. + */ + +/*! + * \property QWaylandXdgPopup::offset + * + * Returns the surface position relative to the position of the anchor on the anchor + * rectangle and the anchor on the surface. + */ +QPoint QWaylandXdgPopup::offset() const +{ + Q_D(const QWaylandXdgPopup); + return d->m_positionerData.offset; +} + +/*! + * \qmlproperty size QtWaylandCompositor::XdgPopup::positionerSize + * + * The size requested for the window geometry by the positioner object. + */ + +/*! + * \property QWaylandXdgPopup::positionerSize + * + * Returns the size requested for the window geometry by the positioner object. + */ +QSize QWaylandXdgPopup::positionerSize() const +{ + Q_D(const QWaylandXdgPopup); + return d->m_positionerData.size; +} + +/*! + * \qmlproperty point QtWaylandCompositor::XdgPopup::unconstrainedPosition + * + * The position of the surface relative to the parent window geometry if the surface + * is not constrained. I.e. when not moved to fit inside the screen or similar. + */ + +/*! + * \property QWaylandXdgPopup::unconstrainedPosition + * + * The position of the surface relative to the parent window geometry if the surface + * is not constrained. I.e. when not moved to fit inside the screen or similar. + */ +QPoint QWaylandXdgPopup::unconstrainedPosition() const +{ + Q_D(const QWaylandXdgPopup); + return d->m_positionerData.unconstrainedPosition(); +} + +/*! + * \qmlmethod int QtWaylandCompositor::XdgPopup::sendConfigure(rect geometry) + * + * Sends a configure event to the client. \a geometry contains the window geometry + * relative to the upper left corner of the window geometry of the parent surface. + * + * This implicitly sends a configure event to the corresponding XdgSurface as well. + */ + +/*! + * Sends a configure event to the client. \a geometry contains the window geometry + * relative to the upper left corner of the window geometry of the parent surface. + * + * This implicitly sends a configure event to the corresponding QWaylandXdgSurface + * as well. + */ +uint QWaylandXdgPopup::sendConfigure(const QRect &geometry) +{ + Q_D(QWaylandXdgPopup); + return d->sendConfigure(geometry); +} + +/*! + * Returns the surface role for the QWaylandPopup. + */ +QWaylandSurfaceRole *QWaylandXdgPopup::role() +{ + return &QWaylandXdgPopupPrivate::s_role; +} + +QWaylandXdgPopupPrivate::QWaylandXdgPopupPrivate(QWaylandXdgSurface *xdgSurface, QWaylandXdgSurface *parentXdgSurface, + QWaylandXdgPositioner *positioner, const QWaylandResource &resource) + : m_xdgSurface(xdgSurface) + , m_parentXdgSurface(parentXdgSurface) +{ + init(resource.resource()); + m_positionerData = positioner->m_data; + + if (!m_positionerData.isComplete()) + qWarning() << "Trying to create xdg popup with incomplete positioner"; + + QWaylandXdgSurfacePrivate::get(m_xdgSurface)->setWindowType(Qt::WindowType::Popup); + + //TODO: positioner rect may not extend parent's window geometry, enforce this? + //TODO: Need an API for sending a different initial configure + sendConfigure(QRect(m_positionerData.unconstrainedPosition(), m_positionerData.size)); +} + +void QWaylandXdgPopupPrivate::handleAckConfigure(uint serial) +{ + Q_Q(QWaylandXdgPopup); + ConfigureEvent config; + Q_FOREVER { + if (m_pendingConfigures.empty()) { + qWarning("Popup received an unexpected ack_configure!"); + return; + } + + // This won't work unless there always is a popup.configure for each xdgsurface.configure + config = m_pendingConfigures.takeFirst(); + + if (config.serial == serial) + break; + } + + if (m_geometry == config.geometry) + return; + + m_geometry = config.geometry; + emit q->configuredGeometryChanged(); +} + +uint QWaylandXdgPopupPrivate::sendConfigure(const QRect &geometry) +{ + uint32_t serial = m_xdgSurface->surface()->compositor()->nextSerial(); + m_pendingConfigures.append(QWaylandXdgPopupPrivate::ConfigureEvent{geometry, serial}); + send_configure(geometry.x(), geometry.y(), geometry.width(), geometry.height()); + QWaylandXdgSurfacePrivate::get(m_xdgSurface)->send_configure(serial); + return serial; +} + +void QWaylandXdgPopupPrivate::xdg_popup_destroy(QtWaylandServer::xdg_popup::Resource *resource) +{ + Q_UNUSED(resource); + qWarning() << Q_FUNC_INFO << "Not implemented"; //TODO +} + +void QWaylandXdgPopupPrivate::xdg_popup_grab(QtWaylandServer::xdg_popup::Resource *resource, wl_resource *seat, uint32_t serial) +{ + Q_UNUSED(resource); + Q_UNUSED(serial); + Q_UNUSED(seat); + qWarning() << Q_FUNC_INFO << "Not implemented"; //TODO + //switch keyboard focus + //eventually send configure with activated. +} + +QWaylandSurfaceRole QWaylandXdgPopupPrivate::s_role("xdg_popup"); + +QWaylandXdgPositionerData::QWaylandXdgPositionerData() + : offset(0, 0) +{} + +bool QWaylandXdgPositionerData::isComplete() const +{ + return size.width() > 0 && size.height() > 0 && anchorRect.size().width() > 0 && anchorRect.size().height() > 0; +} + +QPoint QWaylandXdgPositionerData::anchorPoint() const +{ + int yPosition = 0; + if (anchorEdges & Qt::TopEdge) + yPosition = anchorRect.top(); + else if (anchorEdges & Qt::BottomEdge) + yPosition = anchorRect.bottom() + 1; + else + yPosition = anchorRect.top() + anchorRect.height() / 2; + + int xPosition = 0; + if (anchorEdges & Qt::LeftEdge) + xPosition = anchorRect.left(); + else if (anchorEdges & Qt::RightEdge) + xPosition = anchorRect.right() + 1; + else + xPosition = anchorRect.left() + anchorRect.width() / 2; + + return QPoint(xPosition, yPosition); +} + +QPoint QWaylandXdgPositionerData::unconstrainedPosition() const +{ + int gravityOffsetY = 0; + if (gravityEdges & Qt::TopEdge) + gravityOffsetY = -size.height(); + else if (!(gravityEdges & Qt::BottomEdge)) + gravityOffsetY = -size.height() / 2; + + int gravityOffsetX = 0; + if (gravityEdges & Qt::LeftEdge) + gravityOffsetX = -size.width(); + else if (!(gravityEdges & Qt::RightEdge)) + gravityOffsetX = -size.width() / 2; + + QPoint gravityOffset(gravityOffsetX, gravityOffsetY); + return anchorPoint() + gravityOffset + offset; +} + +QWaylandXdgPositioner::QWaylandXdgPositioner(const QWaylandResource &resource) +{ + init(resource.resource()); +} + +void QWaylandXdgPositioner::xdg_positioner_destroy_resource(QtWaylandServer::xdg_positioner::Resource *resource) +{ + Q_UNUSED(resource); + delete this; +} + +void QWaylandXdgPositioner::xdg_positioner_destroy(QtWaylandServer::xdg_positioner::Resource *resource) +{ + wl_resource_destroy(resource->handle); +} + +void QWaylandXdgPositioner::xdg_positioner_set_size(QtWaylandServer::xdg_positioner::Resource *resource, int32_t width, int32_t height) +{ + if (width <= 0 || height <= 0) { + wl_resource_post_error(resource->handle, XDG_POSITIONER_ERROR_INVALID_INPUT, + "xdg_positioner.set_size requested with non-positive dimensions"); + return; + } + + QSize size(width, height); + m_data.size = size; +} + +void QWaylandXdgPositioner::xdg_positioner_set_anchor_rect(QtWaylandServer::xdg_positioner::Resource *resource, int32_t x, int32_t y, int32_t width, int32_t height) +{ + if (width <= 0 || height <= 0) { + wl_resource_post_error(resource->handle, XDG_POSITIONER_ERROR_INVALID_INPUT, + "xdg_positioner.set_anchor_rect requested with non-positive dimensions"); + return; + } + + QRect anchorRect(x, y, width, height); + m_data.anchorRect = anchorRect; +} + +void QWaylandXdgPositioner::xdg_positioner_set_anchor(QtWaylandServer::xdg_positioner::Resource *resource, uint32_t anchor) +{ + Qt::Edges anchorEdges = convertToEdges(xdg_positioner::anchor(anchor)); + + if ((anchorEdges & Qt::BottomEdge && anchorEdges & Qt::TopEdge) || + (anchorEdges & Qt::LeftEdge && anchorEdges & Qt::RightEdge)) { + wl_resource_post_error(resource->handle, XDG_POSITIONER_ERROR_INVALID_INPUT, + "xdg_positioner.set_anchor requested with parallel edges"); + return; + } + + m_data.anchorEdges = anchorEdges; +} + +void QWaylandXdgPositioner::xdg_positioner_set_gravity(QtWaylandServer::xdg_positioner::Resource *resource, uint32_t gravity) +{ + Qt::Edges gravityEdges = convertToEdges(xdg_positioner::gravity(gravity)); + + if ((gravityEdges & Qt::BottomEdge && gravityEdges & Qt::TopEdge) || + (gravityEdges & Qt::LeftEdge && gravityEdges & Qt::RightEdge)) { + wl_resource_post_error(resource->handle, XDG_POSITIONER_ERROR_INVALID_INPUT, + "xdg_positioner.set_gravity requested with parallel edges"); + return; + } + + m_data.gravityEdges = gravityEdges; +} + +void QWaylandXdgPositioner::xdg_positioner_set_constraint_adjustment(QtWaylandServer::xdg_positioner::Resource *resource, uint32_t constraint_adjustment) +{ + Q_UNUSED(resource); + m_data.constraintAdjustments = constraint_adjustment; +} + +void QWaylandXdgPositioner::xdg_positioner_set_offset(QtWaylandServer::xdg_positioner::Resource *resource, int32_t x, int32_t y) +{ + Q_UNUSED(resource); + m_data.offset = QPoint(x, y); +} + +QWaylandXdgPositioner *QWaylandXdgPositioner::fromResource(wl_resource *resource) +{ + if (auto *r = Resource::fromResource(resource)) + return static_cast(r->xdg_positioner_object); + return nullptr; +} + +Qt::Edges QWaylandXdgPositioner::convertToEdges(anchor anchor) +{ + switch (anchor) { + case anchor_none: + return Qt::Edges(); + case anchor_top: + return Qt::TopEdge; + case anchor_bottom: + return Qt::BottomEdge; + case anchor_left: + return Qt::LeftEdge; + case anchor_right: + return Qt::RightEdge; + case anchor_top_left: + return Qt::TopEdge | Qt::LeftEdge; + case anchor_bottom_left: + return Qt::BottomEdge | Qt::LeftEdge; + case anchor_top_right: + return Qt::TopEdge | Qt::RightEdge; + case anchor_bottom_right: + return Qt::BottomEdge | Qt::RightEdge; + default: + qWarning() << "Unknown Wayland xdg edge" << anchor; + return Qt::Edges(); + } +} + +Qt::Edges QWaylandXdgPositioner::convertToEdges(QWaylandXdgPositioner::gravity gravity) +{ + return convertToEdges(anchor(gravity)); +} + + +QT_END_NAMESPACE diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandxdgshell.h qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandxdgshell.h --- qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandxdgshell.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandxdgshell.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,277 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the QtWaylandCompositor module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWAYLANDXDGSHELL_H +#define QWAYLANDXDGSHELL_H + +#include +#include +#include +#include +#include + +#include + +struct wl_resource; + +QT_BEGIN_NAMESPACE + +class QWaylandClient; +class QWaylandOutput; +class QWaylandSeat; +class QWaylandSurface; +class QWaylandSurfaceRole; +class QWaylandXdgShellPrivate; +class QWaylandXdgSurface; +class QWaylandXdgSurfacePrivate; +class QWaylandXdgToplevel; +class QWaylandXdgToplevelPrivate; +class QWaylandXdgPopup; +class QWaylandXdgPopupPrivate; +class QWaylandXdgPositioner; + +class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandXdgShell : public QWaylandShellTemplate +{ + Q_OBJECT + Q_DECLARE_PRIVATE(QWaylandXdgShell) +public: + explicit QWaylandXdgShell(); + explicit QWaylandXdgShell(QWaylandCompositor *compositor); + + void initialize() override; + + static const struct wl_interface *interface(); + static QByteArray interfaceName(); + +public Q_SLOTS: + uint ping(QWaylandClient *client); + +Q_SIGNALS: + void xdgSurfaceCreated(QWaylandXdgSurface *xdgSurface); + void toplevelCreated(QWaylandXdgToplevel *toplevel, QWaylandXdgSurface *xdgSurface); + void popupCreated(QWaylandXdgPopup *popup, QWaylandXdgSurface *xdgSurface); + void pong(uint serial); + +private Q_SLOTS: + void handleSeatChanged(QWaylandSeat *newSeat, QWaylandSeat *oldSeat); + void handleFocusChanged(QWaylandSurface *newSurface, QWaylandSurface *oldSurface); +}; + +class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandXdgSurface : public QWaylandShellSurfaceTemplate +{ + Q_OBJECT + Q_DECLARE_PRIVATE(QWaylandXdgSurface) + Q_WAYLAND_COMPOSITOR_DECLARE_QUICK_CHILDREN(QWaylandXdgSurface) + Q_PROPERTY(QWaylandXdgShell *shell READ shell NOTIFY shellChanged) + Q_PROPERTY(QWaylandSurface *surface READ surface NOTIFY surfaceChanged) + Q_PROPERTY(QWaylandXdgToplevel *toplevel READ toplevel NOTIFY toplevelCreated) + Q_PROPERTY(QWaylandXdgPopup *popup READ popup NOTIFY popupCreated) + Q_PROPERTY(QRect windowGeometry READ windowGeometry NOTIFY windowGeometryChanged) + +public: + explicit QWaylandXdgSurface(); + explicit QWaylandXdgSurface(QWaylandXdgShell* xdgShell, QWaylandSurface *surface, const QWaylandResource &resource); + + Q_INVOKABLE void initialize(QWaylandXdgShell* xdgShell, QWaylandSurface *surface, const QWaylandResource &resource); + + Qt::WindowType windowType() const override; + + QWaylandXdgShell *shell() const; + QWaylandSurface *surface() const; + QWaylandXdgToplevel *toplevel() const; + QWaylandXdgPopup *popup() const; + QRect windowGeometry() const; + + static const struct wl_interface *interface(); + static QByteArray interfaceName(); + static QWaylandXdgSurface *fromResource(::wl_resource *resource); + +#ifdef QT_WAYLAND_COMPOSITOR_QUICK + QWaylandQuickShellIntegration *createIntegration(QWaylandQuickShellSurfaceItem *item) override; +#endif + +Q_SIGNALS: + void shellChanged(); + void surfaceChanged(); + void toplevelCreated(); + void popupCreated(); + void windowGeometryChanged(); + +private: + void initialize() override; + +private Q_SLOTS: + void handleSurfaceSizeChanged(); + void handleBufferScaleChanged(); +}; + +class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandXdgToplevel : public QObject +{ + Q_OBJECT + Q_DECLARE_PRIVATE(QWaylandXdgToplevel) + Q_PROPERTY(QWaylandXdgSurface *xdgSurface READ xdgSurface CONSTANT) + Q_PROPERTY(QWaylandXdgToplevel *parentToplevel READ parentToplevel NOTIFY parentToplevelChanged) + Q_PROPERTY(QString title READ title NOTIFY titleChanged) + Q_PROPERTY(QString appId READ appId NOTIFY appIdChanged) + Q_PROPERTY(QSize maxSize READ maxSize NOTIFY maxSizeChanged) + Q_PROPERTY(QSize minSize READ minSize NOTIFY minSizeChanged) + Q_PROPERTY(QList states READ statesAsInts NOTIFY statesChanged) + Q_PROPERTY(bool maximized READ maximized NOTIFY maximizedChanged) + Q_PROPERTY(bool fullscreen READ fullscreen NOTIFY fullscreenChanged) + Q_PROPERTY(bool resizing READ resizing NOTIFY resizingChanged) + Q_PROPERTY(bool activated READ activated NOTIFY activatedChanged) + Q_PROPERTY(enum DecorationMode decorationMode READ decorationMode NOTIFY decorationModeChanged) +public: + enum State : uint { + MaximizedState = 1, + FullscreenState = 2, + ResizingState = 3, + ActivatedState = 4 + }; + Q_ENUM(State) + + enum DecorationMode { + ClientSideDecoration = 1, + ServerSideDecoration = 2, + }; + Q_ENUM(DecorationMode) + + explicit QWaylandXdgToplevel(QWaylandXdgSurface *xdgSurface, QWaylandResource &resource); + ~QWaylandXdgToplevel() override; + + QWaylandXdgSurface *xdgSurface() const; + QWaylandXdgToplevel *parentToplevel() const; + + QString title() const; + QString appId() const; + QSize maxSize() const; + QSize minSize() const; + QVector states() const; + bool maximized() const; + bool fullscreen() const; + bool resizing() const; + bool activated() const; + DecorationMode decorationMode() const; + + Q_INVOKABLE QSize sizeForResize(const QSizeF &size, const QPointF &delta, Qt::Edges edges) const; + uint sendConfigure(const QSize &size, const QVector &states); + Q_INVOKABLE uint sendConfigure(const QSize &size, const QVector &states); + Q_INVOKABLE void sendClose(); + Q_INVOKABLE uint sendMaximized(const QSize &size); + Q_INVOKABLE uint sendUnmaximized(const QSize &size = QSize(0, 0)); + Q_INVOKABLE uint sendFullscreen(const QSize &size); + Q_INVOKABLE uint sendResizing(const QSize &maxSize); + + static QWaylandSurfaceRole *role(); + static QWaylandXdgToplevel *fromResource(::wl_resource *resource); + +Q_SIGNALS: + void parentToplevelChanged(); + void titleChanged(); + void appIdChanged(); + void maxSizeChanged(); + void minSizeChanged(); + void startMove(QWaylandSeat *seat); + void startResize(QWaylandSeat *seat, Qt::Edges edges); + void statesChanged(); + void maximizedChanged(); + void fullscreenChanged(); + void resizingChanged(); + void activatedChanged(); + + void showWindowMenu(QWaylandSeat *seat, const QPoint &localSurfacePosition); + void setMaximized(); + void unsetMaximized(); + void setFullscreen(QWaylandOutput *output); + void unsetFullscreen(); + void setMinimized(); + + void decorationModeChanged(); + +private: + QList statesAsInts() const; +}; + +class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandXdgPopup : public QObject +{ + Q_OBJECT + Q_DECLARE_PRIVATE(QWaylandXdgPopup) + Q_PROPERTY(QWaylandXdgSurface *xdgSurface READ xdgSurface) + Q_PROPERTY(QWaylandXdgSurface *parentXdgSurface READ parentXdgSurface) + Q_PROPERTY(QRect configuredGeometry READ configuredGeometry NOTIFY configuredGeometryChanged) + + // Positioner properties + Q_PROPERTY(QRect anchorRect READ anchorRect CONSTANT) + Q_PROPERTY(Qt::Edges anchorEdges READ anchorEdges CONSTANT) + Q_PROPERTY(Qt::Edges gravityEdges READ gravityEdges CONSTANT) + Q_PROPERTY(Qt::Orientations slideConstraints READ slideConstraints CONSTANT) + Q_PROPERTY(Qt::Orientations flipConstraints READ flipConstraints CONSTANT) + Q_PROPERTY(Qt::Orientations resizeConstraints READ resizeConstraints CONSTANT) + Q_PROPERTY(QPoint offset READ offset CONSTANT) + Q_PROPERTY(QSize positionerSize READ positionerSize CONSTANT) + Q_PROPERTY(QPoint unconstrainedPosition READ unconstrainedPosition CONSTANT) +public: + QWaylandXdgSurface *xdgSurface() const; + QWaylandXdgSurface *parentXdgSurface() const; + QRect configuredGeometry() const; + + // Positioner properties + QRect anchorRect() const; + Qt::Edges anchorEdges() const ; + Qt::Edges gravityEdges() const ; + Qt::Orientations slideConstraints() const; + Qt::Orientations flipConstraints() const; + Qt::Orientations resizeConstraints() const; + QPoint offset() const; + QSize positionerSize() const; + QPoint unconstrainedPosition() const; + + Q_INVOKABLE uint sendConfigure(const QRect &geometry); + + static QWaylandSurfaceRole *role(); + +Q_SIGNALS: + void configuredGeometryChanged(); + +private: + explicit QWaylandXdgPopup(QWaylandXdgSurface *xdgSurface, QWaylandXdgSurface *parentXdgSurface, + QWaylandXdgPositioner *positioner, QWaylandResource &resource); + friend class QWaylandXdgSurfacePrivate; +}; + +QT_END_NAMESPACE + +#endif // QWAYLANDXDGSHELL_H diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandxdgshellintegration.cpp qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandxdgshellintegration.cpp --- qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandxdgshellintegration.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandxdgshellintegration.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,300 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the QtWaylandCompositor module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwaylandxdgshellintegration_p.h" + +#include +#include +#include + +QT_BEGIN_NAMESPACE + +namespace QtWayland { + +static void handlePopupCreated(QWaylandQuickShellSurfaceItem *parentItem, QWaylandXdgPopup *popup) +{ + if (parentItem->shellSurface() == popup->parentXdgSurface()) + QWaylandQuickShellSurfaceItemPrivate::get(parentItem)->maybeCreateAutoPopup(popup->xdgSurface()); +} + +XdgToplevelIntegration::XdgToplevelIntegration(QWaylandQuickShellSurfaceItem *item) + : QWaylandQuickShellIntegration(item) + , m_item(item) + , m_xdgSurface(qobject_cast(item->shellSurface())) + , m_toplevel(m_xdgSurface->toplevel()) + , grabberState(GrabberState::Default) +{ + Q_ASSERT(m_toplevel); + + m_item->setSurface(m_xdgSurface->surface()); + + connect(m_toplevel, &QWaylandXdgToplevel::startMove, this, &XdgToplevelIntegration::handleStartMove); + connect(m_toplevel, &QWaylandXdgToplevel::startResize, this, &XdgToplevelIntegration::handleStartResize); + connect(m_toplevel, &QWaylandXdgToplevel::setMaximized, this, &XdgToplevelIntegration::handleSetMaximized); + connect(m_toplevel, &QWaylandXdgToplevel::unsetMaximized, this, &XdgToplevelIntegration::handleUnsetMaximized); + connect(m_toplevel, &QWaylandXdgToplevel::maximizedChanged, this, &XdgToplevelIntegration::handleMaximizedChanged); + connect(m_toplevel, &QWaylandXdgToplevel::setFullscreen, this, &XdgToplevelIntegration::handleSetFullscreen); + connect(m_toplevel, &QWaylandXdgToplevel::unsetFullscreen, this, &XdgToplevelIntegration::handleUnsetFullscreen); + connect(m_toplevel, &QWaylandXdgToplevel::fullscreenChanged, this, &XdgToplevelIntegration::handleFullscreenChanged); + connect(m_toplevel, &QWaylandXdgToplevel::activatedChanged, this, &XdgToplevelIntegration::handleActivatedChanged); + connect(m_xdgSurface->shell(), &QWaylandXdgShell::popupCreated, this, [item](QWaylandXdgPopup *popup, QWaylandXdgSurface *){ + handlePopupCreated(item, popup); + }); + connect(m_xdgSurface->surface(), &QWaylandSurface::sizeChanged, this, &XdgToplevelIntegration::handleSurfaceSizeChanged); + connect(m_toplevel, &QObject::destroyed, this, &XdgToplevelIntegration::handleToplevelDestroyed); +} + +bool XdgToplevelIntegration::mouseMoveEvent(QMouseEvent *event) +{ + if (grabberState == GrabberState::Resize) { + Q_ASSERT(resizeState.seat == m_item->compositor()->seatFor(event)); + if (!resizeState.initialized) { + resizeState.initialMousePos = event->windowPos(); + resizeState.initialized = true; + return true; + } + QPointF delta = m_item->mapToSurface(event->windowPos() - resizeState.initialMousePos); + QSize newSize = m_toplevel->sizeForResize(resizeState.initialWindowSize, delta, resizeState.resizeEdges); + m_toplevel->sendResizing(newSize); + } else if (grabberState == GrabberState::Move) { + Q_ASSERT(moveState.seat == m_item->compositor()->seatFor(event)); + QQuickItem *moveItem = m_item->moveItem(); + if (!moveState.initialized) { + moveState.initialOffset = moveItem->mapFromItem(nullptr, event->windowPos()); + moveState.initialized = true; + return true; + } + if (!moveItem->parentItem()) + return true; + QPointF parentPos = moveItem->parentItem()->mapFromItem(nullptr, event->windowPos()); + moveItem->setPosition(parentPos - moveState.initialOffset); + } + return false; +} + +bool XdgToplevelIntegration::mouseReleaseEvent(QMouseEvent *event) +{ + Q_UNUSED(event); + + if (grabberState != GrabberState::Default) { + grabberState = GrabberState::Default; + return true; + } + return false; +} + +void XdgToplevelIntegration::handleStartMove(QWaylandSeat *seat) +{ + grabberState = GrabberState::Move; + moveState.seat = seat; + moveState.initialized = false; +} + +void XdgToplevelIntegration::handleStartResize(QWaylandSeat *seat, Qt::Edges edges) +{ + grabberState = GrabberState::Resize; + resizeState.seat = seat; + resizeState.resizeEdges = edges; + resizeState.initialWindowSize = m_xdgSurface->windowGeometry().size(); + resizeState.initialPosition = m_item->moveItem()->position(); + resizeState.initialSurfaceSize = m_item->surface()->size(); + resizeState.initialized = false; +} + +void XdgToplevelIntegration::handleSetMaximized() +{ + if (!m_item->view()->isPrimary()) + return; + + QVector states = m_toplevel->states(); + + if (!states.contains(QWaylandXdgToplevel::State::FullscreenState) && !states.contains(QWaylandXdgToplevel::State::MaximizedState)) { + windowedGeometry.initialWindowSize = m_xdgSurface->windowGeometry().size(); + windowedGeometry.initialPosition = m_item->moveItem()->position(); + } + + // Any prior output-resize handlers are irrelevant at this point. + disconnect(nonwindowedState.sizeChangedConnection); + nonwindowedState.output = m_item->view()->output(); + nonwindowedState.sizeChangedConnection = connect(nonwindowedState.output, &QWaylandOutput::availableGeometryChanged, this, &XdgToplevelIntegration::handleMaximizedSizeChanged); + handleMaximizedSizeChanged(); +} + +void XdgToplevelIntegration::handleMaximizedSizeChanged() +{ + // Insurance against handleToplevelDestroyed() not managing to disconnect this + // handler in time. + if (m_toplevel == nullptr) + return; + + m_toplevel->sendMaximized(nonwindowedState.output->availableGeometry().size() / nonwindowedState.output->scaleFactor()); +} + +void XdgToplevelIntegration::handleUnsetMaximized() +{ + if (!m_item->view()->isPrimary()) + return; + + // If no prior windowed size was recorded, send a 0x0 configure event + // to allow the client to choose its preferred size. + if (windowedGeometry.initialWindowSize.isValid()) + m_toplevel->sendUnmaximized(windowedGeometry.initialWindowSize); + else + m_toplevel->sendUnmaximized(); +} + +void XdgToplevelIntegration::handleMaximizedChanged() +{ + if (m_toplevel->maximized()) { + QWaylandOutput *output = m_item->view()->output(); + m_item->moveItem()->setPosition(output->position() + output->availableGeometry().topLeft()); + } else { + m_item->moveItem()->setPosition(windowedGeometry.initialPosition); + } +} + +void XdgToplevelIntegration::handleSetFullscreen() +{ + if (!m_item->view()->isPrimary()) + return; + + QVector states = m_toplevel->states(); + + if (!states.contains(QWaylandXdgToplevel::State::FullscreenState) && !states.contains(QWaylandXdgToplevel::State::MaximizedState)) { + windowedGeometry.initialWindowSize = m_xdgSurface->windowGeometry().size(); + windowedGeometry.initialPosition = m_item->moveItem()->position(); + } + + // Any prior output-resize handlers are irrelevant at this point. + disconnect(nonwindowedState.sizeChangedConnection); + nonwindowedState.output = m_item->view()->output(); + nonwindowedState.sizeChangedConnection = connect(nonwindowedState.output, &QWaylandOutput::geometryChanged, this, &XdgToplevelIntegration::handleFullscreenSizeChanged); + handleFullscreenSizeChanged(); +} + +void XdgToplevelIntegration::handleFullscreenSizeChanged() +{ + // Insurance against handleToplevelDestroyed() not managing to disconnect this + // handler in time. + if (m_toplevel == nullptr) + return; + + m_toplevel->sendFullscreen(nonwindowedState.output->geometry().size() / nonwindowedState.output->scaleFactor()); +} + +void XdgToplevelIntegration::handleUnsetFullscreen() +{ + if (!m_item->view()->isPrimary()) + return; + + // If no prior windowed size was recorded, send a 0x0 configure event + // to allow the client to choose its preferred size. + if (windowedGeometry.initialWindowSize.isValid()) + m_toplevel->sendUnmaximized(windowedGeometry.initialWindowSize); + else + m_toplevel->sendUnmaximized(); +} + +void XdgToplevelIntegration::handleFullscreenChanged() +{ + if (m_toplevel->fullscreen()) { + QWaylandOutput *output = m_item->view()->output(); + m_item->moveItem()->setPosition(output->position() + output->geometry().topLeft()); + } else { + m_item->moveItem()->setPosition(windowedGeometry.initialPosition); + } +} + +void XdgToplevelIntegration::handleActivatedChanged() +{ + if (m_toplevel->activated()) + m_item->raise(); +} + +void XdgToplevelIntegration::handleSurfaceSizeChanged() +{ + if (grabberState == GrabberState::Resize) { + qreal x = resizeState.initialPosition.x(); + qreal y = resizeState.initialPosition.y(); + if (resizeState.resizeEdges & Qt::TopEdge) + y += resizeState.initialSurfaceSize.height() - m_item->surface()->size().height(); + + if (resizeState.resizeEdges & Qt::LeftEdge) + x += resizeState.initialSurfaceSize.width() - m_item->surface()->size().width(); + m_item->moveItem()->setPosition(QPointF(x, y)); + } +} + +void XdgToplevelIntegration::handleToplevelDestroyed() +{ + // Disarm any handlers that might fire on the now-stale toplevel pointer + nonwindowedState.output = nullptr; + disconnect(nonwindowedState.sizeChangedConnection); +} + +XdgPopupIntegration::XdgPopupIntegration(QWaylandQuickShellSurfaceItem *item) + : m_item(item) + , m_xdgSurface(qobject_cast(item->shellSurface())) + , m_popup(m_xdgSurface->popup()) +{ + Q_ASSERT(m_popup); + + m_item->setSurface(m_xdgSurface->surface()); + handleGeometryChanged(); + + connect(m_popup, &QWaylandXdgPopup::configuredGeometryChanged, this, &XdgPopupIntegration::handleGeometryChanged); + connect(m_xdgSurface->shell(), &QWaylandXdgShell::popupCreated, this, [item](QWaylandXdgPopup *popup, QWaylandXdgSurface *){ + handlePopupCreated(item, popup); + }); +} + +void XdgPopupIntegration::handleGeometryChanged() +{ + if (m_item->view()->output()) { + const QPoint windowOffset = m_popup->parentXdgSurface()->windowGeometry().topLeft(); + const QPoint position = m_popup->unconstrainedPosition() + windowOffset; + //TODO: positioner size or other size...? + const float scaleFactor = m_item->view()->output()->scaleFactor(); + //TODO check positioner constraints etc... sliding, flipping + m_item->moveItem()->setPosition(position * scaleFactor); + } else { + qWarning() << "XdgPopupIntegration popup item without output" << m_item; + } +} + +} + +QT_END_NAMESPACE diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandxdgshellintegration_p.h qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandxdgshellintegration_p.h --- qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandxdgshellintegration_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandxdgshellintegration_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,144 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the QtWaylandCompositor module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWAYLANDXDGSHELLINTEGRATION_H +#define QWAYLANDXDGSHELLINTEGRATION_H + +#include +#include +#include + +QT_BEGIN_NAMESPACE + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +class QWaylandXdgSurface; + +namespace QtWayland { + +class XdgToplevelIntegration : public QWaylandQuickShellIntegration +{ + Q_OBJECT +public: + XdgToplevelIntegration(QWaylandQuickShellSurfaceItem *item); + bool mouseMoveEvent(QMouseEvent *event) override; + bool mouseReleaseEvent(QMouseEvent *event) override; + +private Q_SLOTS: + void handleStartMove(QWaylandSeat *seat); + void handleStartResize(QWaylandSeat *seat, Qt::Edges edges); + void handleSetMaximized(); + void handleUnsetMaximized(); + void handleMaximizedChanged(); + void handleSetFullscreen(); + void handleUnsetFullscreen(); + void handleFullscreenChanged(); + void handleActivatedChanged(); + void handleSurfaceSizeChanged(); + void handleToplevelDestroyed(); + void handleMaximizedSizeChanged(); + void handleFullscreenSizeChanged(); + +private: + QWaylandQuickShellSurfaceItem *m_item = nullptr; + QWaylandXdgSurface *m_xdgSurface = nullptr; + QWaylandXdgToplevel *m_toplevel = nullptr; + + enum class GrabberState { + Default, + Resize, + Move + }; + GrabberState grabberState; + + struct { + QWaylandSeat *seat = nullptr; + QPointF initialOffset; + bool initialized; + } moveState; + + struct { + QWaylandSeat *seat = nullptr; + Qt::Edges resizeEdges; + QSizeF initialWindowSize; + QPointF initialMousePos; + QPointF initialPosition; + QSize initialSurfaceSize; + bool initialized; + } resizeState; + + struct { + QSize initialWindowSize; + QPointF initialPosition; + } windowedGeometry; + + struct { + QWaylandOutput *output = nullptr; + QMetaObject::Connection sizeChangedConnection; // Depending on whether maximized or fullscreen, + // will be hooked to geometry-changed or available- + // geometry-changed. + } nonwindowedState; +}; + +class XdgPopupIntegration : public QWaylandQuickShellIntegration +{ + Q_OBJECT +public: + XdgPopupIntegration(QWaylandQuickShellSurfaceItem *item); + +private Q_SLOTS: + void handleGeometryChanged(); + +private: + QWaylandQuickShellSurfaceItem *m_item = nullptr; + QWaylandXdgSurface *m_xdgSurface = nullptr; + QWaylandXdgPopup *m_popup = nullptr; +}; + +} + +QT_END_NAMESPACE + +#endif // QWAYLANDXDGSHELLINTEGRATION_H diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandxdgshell_p.h qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandxdgshell_p.h --- qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandxdgshell_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandxdgshell_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,250 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the QtWaylandCompositor module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWAYLANDXDGSHELL_P_H +#define QWAYLANDXDGSHELL_P_H + +#include +#include + +#include + +#include + +#include + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +QT_BEGIN_NAMESPACE + +struct Q_WAYLAND_COMPOSITOR_EXPORT QWaylandXdgPositionerData { + QSize size; + QRect anchorRect; + Qt::Edges anchorEdges = 0; + Qt::Edges gravityEdges = 0; + uint constraintAdjustments = XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_NONE; + QPoint offset; + QWaylandXdgPositionerData(); + bool isComplete() const; + QPoint anchorPoint() const; + QPoint unconstrainedPosition() const; +}; + +class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandXdgShellPrivate + : public QWaylandCompositorExtensionPrivate + , public QtWaylandServer::xdg_wm_base +{ + Q_DECLARE_PUBLIC(QWaylandXdgShell) +public: + QWaylandXdgShellPrivate(); + void ping(Resource *resource, uint32_t serial); + void registerXdgSurface(QWaylandXdgSurface *xdgSurface); + void unregisterXdgSurface(QWaylandXdgSurface *xdgSurface); + static QWaylandXdgShellPrivate *get(QWaylandXdgShell *xdgShell) { return xdgShell->d_func(); } + + QSet m_pings; + QMultiMap m_xdgSurfaces; + + QWaylandXdgSurface *xdgSurfaceFromSurface(QWaylandSurface *surface); + +protected: + void xdg_wm_base_destroy(Resource *resource) override; + void xdg_wm_base_create_positioner(Resource *resource, uint32_t id) override; + void xdg_wm_base_get_xdg_surface(Resource *resource, uint32_t id, + struct ::wl_resource *surface) override; + void xdg_wm_base_pong(Resource *resource, uint32_t serial) override; +}; + +class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandXdgSurfacePrivate + : public QWaylandCompositorExtensionPrivate + , public QtWaylandServer::xdg_surface +{ + Q_DECLARE_PUBLIC(QWaylandXdgSurface) +public: + QWaylandXdgSurfacePrivate(); + void setWindowType(Qt::WindowType windowType); + void handleFocusLost(); + void handleFocusReceived(); + static QWaylandXdgSurfacePrivate *get(QWaylandXdgSurface *xdgSurface) { return xdgSurface->d_func(); } + + QRect calculateFallbackWindowGeometry() const; + void updateFallbackWindowGeometry(); + +private: + QWaylandXdgShell *m_xdgShell = nullptr; + QWaylandSurface *m_surface = nullptr; + + QWaylandXdgToplevel *m_toplevel = nullptr; + QWaylandXdgPopup *m_popup = nullptr; + QRect m_windowGeometry; + bool m_unsetWindowGeometry = true; + QMargins m_windowMargins; + Qt::WindowType m_windowType = Qt::WindowType::Window; + + void xdg_surface_destroy_resource(Resource *resource) override; + void xdg_surface_destroy(Resource *resource) override; + void xdg_surface_get_toplevel(Resource *resource, uint32_t id) override; + void xdg_surface_get_popup(Resource *resource, uint32_t id, struct ::wl_resource *parent, struct ::wl_resource *positioner) override; + void xdg_surface_ack_configure(Resource *resource, uint32_t serial) override; + void xdg_surface_set_window_geometry(Resource *resource, int32_t x, int32_t y, int32_t width, int32_t height) override; +}; + +class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandXdgToplevelPrivate : public QObjectPrivate, public QtWaylandServer::xdg_toplevel +{ + Q_DECLARE_PUBLIC(QWaylandXdgToplevel) +public: + struct ConfigureEvent { + ConfigureEvent() = default; + ConfigureEvent(const QVector + &incomingStates, + const QSize &incomingSize, uint incomingSerial) + : states(incomingStates), size(incomingSize), serial(incomingSerial) + { } + QVector states; + QSize size = {0, 0}; + uint serial = 0; + }; + + QWaylandXdgToplevelPrivate(QWaylandXdgSurface *xdgSurface, const QWaylandResource& resource); + ConfigureEvent lastSentConfigure() const { return m_pendingConfigures.empty() ? m_lastAckedConfigure : m_pendingConfigures.last(); } + void handleAckConfigure(uint serial); //TODO: move? + void handleFocusLost(); + void handleFocusReceived(); + + static QWaylandXdgToplevelPrivate *get(QWaylandXdgToplevel *toplevel) { return toplevel->d_func(); } + static Qt::Edges convertToEdges(resize_edge edge); + +protected: + + void xdg_toplevel_destroy_resource(Resource *resource) override; + + void xdg_toplevel_destroy(Resource *resource) override; + void xdg_toplevel_set_parent(Resource *resource, struct ::wl_resource *parent) override; + void xdg_toplevel_set_title(Resource *resource, const QString &title) override; + void xdg_toplevel_set_app_id(Resource *resource, const QString &app_id) override; + void xdg_toplevel_show_window_menu(Resource *resource, struct ::wl_resource *seat, uint32_t serial, int32_t x, int32_t y) override; + void xdg_toplevel_move(Resource *resource, struct ::wl_resource *seatResource, uint32_t serial) override; + void xdg_toplevel_resize(Resource *resource, struct ::wl_resource *seat, uint32_t serial, uint32_t edges) override; + void xdg_toplevel_set_max_size(Resource *resource, int32_t width, int32_t height) override; + void xdg_toplevel_set_min_size(Resource *resource, int32_t width, int32_t height) override; + void xdg_toplevel_set_maximized(Resource *resource) override; + void xdg_toplevel_unset_maximized(Resource *resource) override; + void xdg_toplevel_set_fullscreen(Resource *resource, struct ::wl_resource *output) override; + void xdg_toplevel_unset_fullscreen(Resource *resource) override; + void xdg_toplevel_set_minimized(Resource *resource) override; + +public: + QWaylandXdgSurface *m_xdgSurface = nullptr; + QWaylandXdgToplevel *m_parentToplevel = nullptr; + QList m_pendingConfigures; + ConfigureEvent m_lastAckedConfigure; + QString m_title; + QString m_appId; + QSize m_maxSize; + QSize m_minSize = {0, 0}; + QWaylandXdgToplevelDecorationV1 *m_decoration = nullptr; + + static QWaylandSurfaceRole s_role; +}; + +class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandXdgPopupPrivate : public QObjectPrivate, public QtWaylandServer::xdg_popup +{ + Q_DECLARE_PUBLIC(QWaylandXdgPopup) +public: + struct ConfigureEvent { + QRect geometry; + uint serial; + }; + + QWaylandXdgPopupPrivate(QWaylandXdgSurface *xdgSurface, QWaylandXdgSurface *parentXdgSurface, + QWaylandXdgPositioner *positioner, const QWaylandResource& resource); + + void handleAckConfigure(uint serial); + + static QWaylandXdgPopupPrivate *get(QWaylandXdgPopup *popup) { return popup->d_func(); } + + static QWaylandSurfaceRole s_role; + +private: + uint sendConfigure(const QRect &geometry); + +protected: + void xdg_popup_destroy(Resource *resource) override; + void xdg_popup_grab(Resource *resource, struct ::wl_resource *seat, uint32_t serial) override; + +private: + QWaylandXdgSurface *m_xdgSurface = nullptr; + QWaylandXdgSurface *m_parentXdgSurface = nullptr; + QWaylandXdgPositionerData m_positionerData; + QRect m_geometry; + QList m_pendingConfigures; +}; + +class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandXdgPositioner : public QtWaylandServer::xdg_positioner +{ +public: + QWaylandXdgPositioner(const QWaylandResource& resource); + static QWaylandXdgPositioner *fromResource(wl_resource *resource); + static Qt::Edges convertToEdges(anchor anchor); + static Qt::Edges convertToEdges(gravity gravity); + +protected: + void xdg_positioner_destroy_resource(Resource *resource) override; //TODO: do something special here? + + void xdg_positioner_destroy(Resource *resource) override; + void xdg_positioner_set_size(Resource *resource, int32_t width, int32_t height) override; + void xdg_positioner_set_anchor_rect(Resource *resource, int32_t x, int32_t y, int32_t width, int32_t height) override; + void xdg_positioner_set_anchor(Resource *resource, uint32_t anchor) override; + void xdg_positioner_set_gravity(Resource *resource, uint32_t gravity) override; + void xdg_positioner_set_constraint_adjustment(Resource *resource, uint32_t constraint_adjustment) override; + void xdg_positioner_set_offset(Resource *resource, int32_t x, int32_t y) override; + +public: + QWaylandXdgPositionerData m_data; +}; + +QT_END_NAMESPACE + +#endif // QWAYLANDXDGSHELL_P_H diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandxdgshellv5.cpp qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandxdgshellv5.cpp --- qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandxdgshellv5.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandxdgshellv5.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -148,7 +148,7 @@ if (!surface->setRole(QWaylandXdgSurfaceV5::role(), resource->handle, XDG_SHELL_ERROR_ROLE)) return; - QWaylandResource xdgSurfaceResource(wl_resource_create(resource->client(), &xdg_surface_interface, + QWaylandResource xdgSurfaceResource(wl_resource_create(resource->client(), &xdg_surface_v5_interface, wl_resource_get_version(resource->handle), id)); emit q->xdgSurfaceRequested(surface, xdgSurfaceResource); @@ -166,10 +166,10 @@ void QWaylandXdgShellV5Private::xdg_shell_use_unstable_version(Resource *resource, int32_t version) { - if (xdg_shell::version_current != version) { + if (xdg_shell_v5::version_current != version) { wl_resource_post_error(resource->handle, WL_DISPLAY_ERROR_INVALID_OBJECT, "incompatible version, server is %d, but client wants %d", - xdg_shell::version_current, version); + xdg_shell_v5::version_current, version); } } @@ -193,7 +193,7 @@ return; } - QWaylandResource xdgPopupResource (wl_resource_create(resource->client(), &xdg_popup_interface, + QWaylandResource xdgPopupResource (wl_resource_create(resource->client(), &xdg_popup_v5_interface, wl_resource_get_version(resource->handle), id)); QWaylandSeat *seat = QWaylandSeat::fromSeatResource(seatResource); QPoint position(x, y); @@ -521,6 +521,8 @@ * } * } * \endcode + * + * \deprecated */ /*! @@ -534,6 +536,8 @@ * can request that the surface is resized, moved, and so on. * * QWaylandXdgShellV5 corresponds to the Wayland interface \c xdg_shell. + * + * \deprecated */ /*! @@ -762,6 +766,8 @@ * compositors, such as resizing and moving the surface. * * It corresponds to the Wayland interface \c xdg_surface for the unstable xdg-shell protocol v5. + * + * \deprecated */ /*! @@ -776,6 +782,8 @@ * surface. * * It corresponds to the Wayland interface xdg_surface. + * + * \deprecated */ /*! @@ -1318,6 +1326,8 @@ * using xdg-shell. * * It corresponds to the Wayland interface \c xdg_popup for the unstable xdg-shell protocol v5. + * + * \deprecated */ /*! @@ -1331,6 +1341,8 @@ * specific to desktop-style menus for an xdg surface. * * It corresponds to the Wayland interface xdg_popup. + * + * \deprecated */ /*! diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandxdgshellv5.h qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandxdgshellv5.h --- qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandxdgshellv5.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandxdgshellv5.h 2019-02-21 12:36:59.000000000 +0000 @@ -44,6 +44,7 @@ #include #include #include +#include #include @@ -98,6 +99,7 @@ { Q_OBJECT Q_DECLARE_PRIVATE(QWaylandXdgSurfaceV5) + Q_WAYLAND_COMPOSITOR_DECLARE_QUICK_CHILDREN(QWaylandXdgSurfaceV5) Q_PROPERTY(QWaylandXdgShellV5 *shell READ shell NOTIFY shellChanged) Q_PROPERTY(QWaylandSurface *surface READ surface NOTIFY surfaceChanged) Q_PROPERTY(QWaylandXdgSurfaceV5 *parentSurface READ parentSurface NOTIFY parentSurfaceChanged) @@ -212,6 +214,7 @@ { Q_OBJECT Q_DECLARE_PRIVATE(QWaylandXdgPopupV5) + Q_WAYLAND_COMPOSITOR_DECLARE_QUICK_CHILDREN(QWaylandXdgPopupV5) Q_PROPERTY(QWaylandXdgShellV5 *shell READ shell NOTIFY shellChanged) Q_PROPERTY(QWaylandSurface *surface READ surface NOTIFY surfaceChanged) Q_PROPERTY(QWaylandSurface *parentSurface READ parentSurface NOTIFY parentSurfaceChanged) diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandxdgshellv5integration.cpp qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandxdgshellv5integration.cpp --- qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandxdgshellv5integration.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandxdgshellv5integration.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -50,6 +50,12 @@ namespace QtWayland { +static void handlePopupCreated(QWaylandQuickShellSurfaceItem *parentItem, QWaylandXdgPopupV5 *popup) +{ + if (parentItem->surface() == popup->parentSurface()) + QWaylandQuickShellSurfaceItemPrivate::get(parentItem)->maybeCreateAutoPopup(popup); +} + XdgShellV5Integration::XdgShellV5Integration(QWaylandQuickShellSurfaceItem *item) : QWaylandQuickShellIntegration(item) , m_item(item) @@ -66,6 +72,9 @@ connect(m_xdgSurface, &QWaylandXdgSurfaceV5::maximizedChanged, this, &XdgShellV5Integration::handleMaximizedChanged); connect(m_xdgSurface, &QWaylandXdgSurfaceV5::activatedChanged, this, &XdgShellV5Integration::handleActivatedChanged); connect(m_xdgSurface->surface(), &QWaylandSurface::sizeChanged, this, &XdgShellV5Integration::handleSurfaceSizeChanged); + connect(m_xdgSurface->shell(), &QWaylandXdgShellV5::xdgPopupCreated, this, [item](QWaylandXdgPopupV5 *popup){ + handlePopupCreated(item, popup); + }); } XdgShellV5Integration::~XdgShellV5Integration() @@ -213,6 +222,9 @@ QWaylandQuickShellEventFilter::startFilter(client, [shell]() { shell->closeAllPopups(); }); connect(m_xdgPopup, &QWaylandXdgPopupV5::destroyed, this, &XdgPopupV5Integration::handlePopupDestroyed); + connect(m_xdgPopup->shell(), &QWaylandXdgShellV5::xdgPopupCreated, this, [item](QWaylandXdgPopupV5 *popup) { + handlePopupCreated(item, popup); + }); } XdgPopupV5Integration::~XdgPopupV5Integration() diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandxdgshellv5_p.h qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandxdgshellv5_p.h --- qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandxdgshellv5_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandxdgshellv5_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -41,7 +41,7 @@ #define QWAYLANDXDGSHELLV5_P_H #include -#include +#include #include @@ -62,7 +62,7 @@ class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandXdgShellV5Private : public QWaylandCompositorExtensionPrivate - , public QtWaylandServer::xdg_shell + , public QtWaylandServer::xdg_shell_v5 { Q_DECLARE_PUBLIC(QWaylandXdgShellV5) public: @@ -95,7 +95,7 @@ class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandXdgSurfaceV5Private : public QWaylandCompositorExtensionPrivate - , public QtWaylandServer::xdg_surface + , public QtWaylandServer::xdg_surface_v5 { Q_DECLARE_PUBLIC(QWaylandXdgSurfaceV5) public: @@ -158,7 +158,7 @@ class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandXdgPopupV5Private : public QWaylandCompositorExtensionPrivate - , public QtWaylandServer::xdg_popup + , public QtWaylandServer::xdg_popup_v5 { Q_DECLARE_PUBLIC(QWaylandXdgPopupV5) @@ -172,7 +172,7 @@ QPoint m_position; void xdg_popup_destroy_resource(Resource *resource) override; - void xdg_popup_destroy(xdg_popup::Resource *resource) override; + void xdg_popup_destroy(xdg_popup_v5::Resource *resource) override; static QWaylandSurfaceRole s_role; }; diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandxdgshellv6.cpp qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandxdgshellv6.cpp --- qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandxdgshellv6.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandxdgshellv6.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -934,9 +934,14 @@ else if (edges & Qt::BottomEdge) height += delta.y(); - //TODO: use minSize given by the client here instead - QSizeF newSize(qMax(width, 1.0), qMax(height, 1.0)); - return newSize.toSize(); + QSize newSize = QSize(width, height) + .expandedTo(minSize()) + .expandedTo({1, 1}); // We don't want to send a size of (0,0) as that means that the client decides + + if (maxSize().isValid()) + newSize = newSize.boundedTo(maxSize()); + + return newSize; } /*! @@ -1054,6 +1059,8 @@ * Convenience for sending a configure event with the fullscreen state set, and * maximized and resizing removed. The activated state is left in its current state. * + * \sa sendUnmaximized + * * \a size is the new size of the window. */ @@ -1061,6 +1068,8 @@ * Convenience for sending a configure event with the fullscreen state set, and * maximized and resizing removed. The activated state is left in its current state. * + * \sa sendUnmaximized + * * \a size is the new size of the window. */ uint QWaylandXdgToplevelV6::sendFullscreen(const QSize &size) @@ -1380,8 +1389,7 @@ return; } - else - m_maxSize = maxSize; + m_maxSize = maxSize; Q_Q(QWaylandXdgToplevelV6); emit q->maxSizeChanged(); @@ -1411,8 +1419,7 @@ return; } - else - m_minSize = minSize; + m_minSize = minSize; Q_Q(QWaylandXdgToplevelV6); emit q->minSizeChanged(); @@ -1924,8 +1931,6 @@ void QWaylandXdgPositionerV6::zxdg_positioner_v6_set_size(QtWaylandServer::zxdg_positioner_v6::Resource *resource, int32_t width, int32_t height) { - Q_UNUSED(resource); - if (width <= 0 || height <= 0) { wl_resource_post_error(resource->handle, ZXDG_POSITIONER_V6_ERROR_INVALID_INPUT, "zxdg_positioner_v6.set_size requested with non-positive dimensions"); @@ -1938,8 +1943,6 @@ void QWaylandXdgPositionerV6::zxdg_positioner_v6_set_anchor_rect(QtWaylandServer::zxdg_positioner_v6::Resource *resource, int32_t x, int32_t y, int32_t width, int32_t height) { - Q_UNUSED(resource); - if (width <= 0 || height <= 0) { wl_resource_post_error(resource->handle, ZXDG_POSITIONER_V6_ERROR_INVALID_INPUT, "zxdg_positioner_v6.set_anchor_rect requested with non-positive dimensions"); @@ -1952,8 +1955,6 @@ void QWaylandXdgPositionerV6::zxdg_positioner_v6_set_anchor(QtWaylandServer::zxdg_positioner_v6::Resource *resource, uint32_t anchor) { - Q_UNUSED(resource); - Qt::Edges anchorEdges = QWaylandXdgShellV6Private::convertToEdges(anchor); if ((anchorEdges & Qt::BottomEdge && anchorEdges & Qt::TopEdge) || @@ -1968,7 +1969,6 @@ void QWaylandXdgPositionerV6::zxdg_positioner_v6_set_gravity(QtWaylandServer::zxdg_positioner_v6::Resource *resource, uint32_t gravity) { - Q_UNUSED(resource); Qt::Edges gravityEdges = QWaylandXdgShellV6Private::convertToEdges(gravity); if ((gravityEdges & Qt::BottomEdge && gravityEdges & Qt::TopEdge) || @@ -1995,7 +1995,9 @@ QWaylandXdgPositionerV6 *QWaylandXdgPositionerV6::fromResource(wl_resource *resource) { - return static_cast(Resource::fromResource(resource)->zxdg_positioner_v6_object); + if (auto *r = Resource::fromResource(resource)) + return static_cast(r->zxdg_positioner_v6_object); + return nullptr; } QT_END_NAMESPACE diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandxdgshellv6.h qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandxdgshellv6.h --- qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandxdgshellv6.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandxdgshellv6.h 2019-02-21 12:36:59.000000000 +0000 @@ -41,6 +41,7 @@ #include #include #include +#include #include @@ -93,6 +94,7 @@ { Q_OBJECT Q_DECLARE_PRIVATE(QWaylandXdgSurfaceV6) + Q_WAYLAND_COMPOSITOR_DECLARE_QUICK_CHILDREN(QWaylandXdgSurfaceV6) Q_PROPERTY(QWaylandXdgShellV6 *shell READ shell NOTIFY shellChanged) Q_PROPERTY(QWaylandSurface *surface READ surface NOTIFY surfaceChanged) Q_PROPERTY(QWaylandXdgToplevelV6 *toplevel READ toplevel NOTIFY toplevelCreated) diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandxdgshellv6integration.cpp qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandxdgshellv6integration.cpp --- qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandxdgshellv6integration.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandxdgshellv6integration.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -44,6 +44,12 @@ namespace QtWayland { +static void handlePopupCreated(QWaylandQuickShellSurfaceItem *parentItem, QWaylandXdgPopupV6 *popup) +{ + if (parentItem->shellSurface() == popup->parentXdgSurface()) + QWaylandQuickShellSurfaceItemPrivate::get(parentItem)->maybeCreateAutoPopup(popup->xdgSurface()); +} + XdgToplevelV6Integration::XdgToplevelV6Integration(QWaylandQuickShellSurfaceItem *item) : QWaylandQuickShellIntegration(item) , m_item(item) @@ -54,13 +60,21 @@ Q_ASSERT(m_toplevel); m_item->setSurface(m_xdgSurface->surface()); + connect(m_toplevel, &QWaylandXdgToplevelV6::startMove, this, &XdgToplevelV6Integration::handleStartMove); connect(m_toplevel, &QWaylandXdgToplevelV6::startResize, this, &XdgToplevelV6Integration::handleStartResize); connect(m_toplevel, &QWaylandXdgToplevelV6::setMaximized, this, &XdgToplevelV6Integration::handleSetMaximized); connect(m_toplevel, &QWaylandXdgToplevelV6::unsetMaximized, this, &XdgToplevelV6Integration::handleUnsetMaximized); connect(m_toplevel, &QWaylandXdgToplevelV6::maximizedChanged, this, &XdgToplevelV6Integration::handleMaximizedChanged); + connect(m_toplevel, &QWaylandXdgToplevelV6::setFullscreen, this, &XdgToplevelV6Integration::handleSetFullscreen); + connect(m_toplevel, &QWaylandXdgToplevelV6::unsetFullscreen, this, &XdgToplevelV6Integration::handleUnsetFullscreen); + connect(m_toplevel, &QWaylandXdgToplevelV6::fullscreenChanged, this, &XdgToplevelV6Integration::handleFullscreenChanged); connect(m_toplevel, &QWaylandXdgToplevelV6::activatedChanged, this, &XdgToplevelV6Integration::handleActivatedChanged); + connect(m_xdgSurface->shell(), &QWaylandXdgShellV6::popupCreated, this, [item](QWaylandXdgPopupV6 *popup, QWaylandXdgSurfaceV6 *){ + handlePopupCreated(item, popup); + }); connect(m_xdgSurface->surface(), &QWaylandSurface::sizeChanged, this, &XdgToplevelV6Integration::handleSurfaceSizeChanged); + connect(m_toplevel, &QObject::destroyed, this, &XdgToplevelV6Integration::handleToplevelDestroyed); } bool XdgToplevelV6Integration::mouseMoveEvent(QMouseEvent *event) @@ -125,11 +139,28 @@ if (!m_item->view()->isPrimary()) return; - maximizeState.initialWindowSize = m_xdgSurface->windowGeometry().size(); - maximizeState.initialPosition = m_item->moveItem()->position(); + QVector states = m_toplevel->states(); + + if (!states.contains(QWaylandXdgToplevelV6::State::FullscreenState) && !states.contains(QWaylandXdgToplevelV6::State::MaximizedState)) { + windowedGeometry.initialWindowSize = m_xdgSurface->windowGeometry().size(); + windowedGeometry.initialPosition = m_item->moveItem()->position(); + } + + // Any prior output-resize handlers are irrelevant at this point. + disconnect(nonwindowedState.sizeChangedConnection); + nonwindowedState.output = m_item->view()->output(); + nonwindowedState.sizeChangedConnection = connect(nonwindowedState.output, &QWaylandOutput::availableGeometryChanged, this, &XdgToplevelV6Integration::handleMaximizedSizeChanged); + handleMaximizedSizeChanged(); +} + +void XdgToplevelV6Integration::handleMaximizedSizeChanged() +{ + // Insurance against handleToplevelDestroyed() not managing to disconnect this + // handler in time. + if (m_toplevel == nullptr) + return; - QWaylandOutput *output = m_item->view()->output(); - m_toplevel->sendMaximized(output->availableGeometry().size() / output->scaleFactor()); + m_toplevel->sendMaximized(nonwindowedState.output->availableGeometry().size() / nonwindowedState.output->scaleFactor()); } void XdgToplevelV6Integration::handleUnsetMaximized() @@ -137,7 +168,12 @@ if (!m_item->view()->isPrimary()) return; - m_toplevel->sendUnmaximized(maximizeState.initialWindowSize); + // If no prior windowed size was recorded, send a 0x0 configure event + // to allow the client to choose its preferred size. + if (windowedGeometry.initialWindowSize.isValid()) + m_toplevel->sendUnmaximized(windowedGeometry.initialWindowSize); + else + m_toplevel->sendUnmaximized(); } void XdgToplevelV6Integration::handleMaximizedChanged() @@ -146,7 +182,59 @@ QWaylandOutput *output = m_item->view()->output(); m_item->moveItem()->setPosition(output->position() + output->availableGeometry().topLeft()); } else { - m_item->moveItem()->setPosition(maximizeState.initialPosition); + m_item->moveItem()->setPosition(windowedGeometry.initialPosition); + } +} + +void XdgToplevelV6Integration::handleSetFullscreen() +{ + if (!m_item->view()->isPrimary()) + return; + + QVector states = m_toplevel->states(); + + if (!states.contains(QWaylandXdgToplevelV6::State::FullscreenState) && !states.contains(QWaylandXdgToplevelV6::State::MaximizedState)) { + windowedGeometry.initialWindowSize = m_xdgSurface->windowGeometry().size(); + windowedGeometry.initialPosition = m_item->moveItem()->position(); + } + + // Any prior output-resize handlers are irrelevant at this point. + disconnect(nonwindowedState.sizeChangedConnection); + nonwindowedState.output = m_item->view()->output(); + nonwindowedState.sizeChangedConnection = connect(nonwindowedState.output, &QWaylandOutput::geometryChanged, this, &XdgToplevelV6Integration::handleFullscreenSizeChanged); + handleFullscreenSizeChanged(); +} + +void XdgToplevelV6Integration::handleFullscreenSizeChanged() +{ + // Insurance against handleToplevelDestroyed() not managing to disconnect this + // handler in time. + if (m_toplevel == nullptr) + return; + + m_toplevel->sendFullscreen(nonwindowedState.output->geometry().size() / nonwindowedState.output->scaleFactor()); +} + +void XdgToplevelV6Integration::handleUnsetFullscreen() +{ + if (!m_item->view()->isPrimary()) + return; + + // If no prior windowed size was recorded, send a 0x0 configure event + // to allow the client to choose its preferred size. + if (windowedGeometry.initialWindowSize.isValid()) + m_toplevel->sendUnmaximized(windowedGeometry.initialWindowSize); + else + m_toplevel->sendUnmaximized(); +} + +void XdgToplevelV6Integration::handleFullscreenChanged() +{ + if (m_toplevel->fullscreen()) { + QWaylandOutput *output = m_item->view()->output(); + m_item->moveItem()->setPosition(output->position() + output->geometry().topLeft()); + } else { + m_item->moveItem()->setPosition(windowedGeometry.initialPosition); } } @@ -170,6 +258,13 @@ } } +void XdgToplevelV6Integration::handleToplevelDestroyed() +{ + // Disarm any handlers that might fire on the now-stale toplevel pointer + nonwindowedState.output = nullptr; + disconnect(nonwindowedState.sizeChangedConnection); +} + XdgPopupV6Integration::XdgPopupV6Integration(QWaylandQuickShellSurfaceItem *item) : m_item(item) , m_xdgSurface(qobject_cast(item->shellSurface())) @@ -181,6 +276,9 @@ handleGeometryChanged(); connect(m_popup, &QWaylandXdgPopupV6::configuredGeometryChanged, this, &XdgPopupV6Integration::handleGeometryChanged); + connect(m_xdgSurface->shell(), &QWaylandXdgShellV6::popupCreated, this, [item](QWaylandXdgPopupV6 *popup, QWaylandXdgSurfaceV6 *){ + handlePopupCreated(item, popup); + }); } void XdgPopupV6Integration::handleGeometryChanged() diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandxdgshellv6integration_p.h qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandxdgshellv6integration_p.h --- qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandxdgshellv6integration_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandxdgshellv6integration_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -72,8 +72,14 @@ void handleSetMaximized(); void handleUnsetMaximized(); void handleMaximizedChanged(); + void handleSetFullscreen(); + void handleUnsetFullscreen(); + void handleFullscreenChanged(); void handleActivatedChanged(); void handleSurfaceSizeChanged(); + void handleToplevelDestroyed(); + void handleMaximizedSizeChanged(); + void handleFullscreenSizeChanged(); private: QWaylandQuickShellSurfaceItem *m_item = nullptr; @@ -106,7 +112,14 @@ struct { QSize initialWindowSize; QPointF initialPosition; - } maximizeState; + } windowedGeometry; + + struct { + QWaylandOutput *output = nullptr; + QMetaObject::Connection sizeChangedConnection; // Depending on whether maximized or fullscreen, + // will be hooked to geometry-changed or available- + // geometry-changed. + } nonwindowedState; }; class XdgPopupV6Integration : public QWaylandQuickShellIntegration diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandxdgshellv6_p.h qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandxdgshellv6_p.h --- qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwaylandxdgshellv6_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwaylandxdgshellv6_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -135,6 +135,12 @@ Q_DECLARE_PUBLIC(QWaylandXdgToplevelV6) public: struct ConfigureEvent { + ConfigureEvent() = default; + ConfigureEvent(const QVector + &incomingStates, + const QSize &incomingSize, uint incomingSerial) + : states(incomingStates), size(incomingSize), serial(incomingSerial) + { } QVector states; QSize size = {0, 0}; uint serial = 0; diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwlqtkey.cpp qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwlqtkey.cpp --- qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwlqtkey.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwlqtkey.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -48,7 +48,7 @@ QtKeyExtensionGlobal::QtKeyExtensionGlobal(QWaylandCompositor *compositor) : QWaylandCompositorExtensionTemplate(compositor) - , QtWaylandServer::qt_key_extension(compositor->display(), 2) + , QtWaylandServer::zqt_key_v1(compositor->display(), 1) , m_compositor(compositor) { } @@ -60,15 +60,15 @@ Resource *target = surface ? resourceMap().value(surface->waylandClient()) : 0; if (target) { - send_qtkey(target->handle, - surface ? surface->resource() : nullptr, - time, event->type(), event->key(), event->modifiers(), - event->nativeScanCode(), - event->nativeVirtualKey(), - event->nativeModifiers(), - event->text(), - event->isAutoRepeat(), - event->count()); + send_key(target->handle, + surface ? surface->resource() : nullptr, + time, event->type(), event->key(), event->modifiers(), + event->nativeScanCode(), + event->nativeVirtualKey(), + event->nativeModifiers(), + event->text(), + event->isAutoRepeat(), + event->count()); return true; } diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwlqtkey_p.h qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwlqtkey_p.h --- qtwayland-opensource-src-5.11.3/src/compositor/extensions/qwlqtkey_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/extensions/qwlqtkey_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -53,7 +53,7 @@ #include #include -#include +#include #include @@ -64,7 +64,7 @@ namespace QtWayland { -class QtKeyExtensionGlobal : public QWaylandCompositorExtensionTemplate, public QtWaylandServer::qt_key_extension +class QtKeyExtensionGlobal : public QWaylandCompositorExtensionTemplate, public QtWaylandServer::zqt_key_v1 { Q_OBJECT public: diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/hardware_integration/qwlserverbufferintegration_p.h qtwayland-opensource-src-5.12.2/src/compositor/hardware_integration/qwlserverbufferintegration_p.h --- qtwayland-opensource-src-5.11.3/src/compositor/hardware_integration/qwlserverbufferintegration_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/hardware_integration/qwlserverbufferintegration_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -82,6 +82,7 @@ virtual ~ServerBuffer(); virtual struct ::wl_resource *resourceForClient(struct ::wl_client *) = 0; + virtual bool bufferInUse() { return true; } virtual QOpenGLTexture *toOpenGlTexture() = 0; diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/wayland_wrapper/qwlbuffermanager.cpp qtwayland-opensource-src-5.12.2/src/compositor/wayland_wrapper/qwlbuffermanager.cpp --- qtwayland-opensource-src-5.11.3/src/compositor/wayland_wrapper/qwlbuffermanager.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/wayland_wrapper/qwlbuffermanager.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -84,7 +84,7 @@ auto *destroy_listener = new buffer_manager_destroy_listener; destroy_listener->d = this; - wl_signal_add(&buffer_resource->destroy_signal, destroy_listener); + wl_resource_add_destroy_listener(buffer_resource, destroy_listener); return newBuffer; } diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/wayland_wrapper/qwldatadevicemanager.cpp qtwayland-opensource-src-5.12.2/src/compositor/wayland_wrapper/qwldatadevicemanager.cpp --- qtwayland-opensource-src-5.11.3/src/compositor/wayland_wrapper/qwldatadevicemanager.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/wayland_wrapper/qwldatadevicemanager.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -210,7 +210,7 @@ if (!m_compositorOwnsSelection) return false; - wl_client *client = clientDataDeviceResource->client; + wl_client *client = wl_resource_get_client(clientDataDeviceResource); //qDebug("compositor offers %d types to %p", m_retainedData.formats().count(), client); struct wl_resource *selectionOffer = @@ -253,7 +253,7 @@ void DataDeviceManager::comp_receive(wl_client *client, wl_resource *resource, const char *mime_type, int32_t fd) { Q_UNUSED(client); - DataDeviceManager *self = static_cast(resource->data); + DataDeviceManager *self = static_cast(wl_resource_get_user_data(resource)); //qDebug("client %p wants data for type %s from compositor", client, mime_type); QByteArray content = QWaylandMimeHelper::getByteArray(&self->m_retainedData, QString::fromLatin1(mime_type)); if (!content.isEmpty()) { diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/wayland_wrapper/qwlregion.cpp qtwayland-opensource-src-5.12.2/src/compositor/wayland_wrapper/qwlregion.cpp --- qtwayland-opensource-src-5.11.3/src/compositor/wayland_wrapper/qwlregion.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/wayland_wrapper/qwlregion.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -54,7 +54,9 @@ Region *Region::fromResource(struct ::wl_resource *resource) { - return static_cast(Resource::fromResource(resource)->region_object); + if (auto *r = Resource::fromResource(resource)) + return static_cast(r->region_object); + return nullptr; } void Region::region_destroy_resource(Resource *) diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/wayland_wrapper/qwlregion_p.h qtwayland-opensource-src-5.12.2/src/compositor/wayland_wrapper/qwlregion_p.h --- qtwayland-opensource-src-5.11.3/src/compositor/wayland_wrapper/qwlregion_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/wayland_wrapper/qwlregion_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -70,7 +70,7 @@ static Region *fromResource(struct ::wl_resource *resource); - uint id() const { return resource()->handle->object.id; } + uint id() const { return wl_resource_get_id(resource()->handle); } QRegion region() const { return m_region; } diff -Nru qtwayland-opensource-src-5.11.3/src/compositor/wayland_wrapper/wayland_wrapper.pri qtwayland-opensource-src-5.12.2/src/compositor/wayland_wrapper/wayland_wrapper.pri --- qtwayland-opensource-src-5.11.3/src/compositor/wayland_wrapper/wayland_wrapper.pri 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/compositor/wayland_wrapper/wayland_wrapper.pri 2019-02-21 12:36:59.000000000 +0000 @@ -30,5 +30,5 @@ INCLUDEPATH += wayland_wrapper -qtConfig(xkbcommon-evdev): \ - QMAKE_USE += xkbcommon_evdev +qtConfig(xkbcommon): \ + QMAKE_USE += xkbcommon diff -Nru qtwayland-opensource-src-5.11.3/src/extensions/qt-dmabuf-server-buffer.xml qtwayland-opensource-src-5.12.2/src/extensions/qt-dmabuf-server-buffer.xml --- qtwayland-opensource-src-5.11.3/src/extensions/qt-dmabuf-server-buffer.xml 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/extensions/qt-dmabuf-server-buffer.xml 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,60 @@ + + + + Copyright (C) 2018 The Qt Company Ltd. + Contact: http://www.qt.io/licensing/ + + This file is part of the plugins of the Qt Toolkit. + + $QT_BEGIN_LICENSE:BSD$ + You may use this file under the terms of the BSD license as follows: + + "Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name of The Qt Company Ltd nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." + + $QT_END_LICENSE$ + + + + This protocol is used internally by Qt for implementing the + qt_server_buffer extension on hardware that supports Linux dma-buf. + + This protocol is not part of the Qt API. It exists purely as an + implementation detail and may change from version to + version without notice, or even be removed. + + + + + + + + + + + + + diff -Nru qtwayland-opensource-src-5.11.3/src/extensions/qtkey-extension.xml qtwayland-opensource-src-5.12.2/src/extensions/qtkey-extension.xml --- qtwayland-opensource-src-5.11.3/src/extensions/qtkey-extension.xml 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/extensions/qtkey-extension.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,63 +0,0 @@ - - - - Copyright (C) 2015 The Qt Company Ltd. - Contact: http://www.qt.io/licensing/ - - This file is part of the plugins of the Qt Toolkit. - - $QT_BEGIN_LICENSE:BSD$ - You may use this file under the terms of the BSD license as follows: - - "Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - * Neither the name of The Qt Company Ltd nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." - - $QT_END_LICENSE$ - - - - - - Serialized QKeyEvent - - - - - - - - - - - - - - - - - - - diff -Nru qtwayland-opensource-src-5.11.3/src/extensions/qt-key-unstable-v1.xml qtwayland-opensource-src-5.12.2/src/extensions/qt-key-unstable-v1.xml --- qtwayland-opensource-src-5.11.3/src/extensions/qt-key-unstable-v1.xml 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/extensions/qt-key-unstable-v1.xml 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,73 @@ + + + + Copyright (C) 2018 The Qt Company Ltd. + Contact: http://www.qt.io/licensing/ + + This file is part of the plugins of the Qt Toolkit. + + $QT_BEGIN_LICENSE:BSD$ + You may use this file under the terms of the BSD license as follows: + + "Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name of The Qt Company Ltd nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." + + $QT_END_LICENSE$ + + + + + This protocol is independent of the Wayland seat concept. Its + intention is to let a QKeyEvent be transferred from a Qt compositor + to a Qt client without losing or adding false information by going + through wl_seat and wl_keyboard. + + Note: This protocol is considered private to Qt. We will do our + best to bump version numbers when we make backwards compatible + changes, bump the protocol name and interface suffixes when we make + backwards incompatible changes, but we provide no guarantees. We + may also remove the protocol without warning. Implement this at + your own risk. + + + + The key event notifies the client that a QKeyEvent has occurred on + the server side. + + + + + + + + + + + + + + + diff -Nru qtwayland-opensource-src-5.11.3/src/extensions/README.md qtwayland-opensource-src-5.12.2/src/extensions/README.md --- qtwayland-opensource-src-5.11.3/src/extensions/README.md 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/extensions/README.md 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,18 @@ +# Internal Qt protocol extensions + +The protocol extensions in this folder are considered implementation details of +Qt. I.e. they may removed, renamed or changed without warning. + +## Suffixed protocols + +For protocols that have a version suffix, however, we will strive to not break +backwards compatibility without bumping the suffix (renaming the protocol). +E.g.: If your client sees a `zqt_key_v1` global, it can safely bind to it: +the key event will always take the same number of arguments, regardless of +compositor version. + +This is important also within a Qt-only scope if there are multiple versions of +Qt on the system. Consider for instance an application statically linked to Qt +(such as Qt Creator) running against a Qt compositor installed by the distro). +In such cases we don't want the compositor and client to disagree on the +protocol definition. diff -Nru qtwayland-opensource-src-5.11.3/src/hardwareintegration/client/brcm-egl/qwaylandbrcmeglintegration.cpp qtwayland-opensource-src-5.12.2/src/hardwareintegration/client/brcm-egl/qwaylandbrcmeglintegration.cpp --- qtwayland-opensource-src-5.11.3/src/hardwareintegration/client/brcm-egl/qwaylandbrcmeglintegration.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/hardwareintegration/client/brcm-egl/qwaylandbrcmeglintegration.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -124,6 +124,33 @@ return m_eglDisplay; } +void *QWaylandBrcmEglIntegration::nativeResource(NativeResource resource) +{ + switch (resource) { + case EglDisplay: + return m_eglDisplay; + default: + break; + } + return nullptr; +} + +void *QWaylandBrcmEglIntegration::nativeResourceForContext(NativeResource resource, QPlatformOpenGLContext *context) +{ + Q_ASSERT(context); + switch (resource) { + case EglConfig: + return static_cast(context)->eglConfig(); + case EglContext: + return static_cast(context)->eglContext(); + case EglDisplay: + return m_eglDisplay; + default: + break; + } + return nullptr; +} + } QT_END_NAMESPACE diff -Nru qtwayland-opensource-src-5.11.3/src/hardwareintegration/client/brcm-egl/qwaylandbrcmeglintegration.h qtwayland-opensource-src-5.12.2/src/hardwareintegration/client/brcm-egl/qwaylandbrcmeglintegration.h --- qtwayland-opensource-src-5.11.3/src/hardwareintegration/client/brcm-egl/qwaylandbrcmeglintegration.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/hardwareintegration/client/brcm-egl/qwaylandbrcmeglintegration.h 2019-02-21 12:36:59.000000000 +0000 @@ -82,6 +82,9 @@ PFNEGLCREATEGLOBALIMAGEBRCMPROC eglCreateGlobalImageBRCM; PFNEGLDESTROYGLOBALIMAGEBRCMPROC eglDestroyGlobalImageBRCM; + void *nativeResource(NativeResource resource) override; + void *nativeResourceForContext(NativeResource resource, QPlatformOpenGLContext *context) override; + private: static void wlDisplayHandleGlobal(void *data, struct wl_registry *registry, uint32_t id, const QString &interface, uint32_t version); diff -Nru qtwayland-opensource-src-5.11.3/src/hardwareintegration/client/dmabuf-server/dmabufserverbufferintegration.cpp qtwayland-opensource-src-5.12.2/src/hardwareintegration/client/dmabuf-server/dmabufserverbufferintegration.cpp --- qtwayland-opensource-src-5.11.3/src/hardwareintegration/client/dmabuf-server/dmabufserverbufferintegration.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/hardwareintegration/client/dmabuf-server/dmabufserverbufferintegration.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,188 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "dmabufserverbufferintegration.h" +#include +#include +#include +#include + +#include +#include + +QT_BEGIN_NAMESPACE + +namespace QtWaylandClient { + +DmaBufServerBuffer::DmaBufServerBuffer(DmaBufServerBufferIntegration *integration + , struct ::qt_server_buffer *id + , int32_t fd + , int32_t width + , int32_t height + , int32_t stride + , int32_t offset + , int32_t fourcc_format) + : m_integration(integration) + , m_server_buffer(id) +{ + m_size = QSize(width, height); + + + EGLint import_attribs[] = { + EGL_WIDTH, width, + EGL_HEIGHT, height, + EGL_LINUX_DRM_FOURCC_EXT, fourcc_format, + EGL_DMA_BUF_PLANE0_FD_EXT, fd, + EGL_DMA_BUF_PLANE0_OFFSET_EXT, offset, + EGL_DMA_BUF_PLANE0_PITCH_EXT, stride, + EGL_NONE + }; + + m_image = integration->eglCreateImageKHR( + EGL_NO_CONTEXT, + EGL_LINUX_DMA_BUF_EXT, + (EGLClientBuffer)nullptr, + import_attribs); + + int err = eglGetError(); + qCDebug(lcQpaWayland) << "imported egl image" << m_image; + if (m_image == EGL_NO_IMAGE_KHR || err != EGL_SUCCESS) + qCWarning(lcQpaWayland) << "DmaBufServerBuffer error importing image. EGL error code" << hex << err; + + qt_server_buffer_set_user_data(id, this); + +} + +DmaBufServerBuffer::~DmaBufServerBuffer() +{ + int err = m_integration->eglDestroyImageKHR(m_image); + if (err != EGL_SUCCESS) + qCWarning(lcQpaWayland) << "~DmaBufServerBuffer error destroying image" << m_image << "error code " << hex << err; + qt_server_buffer_release(m_server_buffer); + qt_server_buffer_destroy(m_server_buffer); +} + +QOpenGLTexture *DmaBufServerBuffer::toOpenGlTexture() +{ + if (!QOpenGLContext::currentContext()) + qCWarning(lcQpaWayland) <<"DmaBufServerBuffer: creating texture with no current context"; + + if (!m_texture) { + m_texture = new QOpenGLTexture(QOpenGLTexture::Target2D); + m_texture->create(); + } + + m_texture->bind(); + m_integration->glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, m_image); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + m_texture->release(); + m_texture->setSize(m_size.width(), m_size.height()); + return m_texture; +} + +void DmaBufServerBufferIntegration::initializeEgl() +{ + if (m_egl_initialized) + return; + m_egl_initialized = true; + + m_egl_display = eglGetDisplay((EGLNativeDisplayType) m_display->wl_display()); + if (m_egl_display == EGL_NO_DISPLAY) { + qCWarning(lcQpaWayland) << "Failed to initialize drm egl server buffer integration. Could not get egl display from wl_display."; + return; + } + + const char *extensionString = eglQueryString(m_egl_display, EGL_EXTENSIONS); + + + if (!extensionString || !strstr(extensionString, "EGL_KHR_image")) { + qCWarning(lcQpaWayland) << "Failed to initialize dmabuf server buffer integration. There is no EGL_KHR_image extension.\n"; + return; + } + m_egl_create_image = reinterpret_cast(eglGetProcAddress("eglCreateImageKHR")); + m_egl_destroy_image = reinterpret_cast(eglGetProcAddress("eglDestroyImageKHR")); + if (!m_egl_create_image || !m_egl_destroy_image) { + qCWarning(lcQpaWayland) << "Failed to initialize dmabuf server buffer integration. Could not resolve eglCreateImageKHR or eglDestroyImageKHR"; + return; + } + + m_gl_egl_image_target_texture = reinterpret_cast(eglGetProcAddress("glEGLImageTargetTexture2DOES")); + if (!m_gl_egl_image_target_texture) { + qCWarning(lcQpaWayland) << "Failed to initialize dmabuf server buffer integration. Could not resolve glEGLImageTargetTexture2DOES"; + return; + } +} + +void DmaBufServerBufferIntegration::initialize(QWaylandDisplay *display) +{ + m_display = display; + display->addRegistryListener(&wlDisplayHandleGlobal, this); +} + +QWaylandServerBuffer *DmaBufServerBufferIntegration::serverBuffer(struct qt_server_buffer *buffer) +{ + return static_cast(qt_server_buffer_get_user_data(buffer)); +} + +void DmaBufServerBufferIntegration::wlDisplayHandleGlobal(void *data, ::wl_registry *registry, uint32_t id, const QString &interface, uint32_t version) +{ + Q_UNUSED(version); + if (interface == QStringLiteral("qt_dmabuf_server_buffer")) { + auto *integration = static_cast(data); + integration->QtWayland::qt_dmabuf_server_buffer::init(registry, id, 1); + } +} + +void DmaBufServerBufferIntegration::dmabuf_server_buffer_server_buffer_created(struct ::qt_server_buffer *id + , int32_t name + , int32_t width + , int32_t height + , int32_t stride + , int32_t offset + , int32_t format) +{ + (void) new DmaBufServerBuffer(this, id, name, width, height, stride, offset, format); +} + +} + +QT_END_NAMESPACE diff -Nru qtwayland-opensource-src-5.11.3/src/hardwareintegration/client/dmabuf-server/dmabufserverbufferintegration.h qtwayland-opensource-src-5.12.2/src/hardwareintegration/client/dmabuf-server/dmabufserverbufferintegration.h --- qtwayland-opensource-src-5.11.3/src/hardwareintegration/client/dmabuf-server/dmabufserverbufferintegration.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/hardwareintegration/client/dmabuf-server/dmabufserverbufferintegration.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,146 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef DMABUFSERVERBUFFERINTEGRATION_H +#define DMABUFSERVERBUFFERINTEGRATION_H + +#include +#include "qwayland-qt-dmabuf-server-buffer.h" +#include + +#include "dmabufserverbufferintegration.h" +#include +#include + +#include +#include +#ifndef EGL_KHR_image +typedef void *EGLImageKHR; +typedef EGLImageKHR (EGLAPIENTRYP PFNEGLCREATEIMAGEKHRPROC) (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYIMAGEKHRPROC) (EGLDisplay dpy, EGLImageKHR image); +#endif + +#ifndef GL_OES_EGL_image +typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image); +#endif + +QT_BEGIN_NAMESPACE + +namespace QtWaylandClient { + +class DmaBufServerBufferIntegration; + +class DmaBufServerBuffer : public QWaylandServerBuffer +{ +public: + DmaBufServerBuffer(DmaBufServerBufferIntegration *integration, struct ::qt_server_buffer *id, int32_t fd, + int32_t width, int32_t height, int32_t stride, int32_t offset, int32_t fourcc_format); + ~DmaBufServerBuffer() override; + QOpenGLTexture* toOpenGlTexture() override; +private: + DmaBufServerBufferIntegration *m_integration = nullptr; + EGLImageKHR m_image = EGL_NO_IMAGE_KHR; + QOpenGLTexture *m_texture = nullptr; + struct ::qt_server_buffer *m_server_buffer = nullptr; +}; + +class DmaBufServerBufferIntegration + : public QWaylandServerBufferIntegration + , public QtWayland::qt_dmabuf_server_buffer +{ +public: + void initialize(QWaylandDisplay *display) override; + + QWaylandServerBuffer *serverBuffer(struct qt_server_buffer *buffer) override; + + inline EGLImageKHR eglCreateImageKHR(EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list); + inline EGLBoolean eglDestroyImageKHR(EGLImageKHR image); + inline void glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image); +protected: + void dmabuf_server_buffer_server_buffer_created(struct ::qt_server_buffer *id, int32_t fd, + int32_t width, int32_t height, int32_t stride, + int32_t offset, int32_t fourcc_format) override; + +private: + static void wlDisplayHandleGlobal(void *data, struct ::wl_registry *registry, uint32_t id, + const QString &interface, uint32_t version); + void initializeEgl(); + + PFNEGLCREATEIMAGEKHRPROC m_egl_create_image = nullptr; + PFNEGLDESTROYIMAGEKHRPROC m_egl_destroy_image = nullptr; + PFNGLEGLIMAGETARGETTEXTURE2DOESPROC m_gl_egl_image_target_texture = nullptr; + QWaylandDisplay *m_display = nullptr; + EGLDisplay m_egl_display = EGL_NO_DISPLAY; + bool m_egl_initialized = false; +}; + +EGLImageKHR DmaBufServerBufferIntegration::eglCreateImageKHR(EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list) +{ + if (!m_egl_initialized) + initializeEgl(); + if (!m_egl_create_image) { + qCWarning(lcQpaWayland) << "DmaBufServerBufferIntegration: Trying to use unresolved function eglCreateImageKHR"; + return EGL_NO_IMAGE_KHR; + } + return m_egl_create_image(m_egl_display, ctx, target, buffer, attrib_list); +} + +EGLBoolean DmaBufServerBufferIntegration::eglDestroyImageKHR(EGLImageKHR image) +{ + if (!m_egl_destroy_image) { + qCWarning(lcQpaWayland) << "DmaBufServerBufferIntegration: Trying to use unresolved function eglDestroyImageKHR"; + return false; + } + return m_egl_destroy_image(m_egl_display, image); +} + +void DmaBufServerBufferIntegration::glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image) +{ + if (!m_gl_egl_image_target_texture) { + qCWarning(lcQpaWayland) << "DmaBufServerBufferIntegration: Trying to use unresolved function glEGLImageTargetTexture2DOES"; + return; + } + m_gl_egl_image_target_texture(target, image); +} + +} + +QT_END_NAMESPACE + +#endif diff -Nru qtwayland-opensource-src-5.11.3/src/hardwareintegration/client/dmabuf-server/dmabuf-server.pri qtwayland-opensource-src-5.12.2/src/hardwareintegration/client/dmabuf-server/dmabuf-server.pri --- qtwayland-opensource-src-5.11.3/src/hardwareintegration/client/dmabuf-server/dmabuf-server.pri 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/hardwareintegration/client/dmabuf-server/dmabuf-server.pri 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,12 @@ +INCLUDEPATH += $$PWD + +QMAKE_USE += egl wayland-client + +SOURCES += \ + $$PWD/dmabufserverbufferintegration.cpp + +HEADERS += \ + $$PWD/dmabufserverbufferintegration.h + +CONFIG += wayland-scanner +WAYLANDCLIENTSOURCES += $$PWD/../../../extensions/qt-dmabuf-server-buffer.xml diff -Nru qtwayland-opensource-src-5.11.3/src/hardwareintegration/client/shm-emulation-server/shmserverbufferintegration.cpp qtwayland-opensource-src-5.12.2/src/hardwareintegration/client/shm-emulation-server/shmserverbufferintegration.cpp --- qtwayland-opensource-src-5.11.3/src/hardwareintegration/client/shm-emulation-server/shmserverbufferintegration.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/hardwareintegration/client/shm-emulation-server/shmserverbufferintegration.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -88,13 +88,13 @@ namespace QtWaylandClient { -ShmServerBuffer::ShmServerBuffer(ShmServerBufferIntegration *integration, const QString &key, int32_t width, int32_t height, int32_t bytes_per_line, int32_t format) - : m_integration(integration) - , m_key(key) - , m_bpl(bytes_per_line) - , m_format(format) + +ShmServerBuffer::ShmServerBuffer(const QString &key, const QSize& size, int bytesPerLine, QWaylandServerBuffer::Format format) + : m_key(key) + , m_bpl(bytesPerLine) { - m_size = QSize(width, height); + m_format = format; + m_size = size; } ShmServerBuffer::~ShmServerBuffer() @@ -132,7 +132,9 @@ void QtWaylandClient::ShmServerBufferIntegration::shm_emulation_server_buffer_server_buffer_created(qt_server_buffer *id, const QString &key, int32_t width, int32_t height, int32_t bytes_per_line, int32_t format) { - auto *server_buffer = new ShmServerBuffer(this, key, width, height, bytes_per_line, format); + QSize size(width, height); + auto fmt = QWaylandServerBuffer::Format(format); + auto *server_buffer = new ShmServerBuffer(key, size, bytes_per_line, fmt); qt_server_buffer_set_user_data(id, server_buffer); } diff -Nru qtwayland-opensource-src-5.11.3/src/hardwareintegration/client/shm-emulation-server/shmserverbufferintegration.h qtwayland-opensource-src-5.12.2/src/hardwareintegration/client/shm-emulation-server/shmserverbufferintegration.h --- qtwayland-opensource-src-5.11.3/src/hardwareintegration/client/shm-emulation-server/shmserverbufferintegration.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/hardwareintegration/client/shm-emulation-server/shmserverbufferintegration.h 2019-02-21 12:36:59.000000000 +0000 @@ -57,15 +57,13 @@ class ShmServerBuffer : public QWaylandServerBuffer { public: - ShmServerBuffer(ShmServerBufferIntegration *integration, const QString &key, int32_t width, int32_t height, int32_t bytes_per_line, int32_t format); + ShmServerBuffer(const QString &key, const QSize &size, int bytesPerLine, QWaylandServerBuffer::Format format); ~ShmServerBuffer() override; QOpenGLTexture* toOpenGlTexture() override; private: - ShmServerBufferIntegration *m_integration = nullptr; QOpenGLTexture *m_texture = nullptr; QString m_key; int m_bpl; - int m_format; }; class ShmServerBufferIntegration diff -Nru qtwayland-opensource-src-5.11.3/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp qtwayland-opensource-src-5.12.2/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp --- qtwayland-opensource-src-5.11.3/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -62,7 +62,7 @@ if (mDisplay->supportsWindowDecoration()) fmt.setAlphaBufferSize(8); m_eglConfig = q_configFromGLFormat(m_clientBufferIntegration->eglDisplay(), fmt); - m_format = q_glFormatFromConfig(m_clientBufferIntegration->eglDisplay(), m_eglConfig); + m_format = q_glFormatFromConfig(m_clientBufferIntegration->eglDisplay(), m_eglConfig, fmt); // Do not create anything from here. This platform window may belong to a // RasterGLSurface window which may have pure raster content. In this case, where the @@ -126,20 +126,27 @@ } else { if (m_waylandEglWindow) { int current_width, current_height; - wl_egl_window_get_attached_size(m_waylandEglWindow,¤t_width,¤t_height); - if (current_width != sizeWithMargins.width() || current_height != sizeWithMargins.height()) { + static bool disableResizeCheck = qgetenv("QT_WAYLAND_DISABLE_RESIZECHECK").toInt(); + + if (!disableResizeCheck) { + wl_egl_window_get_attached_size(m_waylandEglWindow, ¤t_width, ¤t_height); + } + if (disableResizeCheck || (current_width != sizeWithMargins.width() || current_height != sizeWithMargins.height())) { wl_egl_window_resize(m_waylandEglWindow, sizeWithMargins.width(), sizeWithMargins.height(), mOffset.x(), mOffset.y()); mOffset = QPoint(); m_resize = true; } - } else if (create) { - m_waylandEglWindow = wl_egl_window_create(object(), sizeWithMargins.width(), sizeWithMargins.height()); + } else if (create && wl_surface::isInitialized()) { + ::wl_surface *wlSurface = wl_surface::object(); + m_waylandEglWindow = wl_egl_window_create(wlSurface, sizeWithMargins.width(), sizeWithMargins.height()); } - if (!m_eglSurface && create) { + if (!m_eglSurface && m_waylandEglWindow && create) { EGLNativeWindowType eglw = (EGLNativeWindowType) m_waylandEglWindow; m_eglSurface = eglCreateWindowSurface(m_clientBufferIntegration->eglDisplay(), m_eglConfig, eglw, 0); + if (Q_UNLIKELY(m_eglSurface == EGL_NO_SURFACE)) + qCWarning(lcQpaWayland, "Could not create EGL surface (EGL error 0x%x)\n", eglGetError()); } } } diff -Nru qtwayland-opensource-src-5.11.3/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp qtwayland-opensource-src-5.12.2/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp --- qtwayland-opensource-src-5.11.3/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -145,6 +145,7 @@ } void blit(QWaylandEglWindow *window) { + Q_ASSERT(window->wl_surface::isInitialized()); QOpenGLTextureCache *cache = QOpenGLTextureCache::cacheForContext(m_context->context()); QRect windowRect = window->window()->frameGeometry(); @@ -234,7 +235,7 @@ if (static_cast(QGuiApplicationPrivate::platformIntegration())->display()->supportsWindowDecoration()) fmt.setAlphaBufferSize(8); m_config = q_configFromGLFormat(m_eglDisplay, fmt); - m_format = q_glFormatFromConfig(m_eglDisplay, m_config); + m_format = q_glFormatFromConfig(m_eglDisplay, m_config, fmt); m_shareEGLContext = share ? static_cast(share)->eglContext() : EGL_NO_CONTEXT; QVector eglContextAttrs; @@ -399,10 +400,16 @@ QWaylandEglWindow *window = static_cast(surface); EGLSurface eglSurface = window->eglSurface(); - if (!window->needToUpdateContentFBO() && (eglSurface != EGL_NO_SURFACE && eglGetCurrentContext() == m_context && eglGetCurrentSurface(EGL_DRAW) == eglSurface)) + if (!window->needToUpdateContentFBO() && (eglSurface != EGL_NO_SURFACE)) { + if (!eglMakeCurrent(m_eglDisplay, eglSurface, eglSurface, m_context)) { + qWarning("QWaylandGLContext::makeCurrent: eglError: %x, this: %p \n", eglGetError(), this); + return false; + } return true; + } - window->setCanResize(false); + if (window->isExposed()) + window->setCanResize(false); // Core profiles mandate the use of VAOs when rendering. We would then need to use one // in DecorationsBlitter, but for that we would need a QOpenGLFunctions_3_2_Core instead // of the QOpenGLFunctions we use, but that would break when using a lower version context. @@ -412,7 +419,7 @@ window->createDecoration(); if (eglSurface == EGL_NO_SURFACE) { - window->updateSurface(window->isExposed()); + window->updateSurface(true); eglSurface = window->eglSurface(); } @@ -422,6 +429,9 @@ return false; } + //### setCurrentContext will be called in QOpenGLContext::makeCurrent after this function + // returns, but that's too late, as we need a current context in order to bind the content FBO. + QOpenGLContextPrivate::setCurrentContext(context()); window->bindContentFBO(); return true; diff -Nru qtwayland-opensource-src-5.11.3/src/hardwareintegration/client/xcomposite_share/xcomposite_share.pri qtwayland-opensource-src-5.12.2/src/hardwareintegration/client/xcomposite_share/xcomposite_share.pri --- qtwayland-opensource-src-5.11.3/src/hardwareintegration/client/xcomposite_share/xcomposite_share.pri 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/hardwareintegration/client/xcomposite_share/xcomposite_share.pri 2019-02-21 12:36:59.000000000 +0000 @@ -1,6 +1,6 @@ INCLUDEPATH += $$PWD -QMAKE_USE += xcomposite +QMAKE_USE += xcomposite x11 CONFIG += wayland-scanner WAYLANDCLIENTSOURCES += $$PWD/../../../extensions/xcomposite.xml diff -Nru qtwayland-opensource-src-5.11.3/src/hardwareintegration/compositor/dmabuf-server/dmabufserverbufferintegration.cpp qtwayland-opensource-src-5.12.2/src/hardwareintegration/compositor/dmabuf-server/dmabufserverbufferintegration.cpp --- qtwayland-opensource-src-5.11.3/src/hardwareintegration/compositor/dmabuf-server/dmabufserverbufferintegration.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/hardwareintegration/compositor/dmabuf-server/dmabufserverbufferintegration.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,218 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtWaylandCompositor module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "dmabufserverbufferintegration.h" + +#include +#include + +#include +#include + +QT_BEGIN_NAMESPACE + +DmaBufServerBuffer::DmaBufServerBuffer(DmaBufServerBufferIntegration *integration, const QImage &qimage, QtWayland::ServerBuffer::Format format) + : QtWayland::ServerBuffer(qimage.size(),format) + , m_integration(integration) +{ + m_format = format; + + EGLContext eglContext = eglGetCurrentContext(); + + m_texture = new QOpenGLTexture(qimage); + + m_image = m_integration->eglCreateImageKHR(eglContext, EGL_GL_TEXTURE_2D_KHR, (EGLClientBuffer)(unsigned long)m_texture->textureId(), nullptr); + + qCDebug(qLcWaylandCompositorHardwareIntegration) << "DmaBufServerBuffer created egl image" << m_image; + + int err = eglGetError(); + if (err != EGL_SUCCESS || m_image == EGL_NO_IMAGE_KHR) + qCWarning(qLcWaylandCompositorHardwareIntegration) << "DmaBufServerBuffer error creating EGL image" << hex << err; + + // TODO: formats with more than one plane + + int num_planes = 1; + + if (!m_integration->eglExportDMABUFImageQueryMESA(m_image, &m_fourcc_format, &num_planes, nullptr)) { + qCWarning(qLcWaylandCompositorHardwareIntegration) << "DmaBufServerBuffer: Failed to query egl image"; + qCDebug(qLcWaylandCompositorHardwareIntegration) << "error" << hex << eglGetError(); + } else { + qCDebug(qLcWaylandCompositorHardwareIntegration) << "num_planes" << num_planes << "fourcc_format" << m_fourcc_format; + if (num_planes != 1) { + qCWarning(qLcWaylandCompositorHardwareIntegration) << "DmaBufServerBuffer: multi-plane formats not supported"; + delete m_texture; + m_texture = nullptr; + m_integration->eglDestroyImageKHR(m_image); + m_image = EGL_NO_IMAGE_KHR; + return; + } + } + + if (!m_integration->eglExportDMABUFImageMESA(m_image, &m_fd, &m_stride, &m_offset)) { + qCWarning(qLcWaylandCompositorHardwareIntegration) << "DmaBufServerBuffer: Failed to export egl image. Error code" << hex << eglGetError(); + } else { + qCDebug(qLcWaylandCompositorHardwareIntegration) << "DmaBufServerBuffer exported egl image: fd" << m_fd << "stride" << m_stride << "offset" << m_offset; + m_texture->release(); + } +} + +DmaBufServerBuffer::~DmaBufServerBuffer() +{ + delete m_texture; + + int err; + m_integration->eglDestroyImageKHR(m_image); + if ((err = eglGetError()) != EGL_SUCCESS) + qCWarning(qLcWaylandCompositorHardwareIntegration) << "~DmaBufServerBuffer: eglDestroyImageKHR error" << hex << err; + + err = ::close(m_fd); + if (err) + perror("~DmaBufServerBuffer:: error closing fd"); + +} + +struct ::wl_resource *DmaBufServerBuffer::resourceForClient(struct ::wl_client *client) +{ + auto *bufferResource = resourceMap().value(client); + if (!bufferResource) { + auto integrationResource = m_integration->resourceMap().value(client); + if (!integrationResource) { + qCWarning(qLcWaylandCompositorHardwareIntegration) << "DmaBufServerBuffer::resourceForClient: Trying to get resource for ServerBuffer. But client is not bound to the qt_dmabuf_server_buffer interface"; + return nullptr; + } + struct ::wl_resource *dmabuf_integration_resource = integrationResource->handle; + + Resource *resource = add(client, 1); + m_integration->send_server_buffer_created(dmabuf_integration_resource, resource->handle, m_fd, m_size.width(), m_size.height(), m_stride, m_offset, m_fourcc_format); + return resource->handle; + } + return bufferResource->handle; +} + + +QOpenGLTexture *DmaBufServerBuffer::toOpenGlTexture() +{ + if (!m_texture) { + qCWarning(qLcWaylandCompositorHardwareIntegration) << "DmaBufServerBuffer::toOpenGlTexture: no texture defined"; + } + return m_texture; +} + +bool DmaBufServerBuffer::bufferInUse() +{ + return resourceMap().count() > 0; +} + +DmaBufServerBufferIntegration::DmaBufServerBufferIntegration() +{ +} + +DmaBufServerBufferIntegration::~DmaBufServerBufferIntegration() +{ +} + +void DmaBufServerBufferIntegration::initializeHardware(QWaylandCompositor *compositor) +{ + Q_ASSERT(QGuiApplication::platformNativeInterface()); + + m_egl_display = static_cast(QGuiApplication::platformNativeInterface()->nativeResourceForIntegration("egldisplay")); + if (!m_egl_display) { + qCWarning(qLcWaylandCompositorHardwareIntegration) << "Cannot initialize dmabuf server buffer integration. Missing egl display from platform plugin"; + return; + } + + const char *extensionString = eglQueryString(m_egl_display, EGL_EXTENSIONS); + if (!extensionString || !strstr(extensionString, "EGL_KHR_image")) { + qCWarning(qLcWaylandCompositorHardwareIntegration) << "Failed to initialize dmabuf server buffer integration. There is no EGL_KHR_image extension."; + return; + } + + m_egl_create_image = reinterpret_cast(eglGetProcAddress("eglCreateImageKHR")); + m_egl_destroy_image = reinterpret_cast(eglGetProcAddress("eglDestroyImageKHR")); + if (!m_egl_create_image || !m_egl_destroy_image) { + qCWarning(qLcWaylandCompositorHardwareIntegration) << "Failed to initialize dmabuf server buffer integration. Could not resolve eglCreateImageKHR or eglDestroyImageKHR"; + return; + } + + m_gl_egl_image_target_texture_2d = reinterpret_cast(eglGetProcAddress("glEGLImageTargetTexture2DOES")); + if (!m_gl_egl_image_target_texture_2d) { + qCWarning(qLcWaylandCompositorHardwareIntegration) << "Failed to initialize dmabuf server buffer integration. Could not find glEGLImageTargetTexture2DOES."; + return; + } + + m_egl_export_dmabuf_image_query = reinterpret_cast(eglGetProcAddress("eglExportDMABUFImageQueryMESA")); + if (!m_egl_export_dmabuf_image_query) { + qCWarning(qLcWaylandCompositorHardwareIntegration) << "Failed to initialize dmabuf server buffer integration. Could not find eglExportDMABUFImageQueryMESA."; + return; + } + + m_egl_export_dmabuf_image = reinterpret_cast(eglGetProcAddress("eglExportDMABUFImageMESA")); + if (!m_egl_export_dmabuf_image) { + qCWarning(qLcWaylandCompositorHardwareIntegration) << "Failed to initialize dmabuf server buffer integration. Could not find eglExportDMABUFImageMESA."; + return; + } + + QtWaylandServer::qt_dmabuf_server_buffer::init(compositor->display(), 1); +} + +bool DmaBufServerBufferIntegration::supportsFormat(QtWayland::ServerBuffer::Format format) const +{ + // TODO: 8-bit format support + switch (format) { + case QtWayland::ServerBuffer::RGBA32: + return true; + case QtWayland::ServerBuffer::A8: + return false; + default: + return false; + } +} + +QtWayland::ServerBuffer *DmaBufServerBufferIntegration::createServerBufferFromImage(const QImage &qimage, QtWayland::ServerBuffer::Format format) +{ + return new DmaBufServerBuffer(this, qimage, format); +} + +void DmaBufServerBuffer::server_buffer_release(Resource *resource) +{ + qCDebug(qLcWaylandCompositorHardwareIntegration) << "server_buffer RELEASE resource" << resource->handle << wl_resource_get_id(resource->handle) << "for client" << resource->client(); + wl_resource_destroy(resource->handle); +} + +QT_END_NAMESPACE diff -Nru qtwayland-opensource-src-5.11.3/src/hardwareintegration/compositor/dmabuf-server/dmabufserverbufferintegration.h qtwayland-opensource-src-5.12.2/src/hardwareintegration/compositor/dmabuf-server/dmabufserverbufferintegration.h --- qtwayland-opensource-src-5.11.3/src/hardwareintegration/compositor/dmabuf-server/dmabufserverbufferintegration.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/hardwareintegration/compositor/dmabuf-server/dmabufserverbufferintegration.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,195 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtWaylandCompositor module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef DMABUFSERVERBUFFERINTEGRATION_H +#define DMABUFSERVERBUFFERINTEGRATION_H + +#include + +#include "qwayland-server-qt-dmabuf-server-buffer.h" + +#include +#include +#include + +#include +#include + +#include +#include +#include + +#ifndef EGL_KHR_image +typedef void *EGLImageKHR; +typedef EGLImageKHR (EGLAPIENTRYP PFNEGLCREATEIMAGEKHRPROC) (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYIMAGEKHRPROC) (EGLDisplay dpy, EGLImageKHR image); +#endif + +#ifndef GL_OES_EGL_image +typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image); +#endif + +#ifndef EGL_MESA_image_dma_buf_export +typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC) (EGLDisplay dpy, EGLImageKHR image, int *fourcc, int *num_planes, EGLuint64KHR *modifiers); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDMABUFIMAGEMESAPROC) (EGLDisplay dpy, EGLImageKHR image, int *fds, EGLint *strides, EGLint *offsets); +#endif + +QT_BEGIN_NAMESPACE + +class DmaBufServerBufferIntegration; +class QImage; + +class DmaBufServerBuffer : public QtWayland::ServerBuffer, public QtWaylandServer::qt_server_buffer +{ +public: + DmaBufServerBuffer(DmaBufServerBufferIntegration *integration, const QImage &qimage, QtWayland::ServerBuffer::Format format); + ~DmaBufServerBuffer() override; + + struct ::wl_resource *resourceForClient(struct ::wl_client *) override; + QOpenGLTexture *toOpenGlTexture() override; + bool bufferInUse() override; + +protected: + void server_buffer_release(Resource *resource) override; + +private: + DmaBufServerBufferIntegration *m_integration = nullptr; + + EGLImageKHR m_image; + + int32_t m_offset; + int32_t m_stride; + QOpenGLTexture *m_texture = nullptr; + int m_fourcc_format; + int m_fd; +}; + +class DmaBufServerBufferIntegration : + public QtWayland::ServerBufferIntegration, + public QtWaylandServer::qt_dmabuf_server_buffer +{ +public: + DmaBufServerBufferIntegration(); + ~DmaBufServerBufferIntegration() override; + + void initializeHardware(QWaylandCompositor *) override; + + bool supportsFormat(QtWayland::ServerBuffer::Format format) const override; + QtWayland::ServerBuffer *createServerBufferFromImage(const QImage &qimage, QtWayland::ServerBuffer::Format format) override; + + EGLDisplay display() const { return m_egl_display; } + + inline EGLImageKHR eglCreateImageKHR(EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list); + inline EGLBoolean eglDestroyImageKHR(EGLImageKHR image); + + inline EGLBoolean eglExportDMABUFImageQueryMESA(EGLImageKHR image, + int *fourcc, + int *num_planes, + EGLuint64KHR *modifiers); + + inline EGLBoolean eglExportDMABUFImageMESA(EGLImageKHR image, + int *fds, + EGLint *strides, + EGLint *offsets); + + inline void glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image); + +private: + EGLDisplay m_egl_display; + + PFNEGLEXPORTDMABUFIMAGEMESAPROC m_egl_export_dmabuf_image = nullptr; + PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC m_egl_export_dmabuf_image_query = nullptr; + + PFNGLEGLIMAGETARGETTEXTURE2DOESPROC m_gl_egl_image_target_texture_2d = nullptr; + PFNEGLCREATEIMAGEKHRPROC m_egl_create_image = nullptr; + PFNEGLDESTROYIMAGEKHRPROC m_egl_destroy_image = nullptr; +}; + +EGLImageKHR DmaBufServerBufferIntegration::eglCreateImageKHR(EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list) +{ + if (!m_egl_create_image) { + qCWarning(qLcWaylandCompositorHardwareIntegration) << "DmaBufServerBufferIntegration: Trying to use unresolved function eglCreateImageKHR"; + return EGL_NO_IMAGE_KHR; + } + return m_egl_create_image(m_egl_display, ctx, target, buffer, attrib_list); +} + +EGLBoolean DmaBufServerBufferIntegration::eglDestroyImageKHR(EGLImageKHR image) +{ + if (!m_egl_destroy_image) { + qCWarning(qLcWaylandCompositorHardwareIntegration) << "DmaBufServerBufferIntegration: Trying to use unresolved function eglDestroyImageKHR"; + return false; + } + return m_egl_destroy_image(m_egl_display, image); +} + +EGLBoolean DmaBufServerBufferIntegration::eglExportDMABUFImageQueryMESA(EGLImageKHR image, + int *fourcc, + int *num_planes, + EGLuint64KHR *modifiers) +{ + if (m_egl_export_dmabuf_image_query) + return m_egl_export_dmabuf_image_query(m_egl_display, image, fourcc, num_planes, modifiers); + else + qCWarning(qLcWaylandCompositorHardwareIntegration) << "DmaBufServerBufferIntegration: Trying to use unresolved function eglExportDMABUFImageQueryMESA"; + return false; +} + +EGLBoolean DmaBufServerBufferIntegration::eglExportDMABUFImageMESA(EGLImageKHR image, + int *fds, + EGLint *strides, + EGLint *offsets) +{ + if (m_egl_export_dmabuf_image) + return m_egl_export_dmabuf_image(m_egl_display, image, fds, strides, offsets); + else + qCWarning(qLcWaylandCompositorHardwareIntegration) << "DmaBufServerBufferIntegration: Trying to use unresolved function eglExportDMABUFImageMESA"; + return false; +} + +void DmaBufServerBufferIntegration::glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image) +{ + if (m_gl_egl_image_target_texture_2d) + return m_gl_egl_image_target_texture_2d(target, image); + else + qCWarning(qLcWaylandCompositorHardwareIntegration) << "DmaBufServerBufferIntegration: Trying to use unresolved function glEGLImageTargetTexture2DOES"; +} +QT_END_NAMESPACE + +#endif diff -Nru qtwayland-opensource-src-5.11.3/src/hardwareintegration/compositor/dmabuf-server/dmabuf-server.pri qtwayland-opensource-src-5.12.2/src/hardwareintegration/compositor/dmabuf-server/dmabuf-server.pri --- qtwayland-opensource-src-5.11.3/src/hardwareintegration/compositor/dmabuf-server/dmabuf-server.pri 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/hardwareintegration/compositor/dmabuf-server/dmabuf-server.pri 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,13 @@ +INCLUDEPATH += $$PWD + +QMAKE_USE_PRIVATE += egl wayland-server + +SOURCES += \ + $$PWD/dmabufserverbufferintegration.cpp + + +HEADERS += \ + $$PWD/dmabufserverbufferintegration.h + +CONFIG += wayland-scanner +WAYLANDSERVERSOURCES += $$PWD/../../../extensions/qt-dmabuf-server-buffer.xml diff -Nru qtwayland-opensource-src-5.11.3/src/hardwareintegration/compositor/drm-egl-server/drmeglserverbufferintegration.cpp qtwayland-opensource-src-5.12.2/src/hardwareintegration/compositor/drm-egl-server/drmeglserverbufferintegration.cpp --- qtwayland-opensource-src-5.11.3/src/hardwareintegration/compositor/drm-egl-server/drmeglserverbufferintegration.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/hardwareintegration/compositor/drm-egl-server/drmeglserverbufferintegration.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -121,6 +121,11 @@ return m_texture; } +bool DrmEglServerBuffer::bufferInUse() +{ + return resourceMap().count() > 0; +} + DrmEglServerBufferIntegration::DrmEglServerBufferIntegration() { } diff -Nru qtwayland-opensource-src-5.11.3/src/hardwareintegration/compositor/drm-egl-server/drmeglserverbufferintegration.h qtwayland-opensource-src-5.12.2/src/hardwareintegration/compositor/drm-egl-server/drmeglserverbufferintegration.h --- qtwayland-opensource-src-5.11.3/src/hardwareintegration/compositor/drm-egl-server/drmeglserverbufferintegration.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/hardwareintegration/compositor/drm-egl-server/drmeglserverbufferintegration.h 2019-02-21 12:36:59.000000000 +0000 @@ -80,6 +80,7 @@ DrmEglServerBuffer(DrmEglServerBufferIntegration *integration, const QImage &qimage, QtWayland::ServerBuffer::Format format); struct ::wl_resource *resourceForClient(struct ::wl_client *) override; + bool bufferInUse() override; QOpenGLTexture *toOpenGlTexture() override; private: diff -Nru qtwayland-opensource-src-5.11.3/src/hardwareintegration/compositor/hardwarelayer/vsp2/vsp2hardwarelayerintegration.cpp qtwayland-opensource-src-5.12.2/src/hardwareintegration/compositor/hardwarelayer/vsp2/vsp2hardwarelayerintegration.cpp --- qtwayland-opensource-src-5.11.3/src/hardwareintegration/compositor/hardwarelayer/vsp2/vsp2hardwarelayerintegration.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/hardwareintegration/compositor/hardwarelayer/vsp2/vsp2hardwarelayerintegration.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -184,7 +184,7 @@ struct wl_kms_buffer *kmsBuffer = wayland_kms_buffer_get(wlBuffer); if (!kmsBuffer) - qWarning() << "Failed to get wl_kms_buffer for wl_buffer:" << wlBuffer->object.id; + qWarning() << "Failed to get wl_kms_buffer for wl_buffer:" << wl_resource_get_id(wlBuffer); return kmsBuffer; } diff -Nru qtwayland-opensource-src-5.11.3/src/hardwareintegration/compositor/shm-emulation-server/shmserverbufferintegration.cpp qtwayland-opensource-src-5.12.2/src/hardwareintegration/compositor/shm-emulation-server/shmserverbufferintegration.cpp --- qtwayland-opensource-src-5.11.3/src/hardwareintegration/compositor/shm-emulation-server/shmserverbufferintegration.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/hardwareintegration/compositor/shm-emulation-server/shmserverbufferintegration.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -102,6 +102,10 @@ return bufferResource->handle; } +bool ShmServerBuffer::bufferInUse() +{ + return resourceMap().count() > 0; +} QOpenGLTexture *ShmServerBuffer::toOpenGlTexture() { diff -Nru qtwayland-opensource-src-5.11.3/src/hardwareintegration/compositor/shm-emulation-server/shmserverbufferintegration.h qtwayland-opensource-src-5.12.2/src/hardwareintegration/compositor/shm-emulation-server/shmserverbufferintegration.h --- qtwayland-opensource-src-5.11.3/src/hardwareintegration/compositor/shm-emulation-server/shmserverbufferintegration.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/hardwareintegration/compositor/shm-emulation-server/shmserverbufferintegration.h 2019-02-21 12:36:59.000000000 +0000 @@ -64,6 +64,7 @@ ~ShmServerBuffer() override; struct ::wl_resource *resourceForClient(struct ::wl_client *) override; + bool bufferInUse() override; QOpenGLTexture *toOpenGlTexture() override; private: diff -Nru qtwayland-opensource-src-5.11.3/src/hardwareintegration/compositor/wayland-eglstream-controller/waylandeglstreamcontroller.cpp qtwayland-opensource-src-5.12.2/src/hardwareintegration/compositor/wayland-eglstream-controller/waylandeglstreamcontroller.cpp --- qtwayland-opensource-src-5.11.3/src/hardwareintegration/compositor/wayland-eglstream-controller/waylandeglstreamcontroller.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/hardwareintegration/compositor/wayland-eglstream-controller/waylandeglstreamcontroller.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtWaylandCompositor module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "waylandeglstreamcontroller.h" +#include "waylandeglstreamintegration.h" + +#include + +#include + +QT_BEGIN_NAMESPACE + + + +WaylandEglStreamController::WaylandEglStreamController(wl_display *display, WaylandEglStreamClientBufferIntegration *clientBufferIntegration) + : wl_eglstream_controller(display, 1 /*version*/) + , m_clientBufferIntegration(clientBufferIntegration) +{ +} + +void WaylandEglStreamController::eglstream_controller_attach_eglstream_consumer(Resource *resource, struct ::wl_resource *wl_surface, struct ::wl_resource *wl_buffer) +{ + Q_UNUSED(resource); + m_clientBufferIntegration->attachEglStreamConsumer(wl_surface, wl_buffer); +} + +QT_END_NAMESPACE diff -Nru qtwayland-opensource-src-5.11.3/src/hardwareintegration/compositor/wayland-eglstream-controller/waylandeglstreamcontroller.h qtwayland-opensource-src-5.12.2/src/hardwareintegration/compositor/wayland-eglstream-controller/waylandeglstreamcontroller.h --- qtwayland-opensource-src-5.11.3/src/hardwareintegration/compositor/wayland-eglstream-controller/waylandeglstreamcontroller.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/hardwareintegration/compositor/wayland-eglstream-controller/waylandeglstreamcontroller.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef WAYLANDEGLSTREAMCONTROLLER_H +#define WAYLANDEGLSTREAMCONTROLLER_H + +#include "qwayland-server-wl-eglstream-controller.h" + +#include +#include + +#include +#include +#include +#include +#include + +#include +#include + + +QT_BEGIN_NAMESPACE + +class QWaylandCompositor; +class QWaylandResource; +class WaylandEglStreamClientBufferIntegration; + +class WaylandEglStreamController : public QtWaylandServer::wl_eglstream_controller +{ +public: + explicit WaylandEglStreamController(wl_display *display, WaylandEglStreamClientBufferIntegration *clientBufferIntegration); + +protected: + void eglstream_controller_attach_eglstream_consumer(Resource *resource, struct ::wl_resource *wl_surface, struct ::wl_resource *wl_buffer) override; + +private: + WaylandEglStreamClientBufferIntegration *m_clientBufferIntegration; +}; + + +QT_END_NAMESPACE + +#endif // WAYLANDEGLSTREAMCONTROLLER_H diff -Nru qtwayland-opensource-src-5.11.3/src/hardwareintegration/compositor/wayland-eglstream-controller/wayland-eglstream-controller.pri qtwayland-opensource-src-5.12.2/src/hardwareintegration/compositor/wayland-eglstream-controller/wayland-eglstream-controller.pri --- qtwayland-opensource-src-5.11.3/src/hardwareintegration/compositor/wayland-eglstream-controller/wayland-eglstream-controller.pri 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/hardwareintegration/compositor/wayland-eglstream-controller/wayland-eglstream-controller.pri 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,16 @@ +INCLUDEPATH += $$PWD + +QMAKE_USE_PRIVATE += egl wayland-server wayland-egl + +CONFIG += wayland-scanner +WAYLANDSERVERSOURCES += $$PWD/../../../3rdparty/protocol/wl-eglstream-controller.xml + +QT += egl_support-private + +SOURCES += \ + $$PWD/waylandeglstreamintegration.cpp \ + $$PWD/waylandeglstreamcontroller.cpp + +HEADERS += \ + $$PWD/waylandeglstreamintegration.h \ + $$PWD/waylandeglstreamcontroller.h diff -Nru qtwayland-opensource-src-5.11.3/src/hardwareintegration/compositor/wayland-eglstream-controller/waylandeglstreamintegration.cpp qtwayland-opensource-src-5.12.2/src/hardwareintegration/compositor/wayland-eglstream-controller/waylandeglstreamintegration.cpp --- qtwayland-opensource-src-5.11.3/src/hardwareintegration/compositor/wayland-eglstream-controller/waylandeglstreamintegration.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/hardwareintegration/compositor/wayland-eglstream-controller/waylandeglstreamintegration.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,439 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtWaylandCompositor module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "waylandeglstreamintegration.h" +#include "waylandeglstreamcontroller.h" + +#include +#include +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include +#include + +#ifndef GL_TEXTURE_EXTERNAL_OES +#define GL_TEXTURE_EXTERNAL_OES 0x8D65 +#endif + +#ifndef EGL_WAYLAND_BUFFER_WL +#define EGL_WAYLAND_BUFFER_WL 0x31D5 +#endif + +#ifndef EGL_WAYLAND_EGLSTREAM_WL +#define EGL_WAYLAND_EGLSTREAM_WL 0x334B +#endif + +#ifndef EGL_WAYLAND_PLANE_WL +#define EGL_WAYLAND_PLANE_WL 0x31D6 +#endif + +#ifndef EGL_WAYLAND_Y_INVERTED_WL +#define EGL_WAYLAND_Y_INVERTED_WL 0x31DB +#endif + +#ifndef EGL_TEXTURE_RGB +#define EGL_TEXTURE_RGB 0x305D +#endif + +#ifndef EGL_TEXTURE_RGBA +#define EGL_TEXTURE_RGBA 0x305E +#endif + +#ifndef EGL_TEXTURE_EXTERNAL_WL +#define EGL_TEXTURE_EXTERNAL_WL 0x31DA +#endif + +#ifndef EGL_TEXTURE_Y_U_V_WL +#define EGL_TEXTURE_Y_U_V_WL 0x31D7 +#endif + +#ifndef EGL_TEXTURE_Y_UV_WL +#define EGL_TEXTURE_Y_UV_WL 0x31D8 +#endif + +#ifndef EGL_TEXTURE_Y_XUXV_WL +#define EGL_TEXTURE_Y_XUXV_WL 0x31D9 +#endif + +#ifndef EGL_PLATFORM_X11_KHR +#define EGL_PLATFORM_X11_KHR 0x31D5 +#endif + +QT_BEGIN_NAMESPACE + +/* Needed for compatibility with Mesa older than 10.0. */ +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYWAYLANDBUFFERWL_compat) (EGLDisplay dpy, struct wl_resource *buffer, EGLint attribute, EGLint *value); + +#ifndef EGL_WL_bind_wayland_display +typedef EGLBoolean (EGLAPIENTRYP PFNEGLBINDWAYLANDDISPLAYWL) (EGLDisplay dpy, struct wl_display *display); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLUNBINDWAYLANDDISPLAYWL) (EGLDisplay dpy, struct wl_display *display); +#endif + +static const char * +egl_error_string(EGLint code) +{ +#define MYERRCODE(x) case x: return #x; + switch (code) { + MYERRCODE(EGL_SUCCESS) + MYERRCODE(EGL_NOT_INITIALIZED) + MYERRCODE(EGL_BAD_ACCESS) + MYERRCODE(EGL_BAD_ALLOC) + MYERRCODE(EGL_BAD_ATTRIBUTE) + MYERRCODE(EGL_BAD_CONTEXT) + MYERRCODE(EGL_BAD_CONFIG) + MYERRCODE(EGL_BAD_CURRENT_SURFACE) + MYERRCODE(EGL_BAD_DISPLAY) + MYERRCODE(EGL_BAD_SURFACE) + MYERRCODE(EGL_BAD_MATCH) + MYERRCODE(EGL_BAD_PARAMETER) + MYERRCODE(EGL_BAD_NATIVE_PIXMAP) + MYERRCODE(EGL_BAD_NATIVE_WINDOW) + MYERRCODE(EGL_CONTEXT_LOST) + default: + return "unknown"; + } +#undef MYERRCODE +} + +struct BufferState +{ + BufferState() = default; + + EGLint egl_format = EGL_TEXTURE_EXTERNAL_WL; + QOpenGLTexture *textures[3] = {}; + EGLStreamKHR egl_stream = EGL_NO_STREAM_KHR; + + bool isYInverted = false; + QSize size; +}; + +class WaylandEglStreamClientBufferIntegrationPrivate +{ +public: + WaylandEglStreamClientBufferIntegrationPrivate() = default; + + bool ensureContext(); + bool initEglStream(WaylandEglStreamClientBuffer *buffer, struct ::wl_resource *bufferHandle); + void handleEglstreamTexture(WaylandEglStreamClientBuffer *buffer); + void deleteGLTextureWhenPossible(QOpenGLTexture *texture) { orphanedTextures << texture; } + void deleteOrphanedTextures(); + + EGLDisplay egl_display = EGL_NO_DISPLAY; + bool display_bound = false; + QOffscreenSurface *offscreenSurface = nullptr; + QOpenGLContext *localContext = nullptr; + QVector orphanedTextures; + + WaylandEglStreamController *eglStreamController = nullptr; + + PFNEGLBINDWAYLANDDISPLAYWL egl_bind_wayland_display = nullptr; + PFNEGLUNBINDWAYLANDDISPLAYWL egl_unbind_wayland_display = nullptr; + PFNEGLQUERYWAYLANDBUFFERWL_compat egl_query_wayland_buffer = nullptr; + + QEGLStreamConvenience *funcs = nullptr; + static WaylandEglStreamClientBufferIntegrationPrivate *get(WaylandEglStreamClientBufferIntegration *integration) { + return shuttingDown ? nullptr : integration->d_ptr.data(); + } + + static bool shuttingDown; +}; + +bool WaylandEglStreamClientBufferIntegrationPrivate::shuttingDown = false; + +void WaylandEglStreamClientBufferIntegrationPrivate::deleteOrphanedTextures() +{ + Q_ASSERT(QOpenGLContext::currentContext()); + qDeleteAll(orphanedTextures); + orphanedTextures.clear(); +} + +bool WaylandEglStreamClientBufferIntegrationPrivate::ensureContext() +{ + bool localContextNeeded = false; + if (!QOpenGLContext::currentContext()) { + if (!localContext && QOpenGLContext::globalShareContext()) { + localContext = new QOpenGLContext; + localContext->setShareContext(QOpenGLContext::globalShareContext()); + localContext->create(); + } + if (localContext) { + if (!offscreenSurface) { + offscreenSurface = new QOffscreenSurface; + offscreenSurface->setFormat(localContext->format()); + offscreenSurface->create(); + } + localContext->makeCurrent(offscreenSurface); + localContextNeeded = true; + } + } + return localContextNeeded; +} + + +bool WaylandEglStreamClientBufferIntegrationPrivate::initEglStream(WaylandEglStreamClientBuffer *buffer, wl_resource *bufferHandle) +{ + BufferState &state = *buffer->d; + state.egl_format = EGL_TEXTURE_EXTERNAL_WL; + state.isYInverted = false; + + EGLNativeFileDescriptorKHR streamFd = EGL_NO_FILE_DESCRIPTOR_KHR; + + if (egl_query_wayland_buffer(egl_display, bufferHandle, EGL_WAYLAND_BUFFER_WL, &streamFd)) { + state.egl_stream = funcs->create_stream_from_file_descriptor(egl_display, streamFd); + close(streamFd); + } else { + EGLAttrib stream_attribs[] = { + EGL_WAYLAND_EGLSTREAM_WL, (EGLAttrib)bufferHandle, + EGL_NONE + }; + state.egl_stream = funcs->create_stream_attrib_nv(egl_display, stream_attribs); + } + + if (state.egl_stream == EGL_NO_STREAM_KHR) { + qWarning("%s:%d: eglCreateStreamFromFileDescriptorKHR failed: 0x%x", Q_FUNC_INFO, __LINE__, eglGetError()); + return false; + } + + bool usingLocalContext = ensureContext(); + + Q_ASSERT(QOpenGLContext::currentContext()); + + auto texture = new QOpenGLTexture(static_cast(GL_TEXTURE_EXTERNAL_OES)); + texture->create(); + state.textures[0] = texture; // TODO: support multiple planes + + texture->bind(); + + auto newStream = funcs->stream_consumer_gltexture(egl_display, state.egl_stream); + if (usingLocalContext) + localContext->doneCurrent(); + + if (!newStream) { + EGLint code = eglGetError(); + qWarning() << "Could not initialize EGLStream:" << egl_error_string(code) << hex << (long)code; + funcs->destroy_stream(egl_display, state.egl_stream); + state.egl_stream = EGL_NO_STREAM_KHR; + return false; + } + return true; +} + +void WaylandEglStreamClientBufferIntegrationPrivate::handleEglstreamTexture(WaylandEglStreamClientBuffer *buffer) +{ + bool usingLocalContext = ensureContext(); + + BufferState &state = *buffer->d; + auto texture = state.textures[0]; + + // EGLStream requires calling acquire on every frame. + texture->bind(); + EGLint stream_state; + funcs->query_stream(egl_display, state.egl_stream, EGL_STREAM_STATE_KHR, &stream_state); + + if (stream_state == EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR) { + if (funcs->stream_consumer_acquire(egl_display, state.egl_stream) != EGL_TRUE) + qWarning("%s:%d: eglStreamConsumerAcquireKHR failed: 0x%x", Q_FUNC_INFO, __LINE__, eglGetError()); + } + + if (usingLocalContext) + localContext->doneCurrent(); +} + + +WaylandEglStreamClientBufferIntegration::WaylandEglStreamClientBufferIntegration() + : d_ptr(new WaylandEglStreamClientBufferIntegrationPrivate) +{ +} + +WaylandEglStreamClientBufferIntegration::~WaylandEglStreamClientBufferIntegration() +{ + WaylandEglStreamClientBufferIntegrationPrivate::shuttingDown = true; +} + +void WaylandEglStreamClientBufferIntegration::attachEglStreamConsumer(struct ::wl_resource *wl_surface, struct ::wl_resource *wl_buffer) +{ + Q_D(WaylandEglStreamClientBufferIntegration); + Q_UNUSED(wl_surface); + + // NOTE: must use getBuffer to create the buffer here, so the buffer will end up in the buffer manager's hash + + auto *bufferManager = QWaylandCompositorPrivate::get(m_compositor)->bufferManager(); + auto *clientBuffer = static_cast(bufferManager->getBuffer(wl_buffer)); + + d->initEglStream(clientBuffer, wl_buffer); +} + +void WaylandEglStreamClientBufferIntegration::initializeHardware(struct wl_display *display) +{ + Q_D(WaylandEglStreamClientBufferIntegration); + + const bool ignoreBindDisplay = !qgetenv("QT_WAYLAND_IGNORE_BIND_DISPLAY").isEmpty(); + + QPlatformNativeInterface *nativeInterface = QGuiApplication::platformNativeInterface(); + if (!nativeInterface) { + qWarning("QtCompositor: Failed to initialize EGL display. No native platform interface available."); + return; + } + + d->egl_display = nativeInterface->nativeResourceForIntegration("EglDisplay"); + if (!d->egl_display) { + qWarning("QtCompositor: Failed to initialize EGL display. Could not get EglDisplay for window."); + return; + } + + const char *extensionString = eglQueryString(d->egl_display, EGL_EXTENSIONS); + if ((!extensionString || !strstr(extensionString, "EGL_WL_bind_wayland_display")) && !ignoreBindDisplay) { + qWarning("QtCompositor: Failed to initialize EGL display. There is no EGL_WL_bind_wayland_display extension."); + return; + } + + d->egl_bind_wayland_display = reinterpret_cast(eglGetProcAddress("eglBindWaylandDisplayWL")); + d->egl_unbind_wayland_display = reinterpret_cast(eglGetProcAddress("eglUnbindWaylandDisplayWL")); + if ((!d->egl_bind_wayland_display || !d->egl_unbind_wayland_display) && !ignoreBindDisplay) { + qWarning("QtCompositor: Failed to initialize EGL display. Could not find eglBindWaylandDisplayWL and eglUnbindWaylandDisplayWL."); + return; + } + + d->egl_query_wayland_buffer = reinterpret_cast(eglGetProcAddress("eglQueryWaylandBufferWL")); + if (!d->egl_query_wayland_buffer) { + qWarning("QtCompositor: Failed to initialize EGL display. Could not find eglQueryWaylandBufferWL."); + return; + } + + if (d->egl_bind_wayland_display && d->egl_unbind_wayland_display) { + d->display_bound = d->egl_bind_wayland_display(d->egl_display, display); + if (!d->display_bound) { + if (!ignoreBindDisplay) { + qWarning("QtCompositor: Failed to initialize EGL display. Could not bind Wayland display."); + return; + } else { + qWarning("QtCompositor: Could not bind Wayland display. Ignoring."); + } + } + } + + d->eglStreamController = new WaylandEglStreamController(display, this); + + d->funcs = new QEGLStreamConvenience; + d->funcs->initialize(d->egl_display); +} + +QtWayland::ClientBuffer *WaylandEglStreamClientBufferIntegration::createBufferFor(wl_resource *buffer) +{ + if (wl_shm_buffer_get(buffer)) + return nullptr; + + return new WaylandEglStreamClientBuffer(this, buffer); +} + + +WaylandEglStreamClientBuffer::WaylandEglStreamClientBuffer(WaylandEglStreamClientBufferIntegration *integration, wl_resource *buffer) + : ClientBuffer(buffer) + , m_integration(integration) +{ + auto *p = WaylandEglStreamClientBufferIntegrationPrivate::get(m_integration); + d = new BufferState; + if (buffer && !wl_shm_buffer_get(buffer)) { + EGLint width, height; + p->egl_query_wayland_buffer(p->egl_display, buffer, EGL_WIDTH, &width); + p->egl_query_wayland_buffer(p->egl_display, buffer, EGL_HEIGHT, &height); + d->size = QSize(width, height); + } +} + +WaylandEglStreamClientBuffer::~WaylandEglStreamClientBuffer() +{ + auto *p = WaylandEglStreamClientBufferIntegrationPrivate::get(m_integration); + + if (p) { + if (d->egl_stream) + p->funcs->destroy_stream(p->egl_display, d->egl_stream); + + for (auto *texture : d->textures) + p->deleteGLTextureWhenPossible(texture); + } + delete d; +} + + +QWaylandBufferRef::BufferFormatEgl WaylandEglStreamClientBuffer::bufferFormatEgl() const +{ + return QWaylandBufferRef::BufferFormatEgl_EXTERNAL_OES; +} + + +QSize WaylandEglStreamClientBuffer::size() const +{ + return d->size; +} + +QWaylandSurface::Origin WaylandEglStreamClientBuffer::origin() const +{ + return d->isYInverted ? QWaylandSurface::OriginTopLeft : QWaylandSurface::OriginBottomLeft; +} + +QOpenGLTexture *WaylandEglStreamClientBuffer::toOpenGlTexture(int plane) +{ + auto *p = WaylandEglStreamClientBufferIntegrationPrivate::get(m_integration); + // At this point we should have a valid OpenGL context, so it's safe to destroy textures + p->deleteOrphanedTextures(); + + if (!m_buffer) + return nullptr; + + return d->textures[plane]; +} + +void WaylandEglStreamClientBuffer::setCommitted(QRegion &damage) +{ + ClientBuffer::setCommitted(damage); + auto *p = WaylandEglStreamClientBufferIntegrationPrivate::get(m_integration); + p->handleEglstreamTexture(this); +} + +QT_END_NAMESPACE diff -Nru qtwayland-opensource-src-5.11.3/src/hardwareintegration/compositor/wayland-eglstream-controller/waylandeglstreamintegration.h qtwayland-opensource-src-5.12.2/src/hardwareintegration/compositor/wayland-eglstream-controller/waylandeglstreamintegration.h --- qtwayland-opensource-src-5.11.3/src/hardwareintegration/compositor/wayland-eglstream-controller/waylandeglstreamintegration.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/hardwareintegration/compositor/wayland-eglstream-controller/waylandeglstreamintegration.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,93 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtWaylandCompositor module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef WAYLANDEGLSTREAMINTEGRATION_H +#define WAYLANDEGLSTREAMINTEGRATION_H + +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class WaylandEglStreamClientBufferIntegrationPrivate; + +class WaylandEglStreamClientBufferIntegration : public QtWayland::ClientBufferIntegration +{ + Q_DECLARE_PRIVATE(WaylandEglStreamClientBufferIntegration) +public: + WaylandEglStreamClientBufferIntegration(); + ~WaylandEglStreamClientBufferIntegration() override; + + void initializeHardware(struct ::wl_display *display) override; + + QtWayland::ClientBuffer *createBufferFor(wl_resource *buffer) override; + + void attachEglStreamConsumer(struct ::wl_resource *wl_surface, struct ::wl_resource *wl_buffer); + +private: + Q_DISABLE_COPY(WaylandEglStreamClientBufferIntegration) + QScopedPointer d_ptr; +}; + +struct BufferState; + +class WaylandEglStreamClientBuffer : public QtWayland::ClientBuffer +{ +public: + ~WaylandEglStreamClientBuffer() override; + + QWaylandBufferRef::BufferFormatEgl bufferFormatEgl() const override; + QSize size() const override; + QWaylandSurface::Origin origin() const override; + QOpenGLTexture *toOpenGlTexture(int plane) override; + void setCommitted(QRegion &damage) override; + +private: + friend class WaylandEglStreamClientBufferIntegration; + friend class WaylandEglStreamClientBufferIntegrationPrivate; + + WaylandEglStreamClientBuffer(WaylandEglStreamClientBufferIntegration* integration, wl_resource *bufferResource); + + BufferState *d = nullptr; + WaylandEglStreamClientBufferIntegration *m_integration = nullptr; +}; + +QT_END_NAMESPACE + +#endif // WAYLANDEGLSTREAMINTEGRATION_H diff -Nru qtwayland-opensource-src-5.11.3/src/imports/compositor/compositor.pro qtwayland-opensource-src-5.12.2/src/imports/compositor/compositor.pro --- qtwayland-opensource-src-5.11.3/src/imports/compositor/compositor.pro 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/imports/compositor/compositor.pro 2019-02-21 12:36:59.000000000 +0000 @@ -1,7 +1,7 @@ CXX_MODULE = qml TARGET = qwaylandcompositorplugin TARGETPATH = QtWayland/Compositor -IMPORT_VERSION = 1.0 +IMPORT_VERSION = 1.3 HEADERS += \ qwaylandmousetracker_p.h diff -Nru qtwayland-opensource-src-5.11.3/src/imports/compositor/plugins.qmltypes qtwayland-opensource-src-5.12.2/src/imports/compositor/plugins.qmltypes --- qtwayland-opensource-src-5.11.3/src/imports/compositor/plugins.qmltypes 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/imports/compositor/plugins.qmltypes 2019-02-21 12:36:59.000000000 +0000 @@ -4,10 +4,10 @@ // It is used for QML tooling purposes only. // // This file was auto-generated by: -// 'qmlplugindump -nonrelocatable QtWayland.Compositor 1.0' +// 'qmlplugindump -nonrelocatable QtWayland.Compositor 1.3' Module { - dependencies: ["QtQuick 2.0", "QtQuick.Window 2.2"] + dependencies: ["QtQuick 2.0", "QtQuick.Window 2.11"] Component { name: "QWaylandClient" prototype: "QObject" @@ -79,6 +79,10 @@ } Method { name: "processWaylandEvents" } Method { + name: "addSocketDescriptor" + Parameter { name: "fd"; type: "int" } + } + Method { name: "destroyClientForSurface" Parameter { name: "surface"; type: "QWaylandSurface"; isPointer: true } } @@ -140,9 +144,11 @@ } Component { name: "QWaylandIviSurface" + defaultProperty: "data" prototype: "QWaylandShellSurface" exports: ["QtWayland.Compositor/IviSurface 1.0"] exportMetaObjectRevisions: [0] + Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } Property { name: "surface"; type: "QWaylandSurface"; isReadonly: true; isPointer: true } Property { name: "iviId"; type: "uint"; isReadonly: true } Method { @@ -159,9 +165,11 @@ } Component { name: "QWaylandKeymap" + defaultProperty: "data" prototype: "QObject" exports: ["QtWayland.Compositor/WaylandKeymap 1.0"] exportMetaObjectRevisions: [0] + Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } Property { name: "layout"; type: "string" } Property { name: "variant"; type: "string" } Property { name: "options"; type: "string" } @@ -262,6 +270,13 @@ Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } } Component { + name: "QWaylandQuickHardwareLayer" + prototype: "QObject" + exports: ["QtWayland.Compositor/WaylandHardwareLayer 1.2"] + exportMetaObjectRevisions: [0] + Property { name: "stackingLevel"; type: "int" } + } + Component { name: "QWaylandQuickItem" defaultProperty: "data" prototype: "QQuickItem" @@ -297,6 +312,15 @@ Method { name: "raise" } Method { name: "lower" } Method { + name: "sendMouseMoveEvent" + Parameter { name: "position"; type: "QPointF" } + Parameter { name: "seat"; type: "QWaylandSeat"; isPointer: true } + } + Method { + name: "sendMouseMoveEvent" + Parameter { name: "position"; type: "QPointF" } + } + Method { name: "mapToSurface" type: "QPointF" Parameter { name: "point"; type: "QPointF" } @@ -307,12 +331,15 @@ Parameter { name: "query"; type: "Qt::InputMethodQuery" } Parameter { name: "argument"; type: "QVariant" } } + Method { name: "setPrimary" } } Component { name: "QWaylandQuickOutput" + defaultProperty: "data" prototype: "QWaylandOutput" exports: ["QtWayland.Compositor/WaylandOutput 1.0"] exportMetaObjectRevisions: [0] + Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } Property { name: "automaticFrameCallback"; type: "bool" } Method { name: "updateStarted" } } @@ -324,12 +351,15 @@ exportMetaObjectRevisions: [0] Property { name: "shellSurface"; type: "QWaylandShellSurface"; isPointer: true } Property { name: "moveItem"; type: "QQuickItem"; isPointer: true } + Property { name: "autoCreatePopupItems"; type: "bool" } } Component { name: "QWaylandQuickSurface" + defaultProperty: "data" prototype: "QWaylandSurface" exports: ["QtWayland.Compositor/WaylandSurface 1.0"] exportMetaObjectRevisions: [0] + Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } Property { name: "useTextureAlpha"; type: "bool" } Property { name: "clientRenderingEnabled"; type: "bool" } } @@ -372,6 +402,40 @@ Parameter { name: "hotspotX"; type: "int" } Parameter { name: "hotspotY"; type: "int" } } + Method { + name: "sendKeyEvent" + Parameter { name: "qtKey"; type: "int" } + Parameter { name: "pressed"; type: "bool" } + } + Method { + name: "sendTouchPointPressed" + type: "uint" + Parameter { name: "surface"; type: "QWaylandSurface"; isPointer: true } + Parameter { name: "id"; type: "int" } + Parameter { name: "position"; type: "QPointF" } + } + Method { + name: "sendTouchPointReleased" + type: "uint" + Parameter { name: "surface"; type: "QWaylandSurface"; isPointer: true } + Parameter { name: "id"; type: "int" } + Parameter { name: "position"; type: "QPointF" } + } + Method { + name: "sendTouchPointMoved" + type: "uint" + Parameter { name: "surface"; type: "QWaylandSurface"; isPointer: true } + Parameter { name: "id"; type: "int" } + Parameter { name: "position"; type: "QPointF" } + } + Method { + name: "sendTouchFrameEvent" + Parameter { name: "client"; type: "QWaylandClient"; isPointer: true } + } + Method { + name: "sendTouchCancelEvent" + Parameter { name: "client"; type: "QWaylandClient"; isPointer: true } + } } Component { name: "QWaylandShell" @@ -501,6 +565,7 @@ } Component { name: "QWaylandWlShellSurface" + defaultProperty: "data" prototype: "QWaylandShellSurface" exports: ["QtWayland.Compositor/WlShellSurface 1.0"] exportMetaObjectRevisions: [0] @@ -527,6 +592,7 @@ "BottomRightEdge": 10 } } + Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } Property { name: "surface"; type: "QWaylandSurface"; isReadonly: true; isPointer: true } Property { name: "shell"; type: "QWaylandWlShell"; isReadonly: true; isPointer: true } Property { name: "title"; type: "string"; isReadonly: true } @@ -586,8 +652,138 @@ Method { name: "sendPopupDone" } } Component { + name: "QWaylandXdgDecorationManagerV1" + prototype: "QWaylandCompositorExtension" + Property { name: "preferredMode"; type: "QWaylandXdgToplevel::DecorationMode" } + } + Component { + name: "QWaylandXdgDecorationManagerV1QuickExtension" + defaultProperty: "data" + prototype: "QWaylandXdgDecorationManagerV1" + exports: ["QtWayland.Compositor/XdgDecorationManagerV1 1.3"] + exportMetaObjectRevisions: [0] + Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } + } + Component { + name: "QWaylandXdgPopup" + prototype: "QObject" + exports: ["QtWayland.Compositor/XdgPopup 1.3"] + isCreatable: false + exportMetaObjectRevisions: [0] + Property { name: "xdgSurface"; type: "QWaylandXdgSurface"; isReadonly: true; isPointer: true } + Property { + name: "parentXdgSurface" + type: "QWaylandXdgSurface" + isReadonly: true + isPointer: true + } + Property { name: "configuredGeometry"; type: "QRect"; isReadonly: true } + Property { name: "anchorRect"; type: "QRect"; isReadonly: true } + Property { name: "anchorEdges"; type: "Qt::Edges"; isReadonly: true } + Property { name: "gravityEdges"; type: "Qt::Edges"; isReadonly: true } + Property { name: "slideConstraints"; type: "Qt::Orientations"; isReadonly: true } + Property { name: "flipConstraints"; type: "Qt::Orientations"; isReadonly: true } + Property { name: "resizeConstraints"; type: "Qt::Orientations"; isReadonly: true } + Property { name: "offset"; type: "QPoint"; isReadonly: true } + Property { name: "positionerSize"; type: "QSize"; isReadonly: true } + Property { name: "unconstrainedPosition"; type: "QPoint"; isReadonly: true } + Method { + name: "sendConfigure" + type: "uint" + Parameter { name: "geometry"; type: "QRect" } + } + } + Component { + name: "QWaylandXdgPopupV5" + defaultProperty: "data" + prototype: "QWaylandShellSurface" + exports: ["QtWayland.Compositor/XdgPopupV5 1.0"] + exportMetaObjectRevisions: [0] + Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "shell"; type: "QWaylandXdgShellV5"; isReadonly: true; isPointer: true } + Property { name: "surface"; type: "QWaylandSurface"; isReadonly: true; isPointer: true } + Property { name: "parentSurface"; type: "QWaylandSurface"; isReadonly: true; isPointer: true } + Property { name: "position"; type: "QPoint"; isReadonly: true } + Method { + name: "initialize" + Parameter { name: "shell"; type: "QWaylandXdgShellV5"; isPointer: true } + Parameter { name: "surface"; type: "QWaylandSurface"; isPointer: true } + Parameter { name: "parentSurface"; type: "QWaylandSurface"; isPointer: true } + Parameter { name: "position"; type: "QPoint" } + Parameter { name: "resource"; type: "QWaylandResource" } + } + Method { name: "sendPopupDone" } + } + Component { + name: "QWaylandXdgPopupV6" + prototype: "QObject" + exports: ["QtWayland.Compositor/XdgPopupV6 1.1"] + isCreatable: false + exportMetaObjectRevisions: [0] + Property { name: "xdgSurface"; type: "QWaylandXdgSurfaceV6"; isReadonly: true; isPointer: true } + Property { + name: "parentXdgSurface" + type: "QWaylandXdgSurfaceV6" + isReadonly: true + isPointer: true + } + Property { name: "configuredGeometry"; type: "QRect"; isReadonly: true } + Property { name: "anchorRect"; type: "QRect"; isReadonly: true } + Property { name: "anchorEdges"; type: "Qt::Edges"; isReadonly: true } + Property { name: "gravityEdges"; type: "Qt::Edges"; isReadonly: true } + Property { name: "slideConstraints"; type: "Qt::Orientations"; isReadonly: true } + Property { name: "flipConstraints"; type: "Qt::Orientations"; isReadonly: true } + Property { name: "resizeConstraints"; type: "Qt::Orientations"; isReadonly: true } + Property { name: "offset"; type: "QPoint"; isReadonly: true } + Property { name: "positionerSize"; type: "QSize"; isReadonly: true } + Property { name: "unconstrainedPosition"; type: "QPoint"; isReadonly: true } + Method { + name: "sendConfigure" + type: "uint" + Parameter { name: "geometry"; type: "QRect" } + } + } + Component { + name: "QWaylandXdgShell" + prototype: "QWaylandShell" + Signal { + name: "xdgSurfaceCreated" + Parameter { name: "xdgSurface"; type: "QWaylandXdgSurface"; isPointer: true } + } + Signal { + name: "toplevelCreated" + Parameter { name: "toplevel"; type: "QWaylandXdgToplevel"; isPointer: true } + Parameter { name: "xdgSurface"; type: "QWaylandXdgSurface"; isPointer: true } + } + Signal { + name: "popupCreated" + Parameter { name: "popup"; type: "QWaylandXdgPopup"; isPointer: true } + Parameter { name: "xdgSurface"; type: "QWaylandXdgSurface"; isPointer: true } + } + Signal { + name: "pong" + Parameter { name: "serial"; type: "uint" } + } + Method { + name: "ping" + type: "uint" + Parameter { name: "client"; type: "QWaylandClient"; isPointer: true } + } + } + Component { + name: "QWaylandXdgShellQuickExtension" + defaultProperty: "data" + prototype: "QWaylandXdgShell" + exports: ["QtWayland.Compositor/XdgShell 1.3"] + exportMetaObjectRevisions: [0] + Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } + } + Component { name: "QWaylandXdgShellV5" prototype: "QWaylandShell" + exports: ["QtWayland.Compositor/XdgShellV5Base 1.0"] + isCreatable: false + exportMetaObjectRevisions: [0] Signal { name: "xdgSurfaceRequested" Parameter { name: "surface"; type: "QWaylandSurface"; isPointer: true } @@ -629,7 +825,64 @@ Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } } Component { + name: "QWaylandXdgShellV6" + prototype: "QWaylandShell" + Signal { + name: "xdgSurfaceCreated" + Parameter { name: "xdgSurface"; type: "QWaylandXdgSurfaceV6"; isPointer: true } + } + Signal { + name: "toplevelCreated" + Parameter { name: "toplevel"; type: "QWaylandXdgToplevelV6"; isPointer: true } + Parameter { name: "xdgSurface"; type: "QWaylandXdgSurfaceV6"; isPointer: true } + } + Signal { + name: "popupCreated" + Parameter { name: "popup"; type: "QWaylandXdgPopupV6"; isPointer: true } + Parameter { name: "xdgSurface"; type: "QWaylandXdgSurfaceV6"; isPointer: true } + } + Signal { + name: "pong" + Parameter { name: "serial"; type: "uint" } + } + Method { + name: "ping" + type: "uint" + Parameter { name: "client"; type: "QWaylandClient"; isPointer: true } + } + } + Component { + name: "QWaylandXdgShellV6QuickExtension" + defaultProperty: "data" + prototype: "QWaylandXdgShellV6" + exports: ["QtWayland.Compositor/XdgShellV6 1.1"] + exportMetaObjectRevisions: [0] + Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } + } + Component { + name: "QWaylandXdgSurface" + defaultProperty: "data" + prototype: "QWaylandShellSurface" + exports: ["QtWayland.Compositor/XdgSurface 1.3"] + exportMetaObjectRevisions: [0] + Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "shell"; type: "QWaylandXdgShell"; isReadonly: true; isPointer: true } + Property { name: "surface"; type: "QWaylandSurface"; isReadonly: true; isPointer: true } + Property { name: "toplevel"; type: "QWaylandXdgToplevel"; isReadonly: true; isPointer: true } + Property { name: "popup"; type: "QWaylandXdgPopup"; isReadonly: true; isPointer: true } + Property { name: "windowGeometry"; type: "QRect"; isReadonly: true } + Signal { name: "toplevelCreated" } + Signal { name: "popupCreated" } + Method { + name: "initialize" + Parameter { name: "xdgShell"; type: "QWaylandXdgShell"; isPointer: true } + Parameter { name: "surface"; type: "QWaylandSurface"; isPointer: true } + Parameter { name: "resource"; type: "QWaylandResource" } + } + } + Component { name: "QWaylandXdgSurfaceV5" + defaultProperty: "data" prototype: "QWaylandShellSurface" exports: ["QtWayland.Compositor/XdgSurfaceV5 1.0"] exportMetaObjectRevisions: [0] @@ -656,6 +909,7 @@ "BottomRightEdge": 10 } } + Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } Property { name: "shell"; type: "QWaylandXdgShellV5"; isReadonly: true; isPointer: true } Property { name: "surface"; type: "QWaylandSurface"; isReadonly: true; isPointer: true } Property { @@ -749,6 +1003,212 @@ } } Component { + name: "QWaylandXdgSurfaceV6" + defaultProperty: "data" + prototype: "QWaylandShellSurface" + exports: ["QtWayland.Compositor/XdgSurfaceV6 1.1"] + exportMetaObjectRevisions: [0] + Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } + Property { name: "shell"; type: "QWaylandXdgShellV6"; isReadonly: true; isPointer: true } + Property { name: "surface"; type: "QWaylandSurface"; isReadonly: true; isPointer: true } + Property { name: "toplevel"; type: "QWaylandXdgToplevelV6"; isReadonly: true; isPointer: true } + Property { name: "popup"; type: "QWaylandXdgPopupV6"; isReadonly: true; isPointer: true } + Property { name: "windowGeometry"; type: "QRect"; isReadonly: true } + Signal { name: "toplevelCreated" } + Signal { name: "popupCreated" } + Method { + name: "initialize" + Parameter { name: "xdgShell"; type: "QWaylandXdgShellV6"; isPointer: true } + Parameter { name: "surface"; type: "QWaylandSurface"; isPointer: true } + Parameter { name: "resource"; type: "QWaylandResource" } + } + } + Component { + name: "QWaylandXdgToplevel" + prototype: "QObject" + exports: ["QtWayland.Compositor/XdgToplevel 1.3"] + isCreatable: false + exportMetaObjectRevisions: [0] + Enum { + name: "State" + values: { + "MaximizedState": 1, + "FullscreenState": 2, + "ResizingState": 3, + "ActivatedState": 4 + } + } + Enum { + name: "DecorationMode" + values: { + "ClientSideDecoration": 1, + "ServerSideDecoration": 2 + } + } + Property { name: "xdgSurface"; type: "QWaylandXdgSurface"; isReadonly: true; isPointer: true } + Property { + name: "parentToplevel" + type: "QWaylandXdgToplevel" + isReadonly: true + isPointer: true + } + Property { name: "title"; type: "string"; isReadonly: true } + Property { name: "appId"; type: "string"; isReadonly: true } + Property { name: "maxSize"; type: "QSize"; isReadonly: true } + Property { name: "minSize"; type: "QSize"; isReadonly: true } + Property { name: "states"; type: "QList"; isReadonly: true } + Property { name: "maximized"; type: "bool"; isReadonly: true } + Property { name: "fullscreen"; type: "bool"; isReadonly: true } + Property { name: "resizing"; type: "bool"; isReadonly: true } + Property { name: "activated"; type: "bool"; isReadonly: true } + Property { name: "decorationMode"; type: "DecorationMode"; isReadonly: true } + Signal { + name: "startMove" + Parameter { name: "seat"; type: "QWaylandSeat"; isPointer: true } + } + Signal { + name: "startResize" + Parameter { name: "seat"; type: "QWaylandSeat"; isPointer: true } + Parameter { name: "edges"; type: "Qt::Edges" } + } + Signal { + name: "showWindowMenu" + Parameter { name: "seat"; type: "QWaylandSeat"; isPointer: true } + Parameter { name: "localSurfacePosition"; type: "QPoint" } + } + Signal { name: "setMaximized" } + Signal { name: "unsetMaximized" } + Signal { + name: "setFullscreen" + Parameter { name: "output"; type: "QWaylandOutput"; isPointer: true } + } + Signal { name: "unsetFullscreen" } + Signal { name: "setMinimized" } + Method { + name: "sizeForResize" + type: "QSize" + Parameter { name: "size"; type: "QSizeF" } + Parameter { name: "delta"; type: "QPointF" } + Parameter { name: "edges"; type: "Qt::Edges" } + } + Method { + name: "sendConfigure" + type: "uint" + Parameter { name: "size"; type: "QSize" } + Parameter { name: "states"; type: "QVector" } + } + Method { name: "sendClose" } + Method { + name: "sendMaximized" + type: "uint" + Parameter { name: "size"; type: "QSize" } + } + Method { + name: "sendUnmaximized" + type: "uint" + Parameter { name: "size"; type: "QSize" } + } + Method { name: "sendUnmaximized"; type: "uint" } + Method { + name: "sendFullscreen" + type: "uint" + Parameter { name: "size"; type: "QSize" } + } + Method { + name: "sendResizing" + type: "uint" + Parameter { name: "maxSize"; type: "QSize" } + } + } + Component { + name: "QWaylandXdgToplevelV6" + prototype: "QObject" + exports: ["QtWayland.Compositor/XdgToplevelV6 1.1"] + isCreatable: false + exportMetaObjectRevisions: [0] + Enum { + name: "State" + values: { + "MaximizedState": 1, + "FullscreenState": 2, + "ResizingState": 3, + "ActivatedState": 4 + } + } + Property { + name: "parentToplevel" + type: "QWaylandXdgToplevelV6" + isReadonly: true + isPointer: true + } + Property { name: "title"; type: "string"; isReadonly: true } + Property { name: "appId"; type: "string"; isReadonly: true } + Property { name: "maxSize"; type: "QSize"; isReadonly: true } + Property { name: "minSize"; type: "QSize"; isReadonly: true } + Property { name: "states"; type: "QList"; isReadonly: true } + Property { name: "maximized"; type: "bool"; isReadonly: true } + Property { name: "fullscreen"; type: "bool"; isReadonly: true } + Property { name: "resizing"; type: "bool"; isReadonly: true } + Property { name: "activated"; type: "bool"; isReadonly: true } + Signal { + name: "startMove" + Parameter { name: "seat"; type: "QWaylandSeat"; isPointer: true } + } + Signal { + name: "startResize" + Parameter { name: "seat"; type: "QWaylandSeat"; isPointer: true } + Parameter { name: "edges"; type: "Qt::Edges" } + } + Signal { + name: "showWindowMenu" + Parameter { name: "seat"; type: "QWaylandSeat"; isPointer: true } + Parameter { name: "localSurfacePosition"; type: "QPoint" } + } + Signal { name: "setMaximized" } + Signal { name: "unsetMaximized" } + Signal { + name: "setFullscreen" + Parameter { name: "output"; type: "QWaylandOutput"; isPointer: true } + } + Signal { name: "unsetFullscreen" } + Signal { name: "setMinimized" } + Method { + name: "sizeForResize" + type: "QSize" + Parameter { name: "size"; type: "QSizeF" } + Parameter { name: "delta"; type: "QPointF" } + Parameter { name: "edges"; type: "Qt::Edges" } + } + Method { + name: "sendConfigure" + type: "uint" + Parameter { name: "size"; type: "QSize" } + Parameter { name: "states"; type: "QVector" } + } + Method { name: "sendClose" } + Method { + name: "sendMaximized" + type: "uint" + Parameter { name: "size"; type: "QSize" } + } + Method { + name: "sendUnmaximized" + type: "uint" + Parameter { name: "size"; type: "QSize" } + } + Method { name: "sendUnmaximized"; type: "uint" } + Method { + name: "sendFullscreen" + type: "uint" + Parameter { name: "size"; type: "QSize" } + } + Method { + name: "sendResizing" + type: "uint" + Parameter { name: "maxSize"; type: "QSize" } + } + } + Component { prototype: "QQuickItem" name: "QtWayland.Compositor/WaylandCursorItem 1.0" exports: ["QtWayland.Compositor/WaylandCursorItem 1.0"] @@ -758,13 +1218,6 @@ Property { name: "seat"; type: "QObject"; isPointer: true } Property { name: "hotspotX"; type: "int" } Property { name: "hotspotY"; type: "int" } - Method { - name: "setCursorSurface" - type: "QVariant" - Parameter { name: "surface"; type: "QVariant" } - Parameter { name: "hotspotX"; type: "QVariant" } - Parameter { name: "hotspotY"; type: "QVariant" } - } Property { name: "compositor"; type: "QWaylandCompositor"; isReadonly: true; isPointer: true } Property { name: "surface"; type: "QWaylandSurface"; isPointer: true } Property { name: "paintEnabled"; type: "bool" } @@ -795,6 +1248,15 @@ Method { name: "raise" } Method { name: "lower" } Method { + name: "sendMouseMoveEvent" + Parameter { name: "position"; type: "QPointF" } + Parameter { name: "seat"; type: "QWaylandSeat"; isPointer: true } + } + Method { + name: "sendMouseMoveEvent" + Parameter { name: "position"; type: "QPointF" } + } + Method { name: "mapToSurface" type: "QPointF" Parameter { name: "point"; type: "QPointF" } @@ -805,6 +1267,7 @@ Parameter { name: "query"; type: "Qt::InputMethodQuery" } Parameter { name: "argument"; type: "QVariant" } } + Method { name: "setPrimary" } } Component { prototype: "QQuickWindowQmlImpl" diff -Nru qtwayland-opensource-src-5.11.3/src/imports/compositor/qwaylandquickcompositorplugin.cpp qtwayland-opensource-src-5.12.2/src/imports/compositor/qwaylandquickcompositorplugin.cpp --- qtwayland-opensource-src-5.11.3/src/imports/compositor/qwaylandquickcompositorplugin.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/imports/compositor/qwaylandquickcompositorplugin.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -63,6 +63,8 @@ #include #include #include +#include +#include #include #include @@ -77,6 +79,8 @@ Q_COMPOSITOR_DECLARE_QUICK_EXTENSION_CLASS(QWaylandWlShell) Q_COMPOSITOR_DECLARE_QUICK_EXTENSION_CLASS(QWaylandXdgShellV5) Q_COMPOSITOR_DECLARE_QUICK_EXTENSION_CLASS(QWaylandXdgShellV6) +Q_COMPOSITOR_DECLARE_QUICK_EXTENSION_CLASS(QWaylandXdgShell) +Q_COMPOSITOR_DECLARE_QUICK_EXTENSION_CLASS(QWaylandXdgDecorationManagerV1) Q_COMPOSITOR_DECLARE_QUICK_EXTENSION_CLASS(QWaylandTextInputManager) class QmlUrlResolver @@ -162,6 +166,13 @@ qmlRegisterType(uri, 1, 1, "XdgSurfaceV6"); qmlRegisterUncreatableType(uri, 1, 1, "XdgToplevelV6", QObject::tr("Cannot create instance of XdgShellToplevelV6")); qmlRegisterUncreatableType(uri, 1, 1, "XdgPopupV6", QObject::tr("Cannot create instance of XdgShellPopupV6")); + + qmlRegisterType(uri, 1, 3, "XdgShell"); + qmlRegisterType(uri, 1, 3, "XdgSurface"); + qmlRegisterUncreatableType(uri, 1, 3, "XdgToplevel", QObject::tr("Cannot create instance of XdgShellToplevel")); + qmlRegisterUncreatableType(uri, 1, 3, "XdgPopup", QObject::tr("Cannot create instance of XdgShellPopup")); + + qmlRegisterType(uri, 1, 3, "XdgDecorationManagerV1"); } }; //![class decl] diff -Nru qtwayland-opensource-src-5.11.3/src/imports/compositor/WaylandCursorItem.qml qtwayland-opensource-src-5.12.2/src/imports/compositor/WaylandCursorItem.qml --- qtwayland-opensource-src-5.11.3/src/imports/compositor/WaylandCursorItem.qml 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/imports/compositor/WaylandCursorItem.qml 2019-02-21 12:36:59.000000000 +0000 @@ -39,6 +39,7 @@ import QtQuick 2.0 import QtWayland.Compositor 1.0 +import QtQuick.Window 2.11 WaylandQuickItem { id: cursorItem @@ -49,18 +50,20 @@ visible: cursorItem.surface != null inputEventsEnabled: false enabled: false - transform: Translate { x: -hotspotX; y: -hotspotY } - - onSeatChanged: { - if (!seat) - return; - seat.cursorSurfaceRequest.connect(setCursorSurface); + transform: Translate { + // If we've set an output scale factor different from the device pixel ratio + // then the item will be rendered scaled, so we need to shift the hotspot accordingly + x: -hotspotX * (output ? output.scaleFactor / Screen.devicePixelRatio : 1) + y: -hotspotY * (output ? output.scaleFactor / Screen.devicePixelRatio : 1) } - function setCursorSurface(surface, hotspotX, hotspotY) { - cursorItem.surface = surface; - cursorItem.hotspotX = hotspotX; - cursorItem.hotspotY = hotspotY; + Connections { + target: seat + onCursorSurfaceRequest: { + cursorItem.surface = surface; + cursorItem.hotspotX = hotspotX; + cursorItem.hotspotY = hotspotY; + } } WaylandQuickItem { diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/decorations/bradient/main.cpp qtwayland-opensource-src-5.12.2/src/plugins/decorations/bradient/main.cpp --- qtwayland-opensource-src-5.11.3/src/plugins/decorations/bradient/main.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/decorations/bradient/main.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -55,72 +55,8 @@ namespace QtWaylandClient { #define BUTTON_SPACING 5 - -#if QT_CONFIG(imageformat_xpm) -# define BUTTON_WIDTH 10 - -static const char * const qt_close_xpm[] = { -"10 10 2 1", -"# c #000000", -". c None", -"..........", -".##....##.", -"..##..##..", -"...####...", -"....##....", -"...####...", -"..##..##..", -".##....##.", -"..........", -".........."}; - -static const char * const qt_maximize_xpm[]={ -"10 10 2 1", -"# c #000000", -". c None", -"#########.", -"#########.", -"#.......#.", -"#.......#.", -"#.......#.", -"#.......#.", -"#.......#.", -"#.......#.", -"#########.", -".........."}; - -static const char * const qt_minimize_xpm[] = { -"10 10 2 1", -"# c #000000", -". c None", -"..........", -"..........", -"..........", -"..........", -"..........", -"..........", -"..........", -".#######..", -".#######..", -".........."}; - -static const char * const qt_normalizeup_xpm[] = { -"10 10 2 1", -"# c #000000", -". c None", -"...######.", -"...######.", -"...#....#.", -".######.#.", -".######.#.", -".#....###.", -".#....#...", -".#....#...", -".######...", -".........."}; -#else -# define BUTTON_WIDTH 22 -#endif +#define BUTTON_WIDTH 18 +#define BUTTONS_RIGHT_MARGIN 8 enum Button { @@ -151,6 +87,7 @@ QRectF minimizeButtonRect() const; QColor m_foregroundColor; + QColor m_foregroundInactiveColor; QColor m_backgroundColor; QStaticText m_windowTitle; Button m_clicking = None; @@ -161,8 +98,9 @@ QWaylandBradientDecoration::QWaylandBradientDecoration() { QPalette palette; - m_foregroundColor = palette.color(QPalette::Active, QPalette::HighlightedText); - m_backgroundColor = palette.color(QPalette::Active, QPalette::Highlight); + m_foregroundColor = palette.color(QPalette::Active, QPalette::WindowText); + m_backgroundColor = palette.color(QPalette::Active, QPalette::Window); + m_foregroundInactiveColor = palette.color(QPalette::Disabled, QPalette::WindowText); QTextOption option(Qt::AlignHCenter | Qt::AlignVCenter); option.setWrapMode(QTextOption::NoWrap); @@ -171,19 +109,19 @@ QRectF QWaylandBradientDecoration::closeButtonRect() const { - return QRectF(window()->frameGeometry().width() - BUTTON_WIDTH - BUTTON_SPACING * 2, + return QRectF(window()->frameGeometry().width() - BUTTON_WIDTH - BUTTON_SPACING * 0 - BUTTONS_RIGHT_MARGIN, (margins().top() - BUTTON_WIDTH) / 2, BUTTON_WIDTH, BUTTON_WIDTH); } QRectF QWaylandBradientDecoration::maximizeButtonRect() const { - return QRectF(window()->frameGeometry().width() - BUTTON_WIDTH * 2 - BUTTON_SPACING * 3, + return QRectF(window()->frameGeometry().width() - BUTTON_WIDTH * 2 - BUTTON_SPACING * 1 - BUTTONS_RIGHT_MARGIN, (margins().top() - BUTTON_WIDTH) / 2, BUTTON_WIDTH, BUTTON_WIDTH); } QRectF QWaylandBradientDecoration::minimizeButtonRect() const { - return QRectF(window()->frameGeometry().width() - BUTTON_WIDTH * 3 - BUTTON_SPACING * 4, + return QRectF(window()->frameGeometry().width() - BUTTON_WIDTH * 3 - BUTTON_SPACING * 2 - BUTTONS_RIGHT_MARGIN, (margins().top() - BUTTON_WIDTH) / 2, BUTTON_WIDTH, BUTTON_WIDTH); } @@ -194,6 +132,7 @@ void QWaylandBradientDecoration::paint(QPaintDevice *device) { + bool active = window()->handle()->isActive(); QRect surfaceRect(QPoint(), window()->frameGeometry().size()); QRect clips[] = { @@ -209,16 +148,12 @@ p.setRenderHint(QPainter::Antialiasing); // Title bar - QLinearGradient grad(top.topLeft(), top.bottomLeft()); - QColor base(m_backgroundColor); - grad.setColorAt(0, base.lighter(100)); - grad.setColorAt(1, base.darker(180)); QPainterPath roundedRect; - roundedRect.addRoundedRect(surfaceRect, 6, 6); + roundedRect.addRoundedRect(surfaceRect, 3, 3); for (int i = 0; i < 4; ++i) { p.save(); p.setClipRect(clips[i]); - p.fillPath(roundedRect, grad); + p.fillPath(roundedRect, m_backgroundColor); p.restore(); } @@ -249,12 +184,12 @@ p.save(); p.setClipRect(titleBar); - p.setPen(m_foregroundColor); + p.setPen(active ? m_foregroundColor : m_foregroundInactiveColor); QSizeF size = m_windowTitle.size(); int dx = (top.width() - size.width()) /2; int dy = (top.height()- size.height()) /2; QFont font = p.font(); - font.setBold(true); + font.setPixelSize(14); p.setFont(font); QPoint windowTitlePoint(top.topLeft().x() + dx, top.topLeft().y() + dy); @@ -262,38 +197,16 @@ p.restore(); } -#if QT_CONFIG(imageformat_xpm) - p.save(); - - // Close button - QPixmap closePixmap(qt_close_xpm); - p.drawPixmap(closeButtonRect(), closePixmap, closePixmap.rect()); - - // Maximize button - QPixmap maximizePixmap(waylandWindow()->isMaximized() - ? qt_normalizeup_xpm : qt_maximize_xpm); - p.drawPixmap(maximizeButtonRect(), maximizePixmap, maximizePixmap.rect()); - - // Minimize button - QPixmap minimizePixmap(qt_minimize_xpm); - p.drawPixmap(minimizeButtonRect(), minimizePixmap, minimizePixmap.rect()); - - p.restore(); -#else - // We don't need antialiasing from now on - p.setRenderHint(QPainter::Antialiasing, false); - QRectF rect; // Default pen - QPen pen(m_foregroundColor); + QPen pen(active ? m_foregroundColor : m_foregroundInactiveColor); p.setPen(pen); // Close button p.save(); rect = closeButtonRect(); - p.drawRect(rect); - qreal crossSize = rect.height() / 2; + qreal crossSize = rect.height() / 2.3; QPointF crossCenter(rect.center()); QRectF crossRect(crossCenter.x() - crossSize / 2, crossCenter.y() - crossSize / 2, crossSize, crossSize); pen.setWidth(2); @@ -304,15 +217,16 @@ // Maximize button p.save(); - p.drawRect(maximizeButtonRect()); - rect = maximizeButtonRect().adjusted(5, 5, -5, -5); - if (waylandWindow()->isMaximized()) { - QRectF rect1 = rect.adjusted(rect.width() / 3, 0, 0, -rect.height() / 3); - QRectF rect2 = rect.adjusted(0, rect.height() / 4, -rect.width() / 4, 0); + p.setRenderHint(QPainter::Antialiasing, false); + rect = maximizeButtonRect().adjusted(4, 5, -4, -5); + if ((window()->windowStates() & Qt::WindowMaximized)) { + qreal inset = 2; + QRectF rect1 = rect.adjusted(inset, 0, 0, -inset); + QRectF rect2 = rect.adjusted(0, inset, -inset, 0); p.drawRect(rect1); + p.setBrush(m_backgroundColor); // need to cover up some lines from the other rect p.drawRect(rect2); } else { - p.setPen(m_foregroundColor); p.drawRect(rect); p.drawLine(rect.left(), rect.top() + 1, rect.right(), rect.top() + 1); } @@ -320,13 +234,12 @@ // Minimize button p.save(); - p.drawRect(minimizeButtonRect()); + p.setRenderHint(QPainter::Antialiasing, false); rect = minimizeButtonRect().adjusted(5, 5, -5, -5); pen.setWidth(2); p.setPen(pen); p.drawLine(rect.bottomLeft(), rect.bottomRight()); p.restore(); -#endif } bool QWaylandBradientDecoration::clickButton(Qt::MouseButtons b, Button btn) @@ -351,16 +264,7 @@ Q_UNUSED(global); // Figure out what area mouse is in - if (closeButtonRect().contains(local)) { - if (clickButton(b, Close)) - QWindowSystemInterface::handleCloseEvent(window()); - } else if (maximizeButtonRect().contains(local)) { - if (clickButton(b, Maximize)) - window()->setWindowState(waylandWindow()->isMaximized() ? Qt::WindowNoState : Qt::WindowMaximized); - } else if (minimizeButtonRect().contains(local)) { - if (clickButton(b, Minimize)) - window()->setWindowState(Qt::WindowMinimized); - } else if (local.y() <= margins().top()) { + if (local.y() <= margins().top()) { processMouseTop(inputDevice,local,b,mods); } else if (local.y() > window()->height() + margins().top()) { processMouseBottom(inputDevice,local,b,mods); @@ -390,7 +294,7 @@ if (closeButtonRect().contains(local)) QWindowSystemInterface::handleCloseEvent(window()); else if (maximizeButtonRect().contains(local)) - window()->setWindowState(waylandWindow()->isMaximized() ? Qt::WindowNoState : Qt::WindowMaximized); + window()->setWindowStates(window()->windowStates() ^ Qt::WindowMaximized); else if (minimizeButtonRect().contains(local)) window()->setWindowState(Qt::WindowMinimized); else if (local.y() <= margins().top()) @@ -419,19 +323,31 @@ #endif startResize(inputDevice,WL_SHELL_SURFACE_RESIZE_TOP_RIGHT,b); } else { - //top reszie bit + //top resize bit #if QT_CONFIG(cursor) waylandWindow()->setMouseCursor(inputDevice, Qt::SplitVCursor); #endif startResize(inputDevice,WL_SHELL_SURFACE_RESIZE_TOP,b); } + } else if (local.x() <= margins().left()) { + processMouseLeft(inputDevice, local, b, mods); + } else if (local.x() > window()->width() + margins().left()) { + processMouseRight(inputDevice, local, b, mods); + } else if (closeButtonRect().contains(local)) { + if (clickButton(b, Close)) + QWindowSystemInterface::handleCloseEvent(window()); + } else if (maximizeButtonRect().contains(local)) { + if (clickButton(b, Maximize)) + window()->setWindowStates(window()->windowStates() ^ Qt::WindowMaximized); + } else if (minimizeButtonRect().contains(local)) { + if (clickButton(b, Minimize)) + window()->setWindowState(Qt::WindowMinimized); } else { #if QT_CONFIG(cursor) waylandWindow()->restoreMouseCursor(inputDevice); #endif startMove(inputDevice,b); } - } void QWaylandBradientDecoration::processMouseBottom(QWaylandInputDevice *inputDevice, const QPointF &local, Qt::MouseButtons b, Qt::KeyboardModifiers mods) diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/hardwareintegration/client/client.pro qtwayland-opensource-src-5.12.2/src/plugins/hardwareintegration/client/client.pro --- qtwayland-opensource-src-5.11.3/src/plugins/hardwareintegration/client/client.pro 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/hardwareintegration/client/client.pro 2019-02-21 12:36:59.000000000 +0000 @@ -9,10 +9,12 @@ SUBDIRS += xcomposite-egl qtConfig(xcomposite-glx): \ SUBDIRS += xcomposite-glx -qtConfig(drm-egl-server): \ + +qtConfig(wayland-drm-egl-server-buffer): \ SUBDIRS += drm-egl-server -qtConfig(libhybris-egl-server): \ +qtConfig(wayland-libhybris-egl-server-buffer): \ SUBDIRS += libhybris-egl-server - -### TODO: make shm-emulation configurable -SUBDIRS += shm-emulation-server +qtConfig(wayland-shm-emulation-server-buffer): \ + SUBDIRS += shm-emulation-server +qtConfig(wayland-dmabuf-server-buffer): \ + SUBDIRS += dmabuf-server diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/hardwareintegration/client/dmabuf-server/dmabuf-server.json qtwayland-opensource-src-5.12.2/src/plugins/hardwareintegration/client/dmabuf-server/dmabuf-server.json --- qtwayland-opensource-src-5.11.3/src/plugins/hardwareintegration/client/dmabuf-server/dmabuf-server.json 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/hardwareintegration/client/dmabuf-server/dmabuf-server.json 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,3 @@ +{ + "Keys": [ "dmabuf-server" ] +} diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/hardwareintegration/client/dmabuf-server/dmabuf-server.pro qtwayland-opensource-src-5.12.2/src/plugins/hardwareintegration/client/dmabuf-server/dmabuf-server.pro --- qtwayland-opensource-src-5.11.3/src/plugins/hardwareintegration/client/dmabuf-server/dmabuf-server.pro 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/hardwareintegration/client/dmabuf-server/dmabuf-server.pro 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,15 @@ +# We have a bunch of C code with casts, so we can't have this option +QMAKE_CXXFLAGS_WARN_ON -= -Wcast-qual + +QT += waylandclient-private + +include(../../../../hardwareintegration/client/dmabuf-server/dmabuf-server.pri) + +OTHER_FILES += \ + dmabuf-server.json + +SOURCES += main.cpp + +PLUGIN_TYPE = wayland-graphics-integration-client +PLUGIN_CLASS_NAME = DmaBufServerBufferPlugin +load(qt_plugin) diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/hardwareintegration/client/dmabuf-server/main.cpp qtwayland-opensource-src-5.12.2/src/plugins/hardwareintegration/client/dmabuf-server/main.cpp --- qtwayland-opensource-src-5.11.3/src/plugins/hardwareintegration/client/dmabuf-server/main.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/hardwareintegration/client/dmabuf-server/main.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "dmabufserverbufferintegration.h" + +QT_BEGIN_NAMESPACE + +namespace QtWaylandClient { + +class DmaBufServerBufferPlugin : public QWaylandServerBufferIntegrationPlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID QWaylandServerBufferIntegrationFactoryInterface_iid FILE "dmabuf-server.json") +public: + QWaylandServerBufferIntegration *create(const QString&, const QStringList&) override; +}; + +QWaylandServerBufferIntegration *DmaBufServerBufferPlugin::create(const QString&, const QStringList&) +{ + return new DmaBufServerBufferIntegration(); +} + +} + +QT_END_NAMESPACE + +#include "main.moc" diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/hardwareintegration/client/wayland-egl/main.cpp qtwayland-opensource-src-5.12.2/src/plugins/hardwareintegration/client/wayland-egl/main.cpp --- qtwayland-opensource-src-5.11.3/src/plugins/hardwareintegration/client/wayland-egl/main.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/hardwareintegration/client/wayland-egl/main.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -52,10 +52,8 @@ QWaylandClientBufferIntegration *create(const QString&, const QStringList&) override; }; -QWaylandClientBufferIntegration *QWaylandEglClientBufferPlugin::create(const QString& system, const QStringList& paramList) +QWaylandClientBufferIntegration *QWaylandEglClientBufferPlugin::create(const QString&, const QStringList&) { - Q_UNUSED(paramList); - Q_UNUSED(system); return new QWaylandEglClientBufferIntegration(); } diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/hardwareintegration/compositor/compositor.pro qtwayland-opensource-src-5.12.2/src/plugins/hardwareintegration/compositor/compositor.pro --- qtwayland-opensource-src-5.11.3/src/plugins/hardwareintegration/compositor/compositor.pro 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/hardwareintegration/compositor/compositor.pro 2019-02-21 12:36:59.000000000 +0000 @@ -9,12 +9,18 @@ SUBDIRS += xcomposite-egl qtConfig(xcomposite-glx): \ SUBDIRS += xcomposite-glx -qtConfig(drm-egl-server): \ + +qtConfig(wayland-drm-egl-server-buffer): \ SUBDIRS += drm-egl-server -qtConfig(libhybris-egl-server): \ +qtConfig(wayland-libhybris-egl-server-buffer): \ SUBDIRS += libhybris-egl-server +qtConfig(wayland-shm-emulation-server-buffer): \ + SUBDIRS += shm-emulation-server +qtConfig(wayland-dmabuf-server-buffer): \ + SUBDIRS += dmabuf-server + +qtConfig(wayland-egl): \ + SUBDIRS += wayland-eglstream-controller -### TODO: make shm-emulation configurable -SUBDIRS += shm-emulation-server SUBDIRS += hardwarelayer diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/hardwareintegration/compositor/dmabuf-server/dmabuf-server.json qtwayland-opensource-src-5.12.2/src/plugins/hardwareintegration/compositor/dmabuf-server/dmabuf-server.json --- qtwayland-opensource-src-5.11.3/src/plugins/hardwareintegration/compositor/dmabuf-server/dmabuf-server.json 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/hardwareintegration/compositor/dmabuf-server/dmabuf-server.json 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,3 @@ +{ + "Keys": [ "dmabuf-server" ] +} diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/hardwareintegration/compositor/dmabuf-server/dmabuf-server.pro qtwayland-opensource-src-5.12.2/src/plugins/hardwareintegration/compositor/dmabuf-server/dmabuf-server.pro --- qtwayland-opensource-src-5.11.3/src/plugins/hardwareintegration/compositor/dmabuf-server/dmabuf-server.pro 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/hardwareintegration/compositor/dmabuf-server/dmabuf-server.pro 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,12 @@ +QT = waylandcompositor waylandcompositor-private core-private gui-private + +OTHER_FILES += dmabuf-server.json + +SOURCES += \ + main.cpp + +include($PWD/../../../../../hardwareintegration/compositor/dmabuf-server/dmabuf-server.pri) + +PLUGIN_TYPE = wayland-graphics-integration-server +PLUGIN_CLASS_NAME = DmaBufServerBufferIntegrationPlugin +load(qt_plugin) diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/hardwareintegration/compositor/dmabuf-server/main.cpp qtwayland-opensource-src-5.12.2/src/plugins/hardwareintegration/compositor/dmabuf-server/main.cpp --- qtwayland-opensource-src-5.11.3/src/plugins/hardwareintegration/compositor/dmabuf-server/main.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/hardwareintegration/compositor/dmabuf-server/main.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "dmabufserverbufferintegration.h" + +QT_BEGIN_NAMESPACE + +class DmaBufServerBufferIntegrationPlugin : public QtWayland::ServerBufferIntegrationPlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID QtWaylandServerBufferIntegrationFactoryInterface_iid FILE "dmabuf-server.json") +public: + QtWayland::ServerBufferIntegration *create(const QString&, const QStringList&) override; +}; + +QtWayland::ServerBufferIntegration *DmaBufServerBufferIntegrationPlugin::create(const QString& system, const QStringList& paramList) +{ + Q_UNUSED(paramList); + Q_UNUSED(system); + return new DmaBufServerBufferIntegration(); +} + +QT_END_NAMESPACE + +#include "main.moc" diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/hardwareintegration/compositor/wayland-eglstream-controller/main.cpp qtwayland-opensource-src-5.12.2/src/plugins/hardwareintegration/compositor/wayland-eglstream-controller/main.cpp --- qtwayland-opensource-src-5.11.3/src/plugins/hardwareintegration/compositor/wayland-eglstream-controller/main.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/hardwareintegration/compositor/wayland-eglstream-controller/main.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include "waylandeglstreamintegration.h" + +QT_BEGIN_NAMESPACE + +class QWaylandEglStreamClientBufferIntegrationPlugin : public QtWayland::ClientBufferIntegrationPlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID QtWaylandClientBufferIntegrationFactoryInterface_iid FILE "wayland-eglstream-controller.json") +public: + QtWayland::ClientBufferIntegration *create(const QString& key, const QStringList& paramList) override; +}; + +QtWayland::ClientBufferIntegration *QWaylandEglStreamClientBufferIntegrationPlugin::create(const QString& key, const QStringList& paramList) +{ + Q_UNUSED(paramList); + Q_UNUSED(key); + return new WaylandEglStreamClientBufferIntegration(); +} + +QT_END_NAMESPACE + +#include "main.moc" diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/hardwareintegration/compositor/wayland-eglstream-controller/wayland-eglstream-controller.json qtwayland-opensource-src-5.12.2/src/plugins/hardwareintegration/compositor/wayland-eglstream-controller/wayland-eglstream-controller.json --- qtwayland-opensource-src-5.11.3/src/plugins/hardwareintegration/compositor/wayland-eglstream-controller/wayland-eglstream-controller.json 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/hardwareintegration/compositor/wayland-eglstream-controller/wayland-eglstream-controller.json 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,3 @@ +{ + "Keys": [ "wayland-eglstream-controller" ] +} diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/hardwareintegration/compositor/wayland-eglstream-controller/wayland-eglstream-controller.pro qtwayland-opensource-src-5.12.2/src/plugins/hardwareintegration/compositor/wayland-eglstream-controller/wayland-eglstream-controller.pro --- qtwayland-opensource-src-5.11.3/src/plugins/hardwareintegration/compositor/wayland-eglstream-controller/wayland-eglstream-controller.pro 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/hardwareintegration/compositor/wayland-eglstream-controller/wayland-eglstream-controller.pro 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,12 @@ +QT = waylandcompositor waylandcompositor-private core-private gui-private + +OTHER_FILES += wayland-eglstream-controller.json + +SOURCES += \ + main.cpp \ + +include(../../../../hardwareintegration/compositor/wayland-eglstream-controller/wayland-eglstream-controller.pri) + +PLUGIN_TYPE = wayland-graphics-integration-server +PLUGIN_CLASS_NAME = QWaylandEglStreamBufferIntegrationPlugin +load(qt_plugin) diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/ivi-shell/ivi-shell.pro qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/ivi-shell/ivi-shell.pro --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/ivi-shell/ivi-shell.pro 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/ivi-shell/ivi-shell.pro 2019-02-21 12:36:59.000000000 +0000 @@ -3,8 +3,8 @@ QMAKE_USE += wayland-client -qtConfig(xkbcommon-evdev): \ - QMAKE_USE += xkbcommon_evdev +qtConfig(xkbcommon): \ + QMAKE_USE += xkbcommon WAYLANDCLIENTSOURCES += \ ../../../3rdparty/protocol/ivi-application.xml \ diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/ivi-shell/qwaylandivishellintegration.cpp qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/ivi-shell/qwaylandivishellintegration.cpp --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/ivi-shell/qwaylandivishellintegration.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/ivi-shell/qwaylandivishellintegration.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -58,18 +58,21 @@ { } -QWaylandIviShellIntegration::~QWaylandIviShellIntegration() -{ - delete m_iviApplication; - delete m_iviController; -} - bool QWaylandIviShellIntegration::initialize(QWaylandDisplay *display) { - QWaylandShellIntegration::initialize(display); - display->addRegistryListener(registryIvi, this); + for (QWaylandDisplay::RegistryGlobal global : display->globals()) { + if (global.interface == QLatin1String("ivi_application") && !m_iviApplication) + m_iviApplication.reset(new QtWayland::ivi_application(display->wl_registry(), global.id, global.version)); + if (global.interface == QLatin1String("ivi_controller") && !m_iviController) + m_iviController.reset(new QtWayland::ivi_controller(display->wl_registry(), global.id, global.version)); + } + + if (!m_iviApplication) { + qCDebug(lcQpaWayland) << "Couldn't find global ivi_application for ivi-shell"; + return false; + } - return true; + return QWaylandShellIntegration::initialize(display); } /* get unique id @@ -154,21 +157,6 @@ return iviSurface; } -void QWaylandIviShellIntegration::registryIvi(void *data, - struct wl_registry *registry, - uint32_t id, - const QString &interface, - uint32_t version) -{ - QWaylandIviShellIntegration *shell = static_cast(data); - - if (interface == QStringLiteral("ivi_application")) - shell->m_iviApplication = new QtWayland::ivi_application(registry, id, version); - - if (interface == QStringLiteral("ivi_controller")) - shell->m_iviController = new QtWayland::ivi_controller(registry, id, version); -} - } QT_END_NAMESPACE diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/ivi-shell/qwaylandivishellintegration.h qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/ivi-shell/qwaylandivishellintegration.h --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/ivi-shell/qwaylandivishellintegration.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/ivi-shell/qwaylandivishellintegration.h 2019-02-21 12:36:59.000000000 +0000 @@ -58,18 +58,16 @@ { public: QWaylandIviShellIntegration(); - ~QWaylandIviShellIntegration() override; + bool initialize(QWaylandDisplay *display) override; QWaylandShellSurface *createShellSurface(QWaylandWindow *window) override; private: - static void registryIvi(void *data, struct wl_registry *registry, - uint32_t id, const QString &interface, uint32_t version); uint32_t getNextUniqueSurfaceId(); private: - QtWayland::ivi_application *m_iviApplication = nullptr; - QtWayland::ivi_controller *m_iviController = nullptr; + QScopedPointer m_iviApplication; + QScopedPointer m_iviController; uint32_t m_lastSurfaceId = 0; uint32_t m_surfaceNumber = 0; bool m_useEnvSurfaceId = false; diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/ivi-shell/qwaylandivisurface.cpp qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/ivi-shell/qwaylandivisurface.cpp --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/ivi-shell/qwaylandivisurface.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/ivi-shell/qwaylandivisurface.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -75,11 +75,9 @@ delete m_extendedWindow; } -void QWaylandIviSurface::setType(Qt::WindowType type, QWaylandWindow *transientParent) +void QWaylandIviSurface::applyConfigure() { - - Q_UNUSED(type) - Q_UNUSED(transientParent) + m_window->resizeFromApplyConfigure(m_pendingSize); } void QWaylandIviSurface::createExtendedSurface(QWaylandWindow *window) @@ -90,7 +88,8 @@ void QWaylandIviSurface::ivi_surface_configure(int32_t width, int32_t height) { - this->m_window->configure(0, width, height); + m_pendingSize = {width, height}; + m_window->applyConfigureWhenPossible(); } void QWaylandIviSurface::ivi_controller_surface_visibility(int32_t visibility) diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/ivi-shell/qwaylandivisurface_p.h qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/ivi-shell/qwaylandivisurface_p.h --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/ivi-shell/qwaylandivisurface_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/ivi-shell/qwaylandivisurface_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -62,7 +62,7 @@ struct ::ivi_controller_surface *iviControllerSurface); ~QWaylandIviSurface() override; - void setType(Qt::WindowType type, QWaylandWindow *transientParent) override; + void applyConfigure() override; private: void createExtendedSurface(QWaylandWindow *window); @@ -71,6 +71,7 @@ QWaylandWindow *m_window = nullptr; QWaylandExtendedSurface *m_extendedWindow = nullptr; + QSize m_pendingSize = {0, 0}; }; } diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/shellintegration.pro qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/shellintegration.pro --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/shellintegration.pro 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/shellintegration.pro 2019-02-21 12:36:59.000000000 +0000 @@ -1,3 +1,9 @@ TEMPLATE = subdirs -SUBDIRS += ivi-shell +SUBDIRS += \ + ivi-shell \ + xdg-shell \ + xdg-shell-v5 \ + xdg-shell-v6 \ + wl-shell \ + diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/wl-shell/main.cpp qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/wl-shell/main.cpp --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/wl-shell/main.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/wl-shell/main.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Copyright (C) 2017 ITAGE Corporation, author: +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwaylandwlshellintegration_p.h" + +#include + +QT_BEGIN_NAMESPACE + +namespace QtWaylandClient { + +class QWaylandWlShellIntegrationPlugin : public QWaylandShellIntegrationPlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID QWaylandShellIntegrationFactoryInterface_iid FILE "wl-shell.json") + +public: + QWaylandShellIntegration *create(const QString &key, const QStringList ¶mList) override; +}; + +QWaylandShellIntegration *QWaylandWlShellIntegrationPlugin::create(const QString &key, const QStringList ¶mList) +{ + Q_UNUSED(key); + Q_UNUSED(paramList); + return new QWaylandWlShellIntegration(); +} + +} + +QT_END_NAMESPACE + +#include "main.moc" diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/wl-shell/qwaylandwlshellintegration.cpp qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/wl-shell/qwaylandwlshellintegration.cpp --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/wl-shell/qwaylandwlshellintegration.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/wl-shell/qwaylandwlshellintegration.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwaylandwlshellintegration_p.h" +#include "qwaylandwlshellsurface_p.h" + +#include +#include + +QT_BEGIN_NAMESPACE + +namespace QtWaylandClient { + +bool QWaylandWlShellIntegration::initialize(QWaylandDisplay *display) +{ + Q_FOREACH (QWaylandDisplay::RegistryGlobal global, display->globals()) { + if (global.interface == QLatin1String("wl_shell")) { + m_wlShell = new QtWayland::wl_shell(display->wl_registry(), global.id, 1); + break; + } + } + + if (!m_wlShell) { + qCDebug(lcQpaWayland) << "Couldn't find global wl_shell"; + return false; + } + + qCWarning(lcQpaWayland) << "\"wl-shell\" is a deprecated shell extension, prefer using" + << "\"xdg-shell-v6\" or \"xdg-shell\" if supported by the compositor" + << "by setting the environment variable QT_WAYLAND_SHELL_INTEGRATION"; + + return QWaylandShellIntegration::initialize(display); +} + +QWaylandShellSurface *QWaylandWlShellIntegration::createShellSurface(QWaylandWindow *window) +{ + return new QWaylandWlShellSurface(m_wlShell->get_shell_surface(window->object()), window); +} + +void *QWaylandWlShellIntegration::nativeResourceForWindow(const QByteArray &resource, QWindow *window) +{ + QByteArray lowerCaseResource = resource.toLower(); + if (lowerCaseResource == "wl_shell_surface") { + if (auto waylandWindow = static_cast(window->handle())) { + if (auto shellSurface = qobject_cast(waylandWindow->shellSurface())) { + return shellSurface->object(); + } + } + } + return nullptr; +} + +} // namespace QtWaylandClient + +QT_END_NAMESPACE diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/wl-shell/qwaylandwlshellintegration_p.h qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/wl-shell/qwaylandwlshellintegration_p.h --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/wl-shell/qwaylandwlshellintegration_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/wl-shell/qwaylandwlshellintegration_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWAYLANDWLSHELLINTEGRATION_P_H +#define QWAYLANDWLSHELLINTEGRATION_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include +#include + +#include + +QT_BEGIN_NAMESPACE + +namespace QtWaylandClient { + +class Q_WAYLAND_CLIENT_EXPORT QWaylandWlShellIntegration : public QWaylandShellIntegration +{ +public: + QWaylandWlShellIntegration() {} + bool initialize(QWaylandDisplay *) override; + QWaylandShellSurface *createShellSurface(QWaylandWindow *window) override; + void *nativeResourceForWindow(const QByteArray &resource, QWindow *window) override; + +private: + QtWayland::wl_shell *m_wlShell = nullptr; +}; + +} + +QT_END_NAMESPACE + +#endif // QWAYLANDWLSHELLINTEGRATION_P_H diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/wl-shell/qwaylandwlshellsurface.cpp qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/wl-shell/qwaylandwlshellsurface.cpp --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/wl-shell/qwaylandwlshellsurface.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/wl-shell/qwaylandwlshellsurface.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,283 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the config.tests of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwaylandwlshellsurface_p.h" + +#include +#include +#include +#include +#include +#include + +#include + +QT_BEGIN_NAMESPACE + +namespace QtWaylandClient { + +QWaylandWlShellSurface::QWaylandWlShellSurface(struct ::wl_shell_surface *shell_surface, QWaylandWindow *window) + : QWaylandShellSurface(window) + , QtWayland::wl_shell_surface(shell_surface) + , m_window(window) +{ + if (window->display()->windowExtension()) + m_extendedWindow = new QWaylandExtendedSurface(window); + + Qt::WindowType type = window->window()->type(); + auto *transientParent = window->transientParent(); + if (type == Qt::Popup && transientParent && transientParent->object()) + setPopup(transientParent, m_window->display()->lastInputDevice(), m_window->display()->lastInputSerial()); + else if (transientParent && transientParent->object()) + updateTransientParent(transientParent->window()); + else + setTopLevel(); +} + +QWaylandWlShellSurface::~QWaylandWlShellSurface() +{ + wl_shell_surface_destroy(object()); + delete m_extendedWindow; +} + +void QWaylandWlShellSurface::resize(QWaylandInputDevice *inputDevice, enum wl_shell_surface_resize edges) +{ + resize(inputDevice->wl_seat(), + inputDevice->serial(), + edges); +} + +bool QWaylandWlShellSurface::move(QWaylandInputDevice *inputDevice) +{ + move(inputDevice->wl_seat(), + inputDevice->serial()); + return true; +} + +void QWaylandWlShellSurface::setTitle(const QString & title) +{ + return QtWayland::wl_shell_surface::set_title(title); +} + +void QWaylandWlShellSurface::setAppId(const QString & appId) +{ + return QtWayland::wl_shell_surface::set_class(appId); +} + +void QWaylandWlShellSurface::raise() +{ + if (m_extendedWindow) + m_extendedWindow->raise(); +} + +void QWaylandWlShellSurface::lower() +{ + if (m_extendedWindow) + m_extendedWindow->lower(); +} + +void QWaylandWlShellSurface::setContentOrientationMask(Qt::ScreenOrientations orientation) +{ + if (m_extendedWindow) + m_extendedWindow->setContentOrientationMask(orientation); +} + +void QWaylandWlShellSurface::setWindowFlags(Qt::WindowFlags flags) +{ + if (m_extendedWindow) + m_extendedWindow->setWindowFlags(flags); +} + +void QWaylandWlShellSurface::sendProperty(const QString &name, const QVariant &value) +{ + if (m_extendedWindow) + m_extendedWindow->updateGenericProperty(name, value); +} + +void QWaylandWlShellSurface::applyConfigure() +{ + if ((m_pending.states & (Qt::WindowMaximized|Qt::WindowFullScreen)) + && !(m_applied.states & (Qt::WindowMaximized|Qt::WindowFullScreen))) { + m_normalSize = m_window->window()->frameGeometry().size(); + } + + if (m_pending.states != m_applied.states) + m_window->handleWindowStatesChanged(m_pending.states); + + if (!m_pending.size.isEmpty()) { + int x = 0; + int y = 0; + if (m_pending.edges & resize_left) + x = m_applied.size.width() - m_pending.size.width(); + if (m_pending.edges & resize_top) + y = m_applied.size.height() - m_pending.size.height(); + QPoint offset(x, y); + m_window->resizeFromApplyConfigure(m_pending.size, offset); + } else if (m_pending.size.isValid() && !m_normalSize.isEmpty()) { + m_window->resizeFromApplyConfigure(m_normalSize); + } + + m_applied = m_pending; +} + +bool QWaylandWlShellSurface::wantsDecorations() const +{ + return !(m_pending.states & Qt::WindowFullScreen); +} + +void QWaylandWlShellSurface::requestWindowStates(Qt::WindowStates states) +{ + // On wl-shell the client is in charge of states, so diff from the pending state + Qt::WindowStates changedStates = m_pending.states ^ states; + Qt::WindowStates addedStates = changedStates & states; + + if (addedStates & Qt::WindowMinimized) + qCWarning(lcQpaWayland) << "Minimizing is not supported on wl-shell. Consider using xdg-shell instead."; + + if (addedStates & Qt::WindowMaximized) { + set_maximized(nullptr); + m_window->applyConfigureWhenPossible(); + } + + if (addedStates & Qt::WindowFullScreen) { + set_fullscreen(WL_SHELL_SURFACE_FULLSCREEN_METHOD_DEFAULT, 0, nullptr); + m_window->applyConfigureWhenPossible(); + } + + bool isNormal = !(states & Qt::WindowMaximized) && !(states & Qt::WindowFullScreen); + if (isNormal && (changedStates & (Qt::WindowMaximized | Qt::WindowFullScreen))) { + setTopLevel(); // set normal window + // There's usually no configure event after this, so just clear the rest of the pending + // configure here and queue the applyConfigure call + m_pending.size = {0, 0}; + m_pending.edges = resize_none; + m_window->applyConfigureWhenPossible(); + } + + m_pending.states = states & ~Qt::WindowMinimized; +} + + +void QWaylandWlShellSurface::setTopLevel() +{ + set_toplevel(); +} + +static inline bool testShowWithoutActivating(const QWindow *window) +{ + // QWidget-attribute Qt::WA_ShowWithoutActivating. + const QVariant showWithoutActivating = window->property("_q_showWithoutActivating"); + return showWithoutActivating.isValid() && showWithoutActivating.toBool(); +} + +void QWaylandWlShellSurface::updateTransientParent(QWindow *parent) +{ + QWaylandWindow *parent_wayland_window = static_cast(parent->handle()); + if (!parent_wayland_window) + return; + + // set_transient expects a position relative to the parent + QPoint transientPos = m_window->geometry().topLeft(); // this is absolute + transientPos -= parent->geometry().topLeft(); + if (parent_wayland_window->decoration()) { + transientPos.setX(transientPos.x() + parent_wayland_window->decoration()->margins().left()); + transientPos.setY(transientPos.y() + parent_wayland_window->decoration()->margins().top()); + } + + uint32_t flags = 0; + Qt::WindowFlags wf = m_window->window()->flags(); + if (wf.testFlag(Qt::ToolTip) + || wf.testFlag(Qt::WindowTransparentForInput) + || testShowWithoutActivating(m_window->window())) + flags |= WL_SHELL_SURFACE_TRANSIENT_INACTIVE; + + Q_ASSERT(parent_wayland_window->object()); + set_transient(parent_wayland_window->object(), + transientPos.x(), + transientPos.y(), + flags); +} + +void QWaylandWlShellSurface::setPopup(QWaylandWindow *parent, QWaylandInputDevice *device, uint serial) +{ + QWaylandWindow *parent_wayland_window = parent; + if (!parent_wayland_window) { + qCWarning(lcQpaWayland) << "setPopup called without a parent window"; + return; + } + if (!device) { + qCWarning(lcQpaWayland) << "setPopup called without an input device"; + return; + } + + // set_popup expects a position relative to the parent + QPoint transientPos = m_window->geometry().topLeft(); // this is absolute + transientPos -= parent_wayland_window->geometry().topLeft(); + if (parent_wayland_window->decoration()) { + transientPos.setX(transientPos.x() + parent_wayland_window->decoration()->margins().left()); + transientPos.setY(transientPos.y() + parent_wayland_window->decoration()->margins().top()); + } + + Q_ASSERT(parent_wayland_window->object()); + set_popup(device->wl_seat(), serial, parent_wayland_window->object(), + transientPos.x(), transientPos.y(), 0); +} + +void QWaylandWlShellSurface::shell_surface_ping(uint32_t serial) +{ + pong(serial); +} + +void QWaylandWlShellSurface::shell_surface_configure(uint32_t edges, int32_t width, int32_t height) +{ + m_pending.size = QSize(width, height); + m_pending.edges = static_cast(edges); + if (m_pending.edges && !m_pending.size.isEmpty()) + m_normalSize = m_pending.size; + m_window->applyConfigureWhenPossible(); +} + +void QWaylandWlShellSurface::shell_surface_popup_done() +{ + QCoreApplication::postEvent(m_window->window(), new QCloseEvent()); +} + +} + +QT_END_NAMESPACE diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/wl-shell/qwaylandwlshellsurface_p.h qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/wl-shell/qwaylandwlshellsurface_p.h --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/wl-shell/qwaylandwlshellsurface_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/wl-shell/qwaylandwlshellsurface_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,130 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the config.tests of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWAYLANDWLSHELLSURFACE_H +#define QWAYLANDWLSHELLSURFACE_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include + +#include + +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class QWindow; + +namespace QtWaylandClient { + +class QWaylandWindow; +class QWaylandInputDevice; +class QWaylandExtendedSurface; + +class Q_WAYLAND_CLIENT_EXPORT QWaylandWlShellSurface : public QWaylandShellSurface + , public QtWayland::wl_shell_surface +{ + Q_OBJECT +public: + QWaylandWlShellSurface(struct ::wl_shell_surface *shell_surface, QWaylandWindow *window); + ~QWaylandWlShellSurface() override; + + using QtWayland::wl_shell_surface::resize; + void resize(QWaylandInputDevice *inputDevice, enum wl_shell_surface_resize edges) override; + + using QtWayland::wl_shell_surface::move; + bool move(QWaylandInputDevice *inputDevice) override; + + void setTitle(const QString & title) override; + void setAppId(const QString &appId) override; + + void raise() override; + void lower() override; + void setContentOrientationMask(Qt::ScreenOrientations orientation) override; + void setWindowFlags(Qt::WindowFlags flags) override; + void sendProperty(const QString &name, const QVariant &value) override; + + void applyConfigure() override; + bool wantsDecorations() const override; + +protected: + void requestWindowStates(Qt::WindowStates states) override; + +private: + void setTopLevel(); + void updateTransientParent(QWindow *parent); + void setPopup(QWaylandWindow *parent, QWaylandInputDevice *device, uint serial); + + QWaylandWindow *m_window = nullptr; + struct { + Qt::WindowStates states = Qt::WindowNoState; + QSize size; + enum resize edges = resize_none; + } m_applied, m_pending; + QSize m_normalSize; + // There's really no need to have pending and applied state on wl-shell, but we do it just to + // keep the different shell implementations more similar. + QWaylandExtendedSurface *m_extendedWindow = nullptr; + + void shell_surface_ping(uint32_t serial) override; + void shell_surface_configure(uint32_t edges, + int32_t width, + int32_t height) override; + void shell_surface_popup_done() override; + + friend class QWaylandWindow; +}; + +QT_END_NAMESPACE + +} + +#endif // QWAYLANDSHELLSURFACE_H diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/wl-shell/wl-shell.json qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/wl-shell/wl-shell.json --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/wl-shell/wl-shell.json 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/wl-shell/wl-shell.json 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,3 @@ +{ + "Keys":[ "wl-shell" ] +} diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/wl-shell/wl-shell.pro qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/wl-shell/wl-shell.pro --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/wl-shell/wl-shell.pro 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/wl-shell/wl-shell.pro 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,25 @@ +QT += gui-private waylandclient-private +CONFIG += wayland-scanner + +QMAKE_USE += wayland-client +qtConfig(xkbcommon): \ + QMAKE_USE_PRIVATE += xkbcommon + +WAYLANDCLIENTSOURCES += \ + ../../../3rdparty/protocol/wayland.xml + +HEADERS += \ + qwaylandwlshellintegration_p.h \ + qwaylandwlshellsurface_p.h \ + +SOURCES += \ + main.cpp \ + qwaylandwlshellintegration.cpp \ + qwaylandwlshellsurface.cpp \ + +OTHER_FILES += \ + wl-shell.json + +PLUGIN_TYPE = wayland-shell-integration +PLUGIN_CLASS_NAME = QWaylandWlShellIntegrationPlugin +load(qt_plugin) diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell/main.cpp qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell/main.cpp --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell/main.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell/main.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwaylandxdgshellintegration_p.h" + +#include + +QT_BEGIN_NAMESPACE + +namespace QtWaylandClient { + +class QWaylandXdgShellIntegrationPlugin : public QWaylandShellIntegrationPlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID QWaylandShellIntegrationFactoryInterface_iid FILE "xdg-shell.json") + +public: + QWaylandShellIntegration *create(const QString &key, const QStringList ¶mList) override; +}; + +QWaylandShellIntegration *QWaylandXdgShellIntegrationPlugin::create(const QString &key, const QStringList ¶mList) +{ + Q_UNUSED(key); + Q_UNUSED(paramList); + return new QWaylandXdgShellIntegration(); +} + +} + +QT_END_NAMESPACE + +#include "main.moc" diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell/qwaylandxdgdecorationv1.cpp qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell/qwaylandxdgdecorationv1.cpp --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell/qwaylandxdgdecorationv1.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell/qwaylandxdgdecorationv1.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,105 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the config.tests of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwaylandxdgdecorationv1_p.h" +#include "qwaylandxdgshell_p.h" + +QT_BEGIN_NAMESPACE + +namespace QtWaylandClient { + +QWaylandXdgDecorationManagerV1::QWaylandXdgDecorationManagerV1(wl_registry *registry, uint32_t id, uint32_t availableVersion) + : QtWayland::zxdg_decoration_manager_v1(registry, id, qMin(availableVersion, 1u)) +{ +} + +QWaylandXdgDecorationManagerV1::~QWaylandXdgDecorationManagerV1() +{ + Q_ASSERT(isInitialized()); + destroy(); +} + +QWaylandXdgToplevelDecorationV1 *QWaylandXdgDecorationManagerV1::createToplevelDecoration(::xdg_toplevel *toplevel) +{ + Q_ASSERT(toplevel); + return new QWaylandXdgToplevelDecorationV1(get_toplevel_decoration(toplevel)); +} + +QWaylandXdgToplevelDecorationV1::QWaylandXdgToplevelDecorationV1(::zxdg_toplevel_decoration_v1 *decoration) + : QtWayland::zxdg_toplevel_decoration_v1(decoration) +{ +} + +QWaylandXdgToplevelDecorationV1::~QWaylandXdgToplevelDecorationV1() +{ + Q_ASSERT(isInitialized()); + destroy(); +} + +void QWaylandXdgToplevelDecorationV1::requestMode(QtWayland::zxdg_toplevel_decoration_v1::mode mode) +{ + // According to the spec the client is responsible for not requesting a mode repeatedly. + if (m_modeSet && m_requested == mode) + return; + + set_mode(mode); + m_requested = mode; + m_modeSet = true; +} + +void QWaylandXdgToplevelDecorationV1::unsetMode() +{ + unset_mode(); + m_modeSet = false; + m_requested = mode_client_side; +} + +QWaylandXdgToplevelDecorationV1::mode QWaylandXdgToplevelDecorationV1::pending() const +{ + return m_pending; +} + +void QtWaylandClient::QWaylandXdgToplevelDecorationV1::zxdg_toplevel_decoration_v1_configure(uint32_t mode) +{ + m_pending = zxdg_toplevel_decoration_v1::mode(mode); +} + +} + +QT_END_NAMESPACE diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell/qwaylandxdgdecorationv1_p.h qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell/qwaylandxdgdecorationv1_p.h --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell/qwaylandxdgdecorationv1_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell/qwaylandxdgdecorationv1_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the config.tests of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWAYLANDXDGDECORATIONV1_P_H +#define QWAYLANDXDGDECORATIONV1_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include "qwayland-xdg-decoration-unstable-v1.h" + +#include + +QT_BEGIN_NAMESPACE + +class QWindow; + +namespace QtWaylandClient { + +class QWaylandXdgToplevel; +class QWaylandXdgToplevelDecorationV1; + +class Q_WAYLAND_CLIENT_EXPORT QWaylandXdgDecorationManagerV1 : public QtWayland::zxdg_decoration_manager_v1 +{ +public: + QWaylandXdgDecorationManagerV1(struct ::wl_registry *registry, uint32_t id, uint32_t availableVersion); + ~QWaylandXdgDecorationManagerV1() override; + QWaylandXdgToplevelDecorationV1 *createToplevelDecoration(::xdg_toplevel *toplevel); +}; + +class Q_WAYLAND_CLIENT_EXPORT QWaylandXdgToplevelDecorationV1 : public QtWayland::zxdg_toplevel_decoration_v1 +{ +public: + QWaylandXdgToplevelDecorationV1(::zxdg_toplevel_decoration_v1 *decoration); + ~QWaylandXdgToplevelDecorationV1() override; + void requestMode(mode mode); + void unsetMode(); + mode pending() const; + +protected: + void zxdg_toplevel_decoration_v1_configure(uint32_t mode) override; + +private: + mode m_pending = mode_client_side; + mode m_requested = mode_client_side; + bool m_modeSet = false; +}; + +QT_END_NAMESPACE + +} + +#endif // QWAYLANDXDGDECORATIONV1_P_H diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,438 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Copyright (C) 2017 Eurogiciel, author: +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the config.tests of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwaylandxdgshell_p.h" + +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +namespace QtWaylandClient { + +QWaylandXdgSurface::Toplevel::Toplevel(QWaylandXdgSurface *xdgSurface) + : QtWayland::xdg_toplevel(xdgSurface->get_toplevel()) + , m_xdgSurface(xdgSurface) +{ + if (auto *decorationManager = m_xdgSurface->m_shell->decorationManager()) + m_decoration = decorationManager->createToplevelDecoration(object()); + + QWindow *window = xdgSurface->window()->window(); + requestWindowStates(window->windowStates()); + requestWindowFlags(window->flags()); +} + +QWaylandXdgSurface::Toplevel::~Toplevel() +{ + if (m_applied.states & Qt::WindowActive) { + QWaylandWindow *window = m_xdgSurface->window(); + window->display()->handleWindowDeactivated(window); + } + + // The protocol spec requires that the decoration object is deleted before xdg_toplevel. + delete m_decoration; + m_decoration = nullptr; + + if (isInitialized()) + destroy(); +} + +void QWaylandXdgSurface::Toplevel::applyConfigure() +{ + if (!(m_applied.states & (Qt::WindowMaximized|Qt::WindowFullScreen))) + m_normalSize = m_xdgSurface->m_window->window()->frameGeometry().size(); + + if ((m_pending.states & Qt::WindowActive) && !(m_applied.states & Qt::WindowActive)) + m_xdgSurface->m_window->display()->handleWindowActivated(m_xdgSurface->m_window); + + if (!(m_pending.states & Qt::WindowActive) && (m_applied.states & Qt::WindowActive)) + m_xdgSurface->m_window->display()->handleWindowDeactivated(m_xdgSurface->m_window); + + // TODO: none of the other plugins send WindowActive either, but is it on purpose? + Qt::WindowStates statesWithoutActive = m_pending.states & ~Qt::WindowActive; + + m_xdgSurface->m_window->handleWindowStatesChanged(statesWithoutActive); + + if (m_pending.size.isEmpty()) { + // An empty size in the configure means it's up to the client to choose the size + bool normalPending = !(m_pending.states & (Qt::WindowMaximized|Qt::WindowFullScreen)); + if (normalPending && !m_normalSize.isEmpty()) + m_xdgSurface->m_window->resizeFromApplyConfigure(m_normalSize); + } else { + m_xdgSurface->m_window->resizeFromApplyConfigure(m_pending.size); + } + + QSize windowGeometrySize = m_xdgSurface->m_window->window()->frameGeometry().size(); + m_xdgSurface->set_window_geometry(0, 0, windowGeometrySize.width(), windowGeometrySize.height()); + m_applied = m_pending; + qCDebug(lcQpaWayland) << "Applied pending xdg_toplevel configure event:" << m_applied.size << m_applied.states; +} + +bool QWaylandXdgSurface::Toplevel::wantsDecorations() +{ + if (m_decoration && m_decoration->pending() == QWaylandXdgToplevelDecorationV1::mode_server_side) + return false; + + return !(m_pending.states & Qt::WindowFullScreen); +} + +void QWaylandXdgSurface::Toplevel::xdg_toplevel_configure(int32_t width, int32_t height, wl_array *states) +{ + m_pending.size = QSize(width, height); + + auto *xdgStates = static_cast(states->data); + size_t numStates = states->size / sizeof(uint32_t); + + m_pending.states = Qt::WindowNoState; + + for (size_t i = 0; i < numStates; i++) { + switch (xdgStates[i]) { + case XDG_TOPLEVEL_STATE_ACTIVATED: + m_pending.states |= Qt::WindowActive; + break; + case XDG_TOPLEVEL_STATE_MAXIMIZED: + m_pending.states |= Qt::WindowMaximized; + break; + case XDG_TOPLEVEL_STATE_FULLSCREEN: + m_pending.states |= Qt::WindowFullScreen; + break; + default: + break; + } + } + qCDebug(lcQpaWayland) << "Received xdg_toplevel.configure with" << m_pending.size + << "and" << m_pending.states; +} + +void QWaylandXdgSurface::Toplevel::xdg_toplevel_close() +{ + m_xdgSurface->m_window->window()->close(); +} + +void QWaylandXdgSurface::Toplevel::requestWindowFlags(Qt::WindowFlags flags) +{ + if (m_decoration) { + if (flags & Qt::FramelessWindowHint) + m_decoration->requestMode(QWaylandXdgToplevelDecorationV1::mode_client_side); + else + m_decoration->unsetMode(); + } +} + +void QWaylandXdgSurface::Toplevel::requestWindowStates(Qt::WindowStates states) +{ + // Re-send what's different from the applied state + Qt::WindowStates changedStates = m_applied.states ^ states; + + if (changedStates & Qt::WindowMaximized) { + if (states & Qt::WindowMaximized) + set_maximized(); + else + unset_maximized(); + } + + if (changedStates & Qt::WindowFullScreen) { + if (states & Qt::WindowFullScreen) + set_fullscreen(nullptr); + else + unset_fullscreen(); + } + + // Minimized state is not reported by the protocol, so always send it + if (states & Qt::WindowMinimized) { + set_minimized(); + m_xdgSurface->window()->handleWindowStatesChanged(states & ~Qt::WindowMinimized); + } +} + +QWaylandXdgSurface::Popup::Popup(QWaylandXdgSurface *xdgSurface, QWaylandXdgSurface *parent, + QtWayland::xdg_positioner *positioner) + : xdg_popup(xdgSurface->get_popup(parent->object(), positioner->object())) + , m_xdgSurface(xdgSurface) + , m_parent(parent) +{ +} + +QWaylandXdgSurface::Popup::~Popup() +{ + if (isInitialized()) + destroy(); + + if (m_grabbing) { + auto *shell = m_xdgSurface->m_shell; + Q_ASSERT(shell->m_topmostGrabbingPopup == this); + shell->m_topmostGrabbingPopup = m_parent->m_popup; + } +} + +void QWaylandXdgSurface::Popup::grab(QWaylandInputDevice *seat, uint serial) +{ + m_xdgSurface->m_shell->m_topmostGrabbingPopup = this; + xdg_popup::grab(seat->wl_seat(), serial); + m_grabbing = true; +} + +void QWaylandXdgSurface::Popup::xdg_popup_popup_done() +{ + m_xdgSurface->m_window->window()->close(); +} + +QWaylandXdgSurface::QWaylandXdgSurface(QWaylandXdgShell *shell, ::xdg_surface *surface, QWaylandWindow *window) + : QWaylandShellSurface(window) + , xdg_surface(surface) + , m_shell(shell) + , m_window(window) +{ + QWaylandDisplay *display = window->display(); + Qt::WindowType type = window->window()->type(); + auto *transientParent = window->transientParent(); + + if (type == Qt::ToolTip && transientParent) { + setPopup(transientParent); + } else if (type == Qt::Popup && transientParent && display->lastInputDevice()) { + setGrabPopup(transientParent, display->lastInputDevice(), display->lastInputSerial()); + } else { + setToplevel(); + if (transientParent) { + auto parentXdgSurface = static_cast(transientParent->shellSurface()); + if (parentXdgSurface) + m_toplevel->set_parent(parentXdgSurface->m_toplevel->object()); + } + } +} + +QWaylandXdgSurface::~QWaylandXdgSurface() +{ + if (m_toplevel) { + delete m_toplevel; + m_toplevel = nullptr; + } + if (m_popup) { + delete m_popup; + m_popup = nullptr; + } + destroy(); +} + +void QWaylandXdgSurface::resize(QWaylandInputDevice *inputDevice, xdg_toplevel_resize_edge edges) +{ + Q_ASSERT(m_toplevel && m_toplevel->isInitialized()); + m_toplevel->resize(inputDevice->wl_seat(), inputDevice->serial(), edges); +} + +void QWaylandXdgSurface::resize(QWaylandInputDevice *inputDevice, enum wl_shell_surface_resize edges) +{ + auto xdgEdges = reinterpret_cast(&edges); + resize(inputDevice, *xdgEdges); +} + + +bool QWaylandXdgSurface::move(QWaylandInputDevice *inputDevice) +{ + if (m_toplevel && m_toplevel->isInitialized()) { + m_toplevel->move(inputDevice->wl_seat(), inputDevice->serial()); + return true; + } + return false; +} + +void QWaylandXdgSurface::setTitle(const QString &title) +{ + if (m_toplevel) + m_toplevel->set_title(title); +} + +void QWaylandXdgSurface::setAppId(const QString &appId) +{ + if (m_toplevel) + m_toplevel->set_app_id(appId); +} + +void QWaylandXdgSurface::setWindowFlags(Qt::WindowFlags flags) +{ + if (m_toplevel) + m_toplevel->requestWindowFlags(flags); +} + +bool QWaylandXdgSurface::isExposed() const +{ + return m_configured || m_pendingConfigureSerial; +} + +bool QWaylandXdgSurface::handleExpose(const QRegion ®ion) +{ + if (!isExposed() && !region.isEmpty()) { + m_exposeRegion = region; + return true; + } + return false; +} + +void QWaylandXdgSurface::applyConfigure() +{ + Q_ASSERT(m_pendingConfigureSerial != 0); + + if (m_toplevel) + m_toplevel->applyConfigure(); + + m_configured = true; + ack_configure(m_pendingConfigureSerial); + + m_pendingConfigureSerial = 0; +} + +bool QWaylandXdgSurface::wantsDecorations() const +{ + return m_toplevel && m_toplevel->wantsDecorations(); +} + +void QWaylandXdgSurface::requestWindowStates(Qt::WindowStates states) +{ + if (m_toplevel) + m_toplevel->requestWindowStates(states); + else + qCWarning(lcQpaWayland) << "Non-toplevel surfaces can't request window states"; +} + +void QWaylandXdgSurface::setToplevel() +{ + Q_ASSERT(!m_toplevel && !m_popup); + m_toplevel = new Toplevel(this); +} + +void QWaylandXdgSurface::setPopup(QWaylandWindow *parent) +{ + Q_ASSERT(!m_toplevel && !m_popup); + + auto parentXdgSurface = static_cast(parent->shellSurface()); + + auto positioner = new QtWayland::xdg_positioner(m_shell->create_positioner()); + // set_popup expects a position relative to the parent + QPoint transientPos = m_window->geometry().topLeft(); // this is absolute + transientPos -= parent->geometry().topLeft(); + if (parent->decoration()) { + transientPos.setX(transientPos.x() + parent->decoration()->margins().left()); + transientPos.setY(transientPos.y() + parent->decoration()->margins().top()); + } + positioner->set_anchor_rect(transientPos.x(), transientPos.y(), 1, 1); + positioner->set_anchor(QtWayland::xdg_positioner::anchor_top_left); + positioner->set_gravity(QtWayland::xdg_positioner::gravity_bottom_right); + positioner->set_size(m_window->geometry().width(), m_window->geometry().height()); + m_popup = new Popup(this, parentXdgSurface, positioner); + positioner->destroy(); + delete positioner; +} + +void QWaylandXdgSurface::setGrabPopup(QWaylandWindow *parent, QWaylandInputDevice *device, int serial) +{ + auto parentXdgSurface = static_cast(parent->shellSurface()); + auto *top = m_shell->m_topmostGrabbingPopup; + + if (top && top->m_xdgSurface != parentXdgSurface) { + qCWarning(lcQpaWayland) << "setGrabPopup called with a parent," << parentXdgSurface + << "which does not match the current topmost grabbing popup," + << top->m_xdgSurface << "According to the xdg-shell protocol, this" + << "is not allowed. The wayland QPA plugin is currently handling" + << "it by setting the parent to the topmost grabbing popup." + << "Note, however, that this may cause positioning errors and" + << "popups closing unxpectedly because xdg-shell mandate that child" + << "popups close before parents"; + parent = top->m_xdgSurface->m_window; + } + setPopup(parent); + m_popup->grab(device, serial); +} + +void QWaylandXdgSurface::xdg_surface_configure(uint32_t serial) +{ + m_pendingConfigureSerial = serial; + if (!m_configured) { + // We have to do the initial applyConfigure() immediately, since that is the expose. + applyConfigure(); + m_exposeRegion = QRegion(QRect(QPoint(), m_window->geometry().size())); + } else { + // Later configures are probably resizes, so we have to queue them up for a time when we + // are not painting to the window. + m_window->applyConfigureWhenPossible(); + } + + if (!m_exposeRegion.isEmpty()) { + m_window->handleExpose(m_exposeRegion); + m_exposeRegion = QRegion(); + } +} + +QWaylandXdgShell::QWaylandXdgShell(QWaylandDisplay *display, uint32_t id, uint32_t availableVersion) + : QtWayland::xdg_wm_base(display->wl_registry(), id, qMin(availableVersion, 1u)) + , m_display(display) +{ + display->addRegistryListener(&QWaylandXdgShell::handleRegistryGlobal, this); +} + +QWaylandXdgShell::~QWaylandXdgShell() +{ + m_display->removeListener(&QWaylandXdgShell::handleRegistryGlobal, this); + destroy(); +} + +QWaylandXdgSurface *QWaylandXdgShell::getXdgSurface(QWaylandWindow *window) +{ + return new QWaylandXdgSurface(this, get_xdg_surface(window->object()), window); +} + +void QWaylandXdgShell::xdg_wm_base_ping(uint32_t serial) +{ + pong(serial); +} + +void QWaylandXdgShell::handleRegistryGlobal(void *data, wl_registry *registry, uint id, + const QString &interface, uint version) +{ + QWaylandXdgShell *xdgShell = static_cast(data); + if (interface == QLatin1String(QWaylandXdgDecorationManagerV1::interface()->name)) + xdgShell->m_xdgDecorationManager.reset(new QWaylandXdgDecorationManagerV1(registry, id, version)); +} + +} + +QT_END_NAMESPACE diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell/qwaylandxdgshellintegration.cpp qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell/qwaylandxdgshellintegration.cpp --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell/qwaylandxdgshellintegration.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell/qwaylandxdgshellintegration.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwaylandxdgshellintegration_p.h" +#include "qwaylandxdgdecorationv1_p.h" + +#include +#include + +QT_BEGIN_NAMESPACE + +namespace QtWaylandClient { + +bool QWaylandXdgShellIntegration::initialize(QWaylandDisplay *display) +{ + for (QWaylandDisplay::RegistryGlobal global : display->globals()) { + if (global.interface == QLatin1String("xdg_wm_base")) { + m_xdgShell.reset(new QWaylandXdgShell(display, global.id, global.version)); + break; + } + } + + if (!m_xdgShell) { + qCDebug(lcQpaWayland) << "Couldn't find global xdg_wm_base for xdg-shell stable"; + return false; + } + + return QWaylandShellIntegration::initialize(display); +} + +QWaylandShellSurface *QWaylandXdgShellIntegration::createShellSurface(QWaylandWindow *window) +{ + return m_xdgShell->getXdgSurface(window); +} + +void QWaylandXdgShellIntegration::handleKeyboardFocusChanged(QWaylandWindow *newFocus, QWaylandWindow *oldFocus) +{ + if (newFocus) { + auto *xdgSurface = qobject_cast(newFocus->shellSurface()); + if (xdgSurface && !xdgSurface->handlesActiveState()) + m_display->handleWindowActivated(newFocus); + } + if (oldFocus && qobject_cast(oldFocus->shellSurface())) { + auto *xdgSurface = qobject_cast(oldFocus->shellSurface()); + if (xdgSurface && !xdgSurface->handlesActiveState()) + m_display->handleWindowDeactivated(oldFocus); + } +} + +} + +QT_END_NAMESPACE diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell/qwaylandxdgshellintegration_p.h qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell/qwaylandxdgshellintegration_p.h --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell/qwaylandxdgshellintegration_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell/qwaylandxdgshellintegration_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWAYLANDXDGSHELLINTEGRATION_P_H +#define QWAYLANDXDGSHELLINTEGRATION_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include "qwaylandxdgshell_p.h" + +#include + +QT_BEGIN_NAMESPACE + +namespace QtWaylandClient { + +class Q_WAYLAND_CLIENT_EXPORT QWaylandXdgShellIntegration : public QWaylandShellIntegration +{ +public: + QWaylandXdgShellIntegration() {} + bool initialize(QWaylandDisplay *display) override; + QWaylandShellSurface *createShellSurface(QWaylandWindow *window) override; + void handleKeyboardFocusChanged(QWaylandWindow *newFocus, QWaylandWindow *oldFocus) override; + +private: + QScopedPointer m_xdgShell; +}; + +} + +QT_END_NAMESPACE + +#endif // QWAYLANDXDGSHELLINTEGRATION_P_H diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,182 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Copyright (C) 2017 Eurogiciel, author: +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the config.tests of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWAYLANDXDGSHELL_H +#define QWAYLANDXDGSHELL_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include "qwayland-xdg-shell.h" + +#include "qwaylandxdgdecorationv1_p.h" + +#include +#include + +#include +#include + +#include + +QT_BEGIN_NAMESPACE + +class QWindow; + +namespace QtWaylandClient { + +class QWaylandDisplay; +class QWaylandWindow; +class QWaylandInputDevice; +class QWaylandXdgShell; + +class Q_WAYLAND_CLIENT_EXPORT QWaylandXdgSurface : public QWaylandShellSurface, public QtWayland::xdg_surface +{ + Q_OBJECT +public: + QWaylandXdgSurface(QWaylandXdgShell *shell, ::xdg_surface *surface, QWaylandWindow *window); + ~QWaylandXdgSurface() override; + + void resize(QWaylandInputDevice *inputDevice, enum xdg_toplevel_resize_edge edges); + void resize(QWaylandInputDevice *inputDevice, enum wl_shell_surface_resize edges) override; + bool move(QWaylandInputDevice *inputDevice) override; + void setTitle(const QString &title) override; + void setAppId(const QString &appId) override; + void setWindowFlags(Qt::WindowFlags flags) override; + + bool isExposed() const override; + bool handleExpose(const QRegion &) override; + bool handlesActiveState() const { return m_toplevel; } + void applyConfigure() override; + bool wantsDecorations() const override; + +protected: + void requestWindowStates(Qt::WindowStates states) override; + void xdg_surface_configure(uint32_t serial) override; + +private: + class Toplevel: public QtWayland::xdg_toplevel + { + public: + Toplevel(QWaylandXdgSurface *xdgSurface); + ~Toplevel() override; + + void applyConfigure(); + bool wantsDecorations(); + + void xdg_toplevel_configure(int32_t width, int32_t height, wl_array *states) override; + void xdg_toplevel_close() override; + + void requestWindowFlags(Qt::WindowFlags flags); + void requestWindowStates(Qt::WindowStates states); + struct { + QSize size = {0, 0}; + Qt::WindowStates states = Qt::WindowNoState; + } m_pending, m_applied; + QSize m_normalSize; + + QWaylandXdgSurface *m_xdgSurface = nullptr; + QWaylandXdgToplevelDecorationV1 *m_decoration = nullptr; + }; + + class Popup : public QtWayland::xdg_popup { + public: + Popup(QWaylandXdgSurface *xdgSurface, QWaylandXdgSurface *parent, QtWayland::xdg_positioner *positioner); + ~Popup() override; + + void grab(QWaylandInputDevice *seat, uint serial); + void xdg_popup_popup_done() override; + + QWaylandXdgSurface *m_xdgSurface = nullptr; + QWaylandXdgSurface *m_parent = nullptr; + bool m_grabbing = false; + }; + + void setToplevel(); + void setPopup(QWaylandWindow *parent); + void setGrabPopup(QWaylandWindow *parent, QWaylandInputDevice *device, int serial); + + QWaylandXdgShell *m_shell = nullptr; + QWaylandWindow *m_window = nullptr; + Toplevel *m_toplevel = nullptr; + Popup *m_popup = nullptr; + bool m_configured = false; + QRegion m_exposeRegion; + uint m_pendingConfigureSerial = 0; + + friend class QWaylandXdgShell; +}; + +class Q_WAYLAND_CLIENT_EXPORT QWaylandXdgShell : public QtWayland::xdg_wm_base +{ +public: + QWaylandXdgShell(QWaylandDisplay *display, uint32_t id, uint32_t availableVersion); + ~QWaylandXdgShell() override; + + QWaylandXdgDecorationManagerV1 *decorationManager() { return m_xdgDecorationManager.data(); } + QWaylandXdgSurface *getXdgSurface(QWaylandWindow *window); + +protected: + void xdg_wm_base_ping(uint32_t serial) override; + +private: + static void handleRegistryGlobal(void *data, ::wl_registry *registry, uint id, + const QString &interface, uint version); + + QWaylandDisplay *m_display = nullptr; + QScopedPointer m_xdgDecorationManager; + QWaylandXdgSurface::Popup *m_topmostGrabbingPopup = nullptr; + + friend class QWaylandXdgSurface; +}; + +QT_END_NAMESPACE + +} + +#endif // QWAYLANDXDGSHELL_H diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell/xdg-shell.json qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell/xdg-shell.json --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell/xdg-shell.json 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell/xdg-shell.json 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,3 @@ +{ + "Keys":[ "xdg-shell" ] +} diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell/xdg-shell.pro qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell/xdg-shell.pro --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell/xdg-shell.pro 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell/xdg-shell.pro 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,28 @@ +QT += gui-private waylandclient-private +CONFIG += wayland-scanner + +QMAKE_USE += wayland-client +qtConfig(xkbcommon): \ + QMAKE_USE_PRIVATE += xkbcommon + +WAYLANDCLIENTSOURCES += \ + ../../../3rdparty/protocol/xdg-decoration-unstable-v1.xml \ + ../../../3rdparty/protocol/xdg-shell.xml + +HEADERS += \ + qwaylandxdgdecorationv1_p.h \ + qwaylandxdgshell_p.h \ + qwaylandxdgshellintegration_p.h \ + +SOURCES += \ + main.cpp \ + qwaylandxdgdecorationv1.cpp \ + qwaylandxdgshell.cpp \ + qwaylandxdgshellintegration.cpp \ + +OTHER_FILES += \ + xdg-shell.json + +PLUGIN_TYPE = wayland-shell-integration +PLUGIN_CLASS_NAME = QWaylandXdgShellIntegrationPlugin +load(qt_plugin) diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v5/main.cpp qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v5/main.cpp --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v5/main.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v5/main.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Copyright (C) 2017 ITAGE Corporation, author: +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwaylandxdgshellv5integration_p.h" + +#include + +QT_BEGIN_NAMESPACE + +namespace QtWaylandClient { + +class QWaylandXdgShellV5IntegrationPlugin : public QWaylandShellIntegrationPlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID QWaylandShellIntegrationFactoryInterface_iid FILE "xdg-shell-v5.json") + +public: + QWaylandShellIntegration *create(const QString &key, const QStringList ¶mList) override; +}; + +QWaylandShellIntegration *QWaylandXdgShellV5IntegrationPlugin::create(const QString &key, const QStringList ¶mList) +{ + Q_UNUSED(key); + Q_UNUSED(paramList); + return new QWaylandXdgShellV5Integration(); +} + +} + +QT_END_NAMESPACE + +#include "main.moc" diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v5/pregenerated/3rdparty/qwayland-xdg-shell-unstable-v5.cpp qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v5/pregenerated/3rdparty/qwayland-xdg-shell-unstable-v5.cpp --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v5/pregenerated/3rdparty/qwayland-xdg-shell-unstable-v5.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v5/pregenerated/3rdparty/qwayland-xdg-shell-unstable-v5.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,398 @@ +// Hand-edited to resolve conflicts with xdg-shell stable +/* + * Copyright © 2008-2013 Kristian Høgsberg + * Copyright © 2013 Rafael Antognolli + * Copyright © 2013 Jasper St. Pierre + * Copyright © 2010-2013 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ +#include "qwayland-xdg-shell-unstable-v5_p.h" + +QT_BEGIN_NAMESPACE +QT_WARNING_PUSH +QT_WARNING_DISABLE_GCC("-Wmissing-field-initializers") + +namespace QtWayland { + xdg_shell_v5::xdg_shell_v5(struct ::wl_registry *registry, int id, int version) + { + init(registry, id, version); + } + + xdg_shell_v5::xdg_shell_v5(struct ::xdg_shell_v5 *obj) + : m_xdg_shell(obj) + { + init_listener(); + } + + xdg_shell_v5::xdg_shell_v5() + : m_xdg_shell(nullptr) + { + } + + xdg_shell_v5::~xdg_shell_v5() + { + } + + void xdg_shell_v5::init(struct ::wl_registry *registry, int id, int version) + { + m_xdg_shell = static_cast(wl_registry_bind(registry, id, &xdg_shell_v5_interface, version)); + init_listener(); + } + + void xdg_shell_v5::init(struct ::xdg_shell_v5 *obj) + { + m_xdg_shell = obj; + init_listener(); + } + + bool xdg_shell_v5::isInitialized() const + { + return m_xdg_shell != nullptr; + } + + const struct wl_interface *xdg_shell_v5::interface() + { + return &::xdg_shell_v5_interface; + } + + void xdg_shell_v5::destroy() + { + xdg_shell_destroy( + m_xdg_shell); + m_xdg_shell = nullptr; + } + + void xdg_shell_v5::use_unstable_version(int32_t version) + { + xdg_shell_use_unstable_version( + m_xdg_shell, + version); + } + + struct ::xdg_surface_v5 *xdg_shell_v5::get_xdg_surface(struct ::wl_surface *surface) + { + return xdg_shell_get_xdg_surface( + m_xdg_shell, + surface); + } + + struct ::xdg_popup_v5 *xdg_shell_v5::get_xdg_popup(struct ::wl_surface *surface, struct ::wl_surface *parent, struct ::wl_seat *seat, uint32_t serial, int32_t x, int32_t y) + { + return xdg_shell_get_xdg_popup( + m_xdg_shell, + surface, + parent, + seat, + serial, + x, + y); + } + + void xdg_shell_v5::pong(uint32_t serial) + { + xdg_shell_pong( + m_xdg_shell, + serial); + } + + void xdg_shell_v5::xdg_shell_ping(uint32_t ) + { + } + + void xdg_shell_v5::handle_ping( + void *data, + struct ::xdg_shell_v5 *object, + uint32_t serial) + { + Q_UNUSED(object); + static_cast(data)->xdg_shell_ping( + serial); + } + + const struct xdg_shell_listener xdg_shell_v5::m_xdg_shell_listener = { + xdg_shell_v5::handle_ping + }; + + void xdg_shell_v5::init_listener() + { + xdg_shell_add_listener(m_xdg_shell, &m_xdg_shell_listener, this); + } + + xdg_surface_v5::xdg_surface_v5(struct ::wl_registry *registry, int id, int version) + { + init(registry, id, version); + } + + xdg_surface_v5::xdg_surface_v5(struct ::xdg_surface_v5 *obj) + : m_xdg_surface(obj) + { + init_listener(); + } + + xdg_surface_v5::xdg_surface_v5() + : m_xdg_surface(nullptr) + { + } + + xdg_surface_v5::~xdg_surface_v5() + { + } + + void xdg_surface_v5::init(struct ::wl_registry *registry, int id, int version) + { + m_xdg_surface = static_cast(wl_registry_bind(registry, id, &xdg_surface_v5_interface, version)); + init_listener(); + } + + void xdg_surface_v5::init(struct ::xdg_surface_v5 *obj) + { + m_xdg_surface = obj; + init_listener(); + } + + bool xdg_surface_v5::isInitialized() const + { + return m_xdg_surface != nullptr; + } + + const struct wl_interface *xdg_surface_v5::interface() + { + return &::xdg_surface_v5_interface; + } + + void xdg_surface_v5::destroy() + { + xdg_surface_destroy( + m_xdg_surface); + m_xdg_surface = nullptr; + } + + void xdg_surface_v5::set_parent(struct ::xdg_surface_v5 *parent) + { + xdg_surface_set_parent( + m_xdg_surface, + parent); + } + + void xdg_surface_v5::set_title(const QString &title) + { + xdg_surface_set_title( + m_xdg_surface, + title.toUtf8().constData()); + } + + void xdg_surface_v5::set_app_id(const QString &app_id) + { + xdg_surface_set_app_id( + m_xdg_surface, + app_id.toUtf8().constData()); + } + + void xdg_surface_v5::show_window_menu(struct ::wl_seat *seat, uint32_t serial, int32_t x, int32_t y) + { + xdg_surface_show_window_menu( + m_xdg_surface, + seat, + serial, + x, + y); + } + + void xdg_surface_v5::move(struct ::wl_seat *seat, uint32_t serial) + { + xdg_surface_move( + m_xdg_surface, + seat, + serial); + } + + void xdg_surface_v5::resize(struct ::wl_seat *seat, uint32_t serial, uint32_t edges) + { + xdg_surface_resize( + m_xdg_surface, + seat, + serial, + edges); + } + + void xdg_surface_v5::ack_configure(uint32_t serial) + { + xdg_surface_ack_configure( + m_xdg_surface, + serial); + } + + void xdg_surface_v5::set_window_geometry(int32_t x, int32_t y, int32_t width, int32_t height) + { + xdg_surface_set_window_geometry( + m_xdg_surface, + x, + y, + width, + height); + } + + void xdg_surface_v5::set_maximized() + { + xdg_surface_set_maximized( + m_xdg_surface); + } + + void xdg_surface_v5::unset_maximized() + { + xdg_surface_unset_maximized( + m_xdg_surface); + } + + void xdg_surface_v5::set_fullscreen(struct ::wl_output *output) + { + xdg_surface_set_fullscreen( + m_xdg_surface, + output); + } + + void xdg_surface_v5::unset_fullscreen() + { + xdg_surface_unset_fullscreen( + m_xdg_surface); + } + + void xdg_surface_v5::set_minimized() + { + xdg_surface_set_minimized( + m_xdg_surface); + } + + void xdg_surface_v5::xdg_surface_configure(int32_t , int32_t , wl_array *, uint32_t ) + { + } + + void xdg_surface_v5::handle_configure( + void *data, + struct ::xdg_surface_v5 *object, + int32_t width, + int32_t height, + wl_array *states, + uint32_t serial) + { + Q_UNUSED(object); + static_cast(data)->xdg_surface_configure( + width, + height, + states, + serial); + } + + void xdg_surface_v5::xdg_surface_close() + { + } + + void xdg_surface_v5::handle_close( + void *data, + struct ::xdg_surface_v5 *object) + { + Q_UNUSED(object); + static_cast(data)->xdg_surface_close(); + } + + const struct xdg_surface_listener xdg_surface_v5::m_xdg_surface_listener = { + xdg_surface_v5::handle_configure, + xdg_surface_v5::handle_close + }; + + void xdg_surface_v5::init_listener() + { + xdg_surface_add_listener(m_xdg_surface, &m_xdg_surface_listener, this); + } + + xdg_popup_v5::xdg_popup_v5(struct ::wl_registry *registry, int id, int version) + { + init(registry, id, version); + } + + xdg_popup_v5::xdg_popup_v5(struct ::xdg_popup_v5 *obj) + : m_xdg_popup(obj) + { + init_listener(); + } + + xdg_popup_v5::xdg_popup_v5() + : m_xdg_popup(nullptr) + { + } + + xdg_popup_v5::~xdg_popup_v5() + { + } + + void xdg_popup_v5::init(struct ::wl_registry *registry, int id, int version) + { + m_xdg_popup = static_cast(wl_registry_bind(registry, id, &xdg_popup_v5_interface, version)); + init_listener(); + } + + void xdg_popup_v5::init(struct ::xdg_popup_v5 *obj) + { + m_xdg_popup = obj; + init_listener(); + } + + bool xdg_popup_v5::isInitialized() const + { + return m_xdg_popup != nullptr; + } + + const struct wl_interface *xdg_popup_v5::interface() + { + return &::xdg_popup_v5_interface; + } + + void xdg_popup_v5::destroy() + { + xdg_popup_destroy( + m_xdg_popup); + m_xdg_popup = nullptr; + } + + void xdg_popup_v5::xdg_popup_popup_done() + { + } + + void xdg_popup_v5::handle_popup_done( + void *data, + struct ::xdg_popup_v5 *object) + { + Q_UNUSED(object); + static_cast(data)->xdg_popup_popup_done(); + } + + const struct xdg_popup_listener xdg_popup_v5::m_xdg_popup_listener = { + xdg_popup_v5::handle_popup_done + }; + + void xdg_popup_v5::init_listener() + { + xdg_popup_add_listener(m_xdg_popup, &m_xdg_popup_listener, this); + } +} + +QT_WARNING_POP +QT_END_NAMESPACE diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v5/pregenerated/3rdparty/qwayland-xdg-shell-unstable-v5_p.h qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v5/pregenerated/3rdparty/qwayland-xdg-shell-unstable-v5_p.h --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v5/pregenerated/3rdparty/qwayland-xdg-shell-unstable-v5_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v5/pregenerated/3rdparty/qwayland-xdg-shell-unstable-v5_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,198 @@ +// Hand-edited to resolve conflicts with xdg-shell stable +/* + * Copyright © 2008-2013 Kristian Høgsberg + * Copyright © 2013 Rafael Antognolli + * Copyright © 2013 Jasper St. Pierre + * Copyright © 2010-2013 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ +#ifndef QT_WAYLAND_XDG_SHELL_UNSTABLE_V5 +#define QT_WAYLAND_XDG_SHELL_UNSTABLE_V5 + +#include "wayland-xdg-shell-unstable-v5-client-protocol_p.h" +#include +#include + +QT_BEGIN_NAMESPACE +QT_WARNING_PUSH +QT_WARNING_DISABLE_GCC("-Wmissing-field-initializers") + +namespace QtWayland { + class xdg_shell_v5 + { + public: + xdg_shell_v5(struct ::wl_registry *registry, int id, int version); + xdg_shell_v5(struct ::xdg_shell_v5 *object); + xdg_shell_v5(); + + virtual ~xdg_shell_v5(); + + void init(struct ::wl_registry *registry, int id, int version); + void init(struct ::xdg_shell_v5 *object); + + struct ::xdg_shell_v5 *object() { return m_xdg_shell; } + const struct ::xdg_shell_v5 *object() const { return m_xdg_shell; } + + bool isInitialized() const; + + static const struct ::wl_interface *interface(); + + enum version { + version_current = 5 // Always the latest version + }; + + enum error { + error_role = 0, // given wl_surface has another role + error_defunct_surfaces = 1, // xdg_shell was destroyed before children + error_not_the_topmost_popup = 2, // the client tried to map or destroy a non-topmost popup + error_invalid_popup_parent = 3 // the client specified an invalid popup parent surface + }; + + void destroy(); + void use_unstable_version(int32_t version); + struct ::xdg_surface_v5 *get_xdg_surface(struct ::wl_surface *surface); + struct ::xdg_popup_v5 *get_xdg_popup(struct ::wl_surface *surface, struct ::wl_surface *parent, struct ::wl_seat *seat, uint32_t serial, int32_t x, int32_t y); + void pong(uint32_t serial); + + protected: + virtual void xdg_shell_ping(uint32_t serial); + + private: + void init_listener(); + static const struct xdg_shell_listener m_xdg_shell_listener; + static void handle_ping( + void *data, + struct ::xdg_shell_v5 *object, + uint32_t serial); + struct ::xdg_shell_v5 *m_xdg_shell; + }; + + class xdg_surface_v5 + { + public: + xdg_surface_v5(struct ::wl_registry *registry, int id, int version); + xdg_surface_v5(struct ::xdg_surface_v5 *object); + xdg_surface_v5(); + + virtual ~xdg_surface_v5(); + + void init(struct ::wl_registry *registry, int id, int version); + void init(struct ::xdg_surface_v5 *object); + + struct ::xdg_surface_v5 *object() { return m_xdg_surface; } + const struct ::xdg_surface_v5 *object() const { return m_xdg_surface; } + + bool isInitialized() const; + + static const struct ::wl_interface *interface(); + + enum resize_edge { + resize_edge_none = 0, + resize_edge_top = 1, + resize_edge_bottom = 2, + resize_edge_left = 4, + resize_edge_top_left = 5, + resize_edge_bottom_left = 6, + resize_edge_right = 8, + resize_edge_top_right = 9, + resize_edge_bottom_right = 10 + }; + + enum state { + state_maximized = 1, // the surface is maximized + state_fullscreen = 2, // the surface is fullscreen + state_resizing = 3, + state_activated = 4 + }; + + void destroy(); + void set_parent(struct ::xdg_surface_v5 *parent); + void set_title(const QString &title); + void set_app_id(const QString &app_id); + void show_window_menu(struct ::wl_seat *seat, uint32_t serial, int32_t x, int32_t y); + void move(struct ::wl_seat *seat, uint32_t serial); + void resize(struct ::wl_seat *seat, uint32_t serial, uint32_t edges); + void ack_configure(uint32_t serial); + void set_window_geometry(int32_t x, int32_t y, int32_t width, int32_t height); + void set_maximized(); + void unset_maximized(); + void set_fullscreen(struct ::wl_output *output); + void unset_fullscreen(); + void set_minimized(); + + protected: + virtual void xdg_surface_configure(int32_t width, int32_t height, wl_array *states, uint32_t serial); + virtual void xdg_surface_close(); + + private: + void init_listener(); + static const struct xdg_surface_listener m_xdg_surface_listener; + static void handle_configure( + void *data, + struct ::xdg_surface_v5 *object, + int32_t width, + int32_t height, + wl_array *states, + uint32_t serial); + static void handle_close( + void *data, + struct ::xdg_surface_v5 *object); + struct ::xdg_surface_v5 *m_xdg_surface; + }; + + class xdg_popup_v5 + { + public: + xdg_popup_v5(struct ::wl_registry *registry, int id, int version); + xdg_popup_v5(struct ::xdg_popup_v5 *object); + xdg_popup_v5(); + + virtual ~xdg_popup_v5(); + + void init(struct ::wl_registry *registry, int id, int version); + void init(struct ::xdg_popup_v5 *object); + + struct ::xdg_popup_v5 *object() { return m_xdg_popup; } + const struct ::xdg_popup_v5 *object() const { return m_xdg_popup; } + + bool isInitialized() const; + + static const struct ::wl_interface *interface(); + + void destroy(); + + protected: + virtual void xdg_popup_popup_done(); + + private: + void init_listener(); + static const struct xdg_popup_listener m_xdg_popup_listener; + static void handle_popup_done( + void *data, + struct ::xdg_popup_v5 *object); + struct ::xdg_popup_v5 *m_xdg_popup; + }; +} + +QT_WARNING_POP +QT_END_NAMESPACE + +#endif diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v5/pregenerated/3rdparty/wayland-xdg-shell-unstable-v5-client-protocol_p.h qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v5/pregenerated/3rdparty/wayland-xdg-shell-unstable-v5-client-protocol_p.h --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v5/pregenerated/3rdparty/wayland-xdg-shell-unstable-v5-client-protocol_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v5/pregenerated/3rdparty/wayland-xdg-shell-unstable-v5-client-protocol_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,1119 @@ +/* Generated by wayland-scanner 1.13.0 */ +// Hand-edited to resolve conflicts with xdg-shell stable +// And make it build with libwayland < 1.10 + +#ifndef XDG_SHELL_UNSTABLE_V5_CLIENT_PROTOCOL_H +#define XDG_SHELL_UNSTABLE_V5_CLIENT_PROTOCOL_H + +#include +#include +#include "wayland-client.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @page page_xdg_shell_unstable_v5 The xdg_shell_unstable_v5 protocol + * @section page_ifaces_xdg_shell_unstable_v5 Interfaces + * - @subpage page_iface_xdg_shell_v5 - create desktop-style surfaces + * - @subpage page_iface_xdg_surface_v5 - A desktop window + * - @subpage page_iface_xdg_popup_v5 - short-lived, popup surfaces for menus + * @section page_copyright_xdg_shell_unstable_v5 Copyright + *
+ *
+ * Copyright © 2008-2013 Kristian Høgsberg
+ * Copyright © 2013      Rafael Antognolli
+ * Copyright © 2013      Jasper St. Pierre
+ * Copyright © 2010-2013 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ * 
+ */ +struct wl_output; +struct wl_seat; +struct wl_surface; +struct xdg_popup_v5; +struct xdg_shell_v5; +struct xdg_surface_v5; + +/** + * @page page_iface_xdg_shell_v5 xdg_shell + * @section page_iface_xdg_shell_desc Description + * + * xdg_shell_v5 allows clients to turn a wl_surface into a "real window" + * which can be dragged, resized, stacked, and moved around by the + * user. Everything about this interface is suited towards traditional + * desktop environments. + * @section page_iface_xdg_shell_api API + * See @ref iface_xdg_shell. + */ +/** + * @defgroup iface_xdg_shell_v5 The xdg_shell_v5 interface + * + * xdg_shell_v5 allows clients to turn a wl_surface into a "real window" + * which can be dragged, resized, stacked, and moved around by the + * user. Everything about this interface is suited towards traditional + * desktop environments. + */ +extern const struct wl_interface xdg_shell_v5_interface; +/** + * @page page_iface_xdg_surface_v5 xdg_surface + * @section page_iface_xdg_surface_desc Description + * + * An interface that may be implemented by a wl_surface, for + * implementations that provide a desktop-style user interface. + * + * It provides requests to treat surfaces like windows, allowing to set + * properties like maximized, fullscreen, minimized, and to move and resize + * them, and associate metadata like title and app id. + * + * The client must call wl_surface.commit on the corresponding wl_surface + * for the xdg_surface_v5 state to take effect. Prior to committing the new + * state, it can set up initial configuration, such as maximizing or setting + * a window geometry. + * + * Even without attaching a buffer the compositor must respond to initial + * committed configuration, for instance sending a configure event with + * expected window geometry if the client maximized its surface during + * initialization. + * + * For a surface to be mapped by the compositor the client must have + * committed both an xdg_surface_v5 state and a buffer. + * @section page_iface_xdg_surface_api API + * See @ref iface_xdg_surface. + */ +/** + * @defgroup iface_xdg_surface_v5 The xdg_surface_v5 interface + * + * An interface that may be implemented by a wl_surface, for + * implementations that provide a desktop-style user interface. + * + * It provides requests to treat surfaces like windows, allowing to set + * properties like maximized, fullscreen, minimized, and to move and resize + * them, and associate metadata like title and app id. + * + * The client must call wl_surface.commit on the corresponding wl_surface + * for the xdg_surface_v5 state to take effect. Prior to committing the new + * state, it can set up initial configuration, such as maximizing or setting + * a window geometry. + * + * Even without attaching a buffer the compositor must respond to initial + * committed configuration, for instance sending a configure event with + * expected window geometry if the client maximized its surface during + * initialization. + * + * For a surface to be mapped by the compositor the client must have + * committed both an xdg_surface_v5 state and a buffer. + */ +extern const struct wl_interface xdg_surface_v5_interface; +/** + * @page page_iface_xdg_popup_v5 xdg_popup + * @section page_iface_xdg_popup_desc Description + * + * A popup surface is a short-lived, temporary surface that can be + * used to implement menus. It takes an explicit grab on the surface + * that will be dismissed when the user dismisses the popup. This can + * be done by the user clicking outside the surface, using the keyboard, + * or even locking the screen through closing the lid or a timeout. + * + * When the popup is dismissed, a popup_done event will be sent out, + * and at the same time the surface will be unmapped. The xdg_popup + * object is now inert and cannot be reactivated, so clients should + * destroy it. Explicitly destroying the xdg_popup_v5 object will also + * dismiss the popup and unmap the surface. + * + * Clients will receive events for all their surfaces during this + * grab (which is an "owner-events" grab in X11 parlance). This is + * done so that users can navigate through submenus and other + * "nested" popup windows without having to dismiss the topmost + * popup. + * + * Clients that want to dismiss the popup when another surface of + * their own is clicked should dismiss the popup using the destroy + * request. + * + * The parent surface must have either an xdg_surface_v5 or xdg_popup + * role. + * + * Specifying an xdg_popup_v5 for the parent means that the popups are + * nested, with this popup now being the topmost popup. Nested + * popups must be destroyed in the reverse order they were created + * in, e.g. the only popup you are allowed to destroy at all times + * is the topmost one. + * + * If there is an existing popup when creating a new popup, the + * parent must be the current topmost popup. + * + * A parent surface must be mapped before the new popup is mapped. + * + * When compositors choose to dismiss a popup, they will likely + * dismiss every nested popup as well. When a compositor dismisses + * popups, it will follow the same dismissing order as required + * from the client. + * + * The x and y arguments passed when creating the popup object specify + * where the top left of the popup should be placed, relative to the + * local surface coordinates of the parent surface. See + * xdg_shell.get_xdg_popup. + * + * The client must call wl_surface.commit on the corresponding wl_surface + * for the xdg_popup_v5 state to take effect. + * + * For a surface to be mapped by the compositor the client must have + * committed both the xdg_popup_v5 state and a buffer. + * @section page_iface_xdg_popup_api API + * See @ref iface_xdg_popup. + */ +/** + * @defgroup iface_xdg_popup_v5 The xdg_popup_v5 interface + * + * A popup surface is a short-lived, temporary surface that can be + * used to implement menus. It takes an explicit grab on the surface + * that will be dismissed when the user dismisses the popup. This can + * be done by the user clicking outside the surface, using the keyboard, + * or even locking the screen through closing the lid or a timeout. + * + * When the popup is dismissed, a popup_done event will be sent out, + * and at the same time the surface will be unmapped. The xdg_popup + * object is now inert and cannot be reactivated, so clients should + * destroy it. Explicitly destroying the xdg_popup_v5 object will also + * dismiss the popup and unmap the surface. + * + * Clients will receive events for all their surfaces during this + * grab (which is an "owner-events" grab in X11 parlance). This is + * done so that users can navigate through submenus and other + * "nested" popup windows without having to dismiss the topmost + * popup. + * + * Clients that want to dismiss the popup when another surface of + * their own is clicked should dismiss the popup using the destroy + * request. + * + * The parent surface must have either an xdg_surface_v5 or xdg_popup + * role. + * + * Specifying an xdg_popup_v5 for the parent means that the popups are + * nested, with this popup now being the topmost popup. Nested + * popups must be destroyed in the reverse order they were created + * in, e.g. the only popup you are allowed to destroy at all times + * is the topmost one. + * + * If there is an existing popup when creating a new popup, the + * parent must be the current topmost popup. + * + * A parent surface must be mapped before the new popup is mapped. + * + * When compositors choose to dismiss a popup, they will likely + * dismiss every nested popup as well. When a compositor dismisses + * popups, it will follow the same dismissing order as required + * from the client. + * + * The x and y arguments passed when creating the popup object specify + * where the top left of the popup should be placed, relative to the + * local surface coordinates of the parent surface. See + * xdg_shell.get_xdg_popup. + * + * The client must call wl_surface.commit on the corresponding wl_surface + * for the xdg_popup_v5 state to take effect. + * + * For a surface to be mapped by the compositor the client must have + * committed both the xdg_popup_v5 state and a buffer. + */ +extern const struct wl_interface xdg_popup_v5_interface; + +#ifndef XDG_SHELL_VERSION_ENUM +#define XDG_SHELL_VERSION_ENUM +/** + * @ingroup iface_xdg_shell + * latest protocol version + * + * The 'current' member of this enum gives the version of the + * protocol. Implementations can compare this to the version + * they implement using static_assert to ensure the protocol and + * implementation versions match. + */ +enum xdg_shell_version { + /** + * Always the latest version + */ + XDG_SHELL_VERSION_CURRENT = 5, +}; +#endif /* XDG_SHELL_VERSION_ENUM */ + +#ifndef XDG_SHELL_ERROR_ENUM +#define XDG_SHELL_ERROR_ENUM +enum xdg_shell_error { + /** + * given wl_surface has another role + */ + XDG_SHELL_ERROR_ROLE = 0, + /** + * xdg_shell_v5 was destroyed before children + */ + XDG_SHELL_ERROR_DEFUNCT_SURFACES = 1, + /** + * the client tried to map or destroy a non-topmost popup + */ + XDG_SHELL_ERROR_NOT_THE_TOPMOST_POPUP = 2, + /** + * the client specified an invalid popup parent surface + */ + XDG_SHELL_ERROR_INVALID_POPUP_PARENT = 3, +}; +#endif /* XDG_SHELL_ERROR_ENUM */ + +/** + * @ingroup iface_xdg_shell + * @struct xdg_shell_listener + */ +struct xdg_shell_listener { + /** + * check if the client is alive + * + * The ping event asks the client if it's still alive. Pass the + * serial specified in the event back to the compositor by sending + * a "pong" request back with the specified serial. + * + * Compositors can use this to determine if the client is still + * alive. It's unspecified what will happen if the client doesn't + * respond to the ping request, or in what timeframe. Clients + * should try to respond in a reasonable amount of time. + * + * A compositor is free to ping in any way it wants, but a client + * must always respond to any xdg_shell_v5 object it created. + * @param serial pass this to the pong request + */ + void (*ping)(void *data, + struct xdg_shell_v5 *xdg_shell_v5, + uint32_t serial); +}; + +/** + * @ingroup iface_xdg_shell + */ +static inline int +xdg_shell_add_listener(struct xdg_shell_v5 *xdg_shell, + const struct xdg_shell_listener *listener, void *data) +{ + return wl_proxy_add_listener((struct wl_proxy *) xdg_shell, + (void (**)(void)) listener, data); +} + +#define XDG_SHELL_DESTROY 0 +#define XDG_SHELL_USE_UNSTABLE_VERSION 1 +#define XDG_SHELL_GET_XDG_SURFACE 2 +#define XDG_SHELL_GET_XDG_POPUP 3 +#define XDG_SHELL_PONG 4 + +/** + * @ingroup iface_xdg_shell + */ +#define XDG_SHELL_PING_SINCE_VERSION 1 + +/** + * @ingroup iface_xdg_shell + */ +#define XDG_SHELL_DESTROY_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_shell + */ +#define XDG_SHELL_USE_UNSTABLE_VERSION_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_shell + */ +#define XDG_SHELL_GET_XDG_SURFACE_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_shell + */ +#define XDG_SHELL_GET_XDG_POPUP_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_shell + */ +#define XDG_SHELL_PONG_SINCE_VERSION 1 + +/** @ingroup iface_xdg_shell_v5 */ +static inline void +xdg_shell_set_user_data(struct xdg_shell_v5 *xdg_shell, void *user_data) +{ + wl_proxy_set_user_data((struct wl_proxy *) xdg_shell, user_data); +} + +/** @ingroup iface_xdg_shell_v5 */ +static inline void * +xdg_shell_get_user_data(struct xdg_shell_v5 *xdg_shell) +{ + return wl_proxy_get_user_data((struct wl_proxy *) xdg_shell); +} + +#if WAYLAND_VERSION_MAJOR > 1 || WAYLAND_VERSION_MINOR >= 10 +static inline uint32_t +xdg_shell_get_version(struct xdg_shell_v5 *xdg_shell) +{ + return wl_proxy_get_version((struct wl_proxy *) xdg_shell); +} +#endif + +/** + * @ingroup iface_xdg_shell + * + * Destroy this xdg_shell_v5 object. + * + * Destroying a bound xdg_shell_v5 object while there are surfaces + * still alive created by this xdg_shell_v5 object instance is illegal + * and will result in a protocol error. + */ +static inline void +xdg_shell_destroy(struct xdg_shell_v5 *xdg_shell) +{ + wl_proxy_marshal((struct wl_proxy *) xdg_shell, + XDG_SHELL_DESTROY); + + wl_proxy_destroy((struct wl_proxy *) xdg_shell); +} + +/** + * @ingroup iface_xdg_shell + * + * Negotiate the unstable version of the interface. This + * mechanism is in place to ensure client and server agree on the + * unstable versions of the protocol that they speak or exit + * cleanly if they don't agree. This request will go away once + * the xdg-shell protocol is stable. + */ +static inline void +xdg_shell_use_unstable_version(struct xdg_shell_v5 *xdg_shell, int32_t version) +{ + wl_proxy_marshal((struct wl_proxy *) xdg_shell, + XDG_SHELL_USE_UNSTABLE_VERSION, version); +} + +/** + * @ingroup iface_xdg_shell + * + * This creates an xdg_surface_v5 for the given surface and gives it the + * xdg_surface_v5 role. A wl_surface can only be given an xdg_surface_v5 role + * once. If get_xdg_surface_v5 is called with a wl_surface that already has + * an active xdg_surface_v5 associated with it, or if it had any other role, + * an error is raised. + * + * See the documentation of xdg_surface_v5 for more details about what an + * xdg_surface_v5 is and how it is used. + */ +static inline struct xdg_surface_v5 * +xdg_shell_get_xdg_surface(struct xdg_shell_v5 *xdg_shell, struct wl_surface *surface) +{ + struct wl_proxy *id; + + id = wl_proxy_marshal_constructor((struct wl_proxy *) xdg_shell, + XDG_SHELL_GET_XDG_SURFACE, &xdg_surface_v5_interface, NULL, surface); + + return (struct xdg_surface_v5 *) id; +} + +/** + * @ingroup iface_xdg_shell + * + * This creates an xdg_popup_v5 for the given surface and gives it the + * xdg_popup_v5 role. A wl_surface can only be given an xdg_popup_v5 role + * once. If get_xdg_popup_v5 is called with a wl_surface that already has + * an active xdg_popup_v5 associated with it, or if it had any other role, + * an error is raised. + * + * This request must be used in response to some sort of user action + * like a button press, key press, or touch down event. + * + * See the documentation of xdg_popup_v5 for more details about what an + * xdg_popup_v5 is and how it is used. + */ +static inline struct xdg_popup_v5 * +xdg_shell_get_xdg_popup(struct xdg_shell_v5 *xdg_shell, struct wl_surface *surface, struct wl_surface *parent, struct wl_seat *seat, uint32_t serial, int32_t x, int32_t y) +{ + struct wl_proxy *id; + + id = wl_proxy_marshal_constructor((struct wl_proxy *) xdg_shell, + XDG_SHELL_GET_XDG_POPUP, &xdg_popup_v5_interface, NULL, surface, parent, seat, serial, x, y); + + return (struct xdg_popup_v5 *) id; +} + +/** + * @ingroup iface_xdg_shell + * + * A client must respond to a ping event with a pong request or + * the client may be deemed unresponsive. + */ +static inline void +xdg_shell_pong(struct xdg_shell_v5 *xdg_shell, uint32_t serial) +{ + wl_proxy_marshal((struct wl_proxy *) xdg_shell, + XDG_SHELL_PONG, serial); +} + +#ifndef XDG_SURFACE_RESIZE_EDGE_ENUM +#define XDG_SURFACE_RESIZE_EDGE_ENUM +/** + * @ingroup iface_xdg_surface + * edge values for resizing + * + * These values are used to indicate which edge of a surface + * is being dragged in a resize operation. + */ +enum xdg_surface_resize_edge { + XDG_SURFACE_RESIZE_EDGE_NONE = 0, + XDG_SURFACE_RESIZE_EDGE_TOP = 1, + XDG_SURFACE_RESIZE_EDGE_BOTTOM = 2, + XDG_SURFACE_RESIZE_EDGE_LEFT = 4, + XDG_SURFACE_RESIZE_EDGE_TOP_LEFT = 5, + XDG_SURFACE_RESIZE_EDGE_BOTTOM_LEFT = 6, + XDG_SURFACE_RESIZE_EDGE_RIGHT = 8, + XDG_SURFACE_RESIZE_EDGE_TOP_RIGHT = 9, + XDG_SURFACE_RESIZE_EDGE_BOTTOM_RIGHT = 10, +}; +#endif /* XDG_SURFACE_RESIZE_EDGE_ENUM */ + +#ifndef XDG_SURFACE_STATE_ENUM +#define XDG_SURFACE_STATE_ENUM +/** + * @ingroup iface_xdg_surface + * types of state on the surface + * + * The different state values used on the surface. This is designed for + * state values like maximized, fullscreen. It is paired with the + * configure event to ensure that both the client and the compositor + * setting the state can be synchronized. + * + * States set in this way are double-buffered. They will get applied on + * the next commit. + * + * Desktop environments may extend this enum by taking up a range of + * values and documenting the range they chose in this description. + * They are not required to document the values for the range that they + * chose. Ideally, any good extensions from a desktop environment should + * make its way into standardization into this enum. + * + * The current reserved ranges are: + * + * 0x0000 - 0x0FFF: xdg-shell core values, documented below. + * 0x1000 - 0x1FFF: GNOME + */ +enum xdg_surface_state { + /** + * the surface is maximized + */ + XDG_SURFACE_STATE_MAXIMIZED = 1, + /** + * the surface is fullscreen + */ + XDG_SURFACE_STATE_FULLSCREEN = 2, + XDG_SURFACE_STATE_RESIZING = 3, + XDG_SURFACE_STATE_ACTIVATED = 4, +}; +#endif /* XDG_SURFACE_STATE_ENUM */ + +/** + * @ingroup iface_xdg_surface + * @struct xdg_surface_listener + */ +struct xdg_surface_listener { + /** + * suggest a surface change + * + * The configure event asks the client to resize its surface or + * to change its state. + * + * The width and height arguments specify a hint to the window + * about how its surface should be resized in window geometry + * coordinates. See set_window_geometry. + * + * If the width or height arguments are zero, it means the client + * should decide its own window dimension. This may happen when the + * compositor need to configure the state of the surface but + * doesn't have any information about any previous or expected + * dimension. + * + * The states listed in the event specify how the width/height + * arguments should be interpreted, and possibly how it should be + * drawn. + * + * Clients should arrange their surface for the new size and + * states, and then send a ack_configure request with the serial + * sent in this configure event at some point before committing the + * new surface. + * + * If the client receives multiple configure events before it can + * respond to one, it is free to discard all but the last event it + * received. + */ + void (*configure)(void *data, + struct xdg_surface_v5 *xdg_surface_v5, + int32_t width, + int32_t height, + struct wl_array *states, + uint32_t serial); + /** + * surface wants to be closed + * + * The close event is sent by the compositor when the user wants + * the surface to be closed. This should be equivalent to the user + * clicking the close button in client-side decorations, if your + * application has any... + * + * This is only a request that the user intends to close your + * window. The client may choose to ignore this request, or show a + * dialog to ask the user to save their data... + */ + void (*close)(void *data, + struct xdg_surface_v5 *xdg_surface_v5); +}; + +/** + * @ingroup iface_xdg_surface + */ +static inline int +xdg_surface_add_listener(struct xdg_surface_v5 *xdg_surface, + const struct xdg_surface_listener *listener, void *data) +{ + return wl_proxy_add_listener((struct wl_proxy *) xdg_surface, + (void (**)(void)) listener, data); +} + +#define XDG_SURFACE_DESTROY 0 +#define XDG_SURFACE_SET_PARENT 1 +#define XDG_SURFACE_SET_TITLE 2 +#define XDG_SURFACE_SET_APP_ID 3 +#define XDG_SURFACE_SHOW_WINDOW_MENU 4 +#define XDG_SURFACE_MOVE 5 +#define XDG_SURFACE_RESIZE 6 +#define XDG_SURFACE_ACK_CONFIGURE 7 +#define XDG_SURFACE_SET_WINDOW_GEOMETRY 8 +#define XDG_SURFACE_SET_MAXIMIZED 9 +#define XDG_SURFACE_UNSET_MAXIMIZED 10 +#define XDG_SURFACE_SET_FULLSCREEN 11 +#define XDG_SURFACE_UNSET_FULLSCREEN 12 +#define XDG_SURFACE_SET_MINIMIZED 13 + +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_CONFIGURE_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_CLOSE_SINCE_VERSION 1 + +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_DESTROY_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_SET_PARENT_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_SET_TITLE_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_SET_APP_ID_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_SHOW_WINDOW_MENU_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_MOVE_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_RESIZE_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_ACK_CONFIGURE_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_SET_WINDOW_GEOMETRY_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_SET_MAXIMIZED_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_UNSET_MAXIMIZED_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_SET_FULLSCREEN_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_UNSET_FULLSCREEN_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_SET_MINIMIZED_SINCE_VERSION 1 + +/** @ingroup iface_xdg_surface_v5 */ +static inline void +xdg_surface_set_user_data(struct xdg_surface_v5 *xdg_surface, void *user_data) +{ + wl_proxy_set_user_data((struct wl_proxy *) xdg_surface, user_data); +} + +/** @ingroup iface_xdg_surface_v5 */ +static inline void * +xdg_surface_get_user_data(struct xdg_surface_v5 *xdg_surface) +{ + return wl_proxy_get_user_data((struct wl_proxy *) xdg_surface); +} + +#if WAYLAND_VERSION_MAJOR > 1 || WAYLAND_VERSION_MINOR >= 10 +static inline uint32_t +xdg_surface_get_version(struct xdg_surface_v5 *xdg_surface) +{ + return wl_proxy_get_version((struct wl_proxy *) xdg_surface); +} +#endif + +/** + * @ingroup iface_xdg_surface + * + * Unmap and destroy the window. The window will be effectively + * hidden from the user's point of view, and all state like + * maximization, fullscreen, and so on, will be lost. + */ +static inline void +xdg_surface_destroy(struct xdg_surface_v5 *xdg_surface) +{ + wl_proxy_marshal((struct wl_proxy *) xdg_surface, + XDG_SURFACE_DESTROY); + + wl_proxy_destroy((struct wl_proxy *) xdg_surface); +} + +/** + * @ingroup iface_xdg_surface + * + * Set the "parent" of this surface. This window should be stacked + * above a parent. The parent surface must be mapped as long as this + * surface is mapped. + * + * Parent windows should be set on dialogs, toolboxes, or other + * "auxiliary" surfaces, so that the parent is raised when the dialog + * is raised. + */ +static inline void +xdg_surface_set_parent(struct xdg_surface_v5 *xdg_surface, struct xdg_surface_v5 *parent) +{ + wl_proxy_marshal((struct wl_proxy *) xdg_surface, + XDG_SURFACE_SET_PARENT, parent); +} + +/** + * @ingroup iface_xdg_surface + * + * Set a short title for the surface. + * + * This string may be used to identify the surface in a task bar, + * window list, or other user interface elements provided by the + * compositor. + * + * The string must be encoded in UTF-8. + */ +static inline void +xdg_surface_set_title(struct xdg_surface_v5 *xdg_surface, const char *title) +{ + wl_proxy_marshal((struct wl_proxy *) xdg_surface, + XDG_SURFACE_SET_TITLE, title); +} + +/** + * @ingroup iface_xdg_surface + * + * Set an application identifier for the surface. + * + * The app ID identifies the general class of applications to which + * the surface belongs. The compositor can use this to group multiple + * surfaces together, or to determine how to launch a new application. + * + * For D-Bus activatable applications, the app ID is used as the D-Bus + * service name. + * + * The compositor shell will try to group application surfaces together + * by their app ID. As a best practice, it is suggested to select app + * ID's that match the basename of the application's .desktop file. + * For example, "org.freedesktop.FooViewer" where the .desktop file is + * "org.freedesktop.FooViewer.desktop". + * + * See the desktop-entry specification [0] for more details on + * application identifiers and how they relate to well-known D-Bus + * names and .desktop files. + * + * [0] http://standards.freedesktop.org/desktop-entry-spec/ + */ +static inline void +xdg_surface_set_app_id(struct xdg_surface_v5 *xdg_surface, const char *app_id) +{ + wl_proxy_marshal((struct wl_proxy *) xdg_surface, + XDG_SURFACE_SET_APP_ID, app_id); +} + +/** + * @ingroup iface_xdg_surface + * + * Clients implementing client-side decorations might want to show + * a context menu when right-clicking on the decorations, giving the + * user a menu that they can use to maximize or minimize the window. + * + * This request asks the compositor to pop up such a window menu at + * the given position, relative to the local surface coordinates of + * the parent surface. There are no guarantees as to what menu items + * the window menu contains. + * + * This request must be used in response to some sort of user action + * like a button press, key press, or touch down event. + */ +static inline void +xdg_surface_show_window_menu(struct xdg_surface_v5 *xdg_surface, struct wl_seat *seat, uint32_t serial, int32_t x, int32_t y) +{ + wl_proxy_marshal((struct wl_proxy *) xdg_surface, + XDG_SURFACE_SHOW_WINDOW_MENU, seat, serial, x, y); +} + +/** + * @ingroup iface_xdg_surface + * + * Start an interactive, user-driven move of the surface. + * + * This request must be used in response to some sort of user action + * like a button press, key press, or touch down event. The passed + * serial is used to determine the type of interactive move (touch, + * pointer, etc). + * + * The server may ignore move requests depending on the state of + * the surface (e.g. fullscreen or maximized), or if the passed serial + * is no longer valid. + * + * If triggered, the surface will lose the focus of the device + * (wl_pointer, wl_touch, etc) used for the move. It is up to the + * compositor to visually indicate that the move is taking place, such as + * updating a pointer cursor, during the move. There is no guarantee + * that the device focus will return when the move is completed. + */ +static inline void +xdg_surface_move(struct xdg_surface_v5 *xdg_surface, struct wl_seat *seat, uint32_t serial) +{ + wl_proxy_marshal((struct wl_proxy *) xdg_surface, + XDG_SURFACE_MOVE, seat, serial); +} + +/** + * @ingroup iface_xdg_surface + * + * Start a user-driven, interactive resize of the surface. + * + * This request must be used in response to some sort of user action + * like a button press, key press, or touch down event. The passed + * serial is used to determine the type of interactive resize (touch, + * pointer, etc). + * + * The server may ignore resize requests depending on the state of + * the surface (e.g. fullscreen or maximized). + * + * If triggered, the client will receive configure events with the + * "resize" state enum value and the expected sizes. See the "resize" + * enum value for more details about what is required. The client + * must also acknowledge configure events using "ack_configure". After + * the resize is completed, the client will receive another "configure" + * event without the resize state. + * + * If triggered, the surface also will lose the focus of the device + * (wl_pointer, wl_touch, etc) used for the resize. It is up to the + * compositor to visually indicate that the resize is taking place, + * such as updating a pointer cursor, during the resize. There is no + * guarantee that the device focus will return when the resize is + * completed. + * + * The edges parameter specifies how the surface should be resized, + * and is one of the values of the resize_edge enum. The compositor + * may use this information to update the surface position for + * example when dragging the top left corner. The compositor may also + * use this information to adapt its behavior, e.g. choose an + * appropriate cursor image. + */ +static inline void +xdg_surface_resize(struct xdg_surface_v5 *xdg_surface, struct wl_seat *seat, uint32_t serial, uint32_t edges) +{ + wl_proxy_marshal((struct wl_proxy *) xdg_surface, + XDG_SURFACE_RESIZE, seat, serial, edges); +} + +/** + * @ingroup iface_xdg_surface + * + * When a configure event is received, if a client commits the + * surface in response to the configure event, then the client + * must make a ack_configure request before the commit request, + * passing along the serial of the configure event. + * + * For instance, the compositor might use this information to move + * a surface to the top left only when the client has drawn itself + * for the maximized or fullscreen state. + * + * If the client receives multiple configure events before it + * can respond to one, it only has to ack the last configure event. + */ +static inline void +xdg_surface_ack_configure(struct xdg_surface_v5 *xdg_surface, uint32_t serial) +{ + wl_proxy_marshal((struct wl_proxy *) xdg_surface, + XDG_SURFACE_ACK_CONFIGURE, serial); +} + +/** + * @ingroup iface_xdg_surface + * + * The window geometry of a window is its "visible bounds" from the + * user's perspective. Client-side decorations often have invisible + * portions like drop-shadows which should be ignored for the + * purposes of aligning, placing and constraining windows. + * + * The window geometry is double buffered, and will be applied at the + * time wl_surface.commit of the corresponding wl_surface is called. + * + * Once the window geometry of the surface is set once, it is not + * possible to unset it, and it will remain the same until + * set_window_geometry is called again, even if a new subsurface or + * buffer is attached. + * + * If never set, the value is the full bounds of the surface, + * including any subsurfaces. This updates dynamically on every + * commit. This unset mode is meant for extremely simple clients. + * + * If responding to a configure event, the window geometry in here + * must respect the sizing negotiations specified by the states in + * the configure event. + * + * The arguments are given in the surface local coordinate space of + * the wl_surface associated with this xdg_surface. + * + * The width and height must be greater than zero. + */ +static inline void +xdg_surface_set_window_geometry(struct xdg_surface_v5 *xdg_surface, int32_t x, int32_t y, int32_t width, int32_t height) +{ + wl_proxy_marshal((struct wl_proxy *) xdg_surface, + XDG_SURFACE_SET_WINDOW_GEOMETRY, x, y, width, height); +} + +/** + * @ingroup iface_xdg_surface + * + * Maximize the surface. + * + * After requesting that the surface should be maximized, the compositor + * will respond by emitting a configure event with the "maximized" state + * and the required window geometry. The client should then update its + * content, drawing it in a maximized state, i.e. without shadow or other + * decoration outside of the window geometry. The client must also + * acknowledge the configure when committing the new content (see + * ack_configure). + * + * It is up to the compositor to decide how and where to maximize the + * surface, for example which output and what region of the screen should + * be used. + * + * If the surface was already maximized, the compositor will still emit + * a configure event with the "maximized" state. + */ +static inline void +xdg_surface_set_maximized(struct xdg_surface_v5 *xdg_surface) +{ + wl_proxy_marshal((struct wl_proxy *) xdg_surface, + XDG_SURFACE_SET_MAXIMIZED); +} + +/** + * @ingroup iface_xdg_surface + * + * Unmaximize the surface. + * + * After requesting that the surface should be unmaximized, the compositor + * will respond by emitting a configure event without the "maximized" + * state. If available, the compositor will include the window geometry + * dimensions the window had prior to being maximized in the configure + * request. The client must then update its content, drawing it in a + * regular state, i.e. potentially with shadow, etc. The client must also + * acknowledge the configure when committing the new content (see + * ack_configure). + * + * It is up to the compositor to position the surface after it was + * unmaximized; usually the position the surface had before maximizing, if + * applicable. + * + * If the surface was already not maximized, the compositor will still + * emit a configure event without the "maximized" state. + */ +static inline void +xdg_surface_unset_maximized(struct xdg_surface_v5 *xdg_surface) +{ + wl_proxy_marshal((struct wl_proxy *) xdg_surface, + XDG_SURFACE_UNSET_MAXIMIZED); +} + +/** + * @ingroup iface_xdg_surface + * + * Make the surface fullscreen. + * + * You can specify an output that you would prefer to be fullscreen. + * If this value is NULL, it's up to the compositor to choose which + * display will be used to map this surface. + * + * If the surface doesn't cover the whole output, the compositor will + * position the surface in the center of the output and compensate with + * black borders filling the rest of the output. + */ +static inline void +xdg_surface_set_fullscreen(struct xdg_surface_v5 *xdg_surface, struct wl_output *output) +{ + wl_proxy_marshal((struct wl_proxy *) xdg_surface, + XDG_SURFACE_SET_FULLSCREEN, output); +} + +/** + * @ingroup iface_xdg_surface + */ +static inline void +xdg_surface_unset_fullscreen(struct xdg_surface_v5 *xdg_surface) +{ + wl_proxy_marshal((struct wl_proxy *) xdg_surface, + XDG_SURFACE_UNSET_FULLSCREEN); +} + +/** + * @ingroup iface_xdg_surface + * + * Request that the compositor minimize your surface. There is no + * way to know if the surface is currently minimized, nor is there + * any way to unset minimization on this surface. + * + * If you are looking to throttle redrawing when minimized, please + * instead use the wl_surface.frame event for this, as this will + * also work with live previews on windows in Alt-Tab, Expose or + * similar compositor features. + */ +static inline void +xdg_surface_set_minimized(struct xdg_surface_v5 *xdg_surface) +{ + wl_proxy_marshal((struct wl_proxy *) xdg_surface, + XDG_SURFACE_SET_MINIMIZED); +} + +/** + * @ingroup iface_xdg_popup + * @struct xdg_popup_listener + */ +struct xdg_popup_listener { + /** + * popup interaction is done + * + * The popup_done event is sent out when a popup is dismissed by + * the compositor. The client should destroy the xdg_popup_v5 object + * at this point. + */ + void (*popup_done)(void *data, + struct xdg_popup_v5 *xdg_popup_v5); +}; + +/** + * @ingroup iface_xdg_popup + */ +static inline int +xdg_popup_add_listener(struct xdg_popup_v5 *xdg_popup, + const struct xdg_popup_listener *listener, void *data) +{ + return wl_proxy_add_listener((struct wl_proxy *) xdg_popup, + (void (**)(void)) listener, data); +} + +#define XDG_POPUP_DESTROY 0 + +/** + * @ingroup iface_xdg_popup + */ +#define XDG_POPUP_POPUP_DONE_SINCE_VERSION 1 + +/** + * @ingroup iface_xdg_popup + */ +#define XDG_POPUP_DESTROY_SINCE_VERSION 1 + +/** @ingroup iface_xdg_popup_v5 */ +static inline void +xdg_popup_set_user_data(struct xdg_popup_v5 *xdg_popup, void *user_data) +{ + wl_proxy_set_user_data((struct wl_proxy *) xdg_popup, user_data); +} + +/** @ingroup iface_xdg_popup_v5 */ +static inline void * +xdg_popup_get_user_data(struct xdg_popup_v5 *xdg_popup) +{ + return wl_proxy_get_user_data((struct wl_proxy *) xdg_popup); +} + +#if WAYLAND_VERSION_MAJOR > 1 || WAYLAND_VERSION_MINOR >= 10 +static inline uint32_t +xdg_popup_get_version(struct xdg_popup_v5 *xdg_popup) +{ + return wl_proxy_get_version((struct wl_proxy *) xdg_popup); +} +#endif + +/** + * @ingroup iface_xdg_popup + * + * This destroys the popup. Explicitly destroying the xdg_popup + * object will also dismiss the popup, and unmap the surface. + * + * If this xdg_popup_v5 is not the "topmost" popup, a protocol error + * will be sent. + */ +static inline void +xdg_popup_destroy(struct xdg_popup_v5 *xdg_popup) +{ + wl_proxy_marshal((struct wl_proxy *) xdg_popup, + XDG_POPUP_DESTROY); + + wl_proxy_destroy((struct wl_proxy *) xdg_popup); +} + +#ifdef __cplusplus +} +#endif + +#endif diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v5/pregenerated/3rdparty/wayland-xdg-shell-unstable-v5-protocol.c qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v5/pregenerated/3rdparty/wayland-xdg-shell-unstable-v5-protocol.c --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v5/pregenerated/3rdparty/wayland-xdg-shell-unstable-v5-protocol.c 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v5/pregenerated/3rdparty/wayland-xdg-shell-unstable-v5-protocol.c 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,126 @@ +/* Generated by wayland-scanner 1.13.0 */ +// Hand-edited to resolve conflicts with xdg-shell stable + +/* + * Copyright © 2008-2013 Kristian Høgsberg + * Copyright © 2013 Rafael Antognolli + * Copyright © 2013 Jasper St. Pierre + * Copyright © 2010-2013 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#include +#include +#include "wayland-util.h" + +extern const struct wl_interface wl_output_interface; +extern const struct wl_interface wl_seat_interface; +extern const struct wl_interface wl_surface_interface; +extern const struct wl_interface xdg_popup_v5_interface; +extern const struct wl_interface xdg_surface_v5_interface; + +static const struct wl_interface *types[] = { + NULL, + NULL, + NULL, + NULL, + &xdg_surface_v5_interface, + &wl_surface_interface, + &xdg_popup_v5_interface, + &wl_surface_interface, + &wl_surface_interface, + &wl_seat_interface, + NULL, + NULL, + NULL, + &xdg_surface_v5_interface, + &wl_seat_interface, + NULL, + NULL, + NULL, + &wl_seat_interface, + NULL, + &wl_seat_interface, + NULL, + NULL, + &wl_output_interface, +}; + +static const struct wl_message xdg_shell_requests[] = { + { "destroy", "", types + 0 }, + { "use_unstable_version", "i", types + 0 }, + { "get_xdg_surface", "no", types + 4 }, + { "get_xdg_popup", "nooouii", types + 6 }, + { "pong", "u", types + 0 }, +}; + +static const struct wl_message xdg_shell_events[] = { + { "ping", "u", types + 0 }, +}; + +WL_EXPORT const struct wl_interface xdg_shell_v5_interface = { + "xdg_shell", 1, + 5, xdg_shell_requests, + 1, xdg_shell_events, +}; + +static const struct wl_message xdg_surface_requests[] = { + { "destroy", "", types + 0 }, + { "set_parent", "?o", types + 13 }, + { "set_title", "s", types + 0 }, + { "set_app_id", "s", types + 0 }, + { "show_window_menu", "ouii", types + 14 }, + { "move", "ou", types + 18 }, + { "resize", "ouu", types + 20 }, + { "ack_configure", "u", types + 0 }, + { "set_window_geometry", "iiii", types + 0 }, + { "set_maximized", "", types + 0 }, + { "unset_maximized", "", types + 0 }, + { "set_fullscreen", "?o", types + 23 }, + { "unset_fullscreen", "", types + 0 }, + { "set_minimized", "", types + 0 }, +}; + +static const struct wl_message xdg_surface_events[] = { + { "configure", "iiau", types + 0 }, + { "close", "", types + 0 }, +}; + +WL_EXPORT const struct wl_interface xdg_surface_v5_interface = { + "xdg_surface", 1, + 14, xdg_surface_requests, + 2, xdg_surface_events, +}; + +static const struct wl_message xdg_popup_requests[] = { + { "destroy", "", types + 0 }, +}; + +static const struct wl_message xdg_popup_events[] = { + { "popup_done", "", types + 0 }, +}; + +WL_EXPORT const struct wl_interface xdg_popup_v5_interface = { + "xdg_popup", 1, + 1, xdg_popup_requests, + 1, xdg_popup_events, +}; + diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v5/pregenerated/xdg-shell-v5.pri qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v5/pregenerated/xdg-shell-v5.pri --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v5/pregenerated/xdg-shell-v5.pri 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v5/pregenerated/xdg-shell-v5.pri 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,12 @@ +# Putting pregenerated files in a 3rdparty directory to avoid +# qtqa's license checking failing. + +HEADERS += \ + $$PWD/3rdparty/qwayland-xdg-shell-unstable-v5_p.h \ + $$PWD/3rdparty/wayland-xdg-shell-unstable-v5-client-protocol_p.h + +SOURCES += \ + $$PWD/3rdparty/qwayland-xdg-shell-unstable-v5.cpp \ + $$PWD/3rdparty/wayland-xdg-shell-unstable-v5-protocol.c + +INCLUDEPATH += $$PWD/3rdparty diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgpopupv5.cpp qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgpopupv5.cpp --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgpopupv5.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgpopupv5.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwaylandxdgpopupv5_p.h" + +#include +#include +#include + +QT_BEGIN_NAMESPACE + +namespace QtWaylandClient { + +QWaylandXdgPopupV5::QWaylandXdgPopupV5(struct ::xdg_popup_v5 *popup, QWaylandWindow *window) + : QWaylandShellSurface(window) + , QtWayland::xdg_popup_v5(popup) + , m_window(window) +{ + if (window->display()->windowExtension()) + m_extendedWindow = new QWaylandExtendedSurface(window); +} + +QWaylandXdgPopupV5::~QWaylandXdgPopupV5() +{ + xdg_popup_destroy(object()); + delete m_extendedWindow; +} + +void QWaylandXdgPopupV5::xdg_popup_popup_done() +{ + m_window->window()->close(); +} + +} + +QT_END_NAMESPACE diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgpopupv5_p.h qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgpopupv5_p.h --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgpopupv5_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgpopupv5_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,90 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the config.tests of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWAYLANDXDGPOPUPV5_P_H +#define QWAYLANDXDGPOPUPV5_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include "qwayland-xdg-shell-unstable-v5_p.h" + +#include + +#include +#include + +QT_BEGIN_NAMESPACE + +class QWindow; + +namespace QtWaylandClient { + +class QWaylandWindow; +class QWaylandExtendedSurface; + +class Q_WAYLAND_CLIENT_EXPORT QWaylandXdgPopupV5 : public QWaylandShellSurface + , public QtWayland::xdg_popup_v5 +{ + Q_OBJECT +public: + QWaylandXdgPopupV5(struct ::xdg_popup_v5 *popup, QWaylandWindow *window); + ~QWaylandXdgPopupV5() override; + +protected: + void xdg_popup_popup_done() override; + +private: + QWaylandExtendedSurface *m_extendedWindow = nullptr; + QWaylandWindow *m_window = nullptr; +}; + +QT_END_NAMESPACE + +} + +#endif // QWAYLANDXDGPOPUPV5_P_H diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5.cpp qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5.cpp --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,101 @@ +/**************************************************************************** +** +** Copyright (C) 2016 Eurogiciel, author: +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the config.tests of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwaylandxdgshellv5_p.h" +#include "qwaylandxdgpopupv5_p.h" +#include "qwaylandxdgsurfacev5_p.h" + +#include + +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +namespace QtWaylandClient { + +QWaylandXdgShellV5::QWaylandXdgShellV5(struct ::wl_registry *registry, uint32_t id) + : QtWayland::xdg_shell_v5(registry, id, 1) +{ + use_unstable_version(QtWayland::xdg_shell_v5::version_current); +} + +QWaylandXdgShellV5::~QWaylandXdgShellV5() +{ + xdg_shell_destroy(object()); +} + +QWaylandXdgSurfaceV5 *QWaylandXdgShellV5::createXdgSurface(QWaylandWindow *window) +{ + return new QWaylandXdgSurfaceV5(this, window); +} + +QWaylandXdgPopupV5 *QWaylandXdgShellV5::createXdgPopup(QWaylandWindow *window, QWaylandInputDevice *inputDevice) +{ + QWaylandWindow *parentWindow = m_popups.empty() ? window->transientParent() : m_popups.last(); + ::wl_surface *parentSurface = parentWindow->object(); + + if (m_popupSerial == 0) + m_popupSerial = inputDevice->serial(); + ::wl_seat *seat = inputDevice->wl_seat(); + + QPoint position = window->geometry().topLeft() - parentWindow->geometry().topLeft(); + int x = position.x() + parentWindow->frameMargins().left(); + int y = position.y() + parentWindow->frameMargins().top(); + + auto popup = new QWaylandXdgPopupV5(get_xdg_popup(window->object(), parentSurface, seat, m_popupSerial, x, y), window); + m_popups.append(window); + QObject::connect(popup, &QWaylandXdgPopupV5::destroyed, [this, window](){ + m_popups.removeOne(window); + if (m_popups.empty()) + m_popupSerial = 0; + }); + return popup; +} + +void QWaylandXdgShellV5::xdg_shell_ping(uint32_t serial) +{ + pong(serial); +} + +} + +QT_END_NAMESPACE diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5integration.cpp qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5integration.cpp --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5integration.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5integration.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwaylandxdgshellv5integration_p.h" +#include "qwaylandxdgsurfacev5_p.h" +#include "qwaylandxdgpopupv5_p.h" +#include "qwaylandxdgshellv5_p.h" + +#include +#include + +QT_BEGIN_NAMESPACE + +namespace QtWaylandClient { + +bool QWaylandXdgShellV5Integration::initialize(QWaylandDisplay *display) +{ + Q_FOREACH (QWaylandDisplay::RegistryGlobal global, display->globals()) { + if (global.interface == QLatin1String("xdg_shell")) { + m_xdgShell.reset(new QWaylandXdgShellV5(display->wl_registry(), global.id)); + break; + } + } + + if (!m_xdgShell) { + qWarning() << "Couldn't find global xdg_shell for xdg-shell unstable v5"; + return false; + } + + qCWarning(lcQpaWayland) << "\"xdg-shell-v5\" is a deprecated shell extension, prefer using" + << "\"xdg-shell-v6\" or \"xdg-shell\" if supported by the compositor" + << "by setting the environment variable QT_WAYLAND_SHELL_INTEGRATION"; + + return QWaylandShellIntegration::initialize(display); +} + +QWaylandShellSurface *QWaylandXdgShellV5Integration::createShellSurface(QWaylandWindow *window) +{ + QWaylandInputDevice *inputDevice = window->display()->lastInputDevice(); + if (window->window()->type() == Qt::WindowType::Popup && inputDevice) + return m_xdgShell->createXdgPopup(window, inputDevice); + else + return m_xdgShell->createXdgSurface(window); +} + +void QWaylandXdgShellV5Integration::handleKeyboardFocusChanged(QWaylandWindow *newFocus, QWaylandWindow *oldFocus) { + if (newFocus && qobject_cast(newFocus->shellSurface())) + m_display->handleWindowActivated(newFocus); + if (oldFocus && qobject_cast(oldFocus->shellSurface())) + m_display->handleWindowDeactivated(oldFocus); +} + +} + +QT_END_NAMESPACE diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5integration_p.h qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5integration_p.h --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5integration_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5integration_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWAYLANDXDGSHELLV5INTEGRATION_P_H +#define QWAYLANDXDGSHELLV5INTEGRATION_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include "qwaylandxdgshellv5_p.h" + +#include + +QT_BEGIN_NAMESPACE + +namespace QtWaylandClient { + +class QWaylandXdgShellV5; + +class Q_WAYLAND_CLIENT_EXPORT QWaylandXdgShellV5Integration : public QWaylandShellIntegration +{ +public: + QWaylandXdgShellV5Integration() {} + bool initialize(QWaylandDisplay *display) override; + QWaylandShellSurface *createShellSurface(QWaylandWindow *window) override; + void handleKeyboardFocusChanged(QWaylandWindow *newFocus, QWaylandWindow *oldFocus) override; + +private: + QScopedPointer m_xdgShell; +}; + +} + +QT_END_NAMESPACE + +#endif // QWAYLANDXDGSHELLV5INTEGRATION_P_H diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5_p.h qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5_p.h --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,95 @@ +/**************************************************************************** +** +** Copyright (C) 2016 Eurogiciel, author: +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the config.tests of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWAYLANDXDGSHELLV5_H +#define QWAYLANDXDGSHELLV5_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include "qwayland-xdg-shell-unstable-v5_p.h" + +#include +#include + +#include + +#include +#include + +QT_BEGIN_NAMESPACE + +class QWindow; + +namespace QtWaylandClient { + +class QWaylandWindow; +class QWaylandInputDevice; +class QWaylandXdgSurfaceV5; +class QWaylandXdgPopupV5; + +class Q_WAYLAND_CLIENT_EXPORT QWaylandXdgShellV5 : public QtWayland::xdg_shell_v5 +{ +public: + QWaylandXdgShellV5(struct ::wl_registry *registry, uint32_t id); + ~QWaylandXdgShellV5() override; + + QWaylandXdgSurfaceV5 *createXdgSurface(QWaylandWindow *window); + QWaylandXdgPopupV5 *createXdgPopup(QWaylandWindow *window, QWaylandInputDevice *inputDevice); + +private: + void xdg_shell_ping(uint32_t serial) override; + + QVector m_popups; + uint m_popupSerial = 0; +}; + +QT_END_NAMESPACE + +} + +#endif // QWAYLANDXDGSHELLV5_H diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgsurfacev5.cpp qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgsurfacev5.cpp --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgsurfacev5.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgsurfacev5.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,237 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the config.tests of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwaylandxdgsurfacev5_p.h" +#include "qwaylandxdgshellv5_p.h" + +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +namespace QtWaylandClient { + +QWaylandXdgSurfaceV5::QWaylandXdgSurfaceV5(QWaylandXdgShellV5 *shell, QWaylandWindow *window) + : QWaylandShellSurface(window) + , QtWayland::xdg_surface_v5(shell->get_xdg_surface(window->object())) + , m_window(window) + , m_shell(shell) +{ + if (window->display()->windowExtension()) + m_extendedWindow = new QWaylandExtendedSurface(window); + + updateTransientParent(window->transientParent()); +} + +QWaylandXdgSurfaceV5::~QWaylandXdgSurfaceV5() +{ + if (m_acked.states & Qt::WindowActive) + window()->display()->handleWindowDeactivated(m_window); + + xdg_surface_destroy(object()); + delete m_extendedWindow; +} + +void QWaylandXdgSurfaceV5::resize(QWaylandInputDevice *inputDevice, enum wl_shell_surface_resize edges) +{ + // May need some conversion if types get incompatibles, ATM they're identical + enum resize_edge const * const arg = reinterpret_cast(&edges); + resize(inputDevice, *arg); +} + +void QWaylandXdgSurfaceV5::resize(QWaylandInputDevice *inputDevice, enum resize_edge edges) +{ + resize(inputDevice->wl_seat(), + inputDevice->serial(), + edges); +} + +bool QWaylandXdgSurfaceV5::move(QWaylandInputDevice *inputDevice) +{ + move(inputDevice->wl_seat(), + inputDevice->serial()); + return true; +} + +void QWaylandXdgSurfaceV5::updateTransientParent(QWaylandWindow *parent) +{ + if (!parent) + return; + auto parentXdgSurface = qobject_cast(parent->shellSurface()); + Q_ASSERT(parentXdgSurface); + set_parent(parentXdgSurface->object()); +} + +void QWaylandXdgSurfaceV5::setTitle(const QString & title) +{ + return QtWayland::xdg_surface_v5::set_title(title); +} + +void QWaylandXdgSurfaceV5::setAppId(const QString & appId) +{ + return QtWayland::xdg_surface_v5::set_app_id(appId); +} + +void QWaylandXdgSurfaceV5::raise() +{ + if (m_extendedWindow) + m_extendedWindow->raise(); +} + +void QWaylandXdgSurfaceV5::lower() +{ + if (m_extendedWindow) + m_extendedWindow->lower(); +} + +void QWaylandXdgSurfaceV5::setContentOrientationMask(Qt::ScreenOrientations orientation) +{ + if (m_extendedWindow) + m_extendedWindow->setContentOrientationMask(orientation); +} + +void QWaylandXdgSurfaceV5::setWindowFlags(Qt::WindowFlags flags) +{ + if (m_extendedWindow) + m_extendedWindow->setWindowFlags(flags); +} + +void QWaylandXdgSurfaceV5::sendProperty(const QString &name, const QVariant &value) +{ + if (m_extendedWindow) + m_extendedWindow->updateGenericProperty(name, value); +} + +void QWaylandXdgSurfaceV5::applyConfigure() +{ + if (m_pending.isResizing) + m_normalSize = m_pending.size; + else if (!(m_acked.states & (Qt::WindowMaximized|Qt::WindowFullScreen))) + m_normalSize = m_window->window()->frameGeometry().size(); + + if ((m_pending.states & Qt::WindowActive) && !(m_acked.states & Qt::WindowActive)) + m_window->display()->handleWindowActivated(m_window); + + if (!(m_pending.states & Qt::WindowActive) && (m_acked.states & Qt::WindowActive)) + m_window->display()->handleWindowDeactivated(m_window); + + // TODO: none of the other plugins send WindowActive either, but is it on purpose? + Qt::WindowStates statesWithoutActive = m_pending.states & ~Qt::WindowActive; + + m_window->handleWindowStatesChanged(statesWithoutActive); + if (!m_pending.size.isEmpty()) + m_window->resizeFromApplyConfigure(m_pending.size); + else if (!m_normalSize.isEmpty()) + m_window->resizeFromApplyConfigure(m_normalSize); + ack_configure(m_pending.serial); + m_acked = m_pending; +} + +void QWaylandXdgSurfaceV5::requestWindowStates(Qt::WindowStates states) +{ + Qt::WindowStates changedStates = m_acked.states ^ states; + + if (changedStates & Qt::WindowMaximized) { + if (states & Qt::WindowMaximized) + set_maximized(); + else + unset_maximized(); + } + + if (changedStates & Qt::WindowFullScreen) { + if (states & Qt::WindowFullScreen) + set_fullscreen(nullptr); + else + unset_fullscreen(); + } + + // Minimized state is not reported by the protocol, so always send it + if (states & Qt::WindowMinimized) { + set_minimized(); + window()->handleWindowStatesChanged(states & ~Qt::WindowMinimized); + } +} + +bool QWaylandXdgSurfaceV5::wantsDecorations() const +{ + return !(m_pending.states & Qt::WindowFullScreen); +} + +void QWaylandXdgSurfaceV5::xdg_surface_configure(int32_t width, int32_t height, struct wl_array *states,uint32_t serial) +{ + uint32_t *xdgStates = reinterpret_cast(states->data); + size_t numStates = states->size / sizeof(uint32_t); + m_pending.serial = serial; + m_pending.size = QSize(width, height); + m_pending.isResizing = false; + m_pending.states = Qt::WindowNoState; + for (size_t i = 0; i < numStates; i++) { + switch (xdgStates[i]) { + case XDG_SURFACE_STATE_MAXIMIZED: + m_pending.states |= Qt::WindowMaximized; + break; + case XDG_SURFACE_STATE_FULLSCREEN: + m_pending.states |= Qt::WindowFullScreen; + break; + case XDG_SURFACE_STATE_RESIZING: + m_pending.isResizing = true; + break; + case XDG_SURFACE_STATE_ACTIVATED: + m_pending.states |= Qt::WindowActive; + break; + default: + break; + } + } + m_window->applyConfigureWhenPossible(); +} + +void QWaylandXdgSurfaceV5::xdg_surface_close() +{ + m_window->window()->close(); +} + +} + +QT_END_NAMESPACE diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgsurfacev5_p.h qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgsurfacev5_p.h --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgsurfacev5_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgsurfacev5_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,133 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the config.tests of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWAYLANDXDGSURFACEV5_P_H +#define QWAYLANDXDGSURFACEV5_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include "qwayland-xdg-shell-unstable-v5_p.h" + +#include +#include + +#include +#include + +#include + +QT_BEGIN_NAMESPACE + +class QWindow; + +namespace QtWaylandClient { + +class QWaylandWindow; +class QWaylandInputDevice; +class QWaylandExtendedSurface; +class QWaylandXdgShellV5; + +class Q_WAYLAND_CLIENT_EXPORT QWaylandXdgSurfaceV5 : public QWaylandShellSurface + , public QtWayland::xdg_surface_v5 +{ + Q_OBJECT +public: + QWaylandXdgSurfaceV5(QWaylandXdgShellV5 *shell, QWaylandWindow *window); + ~QWaylandXdgSurfaceV5() override; + + using QtWayland::xdg_surface_v5::resize; + void resize(QWaylandInputDevice *inputDevice, enum resize_edge edges); + + void resize(QWaylandInputDevice *inputDevice, enum wl_shell_surface_resize edges) override; + + using QtWayland::xdg_surface_v5::move; + bool move(QWaylandInputDevice *inputDevice) override; + + void setTitle(const QString &title) override; + void setAppId(const QString &appId) override; + + void raise() override; + void lower() override; + void setContentOrientationMask(Qt::ScreenOrientations orientation) override; + void setWindowFlags(Qt::WindowFlags flags) override; + void sendProperty(const QString &name, const QVariant &value) override; + + void applyConfigure() override; + void requestWindowStates(Qt::WindowStates states) override; + bool wantsDecorations() const override; + +private: + void updateTransientParent(QWaylandWindow *parent); + +private: + QWaylandWindow *m_window = nullptr; + QWaylandXdgShellV5* m_shell = nullptr; + struct { + Qt::WindowStates states = Qt::WindowNoState; + bool isResizing = false; + QSize size = {0, 0}; + uint serial = 0; + } m_acked, m_pending; + QSize m_normalSize; + QMargins m_margins; + QWaylandExtendedSurface *m_extendedWindow = nullptr; + + void xdg_surface_configure(int32_t width, + int32_t height, + struct wl_array *states, + uint32_t serial) override; + void xdg_surface_close() override; + + friend class QWaylandWindow; +}; + +QT_END_NAMESPACE + +} + +#endif // QWAYLANDXDGSURFACEV5_P_H diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v5/xdg-shell-v5.json qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v5/xdg-shell-v5.json --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v5/xdg-shell-v5.json 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v5/xdg-shell-v5.json 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,3 @@ +{ + "Keys":[ "xdg-shell-v5" ] +} diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v5/xdg-shell-v5.pro qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v5/xdg-shell-v5.pro --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v5/xdg-shell-v5.pro 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v5/xdg-shell-v5.pro 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,29 @@ +QT += gui-private waylandclient-private +CONFIG += wayland-scanner + +QMAKE_USE += wayland-client + +qtConfig(xkbcommon): \ + QMAKE_USE += xkbcommon + +HEADERS += \ + qwaylandxdgpopupv5_p.h \ + qwaylandxdgshellv5_p.h \ + qwaylandxdgshellv5integration_p.h \ + qwaylandxdgsurfacev5_p.h \ + +SOURCES += \ + main.cpp \ + qwaylandxdgpopupv5.cpp \ + qwaylandxdgshellv5.cpp \ + qwaylandxdgshellv5integration.cpp \ + qwaylandxdgsurfacev5.cpp \ + +include (pregenerated/xdg-shell-v5.pri) + +OTHER_FILES += \ + xdg-shell-v5.json + +PLUGIN_TYPE = wayland-shell-integration +PLUGIN_CLASS_NAME = QWaylandXdgShellV5IntegrationPlugin +load(qt_plugin) diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v6/main.cpp qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v6/main.cpp --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v6/main.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v6/main.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwaylandxdgshellv6integration_p.h" + +#include + +QT_BEGIN_NAMESPACE + +namespace QtWaylandClient { + +class QWaylandXdgShellV6IntegrationPlugin : public QWaylandShellIntegrationPlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID QWaylandShellIntegrationFactoryInterface_iid FILE "xdg-shell-v6.json") + +public: + QWaylandShellIntegration *create(const QString &key, const QStringList ¶mList) override; +}; + +QWaylandShellIntegration *QWaylandXdgShellV6IntegrationPlugin::create(const QString &key, const QStringList ¶mList) +{ + Q_UNUSED(key); + Q_UNUSED(paramList); + return new QWaylandXdgShellV6Integration(); +} + +} + +QT_END_NAMESPACE + +#include "main.moc" diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6.cpp qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6.cpp --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,393 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Copyright (C) 2017 Eurogiciel, author: +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the config.tests of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwaylandxdgshellv6_p.h" + +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +namespace QtWaylandClient { + +QWaylandXdgSurfaceV6::Toplevel::Toplevel(QWaylandXdgSurfaceV6 *xdgSurface) + : QtWayland::zxdg_toplevel_v6(xdgSurface->get_toplevel()) + , m_xdgSurface(xdgSurface) +{ + requestWindowStates(xdgSurface->window()->window()->windowStates()); +} + +QWaylandXdgSurfaceV6::Toplevel::~Toplevel() +{ + if (m_applied.states & Qt::WindowActive) { + QWaylandWindow *window = m_xdgSurface->window(); + window->display()->handleWindowDeactivated(window); + } + if (isInitialized()) + destroy(); +} + +void QWaylandXdgSurfaceV6::Toplevel::applyConfigure() +{ + if (!(m_applied.states & (Qt::WindowMaximized|Qt::WindowFullScreen))) + m_normalSize = m_xdgSurface->m_window->window()->frameGeometry().size(); + + if ((m_pending.states & Qt::WindowActive) && !(m_applied.states & Qt::WindowActive)) + m_xdgSurface->m_window->display()->handleWindowActivated(m_xdgSurface->m_window); + + if (!(m_pending.states & Qt::WindowActive) && (m_applied.states & Qt::WindowActive)) + m_xdgSurface->m_window->display()->handleWindowDeactivated(m_xdgSurface->m_window); + + // TODO: none of the other plugins send WindowActive either, but is it on purpose? + Qt::WindowStates statesWithoutActive = m_pending.states & ~Qt::WindowActive; + + m_xdgSurface->m_window->handleWindowStatesChanged(statesWithoutActive); + + if (m_pending.size.isEmpty()) { + // An empty size in the configure means it's up to the client to choose the size + bool normalPending = !(m_pending.states & (Qt::WindowMaximized|Qt::WindowFullScreen)); + if (normalPending && !m_normalSize.isEmpty()) + m_xdgSurface->m_window->resizeFromApplyConfigure(m_normalSize); + } else { + m_xdgSurface->m_window->resizeFromApplyConfigure(m_pending.size); + } + + QSize windowGeometrySize = m_xdgSurface->m_window->window()->frameGeometry().size(); + m_xdgSurface->set_window_geometry(0, 0, windowGeometrySize.width(), windowGeometrySize.height()); + m_applied = m_pending; + qCDebug(lcQpaWayland) << "Applied pending zxdg_toplevel_v6 configure event:" << m_applied.size << m_applied.states; +} + +void QWaylandXdgSurfaceV6::Toplevel::zxdg_toplevel_v6_configure(int32_t width, int32_t height, wl_array *states) +{ + m_pending.size = QSize(width, height); + + auto *xdgStates = static_cast(states->data); + size_t numStates = states->size / sizeof(uint32_t); + + m_pending.states = Qt::WindowNoState; + + for (size_t i = 0; i < numStates; i++) { + switch (xdgStates[i]) { + case ZXDG_TOPLEVEL_V6_STATE_ACTIVATED: + m_pending.states |= Qt::WindowActive; + break; + case ZXDG_TOPLEVEL_V6_STATE_MAXIMIZED: + m_pending.states |= Qt::WindowMaximized; + break; + case ZXDG_TOPLEVEL_V6_STATE_FULLSCREEN: + m_pending.states |= Qt::WindowFullScreen; + break; + default: + break; + } + } + qCDebug(lcQpaWayland) << "Received zxdg_toplevel_v6.configure with" << m_pending.size + << "and" << m_pending.states; +} + +void QWaylandXdgSurfaceV6::Toplevel::zxdg_toplevel_v6_close() +{ + m_xdgSurface->m_window->window()->close(); +} + +void QWaylandXdgSurfaceV6::Toplevel::requestWindowStates(Qt::WindowStates states) +{ + // Re-send what's different from the applied state + Qt::WindowStates changedStates = m_applied.states ^ states; + + if (changedStates & Qt::WindowMaximized) { + if (states & Qt::WindowMaximized) + set_maximized(); + else + unset_maximized(); + } + + if (changedStates & Qt::WindowFullScreen) { + if (states & Qt::WindowFullScreen) + set_fullscreen(nullptr); + else + unset_fullscreen(); + } + + // Minimized state is not reported by the protocol, so always send it + if (states & Qt::WindowMinimized) { + set_minimized(); + m_xdgSurface->window()->handleWindowStatesChanged(states & ~Qt::WindowMinimized); + } +} + +QWaylandXdgSurfaceV6::Popup::Popup(QWaylandXdgSurfaceV6 *xdgSurface, QWaylandXdgSurfaceV6 *parent, + QtWayland::zxdg_positioner_v6 *positioner) + : zxdg_popup_v6(xdgSurface->get_popup(parent->object(), positioner->object())) + , m_xdgSurface(xdgSurface) + , m_parent(parent) +{ +} + +QWaylandXdgSurfaceV6::Popup::~Popup() +{ + if (isInitialized()) + destroy(); + + if (m_grabbing) { + auto *shell = m_xdgSurface->m_shell; + Q_ASSERT(shell->m_topmostGrabbingPopup == this); + shell->m_topmostGrabbingPopup = m_parent->m_popup; + } +} + +void QWaylandXdgSurfaceV6::Popup::grab(QWaylandInputDevice *seat, uint serial) +{ + m_xdgSurface->m_shell->m_topmostGrabbingPopup = this; + zxdg_popup_v6::grab(seat->wl_seat(), serial); + m_grabbing = true; +} + +void QWaylandXdgSurfaceV6::Popup::zxdg_popup_v6_popup_done() +{ + m_xdgSurface->m_window->window()->close(); +} + +QWaylandXdgSurfaceV6::QWaylandXdgSurfaceV6(QWaylandXdgShellV6 *shell, ::zxdg_surface_v6 *surface, QWaylandWindow *window) + : QWaylandShellSurface(window) + , zxdg_surface_v6(surface) + , m_shell(shell) + , m_window(window) +{ + QWaylandDisplay *display = window->display(); + Qt::WindowType type = window->window()->type(); + auto *transientParent = window->transientParent(); + + if (type == Qt::ToolTip && transientParent) { + setPopup(transientParent); + } else if (type == Qt::Popup && transientParent && display->lastInputDevice()) { + setGrabPopup(transientParent, display->lastInputDevice(), display->lastInputSerial()); + } else { + setToplevel(); + if (transientParent) { + auto parentXdgSurface = static_cast(transientParent->shellSurface()); + if (parentXdgSurface) + m_toplevel->set_parent(parentXdgSurface->m_toplevel->object()); + } + } +} + +QWaylandXdgSurfaceV6::~QWaylandXdgSurfaceV6() +{ + if (m_toplevel) { + delete m_toplevel; + m_toplevel = nullptr; + } + if (m_popup) { + delete m_popup; + m_popup = nullptr; + } + destroy(); +} + +void QWaylandXdgSurfaceV6::resize(QWaylandInputDevice *inputDevice, zxdg_toplevel_v6_resize_edge edges) +{ + Q_ASSERT(m_toplevel && m_toplevel->isInitialized()); + m_toplevel->resize(inputDevice->wl_seat(), inputDevice->serial(), edges); +} + +void QWaylandXdgSurfaceV6::resize(QWaylandInputDevice *inputDevice, enum wl_shell_surface_resize edges) +{ + auto xdgEdges = reinterpret_cast(&edges); + resize(inputDevice, *xdgEdges); +} + + +bool QWaylandXdgSurfaceV6::move(QWaylandInputDevice *inputDevice) +{ + if (m_toplevel && m_toplevel->isInitialized()) { + m_toplevel->move(inputDevice->wl_seat(), inputDevice->serial()); + return true; + } + return false; +} + +void QWaylandXdgSurfaceV6::setTitle(const QString &title) +{ + if (m_toplevel) + m_toplevel->set_title(title); +} + +void QWaylandXdgSurfaceV6::setAppId(const QString &appId) +{ + if (m_toplevel) + m_toplevel->set_app_id(appId); +} + +bool QWaylandXdgSurfaceV6::isExposed() const +{ + return m_configured || m_pendingConfigureSerial; +} + +bool QWaylandXdgSurfaceV6::handleExpose(const QRegion ®ion) +{ + if (!isExposed() && !region.isEmpty()) { + m_exposeRegion = region; + return true; + } + return false; +} + +void QWaylandXdgSurfaceV6::applyConfigure() +{ + Q_ASSERT(m_pendingConfigureSerial != 0); + + if (m_toplevel) + m_toplevel->applyConfigure(); + + m_configured = true; + ack_configure(m_pendingConfigureSerial); + + m_pendingConfigureSerial = 0; +} + +bool QWaylandXdgSurfaceV6::wantsDecorations() const +{ + return m_toplevel && !(m_toplevel->m_pending.states & Qt::WindowFullScreen); +} + +void QWaylandXdgSurfaceV6::requestWindowStates(Qt::WindowStates states) +{ + if (m_toplevel) + m_toplevel->requestWindowStates(states); + else + qCWarning(lcQpaWayland) << "Non-toplevel surfaces can't request window states"; +} + +void QWaylandXdgSurfaceV6::setToplevel() +{ + Q_ASSERT(!m_toplevel && !m_popup); + m_toplevel = new Toplevel(this); +} + +void QWaylandXdgSurfaceV6::setPopup(QWaylandWindow *parent) +{ + Q_ASSERT(!m_toplevel && !m_popup); + + auto parentXdgSurface = static_cast(parent->shellSurface()); + + 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 + transientPos -= parent->geometry().topLeft(); + if (parent->decoration()) { + transientPos.setX(transientPos.x() + parent->decoration()->margins().left()); + transientPos.setY(transientPos.y() + parent->decoration()->margins().top()); + } + 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; +} + +void QWaylandXdgSurfaceV6::setGrabPopup(QWaylandWindow *parent, QWaylandInputDevice *device, int serial) +{ + auto parentXdgSurface = static_cast(parent->shellSurface()); + auto *top = m_shell->m_topmostGrabbingPopup; + + if (top && top->m_xdgSurface != parentXdgSurface) { + qCWarning(lcQpaWayland) << "setGrabPopup called with a parent," << parentXdgSurface + << "which does not match the current topmost grabbing popup," + << top->m_xdgSurface << "According to the xdg-shell-v6 protocol, this" + << "is not allowed. The wayland QPA plugin is currently handling" + << "it by setting the parent to the topmost grabbing popup." + << "Note, however, that this may cause positioning errors and" + << "popups closing unxpectedly because xdg-shell-v6 mandate that child" + << "popups close before parents"; + parent = top->m_xdgSurface->m_window; + } + setPopup(parent); + m_popup->grab(device, serial); +} + +void QWaylandXdgSurfaceV6::zxdg_surface_v6_configure(uint32_t serial) +{ + m_pendingConfigureSerial = serial; + if (!m_configured) { + // We have to do the initial applyConfigure() immediately, since that is the expose. + applyConfigure(); + m_exposeRegion = QRegion(QRect(QPoint(), m_window->geometry().size())); + } else { + // Later configures are probably resizes, so we have to queue them up for a time when we + // are not painting to the window. + m_window->applyConfigureWhenPossible(); + } + + if (!m_exposeRegion.isEmpty()) { + m_window->handleExpose(m_exposeRegion); + m_exposeRegion = QRegion(); + } +} + +QWaylandXdgShellV6::QWaylandXdgShellV6(struct ::wl_registry *registry, uint32_t id, uint32_t availableVersion) + : QtWayland::zxdg_shell_v6(registry, id, qMin(availableVersion, 1u)) +{ +} + +QWaylandXdgShellV6::~QWaylandXdgShellV6() +{ + destroy(); +} + +QWaylandXdgSurfaceV6 *QWaylandXdgShellV6::getXdgSurface(QWaylandWindow *window) +{ + return new QWaylandXdgSurfaceV6(this, get_xdg_surface(window->object()), window); +} + +void QWaylandXdgShellV6::zxdg_shell_v6_ping(uint32_t serial) +{ + pong(serial); +} + +} + +QT_END_NAMESPACE diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6integration.cpp qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6integration.cpp --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6integration.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6integration.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwaylandxdgshellv6integration_p.h" + +#include +#include + +QT_BEGIN_NAMESPACE + +namespace QtWaylandClient { + +bool QWaylandXdgShellV6Integration::initialize(QWaylandDisplay *display) +{ + for (QWaylandDisplay::RegistryGlobal global : display->globals()) { + if (global.interface == QLatin1String("zxdg_shell_v6")) { + m_xdgShell.reset(new QWaylandXdgShellV6(display->wl_registry(), global.id, global.version)); + break; + } + } + + if (!m_xdgShell) { + qCDebug(lcQpaWayland) << "Couldn't find global zxdg_shell_v6 for xdg-shell unstable v6"; + return false; + } + + return QWaylandShellIntegration::initialize(display); +} + +QWaylandShellSurface *QWaylandXdgShellV6Integration::createShellSurface(QWaylandWindow *window) +{ + return m_xdgShell->getXdgSurface(window); +} + +void QWaylandXdgShellV6Integration::handleKeyboardFocusChanged(QWaylandWindow *newFocus, QWaylandWindow *oldFocus) +{ + if (newFocus) { + auto *xdgSurface = qobject_cast(newFocus->shellSurface()); + if (xdgSurface && !xdgSurface->handlesActiveState()) + m_display->handleWindowActivated(newFocus); + } + if (oldFocus && qobject_cast(oldFocus->shellSurface())) { + auto *xdgSurface = qobject_cast(oldFocus->shellSurface()); + if (xdgSurface && !xdgSurface->handlesActiveState()) + m_display->handleWindowDeactivated(oldFocus); + } +} + +} + +QT_END_NAMESPACE diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6integration_p.h qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6integration_p.h --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6integration_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6integration_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWAYLANDXDGSHELLV6INTEGRATION_P_H +#define QWAYLANDXDGSHELLV6INTEGRATION_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include "qwaylandxdgshellv6_p.h" + +#include + +QT_BEGIN_NAMESPACE + +namespace QtWaylandClient { + +class Q_WAYLAND_CLIENT_EXPORT QWaylandXdgShellV6Integration : public QWaylandShellIntegration +{ +public: + QWaylandXdgShellV6Integration() {} + bool initialize(QWaylandDisplay *display) override; + QWaylandShellSurface *createShellSurface(QWaylandWindow *window) override; + void handleKeyboardFocusChanged(QWaylandWindow *newFocus, QWaylandWindow *oldFocus) override; + +private: + QScopedPointer m_xdgShell; +}; + +} + +QT_END_NAMESPACE + +#endif // QWAYLANDXDGSHELLV6INTEGRATION_P_H diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6_p.h qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6_p.h --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6_p.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,168 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Copyright (C) 2017 Eurogiciel, author: +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the config.tests of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWAYLANDXDGSHELLV6_H +#define QWAYLANDXDGSHELLV6_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include "qwayland-xdg-shell-unstable-v6.h" + +#include +#include + +#include +#include + +#include + +QT_BEGIN_NAMESPACE + +class QWindow; + +namespace QtWaylandClient { + +class QWaylandWindow; +class QWaylandInputDevice; +class QWaylandXdgShellV6; + +class Q_WAYLAND_CLIENT_EXPORT QWaylandXdgSurfaceV6 : public QWaylandShellSurface, public QtWayland::zxdg_surface_v6 +{ + Q_OBJECT +public: + QWaylandXdgSurfaceV6(QWaylandXdgShellV6 *shell, ::zxdg_surface_v6 *surface, QWaylandWindow *window); + ~QWaylandXdgSurfaceV6() override; + + void resize(QWaylandInputDevice *inputDevice, enum zxdg_toplevel_v6_resize_edge edges); + void resize(QWaylandInputDevice *inputDevice, enum wl_shell_surface_resize edges) override; + bool move(QWaylandInputDevice *inputDevice) override; + void setTitle(const QString &title) override; + void setAppId(const QString &appId) override; + + bool isExposed() const override; + bool handleExpose(const QRegion &) override; + bool handlesActiveState() const { return m_toplevel; } + void applyConfigure() override; + bool wantsDecorations() const override; + +protected: + void requestWindowStates(Qt::WindowStates states) override; + void zxdg_surface_v6_configure(uint32_t serial) override; + +private: + class Toplevel: public QtWayland::zxdg_toplevel_v6 + { + public: + Toplevel(QWaylandXdgSurfaceV6 *xdgSurface); + ~Toplevel() override; + + void applyConfigure(); + + void zxdg_toplevel_v6_configure(int32_t width, int32_t height, wl_array *states) override; + void zxdg_toplevel_v6_close() override; + + void requestWindowStates(Qt::WindowStates states); + struct { + QSize size = {0, 0}; + Qt::WindowStates states = Qt::WindowNoState; + } m_pending, m_applied; + QSize m_normalSize; + + QWaylandXdgSurfaceV6 *m_xdgSurface = nullptr; + }; + + class Popup : public QtWayland::zxdg_popup_v6 { + public: + 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(); + void setPopup(QWaylandWindow *parent); + void setGrabPopup(QWaylandWindow *parent, QWaylandInputDevice *device, int serial); + + QWaylandXdgShellV6 *m_shell = nullptr; + QWaylandWindow *m_window = nullptr; + Toplevel *m_toplevel = nullptr; + Popup *m_popup = nullptr; + 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 +{ +public: + QWaylandXdgShellV6(struct ::wl_registry *registry, uint32_t id, uint32_t availableVersion); + + QWaylandXdgSurfaceV6 *getXdgSurface(QWaylandWindow *window); + + ~QWaylandXdgShellV6() override; + +private: + void zxdg_shell_v6_ping(uint32_t serial) override; + QWaylandXdgSurfaceV6::Popup *m_topmostGrabbingPopup = nullptr; + + friend class QWaylandXdgSurfaceV6; +}; + +QT_END_NAMESPACE + +} + +#endif // QWAYLANDXDGSHELLV6_H diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v6/xdg-shell-v6.json qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v6/xdg-shell-v6.json --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v6/xdg-shell-v6.json 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v6/xdg-shell-v6.json 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,3 @@ +{ + "Keys":[ "xdg-shell-v6" ] +} diff -Nru qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v6/xdg-shell-v6.pro qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v6/xdg-shell-v6.pro --- qtwayland-opensource-src-5.11.3/src/plugins/shellintegration/xdg-shell-v6/xdg-shell-v6.pro 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/plugins/shellintegration/xdg-shell-v6/xdg-shell-v6.pro 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,25 @@ +QT += gui-private waylandclient-private +CONFIG += wayland-scanner + +QMAKE_USE += wayland-client +qtConfig(xkbcommon): \ + QMAKE_USE_PRIVATE += xkbcommon + +WAYLANDCLIENTSOURCES += \ + ../../../3rdparty/protocol/xdg-shell-unstable-v6.xml + +HEADERS += \ + qwaylandxdgshellv6_p.h \ + qwaylandxdgshellv6integration_p.h \ + +SOURCES += \ + main.cpp \ + qwaylandxdgshellv6.cpp \ + qwaylandxdgshellv6integration.cpp \ + +OTHER_FILES += \ + xdg-shell-v6.json + +PLUGIN_TYPE = wayland-shell-integration +PLUGIN_CLASS_NAME = QWaylandXdgShellV6IntegrationPlugin +load(qt_plugin) diff -Nru qtwayland-opensource-src-5.11.3/src/qtwaylandscanner/qtwaylandscanner.cpp qtwayland-opensource-src-5.12.2/src/qtwaylandscanner/qtwaylandscanner.cpp --- qtwayland-opensource-src-5.11.3/src/qtwaylandscanner/qtwaylandscanner.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/qtwaylandscanner/qtwaylandscanner.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -40,93 +40,154 @@ #include #include #include +#include -enum Option { - ClientHeader, - ServerHeader, - ClientCode, - ServerCode -} option; +class Scanner +{ +public: + explicit Scanner() {} + ~Scanner() { delete m_xml; } + + bool parseArguments(int argc, char **argv); + void printUsage(); + bool process(); + void printErrors(); + +private: + struct WaylandEnumEntry { + QByteArray name; + QByteArray value; + QByteArray summary; + }; + + struct WaylandEnum { + QByteArray name; + + QList entries; + }; + + struct WaylandArgument { + QByteArray name; + QByteArray type; + QByteArray interface; + QByteArray summary; + bool allowNull; + }; + + struct WaylandEvent { + bool request; + QByteArray name; + QByteArray type; + QList arguments; + }; + + struct WaylandInterface { + QByteArray name; + int version; + + QList enums; + QList events; + QList requests; + }; + + bool isServerSide(); + bool parseOption(const char *str); + + QByteArray byteArrayValue(const QXmlStreamReader &xml, const char *name); + int intValue(const QXmlStreamReader &xml, const char *name, int defaultValue = 0); + bool boolValue(const QXmlStreamReader &xml, const char *name); + WaylandEvent readEvent(QXmlStreamReader &xml, bool request); + Scanner::WaylandEnum readEnum(QXmlStreamReader &xml); + Scanner::WaylandInterface readInterface(QXmlStreamReader &xml); + QByteArray waylandToCType(const QByteArray &waylandType, const QByteArray &interface); + QByteArray waylandToQtType(const QByteArray &waylandType, const QByteArray &interface, bool cStyleArray); + const Scanner::WaylandArgument *newIdArgument(const QList &arguments); + + void printEvent(const WaylandEvent &e, bool omitNames = false, bool withResource = false); + void printEventHandlerSignature(const WaylandEvent &e, const char *interfaceName, bool deepIndent = true); + void printEnums(const QList &enums); + + QByteArray stripInterfaceName(const QByteArray &name); + bool ignoreInterface(const QByteArray &name); + + enum Option { + ClientHeader, + ServerHeader, + ClientCode, + ServerCode + } m_option; + + QByteArray m_protocolName; + QByteArray m_protocolFilePath; + QByteArray m_scannerName; + QByteArray m_headerPath; + QByteArray m_prefix; + QXmlStreamReader *m_xml = nullptr; +}; + +bool Scanner::parseArguments(int argc, char **argv) +{ + m_scannerName = argv[0]; + + if (argc <= 2 || !parseOption(argv[1])) + return false; + + m_protocolFilePath = QByteArray(argv[2]); + + if (argc >= 4) + m_headerPath = QByteArray(argv[3]); + if (argc == 5) + m_prefix = QByteArray(argv[4]); + + return true; +} -bool isServerSide() +void Scanner::printUsage() { - return option == ServerHeader || option == ServerCode; + fprintf(stderr, "Usage: %s [client-header|server-header|client-code|server-code] specfile [header-path] [prefix]\n", m_scannerName.constData()); } -QByteArray protocolName; +bool Scanner::isServerSide() +{ + return m_option == ServerHeader || m_option == ServerCode; +} -bool parseOption(const char *str, Option *option) +bool Scanner::parseOption(const char *str) { if (str == QLatin1String("client-header")) - *option = ClientHeader; + m_option = ClientHeader; else if (str == QLatin1String("server-header")) - *option = ServerHeader; + m_option = ServerHeader; else if (str == QLatin1String("client-code")) - *option = ClientCode; + m_option = ClientCode; else if (str == QLatin1String("server-code")) - *option = ServerCode; + m_option = ServerCode; else return false; return true; } -struct WaylandEnumEntry { - QByteArray name; - QByteArray value; - QByteArray summary; -}; - -struct WaylandEnum { - QByteArray name; - - QList entries; -}; - -struct WaylandArgument { - QByteArray name; - QByteArray type; - QByteArray interface; - QByteArray summary; - bool allowNull; -}; - -struct WaylandEvent { - bool request; - QByteArray name; - QByteArray type; - QList arguments; -}; - -struct WaylandInterface { - QByteArray name; - int version; - - QList enums; - QList events; - QList requests; -}; - -QByteArray byteArrayValue(const QXmlStreamReader &xml, const char *name) +QByteArray Scanner::byteArrayValue(const QXmlStreamReader &xml, const char *name) { if (xml.attributes().hasAttribute(name)) return xml.attributes().value(name).toUtf8(); return QByteArray(); } -int intValue(const QXmlStreamReader &xml, const char *name, int defaultValue = 0) +int Scanner::intValue(const QXmlStreamReader &xml, const char *name, int defaultValue) { bool ok; int result = byteArrayValue(xml, name).toInt(&ok); return ok ? result : defaultValue; } -bool boolValue(const QXmlStreamReader &xml, const char *name) +bool Scanner::boolValue(const QXmlStreamReader &xml, const char *name) { return byteArrayValue(xml, name) == "true"; } -WaylandEvent readEvent(QXmlStreamReader &xml, bool request) +Scanner::WaylandEvent Scanner::readEvent(QXmlStreamReader &xml, bool request) { WaylandEvent event; event.request = request; @@ -148,7 +209,7 @@ return event; } -WaylandEnum readEnum(QXmlStreamReader &xml) +Scanner::WaylandEnum Scanner::readEnum(QXmlStreamReader &xml) { WaylandEnum result; result.name = byteArrayValue(xml, "name"); @@ -168,7 +229,7 @@ return result; } -WaylandInterface readInterface(QXmlStreamReader &xml) +Scanner::WaylandInterface Scanner::readInterface(QXmlStreamReader &xml) { WaylandInterface interface; interface.name = byteArrayValue(xml, "name"); @@ -188,7 +249,7 @@ return interface; } -QByteArray waylandToCType(const QByteArray &waylandType, const QByteArray &interface) +QByteArray Scanner::waylandToCType(const QByteArray &waylandType, const QByteArray &interface) { if (waylandType == "string") return "const char *"; @@ -212,7 +273,7 @@ return waylandType; } -QByteArray waylandToQtType(const QByteArray &waylandType, const QByteArray &interface, bool cStyleArray) +QByteArray Scanner::waylandToQtType(const QByteArray &waylandType, const QByteArray &interface, bool cStyleArray) { if (waylandType == "string") return "const QString &"; @@ -222,7 +283,7 @@ return waylandToCType(waylandType, interface); } -const WaylandArgument *newIdArgument(const QList &arguments) +const Scanner::WaylandArgument *Scanner::newIdArgument(const QList &arguments) { for (int i = 0; i < arguments.size(); ++i) { if (arguments.at(i).type == "new_id") @@ -231,7 +292,7 @@ return nullptr; } -void printEvent(const WaylandEvent &e, bool omitNames = false, bool withResource = false) +void Scanner::printEvent(const WaylandEvent &e, bool omitNames, bool withResource) { printf("%s(", e.name.constData()); bool needsComma = false; @@ -274,7 +335,7 @@ printf(")"); } -void printEventHandlerSignature(const WaylandEvent &e, const char *interfaceName, bool deepIndent = true) +void Scanner::printEventHandlerSignature(const WaylandEvent &e, const char *interfaceName, bool deepIndent) { const char *indent = deepIndent ? " " : ""; printf("handle_%s(\n", e.name.constData()); @@ -299,7 +360,7 @@ printf(")"); } -void printEnums(const QList &enums) +void Scanner::printEnums(const QList &enums) { for (int i = 0; i < enums.size(); ++i) { printf("\n"); @@ -318,66 +379,73 @@ } } -QByteArray stripInterfaceName(const QByteArray &name, const QByteArray &prefix) +QByteArray Scanner::stripInterfaceName(const QByteArray &name) { - if (!prefix.isEmpty() && name.startsWith(prefix)) - return name.mid(prefix.size()); + if (!m_prefix.isEmpty() && name.startsWith(m_prefix)) + return name.mid(m_prefix.size()); if (name.startsWith("qt_") || name.startsWith("wl_")) return name.mid(3); return name; } -bool ignoreInterface(const QByteArray &name) +bool Scanner::ignoreInterface(const QByteArray &name) { return name == "wl_display" || (isServerSide() && name == "wl_registry"); } -void process(QXmlStreamReader &xml, const QByteArray &headerPath, const QByteArray &prefix) +bool Scanner::process() { - if (!xml.readNextStartElement()) - return; + QFile file(m_protocolFilePath); + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + fprintf(stderr, "Unable to open file %s\n", m_protocolFilePath.constData()); + return false; + } - if (xml.name() != "protocol") { - xml.raiseError(QStringLiteral("The file is not a wayland protocol file.")); - return; + m_xml = new QXmlStreamReader(&file); + if (!m_xml->readNextStartElement()) + return false; + + if (m_xml->name() != "protocol") { + m_xml->raiseError(QStringLiteral("The file is not a wayland protocol file.")); + return false; } - protocolName = byteArrayValue(xml, "name"); + m_protocolName = byteArrayValue(*m_xml, "name"); - if (protocolName.isEmpty()) { - xml.raiseError(QStringLiteral("Missing protocol name.")); - return; + if (m_protocolName.isEmpty()) { + m_xml->raiseError(QStringLiteral("Missing protocol name.")); + return false; } //We should convert - to _ so that the preprocessor wont generate code which will lead to unexpected behavior //However, the wayland-scanner doesn't do so we will do the same for now - //QByteArray preProcessorProtocolName = QByteArray(protocolName).replace('-', '_').toUpper(); - QByteArray preProcessorProtocolName = QByteArray(protocolName).toUpper(); + //QByteArray preProcessorProtocolName = QByteArray(m_protocolName).replace('-', '_').toUpper(); + QByteArray preProcessorProtocolName = QByteArray(m_protocolName).toUpper(); QList interfaces; - while (xml.readNextStartElement()) { - if (xml.name() == "interface") - interfaces << readInterface(xml); + while (m_xml->readNextStartElement()) { + if (m_xml->name() == "interface") + interfaces << readInterface(*m_xml); else - xml.skipCurrentElement(); + m_xml->skipCurrentElement(); } - if (xml.hasError()) - return; + if (m_xml->hasError()) + return false; - if (option == ServerHeader) { + if (m_option == ServerHeader) { QByteArray inclusionGuard = QByteArray("QT_WAYLAND_SERVER_") + preProcessorProtocolName.constData(); printf("#ifndef %s\n", inclusionGuard.constData()); printf("#define %s\n", inclusionGuard.constData()); printf("\n"); printf("#include \"wayland-server.h\"\n"); - if (headerPath.isEmpty()) - printf("#include \"wayland-%s-server-protocol.h\"\n", QByteArray(protocolName).replace('_', '-').constData()); + if (m_headerPath.isEmpty()) + printf("#include \"wayland-%s-server-protocol.h\"\n", QByteArray(m_protocolName).replace('_', '-').constData()); else - printf("#include <%s/wayland-%s-server-protocol.h>\n", headerPath.constData(), QByteArray(protocolName).replace('_', '-').constData()); + printf("#include <%s/wayland-%s-server-protocol.h>\n", m_headerPath.constData(), QByteArray(m_protocolName).replace('_', '-').constData()); printf("#include \n"); printf("#include \n"); printf("#include \n"); @@ -396,7 +464,7 @@ printf("QT_WARNING_DISABLE_GCC(\"-Wmissing-field-initializers\")\n"); printf("QT_WARNING_DISABLE_CLANG(\"-Wmissing-field-initializers\")\n"); QByteArray serverExport; - if (headerPath.size()) { + if (m_headerPath.size()) { serverExport = QByteArray("Q_WAYLAND_SERVER_") + preProcessorProtocolName + "_EXPORT"; printf("\n"); printf("#if !defined(%s)\n", serverExport.constData()); @@ -418,7 +486,7 @@ const char *interfaceName = interface.name.constData(); - QByteArray stripped = stripInterfaceName(interface.name, prefix); + QByteArray stripped = stripInterfaceName(interface.name); const char *interfaceNameStripped = stripped.constData(); printf(" class %s %s\n {\n", serverExport.constData(), interfaceName); @@ -439,7 +507,7 @@ printf(" %s *%s_object;\n", interfaceName, interfaceNameStripped); printf(" struct ::wl_resource *handle;\n"); printf("\n"); - printf(" struct ::wl_client *client() const { return handle->client; }\n"); + printf(" struct ::wl_client *client() const { return wl_resource_get_client(handle); }\n"); printf(" int version() const { return wl_resource_get_version(handle); }\n"); printf("\n"); printf(" static Resource *fromResource(struct ::wl_resource *resource);\n"); @@ -547,11 +615,11 @@ printf("#endif\n"); } - if (option == ServerCode) { - if (headerPath.isEmpty()) - printf("#include \"qwayland-server-%s.h\"\n", QByteArray(protocolName).replace('_', '-').constData()); + if (m_option == ServerCode) { + if (m_headerPath.isEmpty()) + printf("#include \"qwayland-server-%s.h\"\n", QByteArray(m_protocolName).replace('_', '-').constData()); else - printf("#include <%s/qwayland-server-%s.h>\n", headerPath.constData(), QByteArray(protocolName).replace('_', '-').constData()); + printf("#include <%s/qwayland-server-%s.h>\n", m_headerPath.constData(), QByteArray(m_protocolName).replace('_', '-').constData()); printf("\n"); printf("QT_BEGIN_NAMESPACE\n"); printf("QT_WARNING_PUSH\n"); @@ -573,7 +641,7 @@ const char *interfaceName = interface.name.constData(); - QByteArray stripped = stripInterfaceName(interface.name, prefix); + QByteArray stripped = stripInterfaceName(interface.name); const char *interfaceNameStripped = stripped.constData(); printf(" %s::%s(struct ::wl_client *client, int id, int version)\n", interfaceName, interfaceName); @@ -705,9 +773,6 @@ printf(" that->m_resource_map.remove(resource->client(), resource);\n"); printf(" that->%s_destroy_resource(resource);\n", interfaceNameStripped); printf(" delete resource;\n"); - printf("#if !WAYLAND_VERSION_CHECK(1, 2, 0)\n"); - printf(" free(client_resource);\n"); - printf("#endif\n"); printf(" }\n"); printf("\n"); @@ -739,8 +804,10 @@ printf(" %s::Resource *%s::Resource::fromResource(struct ::wl_resource *resource)\n", interfaceName, interfaceName); printf(" {\n"); + printf(" if (Q_UNLIKELY(!resource))\n"); + printf(" return nullptr;\n"); printf(" if (wl_resource_instance_of(resource, &::%s_interface, %s))\n", interfaceName, interfaceMember.constData()); - printf(" return static_cast(resource->data);\n"); + printf(" return static_cast(wl_resource_get_user_data(resource));\n"); printf(" return nullptr;\n"); printf(" }\n"); @@ -860,15 +927,15 @@ printf("QT_END_NAMESPACE\n"); } - if (option == ClientHeader) { + if (m_option == ClientHeader) { QByteArray inclusionGuard = QByteArray("QT_WAYLAND_") + preProcessorProtocolName.constData(); printf("#ifndef %s\n", inclusionGuard.constData()); printf("#define %s\n", inclusionGuard.constData()); printf("\n"); - if (headerPath.isEmpty()) - printf("#include \"wayland-%s-client-protocol.h\"\n", QByteArray(protocolName).replace('_', '-').constData()); + if (m_headerPath.isEmpty()) + printf("#include \"wayland-%s-client-protocol.h\"\n", QByteArray(m_protocolName).replace('_', '-').constData()); else - printf("#include <%s/wayland-%s-client-protocol.h>\n", headerPath.constData(), QByteArray(protocolName).replace('_', '-').constData()); + printf("#include <%s/wayland-%s-client-protocol.h>\n", m_headerPath.constData(), QByteArray(m_protocolName).replace('_', '-').constData()); printf("#include \n"); printf("#include \n"); printf("\n"); @@ -878,7 +945,7 @@ QByteArray clientExport; - if (headerPath.size()) { + if (m_headerPath.size()) { clientExport = QByteArray("Q_WAYLAND_CLIENT_") + preProcessorProtocolName + "_EXPORT"; printf("\n"); printf("#if !defined(%s)\n", clientExport.constData()); @@ -899,7 +966,7 @@ const char *interfaceName = interface.name.constData(); - QByteArray stripped = stripInterfaceName(interface.name, prefix); + QByteArray stripped = stripInterfaceName(interface.name); const char *interfaceNameStripped = stripped.constData(); printf(" class %s %s\n {\n", clientExport.constData(), interfaceName); @@ -978,11 +1045,11 @@ printf("#endif\n"); } - if (option == ClientCode) { - if (headerPath.isEmpty()) - printf("#include \"qwayland-%s.h\"\n", QByteArray(protocolName).replace('_', '-').constData()); + if (m_option == ClientCode) { + if (m_headerPath.isEmpty()) + printf("#include \"qwayland-%s.h\"\n", QByteArray(m_protocolName).replace('_', '-').constData()); else - printf("#include <%s/qwayland-%s.h>\n", headerPath.constData(), QByteArray(protocolName).replace('_', '-').constData()); + printf("#include <%s/qwayland-%s.h>\n", m_headerPath.constData(), QByteArray(m_protocolName).replace('_', '-').constData()); printf("\n"); printf("QT_BEGIN_NAMESPACE\n"); printf("QT_WARNING_PUSH\n"); @@ -997,7 +1064,7 @@ const char *interfaceName = interface.name.constData(); - QByteArray stripped = stripInterfaceName(interface.name, prefix); + QByteArray stripped = stripInterfaceName(interface.name); const char *interfaceNameStripped = stripped.constData(); bool hasEvents = !interface.events.isEmpty(); @@ -1134,8 +1201,6 @@ for (int i = 0; i < e.arguments.size(); ++i) { printf("\n"); const WaylandArgument &a = e.arguments.at(i); - QByteArray cType = waylandToCType(a.type, a.interface); - QByteArray qtType = waylandToQtType(a.type, a.interface, e.request); const char *argumentName = a.name.constData(); if (a.type == "string") printf(" QString::fromUtf8(%s)", argumentName); @@ -1172,34 +1237,30 @@ printf("QT_WARNING_POP\n"); printf("QT_END_NAMESPACE\n"); } + + return true; } -int main(int argc, char **argv) +void Scanner::printErrors() { - if (argc <= 2 || !parseOption(argv[1], &option)) { - fprintf(stderr, "Usage: %s [client-header|server-header|client-code|server-code] specfile [header-path] [prefix]\n", argv[0]); - return 1; - } + if (m_xml->hasError()) + fprintf(stderr, "XML error: %s\nLine %lld, column %lld\n", m_xml->errorString().toLocal8Bit().constData(), m_xml->lineNumber(), m_xml->columnNumber()); +} +int main(int argc, char **argv) +{ QCoreApplication app(argc, argv); + Scanner scanner; - QByteArray headerPath; - if (argc >= 4) - headerPath = QByteArray(argv[3]); - QByteArray prefix; - if (argc == 5) - prefix = QByteArray(argv[4]); - QFile file(argv[2]); - if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { - fprintf(stderr, "Unable to open file %s\n", argv[2]); - return 1; + if (!scanner.parseArguments(argc, argv)) { + scanner.printUsage(); + return EXIT_FAILURE; } - QXmlStreamReader xml(&file); - process(xml, headerPath, prefix); - - if (xml.hasError()) { - fprintf(stderr, "XML error: %s\nLine %lld, column %lld\n", xml.errorString().toLocal8Bit().constData(), xml.lineNumber(), xml.columnNumber()); - return 1; + if (!scanner.process()) { + scanner.printErrors(); + return EXIT_FAILURE; } + + return EXIT_SUCCESS; } diff -Nru qtwayland-opensource-src-5.11.3/src/shared/qwaylandxkb.cpp qtwayland-opensource-src-5.12.2/src/shared/qwaylandxkb.cpp --- qtwayland-opensource-src-5.11.3/src/shared/qwaylandxkb.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/shared/qwaylandxkb.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -43,13 +43,13 @@ #include #include -#if QT_CONFIG(xkbcommon_evdev) +#if QT_CONFIG(xkbcommon) #include #endif QT_BEGIN_NAMESPACE -#if QT_CONFIG(xkbcommon_evdev) +#if QT_CONFIG(xkbcommon) static const uint32_t KeyTbl[] = { XKB_KEY_Escape, Qt::Key_Escape, XKB_KEY_Tab, Qt::Key_Tab, @@ -297,7 +297,7 @@ std::pair QWaylandXkb::keysymToQtKey(xkb_keysym_t keysym, Qt::KeyboardModifiers &modifiers) { -#if QT_CONFIG(xkbcommon_evdev) +#if QT_CONFIG(xkbcommon) QString text; uint utf32 = xkb_keysym_to_utf32(keysym); if (utf32) @@ -339,7 +339,7 @@ Qt::KeyboardModifiers QWaylandXkb::modifiers(struct xkb_state *state) { -#if QT_CONFIG(xkbcommon_evdev) +#if QT_CONFIG(xkbcommon) Qt::KeyboardModifiers modifiers = Qt::NoModifier; xkb_state_component cstate = static_cast(XKB_STATE_DEPRESSED | XKB_STATE_LATCHED | XKB_STATE_LOCKED); @@ -367,7 +367,7 @@ QVector QWaylandXkb::toKeysym(QKeyEvent *event) { -#if QT_CONFIG(xkbcommon_evdev) +#if QT_CONFIG(xkbcommon) QVector keysyms; if (event->key() >= Qt::Key_F1 && event->key() <= Qt::Key_F35) { keysyms.append(XKB_KEY_F1 + (event->key() - Qt::Key_F1)); diff -Nru qtwayland-opensource-src-5.11.3/src/shared/qwaylandxkb_p.h qtwayland-opensource-src-5.12.2/src/shared/qwaylandxkb_p.h --- qtwayland-opensource-src-5.11.3/src/shared/qwaylandxkb_p.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/src/shared/qwaylandxkb_p.h 2019-02-21 12:36:59.000000000 +0000 @@ -45,7 +45,7 @@ #include #include -#if QT_CONFIG(xkbcommon_evdev) +#if QT_CONFIG(xkbcommon) #include #else typedef quint32 xkb_keysym_t; diff -Nru qtwayland-opensource-src-5.11.3/sync.profile qtwayland-opensource-src-5.12.2/sync.profile --- qtwayland-opensource-src-5.11.3/sync.profile 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/sync.profile 2019-02-21 12:36:59.000000000 +0000 @@ -21,23 +21,35 @@ "$basedir/src/client" => [ "^qwayland-hardware-integration.h", "^qwayland-qt-windowmanager.h", - "^qwayland-qtkey-extension.h" , + "^qwayland-qt-key-unstable-v1.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", + "^qwayland-xdg-output-unstable-v1.h", "^wayland-hardware-integration-client-protocol.h", "^wayland-qt-windowmanager-client-protocol.h", - "^wayland-qtkey-extension-client-protocol.h", + "^wayland-qt-key-unstable-v1-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-output-unstable-v1-client-protocol.h", + ], + "$basedir/src/plugins/shellintegration/xdg-shell" => [ + "^qwayland-xdg-shell.h", + "^qwayland-xdg-decoration-unstable-v1.h", "^wayland-xdg-shell-client-protocol.h", + "^wayland-xdg-decoration-unstable-v1-client-protocol.h", + ], + "$basedir/src/plugins/shellintegration/xdg-shell-v5" => [ + "^qwayland-xdg-shell-unstable-v5.h", + "^wayland-xdg-shell-unstable-v5-client-protocol.h", + ], + "$basedir/src/plugins/shellintegration/xdg-shell-v6" => [ + "^qwayland-xdg-shell-unstable-v6.h", "^wayland-xdg-shell-unstable-v6-client-protocol.h", ], "$basedir/src/compositor" => [ @@ -45,21 +57,25 @@ "^qwayland-server-hardware-integration.h", "^qwayland-server-ivi-application.h", "^qwayland-server-qt-windowmanager.h", - "^qwayland-server-qtkey-extension.h", + "^qwayland-server-qt-key-unstable-v1.h", "^qwayland-server-server-buffer-extension.h", "^qwayland-server-text-input-unstable-v2.h", "^qwayland-server-touch-extension.h", + "^qwayland-server-xdg-decoration-unstable-v1.h", + "^qwayland-server-xdg-shell-unstable-v5.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-qt-key-unstable-v1-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-decoration-unstable-v1-server-protocol.h", "^wayland-xdg-shell-server-protocol.h", + "^wayland-xdg-shell-unstable-v5-server-protocol.h", "^wayland-xdg-shell-unstable-v6-server-protocol.h", ], ); diff -Nru qtwayland-opensource-src-5.11.3/.tag qtwayland-opensource-src-5.12.2/.tag --- qtwayland-opensource-src-5.11.3/.tag 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/.tag 2019-02-21 12:36:59.000000000 +0000 @@ -1 +1 @@ -9ce3088d226fddc18bcac170fa5cc5be3c29e371 +0d717b0cc9aa3b87821450a2bce0d0bf0f1a6bfb diff -Nru qtwayland-opensource-src-5.11.3/tests/auto/client/client/tst_client.cpp qtwayland-opensource-src-5.12.2/tests/auto/client/client/tst_client.cpp --- qtwayland-opensource-src-5.11.3/tests/auto/client/client/tst_client.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/tests/auto/client/client/tst_client.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -173,6 +173,7 @@ void windowScreens(); void removePrimaryScreen(); void createDestroyWindow(); + void activeWindowFollowsKeyboardFocus(); void events(); void backingStore(); void touchDrag(); @@ -309,7 +310,7 @@ QTRY_VERIFY(!compositor->surface()); } -void tst_WaylandClient::events() +void tst_WaylandClient::activeWindowFollowsKeyboardFocus() { TestWindow window; window.show(); @@ -320,6 +321,9 @@ QTRY_VERIFY(window.isExposed()); + if (compositor->xdgToplevelV6()) + QSKIP("On xdg-shell v6 focus is handled by configure events"); + QCOMPARE(window.focusInEventCount, 0); compositor->setKeyboardFocus(surface); QTRY_COMPARE(window.focusInEventCount, 1); @@ -329,9 +333,21 @@ compositor->setKeyboardFocus(QSharedPointer(nullptr)); QTRY_COMPARE(window.focusOutEventCount, 1); QTRY_COMPARE(QGuiApplication::focusWindow(), static_cast(nullptr)); +} + +void tst_WaylandClient::events() +{ + TestWindow window; + window.show(); + + QSharedPointer surface; + QTRY_VERIFY(surface = compositor->surface()); + compositor->sendShellSurfaceConfigure(surface); + + QTRY_VERIFY(window.isExposed()); compositor->setKeyboardFocus(surface); - QTRY_COMPARE(window.focusInEventCount, 2); + QTRY_COMPARE(window.focusInEventCount, 1); QTRY_COMPARE(QGuiApplication::focusWindow(), &window); uint keyCode = 80; // arbitrarily chosen diff -Nru qtwayland-opensource-src-5.11.3/tests/auto/client/shared/mockcompositor.cpp qtwayland-opensource-src-5.12.2/tests/auto/client/shared/mockcompositor.cpp --- qtwayland-opensource-src-5.11.3/tests/auto/client/shared/mockcompositor.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/tests/auto/client/shared/mockcompositor.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -236,11 +236,14 @@ processCommand(command); } -void MockCompositor::sendXdgToplevelV6Configure(const QSharedPointer toplevel, const QSize &size) +void MockCompositor::sendXdgToplevelV6Configure(const QSharedPointer toplevel, const QSize &size, const QVector &states) { Command command = makeCommand(Impl::Compositor::sendXdgToplevelV6Configure, m_compositor); command.parameters << QVariant::fromValue(toplevel); command.parameters << QVariant::fromValue(size); + QByteArray statesBytes(reinterpret_cast(states.data()), + states.size() * static_cast(sizeof(uint))); + command.parameters << statesBytes; processCommand(command); } @@ -397,7 +400,7 @@ static void compositor_create_surface(wl_client *client, wl_resource *compositorResource, uint32_t id) { - Compositor *compositor = static_cast(compositorResource->data); + Compositor *compositor = static_cast(wl_resource_get_user_data(compositorResource)); compositor->addSurface(new Surface(client, id, wl_resource_get_version(compositorResource), compositor)); } @@ -422,18 +425,18 @@ static void unregisterResourceCallback(wl_listener *listener, void *data) { struct wl_resource *resource = reinterpret_cast(data); - wl_list_remove(&resource->link); + wl_list_remove(wl_resource_get_link(resource)); delete listener; } void registerResource(wl_list *list, wl_resource *resource) { - wl_list_insert(list, &resource->link); + wl_list_insert(list, wl_resource_get_link(resource)); wl_listener *listener = new wl_listener; listener->notify = unregisterResourceCallback; - wl_signal_add(&resource->destroy_signal, listener); + wl_resource_add_destroy_listener(resource, listener); } QVector Compositor::surfaces() const diff -Nru qtwayland-opensource-src-5.11.3/tests/auto/client/shared/mockcompositor.h qtwayland-opensource-src-5.12.2/tests/auto/client/shared/mockcompositor.h --- qtwayland-opensource-src-5.11.3/tests/auto/client/shared/mockcompositor.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/tests/auto/client/shared/mockcompositor.h 2019-02-21 12:36:59.000000000 +0000 @@ -175,12 +175,22 @@ Q_DECLARE_METATYPE(QSharedPointer) -class MockXdgToplevelV6 +class MockXdgToplevelV6 : public QObject { + Q_OBJECT public: Impl::XdgToplevelV6 *handle() const { return m_toplevel; } void sendConfigure(const QSharedPointer toplevel); + +signals: + uint setMinimizedRequested(); + uint setMaximizedRequested(); + uint unsetMaximizedRequested(); + uint setFullscreenRequested(); + uint unsetFullscreenRequested(); + void windowGeometryRequested(QRect geometry); // NOTE: This is really an xdg surface event + private: MockXdgToplevelV6(Impl::XdgToplevelV6 *toplevel) : m_toplevel(toplevel) {} friend class Impl::Compositor; @@ -234,7 +244,8 @@ void sendSurfaceLeave(const QSharedPointer &surface, QSharedPointer &output); void sendShellSurfaceConfigure(const QSharedPointer surface, const QSize &size = QSize(0, 0)); void sendIviSurfaceConfigure(const QSharedPointer iviSurface, const QSize &size); - void sendXdgToplevelV6Configure(const QSharedPointer toplevel, const QSize &size = QSize(0, 0)); + void sendXdgToplevelV6Configure(const QSharedPointer toplevel, const QSize &size = QSize(0, 0), + const QVector &states = { ZXDG_TOPLEVEL_V6_STATE_ACTIVATED }); void waitForStartDrag(); QSharedPointer surface(); diff -Nru qtwayland-opensource-src-5.11.3/tests/auto/client/shared/mocksurface.cpp qtwayland-opensource-src-5.12.2/tests/auto/client/shared/mocksurface.cpp --- qtwayland-opensource-src-5.11.3/tests/auto/client/shared/mocksurface.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/tests/auto/client/shared/mocksurface.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -70,8 +70,11 @@ QSize size = parameters.at(1).toSize(); Q_ASSERT(size.isValid()); if (auto toplevel = surface->xdgToplevelV6()) { - toplevel->send_configure(size.width(), size.height(), QByteArray()); - toplevel->xdgSurface()->send_configure(compositor->nextSerial()); + QVector states = { ZXDG_TOPLEVEL_V6_STATE_ACTIVATED }; + auto statesBytes = QByteArray::fromRawData(reinterpret_cast(states.data()), + states.size() * static_cast(sizeof(uint))); + toplevel->send_configure(size.width(), size.height(), statesBytes); + toplevel->xdgSurface()->sendConfigure(compositor->nextSerial()); } else if (auto wlShellSurface = surface->wlShellSurface()) { const uint edges = 0; wlShellSurface->send_configure(edges, size.width(), size.height()); @@ -104,7 +107,9 @@ Surface *Surface::fromResource(struct ::wl_resource *resource) { - return static_cast(Resource::fromResource(resource)->surface_object); + if (auto *r = Resource::fromResource(resource)) + return static_cast(r->surface_object); + return nullptr; } void Surface::surface_destroy_resource(Resource *) @@ -118,13 +123,17 @@ if (m_wlShellSurface) // on wl-shell the shell surface is automatically destroyed with the surface wl_resource_destroy(m_wlShellSurface->resource()->handle); Q_ASSERT(!m_wlShellSurface); - Q_ASSERT(!m_xdgToplevelV6); + Q_ASSERT(!m_xdgSurfaceV6); wl_resource_destroy(resource->handle); } -void Surface::surface_attach(Resource *resource, - struct wl_resource *buffer, int x, int y) +void Surface::surface_attach(Resource *resource, struct wl_resource *buffer, int x, int y) { + if (m_xdgSurfaceV6) { + // It's a protocol error to attach a buffer to an xdgSurface that's not configured + Q_ASSERT(xdgSurfaceV6()->configureSent()); + } + Q_UNUSED(resource); Q_UNUSED(x); Q_UNUSED(y); @@ -156,14 +165,7 @@ Q_UNUSED(resource); if (m_buffer) { -#if WAYLAND_VERSION_CHECK(1, 2, 0) struct ::wl_shm_buffer *shm_buffer = wl_shm_buffer_get(m_buffer); -#else - struct ::wl_buffer *shm_buffer = 0; - if (wl_buffer_is_shm(static_cast(m_buffer->data))) - shm_buffer = static_cast(m_buffer->data); -#endif - if (shm_buffer) { int stride = wl_shm_buffer_get_stride(shm_buffer); uint format = wl_shm_buffer_get_format(shm_buffer); diff -Nru qtwayland-opensource-src-5.11.3/tests/auto/client/shared/mocksurface.h qtwayland-opensource-src-5.12.2/tests/auto/client/shared/mocksurface.h --- qtwayland-opensource-src-5.11.3/tests/auto/client/shared/mocksurface.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/tests/auto/client/shared/mocksurface.h 2019-02-21 12:36:59.000000000 +0000 @@ -50,7 +50,8 @@ static Surface *fromResource(struct ::wl_resource *resource); void map(); bool isMapped() const; - XdgToplevelV6 *xdgToplevelV6() const { return m_xdgToplevelV6; } + XdgSurfaceV6 *xdgSurfaceV6() const { return m_xdgSurfaceV6; } + XdgToplevelV6 *xdgToplevelV6() const { return m_xdgSurfaceV6 ? m_xdgSurfaceV6->toplevel() : nullptr; } WlShellSurface *wlShellSurface() const { return m_wlShellSurface; } QSharedPointer mockSurface() const { return m_mockSurface; } @@ -69,7 +70,7 @@ void surface_commit(Resource *resource) override; private: wl_resource *m_buffer = nullptr; - XdgToplevelV6 *m_xdgToplevelV6 = nullptr; + XdgSurfaceV6 *m_xdgSurfaceV6 = nullptr; WlShellSurface *m_wlShellSurface = nullptr; Compositor *m_compositor = nullptr; @@ -77,7 +78,7 @@ QList m_frameCallbackList; bool m_mapped = false; - friend class XdgToplevelV6; + friend class XdgSurfaceV6; friend class WlShellSurface; }; diff -Nru qtwayland-opensource-src-5.11.3/tests/auto/client/shared/mockxdgshellv6.cpp qtwayland-opensource-src-5.12.2/tests/auto/client/shared/mockxdgshellv6.cpp --- qtwayland-opensource-src-5.11.3/tests/auto/client/shared/mockxdgshellv6.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/tests/auto/client/shared/mockxdgshellv6.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -39,8 +39,8 @@ Q_ASSERT(toplevel && toplevel->resource()); QSize size = parameters.at(1).toSize(); Q_ASSERT(size.isValid()); - QByteArray states; - toplevel->send_configure(size.width(), size.height(), states); + auto statesBytes = parameters.at(2).toByteArray(); + toplevel->send_configure(size.width(), size.height(), statesBytes); toplevel->xdgSurface()->send_configure(compositor->nextSerial()); } @@ -49,6 +49,18 @@ , m_surface(surface) , m_shell(shell) { + m_surface->m_xdgSurfaceV6 = this; +} + +XdgSurfaceV6::~XdgSurfaceV6() +{ + m_surface->m_xdgSurfaceV6 = nullptr; +} + +void XdgSurfaceV6::sendConfigure(uint32_t serial) +{ + send_configure(serial); + m_configureSent = true; } void XdgSurfaceV6::zxdg_surface_v6_get_toplevel(QtWaylandServer::zxdg_surface_v6::Resource *resource, uint32_t id) @@ -57,6 +69,15 @@ m_toplevel = new XdgToplevelV6(this, resource->client(), id, version); } +void XdgSurfaceV6::zxdg_surface_v6_set_window_geometry(QtWaylandServer::zxdg_surface_v6::Resource *resource, int32_t x, int32_t y, int32_t width, int32_t height) +{ + Q_UNUSED(resource); + if (m_toplevel) { + QRect geometry(x, y, width, height); + emit m_toplevel->mockToplevel()->windowGeometryRequested(geometry); + } +} + void XdgSurfaceV6::zxdg_surface_v6_destroy(QtWaylandServer::zxdg_surface_v6::Resource *resource) { Q_ASSERT(!m_toplevel); @@ -69,7 +90,6 @@ , m_mockToplevel(new MockXdgToplevelV6(this)) { auto *surface = m_xdgSurface->surface(); - surface->m_xdgToplevelV6 = this; m_xdgSurface->shell()->addToplevel(this); surface->map(); } @@ -77,7 +97,6 @@ XdgToplevelV6::~XdgToplevelV6() { m_xdgSurface->shell()->removeToplevel(this); - m_xdgSurface->surface()->m_xdgToplevelV6 = nullptr; m_mockToplevel->m_toplevel = nullptr; } @@ -87,6 +106,37 @@ wl_resource_destroy(resource->handle); } +void XdgToplevelV6::zxdg_toplevel_v6_set_minimized(QtWaylandServer::zxdg_toplevel_v6::Resource *resource) +{ + Q_UNUSED(resource); + emit m_mockToplevel->setMinimizedRequested(); +} + +void XdgToplevelV6::zxdg_toplevel_v6_set_maximized(QtWaylandServer::zxdg_toplevel_v6::Resource *resource) +{ + Q_UNUSED(resource); + emit m_mockToplevel->setMaximizedRequested(); +} + +void XdgToplevelV6::zxdg_toplevel_v6_unset_maximized(QtWaylandServer::zxdg_toplevel_v6::Resource *resource) +{ + Q_UNUSED(resource); + emit m_mockToplevel->unsetMaximizedRequested(); +} + +void XdgToplevelV6::zxdg_toplevel_v6_set_fullscreen(QtWaylandServer::zxdg_toplevel_v6::Resource *resource, wl_resource *output) +{ + Q_UNUSED(resource); + Q_UNUSED(output); + emit m_mockToplevel->setFullscreenRequested(); +} + +void XdgToplevelV6::zxdg_toplevel_v6_unset_fullscreen(QtWaylandServer::zxdg_toplevel_v6::Resource *resource) +{ + Q_UNUSED(resource); + emit m_mockToplevel->unsetFullscreenRequested(); +} + void Impl::XdgShellV6::zxdg_shell_v6_get_xdg_surface(QtWaylandServer::zxdg_shell_v6::Resource *resource, uint32_t id, wl_resource *surface) { new XdgSurfaceV6(this, Surface::fromResource(surface), resource->client(), id); diff -Nru qtwayland-opensource-src-5.11.3/tests/auto/client/shared/mockxdgshellv6.h qtwayland-opensource-src-5.12.2/tests/auto/client/shared/mockxdgshellv6.h --- qtwayland-opensource-src-5.11.3/tests/auto/client/shared/mockxdgshellv6.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/tests/auto/client/shared/mockxdgshellv6.h 2019-02-21 12:36:59.000000000 +0000 @@ -46,18 +46,25 @@ { public: XdgSurfaceV6(XdgShellV6 *shell, Surface *surface, wl_client *client, uint32_t id); + ~XdgSurfaceV6() override; XdgShellV6 *shell() const { return m_shell; } Surface *surface() const { return m_surface; } + XdgToplevelV6 *toplevel() const { return m_toplevel; } + + void sendConfigure(uint32_t serial); + bool configureSent() const { return m_configureSent; } protected: void zxdg_surface_v6_destroy_resource(Resource *) override { delete this; } void zxdg_surface_v6_get_toplevel(Resource *resource, uint32_t id) override; + void zxdg_surface_v6_set_window_geometry(Resource *resource, int32_t x, int32_t y, int32_t width, int32_t height) override; void zxdg_surface_v6_destroy(Resource *resource) override; private: Surface *m_surface = nullptr; XdgToplevelV6 *m_toplevel = nullptr; XdgShellV6 *m_shell = nullptr; + bool m_configureSent = false; friend class XdgToplevelV6; }; @@ -74,6 +81,11 @@ protected: void zxdg_toplevel_v6_destroy_resource(Resource *) override { delete this; } void zxdg_toplevel_v6_destroy(Resource *resource) override; + void zxdg_toplevel_v6_set_minimized(Resource *resource) override; + void zxdg_toplevel_v6_set_maximized(Resource *resource) override; + void zxdg_toplevel_v6_unset_maximized(Resource *resource) override; + void zxdg_toplevel_v6_set_fullscreen(Resource *resource, struct ::wl_resource *output) override; + void zxdg_toplevel_v6_unset_fullscreen(Resource *resource) override; private: XdgSurfaceV6 *m_xdgSurface = nullptr; diff -Nru qtwayland-opensource-src-5.11.3/tests/auto/client/xdgshellv6/tst_xdgshellv6.cpp qtwayland-opensource-src-5.12.2/tests/auto/client/xdgshellv6/tst_xdgshellv6.cpp --- qtwayland-opensource-src-5.11.3/tests/auto/client/xdgshellv6/tst_xdgshellv6.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/tests/auto/client/xdgshellv6/tst_xdgshellv6.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -42,6 +42,7 @@ class TestWindow : public QWindow { + Q_OBJECT public: TestWindow() { @@ -49,6 +50,24 @@ setGeometry(0, 0, 32, 32); create(); } + + bool event(QEvent *event) override + { + if (event->type() == QEvent::WindowStateChange) + emit windowStateChangeEventReceived(static_cast(event)->oldState()); + return QWindow::event(event); + } + + void exposeEvent(QExposeEvent *event) override + { + ++exposeEventCount; + QWindow::exposeEvent(event); + } + + int exposeEventCount = 0; + +signals: + void windowStateChangeEventReceived(uint oldState); }; class tst_WaylandClientXdgShellV6 : public QObject @@ -58,6 +77,7 @@ tst_WaylandClientXdgShellV6(MockCompositor *c) : m_compositor(c) { + qRegisterMetaType(); QSocketNotifier *notifier = new QSocketNotifier(m_compositor->waylandFileDescriptor(), QSocketNotifier::Read, this); connect(notifier, &QSocketNotifier::activated, this, &tst_WaylandClientXdgShellV6::processWaylandEvents); // connect to the event dispatcher to make sure to flush out the outgoing message queue @@ -82,6 +102,15 @@ private slots: void createDestroyWindow(); void configure(); + void showMinimized(); + void setMinimized(); + void unsetMaximized(); + void focusWindowFollowsConfigure(); + void windowStateChangedEvents(); + void windowGeometrySimple(); + void windowGeometryFixed(); + void flushUnconfiguredXdgSurface(); + void dontSpamExposeEvents(); private: MockCompositor *m_compositor = nullptr; @@ -118,12 +147,277 @@ QSharedPointer toplevel; QTRY_VERIFY(toplevel = m_compositor->xdgToplevelV6()); + const QSize newSize(123, 456); m_compositor->sendXdgToplevelV6Configure(toplevel, newSize); QTRY_VERIFY(window.isExposed()); + QTRY_COMPARE(window.visibility(), QWindow::Windowed); + QTRY_COMPARE(window.windowStates(), Qt::WindowNoState); + QTRY_COMPARE(window.frameGeometry(), QRect(QPoint(), newSize)); + + m_compositor->sendXdgToplevelV6Configure(toplevel, screenSize, { ZXDG_TOPLEVEL_V6_STATE_ACTIVATED, ZXDG_TOPLEVEL_V6_STATE_MAXIMIZED }); + QTRY_COMPARE(window.visibility(), QWindow::Maximized); + QTRY_COMPARE(window.windowStates(), Qt::WindowMaximized); + QTRY_COMPARE(window.frameGeometry(), QRect(QPoint(), screenSize)); + + m_compositor->sendXdgToplevelV6Configure(toplevel, screenSize, { ZXDG_TOPLEVEL_V6_STATE_ACTIVATED, ZXDG_TOPLEVEL_V6_STATE_FULLSCREEN }); + QTRY_COMPARE(window.visibility(), QWindow::FullScreen); + QTRY_COMPARE(window.windowStates(), Qt::WindowFullScreen); + QTRY_COMPARE(window.frameGeometry(), QRect(QPoint(), screenSize)); + + //The window should remember it's original size + m_compositor->sendXdgToplevelV6Configure(toplevel, QSize(0, 0), { ZXDG_TOPLEVEL_V6_STATE_ACTIVATED }); + QTRY_COMPARE(window.visibility(), QWindow::Windowed); + QTRY_COMPARE(window.windowStates(), Qt::WindowNoState); QTRY_COMPARE(window.frameGeometry(), QRect(QPoint(), newSize)); } +void tst_WaylandClientXdgShellV6::showMinimized() +{ + // On xdg-shell v6 there's really no way for the compositor to tell the window if it's minimized + // There are wl_surface.enter events and so on, but there's really no way to differentiate + // between a window preview and an unminimized window. + TestWindow window; + window.showMinimized(); + QCOMPARE(window.windowStates(), Qt::WindowMinimized); // should return minimized until + QTRY_COMPARE(window.windowStates(), Qt::WindowNoState); // rejected by handleWindowStateChanged + + // Make sure the window on the compositor side is/was created here, and not after the test + // finishes, as that may mess up for later tests. + QTRY_VERIFY(m_compositor->xdgToplevelV6()); +} + +void tst_WaylandClientXdgShellV6::setMinimized() +{ + TestWindow window; + window.show(); + + QSharedPointer toplevel; + QTRY_VERIFY(toplevel = m_compositor->xdgToplevelV6()); + + m_compositor->sendXdgToplevelV6Configure(toplevel); + QTRY_COMPARE(window.visibility(), QWindow::Windowed); + QTRY_COMPARE(window.windowStates(), Qt::WindowNoState); + + QSignalSpy setMinimizedSpy(toplevel.data(), SIGNAL(setMinimizedRequested())); + QSignalSpy windowStateChangeSpy(&window, SIGNAL(windowStateChangeEventReceived(uint))); + + window.setVisibility(QWindow::Minimized); + QCOMPARE(window.visibility(), QWindow::Minimized); + QCOMPARE(window.windowStates(), Qt::WindowMinimized); + QTRY_COMPARE(setMinimizedSpy.count(), 1); + { + QTRY_VERIFY(windowStateChangeSpy.count() > 0); + Qt::WindowStates oldStates(windowStateChangeSpy.takeFirst().at(0).toUInt()); + QCOMPARE(oldStates, Qt::WindowNoState); + } + + // In the meantime the compositor may minimize, do nothing or reshow the window without + // telling us. + + QTRY_COMPARE(window.visibility(), QWindow::Windowed); // verify that we don't know anything + QTRY_COMPARE(window.windowStates(), Qt::WindowNoState); + { + QTRY_COMPARE(windowStateChangeSpy.count(), 1); + Qt::WindowStates oldStates(windowStateChangeSpy.takeFirst().at(0).toUInt()); + QCOMPARE(oldStates, Qt::WindowNoState); // because the window never was minimized + } + + // Setting visibility again should send another set_minimized request + window.setVisibility(QWindow::Minimized); + QTRY_COMPARE(setMinimizedSpy.count(), 2); +} + +void tst_WaylandClientXdgShellV6::unsetMaximized() +{ + TestWindow window; + window.show(); + + QSharedPointer toplevel; + QTRY_VERIFY(toplevel = m_compositor->xdgToplevelV6()); + + QSignalSpy unsetMaximizedSpy(toplevel.data(), SIGNAL(unsetMaximizedRequested())); + + QSignalSpy windowStateChangedSpy(&window, SIGNAL(windowStateChanged(Qt::WindowState))); + + m_compositor->sendXdgToplevelV6Configure(toplevel, screenSize, { ZXDG_TOPLEVEL_V6_STATE_MAXIMIZED }); + + QTRY_COMPARE(windowStateChangedSpy.count(), 1); + QCOMPARE(windowStateChangedSpy.takeFirst().at(0).toUInt(), Qt::WindowMaximized); + + window.setWindowStates(Qt::WindowNoState); + + QTRY_COMPARE(unsetMaximizedSpy.count(), 1); + QTRY_COMPARE(windowStateChangedSpy.count(), 1); + QCOMPARE(windowStateChangedSpy.takeFirst().at(0).toUInt(), Qt::WindowNoState); + + m_compositor->sendXdgToplevelV6Configure(toplevel, QSize(0, 0), {}); + + QTRY_COMPARE(windowStateChangedSpy.count(), 1); + QCOMPARE(windowStateChangedSpy.takeFirst().at(0).toUInt(), Qt::WindowNoState); +} + +void tst_WaylandClientXdgShellV6::focusWindowFollowsConfigure() +{ + TestWindow window; + window.show(); + + QSharedPointer toplevel; + QTRY_VERIFY(toplevel = m_compositor->xdgToplevelV6()); + QTRY_VERIFY(!window.isActive()); + + QSignalSpy windowStateChangeSpy(&window, SIGNAL(windowStateChangeEventReceived(uint))); + + m_compositor->sendXdgToplevelV6Configure(toplevel, QSize(0, 0), { ZXDG_TOPLEVEL_V6_STATE_ACTIVATED }); + QTRY_VERIFY(window.isActive()); + + m_compositor->sendXdgToplevelV6Configure(toplevel, QSize(0, 0), {}); + QTRY_VERIFY(!window.isActive()); +} + +void tst_WaylandClientXdgShellV6::windowStateChangedEvents() +{ + TestWindow window; + window.show(); + + QSharedPointer toplevel; + QTRY_VERIFY(toplevel = m_compositor->xdgToplevelV6()); + + QSignalSpy eventSpy(&window, SIGNAL(windowStateChangeEventReceived(uint))); + QSignalSpy signalSpy(&window, SIGNAL(windowStateChanged(Qt::WindowState))); + + m_compositor->sendXdgToplevelV6Configure(toplevel, screenSize, { ZXDG_TOPLEVEL_V6_STATE_MAXIMIZED }); + + QTRY_COMPARE(window.windowStates(), Qt::WindowMaximized); + QTRY_COMPARE(window.windowState(), Qt::WindowMaximized); + { + QTRY_COMPARE(eventSpy.count(), 1); + Qt::WindowStates oldStates(eventSpy.takeFirst().at(0).toUInt()); + QCOMPARE(oldStates, Qt::WindowNoState); + + QTRY_COMPARE(signalSpy.count(), 1); + uint newState = signalSpy.takeFirst().at(0).toUInt(); + QCOMPARE(newState, Qt::WindowMaximized); + } + + m_compositor->sendXdgToplevelV6Configure(toplevel, screenSize, { ZXDG_TOPLEVEL_V6_STATE_FULLSCREEN }); + + QTRY_COMPARE(window.windowStates(), Qt::WindowFullScreen); + QTRY_COMPARE(window.windowState(), Qt::WindowFullScreen); + { + QTRY_COMPARE(eventSpy.count(), 1); + Qt::WindowStates oldStates(eventSpy.takeFirst().at(0).toUInt()); + QCOMPARE(oldStates, Qt::WindowMaximized); + + QTRY_COMPARE(signalSpy.count(), 1); + uint newState = signalSpy.takeFirst().at(0).toUInt(); + QCOMPARE(newState, Qt::WindowFullScreen); + } + + m_compositor->sendXdgToplevelV6Configure(toplevel, QSize(0, 0), {}); + + QTRY_COMPARE(window.windowStates(), Qt::WindowNoState); + QTRY_COMPARE(window.windowState(), Qt::WindowNoState); + { + QTRY_COMPARE(eventSpy.count(), 1); + Qt::WindowStates oldStates(eventSpy.takeFirst().at(0).toUInt()); + QCOMPARE(oldStates, Qt::WindowFullScreen); + + QTRY_COMPARE(signalSpy.count(), 1); + uint newState = signalSpy.takeFirst().at(0).toUInt(); + QCOMPARE(newState, Qt::WindowNoState); + } +} + +void tst_WaylandClientXdgShellV6::windowGeometrySimple() +{ + QWindow window; + window.show(); + + QSharedPointer toplevel; + QTRY_VERIFY(toplevel = m_compositor->xdgToplevelV6()); + QSignalSpy geometrySpy(toplevel.data(), SIGNAL(windowGeometryRequested(QRect))); + + m_compositor->sendXdgToplevelV6Configure(toplevel); + QTRY_COMPARE(geometrySpy.count(), 1); + QCOMPARE(geometrySpy.takeFirst().at(0).toRect().size(), window.frameGeometry().size()); + + m_compositor->sendXdgToplevelV6Configure(toplevel, QSize(123, 456)); + QTRY_COMPARE(geometrySpy.count(), 1); + QCOMPARE(geometrySpy.takeFirst().at(0).toRect().size(), QSize(123, 456)); +} + +void tst_WaylandClientXdgShellV6::windowGeometryFixed() +{ + QWindow window; + window.resize(QSize(1337, 137)); + window.setMaximumSize(window.size()); + window.setMinimumSize(window.size()); + window.show(); + + QSharedPointer toplevel; + QTRY_VERIFY(toplevel = m_compositor->xdgToplevelV6()); + QSignalSpy geometrySpy(toplevel.data(), SIGNAL(windowGeometryRequested(QRect))); + + m_compositor->sendXdgToplevelV6Configure(toplevel); + QTRY_COMPARE(geometrySpy.count(), 1); + QRect initialWindowGeometry = geometrySpy.takeFirst().at(0).toRect(); + QCOMPARE(initialWindowGeometry.size(), window.frameGeometry().size()); + + m_compositor->sendXdgToplevelV6Configure(toplevel, QSize(123, 456)); + QTRY_COMPARE(geometrySpy.count(), 1); + // Configuring the window should not change the window geometry + QCOMPARE(geometrySpy.takeFirst().at(0).toRect().size(), initialWindowGeometry.size()); +} + +void tst_WaylandClientXdgShellV6::flushUnconfiguredXdgSurface() +{ + TestWindow window; + window.show(); + + QSharedPointer surface; + QTRY_VERIFY(surface = m_compositor->surface()); + + // Paint and flush some magenta + QBackingStore backingStore(&window); + QRect rect(QPoint(), window.size()); + backingStore.resize(rect.size()); + backingStore.beginPaint(rect); + QColor color = Qt::magenta; + QPainter p(backingStore.paintDevice()); + p.fillRect(rect, color); + p.end(); + backingStore.endPaint(); + backingStore.flush(rect); + + // We're not allowed to send buffer on this surface since it isn't yet configured. + // So, from the compositor's point of view there should be no buffer data yet. + m_compositor->processWaylandEvents(); + QVERIFY(surface->image.isNull()); + QVERIFY(!window.isExposed()); + + // Finally sending the configure should trigger an attach and commit with the + // right buffer. + m_compositor->sendShellSurfaceConfigure(surface); + QTRY_COMPARE(surface->image.size(), window.frameGeometry().size()); + QTRY_COMPARE(surface->image.pixel(window.frameMargins().left(), window.frameMargins().top()), color.rgba()); + QVERIFY(window.isExposed()); +} + +void tst_WaylandClientXdgShellV6::dontSpamExposeEvents() +{ + TestWindow window; + window.show(); + + QSharedPointer surface; + QTRY_VERIFY(surface = m_compositor->surface()); + QTRY_VERIFY(window.exposeEventCount == 0); + + m_compositor->sendShellSurfaceConfigure(surface); + QTRY_VERIFY(window.isExposed()); + QTRY_VERIFY(window.exposeEventCount == 1); +} + int main(int argc, char **argv) { setenv("XDG_RUNTIME_DIR", ".", 1); diff -Nru qtwayland-opensource-src-5.11.3/tests/auto/compositor/compositor/compositor.pro qtwayland-opensource-src-5.12.2/tests/auto/compositor/compositor/compositor.pro --- qtwayland-opensource-src-5.11.3/tests/auto/compositor/compositor/compositor.pro 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/tests/auto/compositor/compositor/compositor.pro 2019-02-21 12:36:59.000000000 +0000 @@ -7,11 +7,11 @@ QMAKE_USE += wayland-client wayland-server -qtConfig(xkbcommon-evdev): \ - QMAKE_USE += xkbcommon_evdev +qtConfig(xkbcommon): \ + QMAKE_USE += xkbcommon WAYLANDCLIENTSOURCES += \ - ../../../../src/3rdparty/protocol/xdg-shell.xml \ + ../../../../src/3rdparty/protocol/xdg-shell-unstable-v5.xml \ ../../../../src/3rdparty/protocol/ivi-application.xml \ SOURCES += \ @@ -21,6 +21,7 @@ mockclient.cpp \ mockseat.cpp \ testseat.cpp \ + mockkeyboard.cpp \ mockpointer.cpp HEADERS += \ @@ -29,4 +30,5 @@ mockclient.h \ mockseat.h \ testseat.h \ + mockkeyboard.h \ mockpointer.h diff -Nru qtwayland-opensource-src-5.11.3/tests/auto/compositor/compositor/mockclient.cpp qtwayland-opensource-src-5.12.2/tests/auto/compositor/compositor/mockclient.cpp --- qtwayland-opensource-src-5.11.3/tests/auto/compositor/compositor/mockclient.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/tests/auto/compositor/compositor/mockclient.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -166,7 +166,7 @@ void MockClient::handleGlobal(uint32_t id, const QByteArray &interface) { if (interface == "wl_compositor") { - compositor = static_cast(wl_registry_bind(registry, id, &wl_compositor_interface, 1)); + compositor = static_cast(wl_registry_bind(registry, id, &wl_compositor_interface, 3)); } else if (interface == "wl_output") { auto output = static_cast(wl_registry_bind(registry, id, &wl_output_interface, 2)); m_outputs.insert(id, output); diff -Nru qtwayland-opensource-src-5.11.3/tests/auto/compositor/compositor/mockclient.h qtwayland-opensource-src-5.12.2/tests/auto/compositor/compositor/mockclient.h --- qtwayland-opensource-src-5.11.3/tests/auto/compositor/compositor/mockclient.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/tests/auto/compositor/compositor/mockclient.h 2019-02-21 12:36:59.000000000 +0000 @@ -27,7 +27,7 @@ ****************************************************************************/ #include -#include +#include #include #include diff -Nru qtwayland-opensource-src-5.11.3/tests/auto/compositor/compositor/mockkeyboard.cpp qtwayland-opensource-src-5.12.2/tests/auto/compositor/compositor/mockkeyboard.cpp --- qtwayland-opensource-src-5.11.3/tests/auto/compositor/compositor/mockkeyboard.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/tests/auto/compositor/compositor/mockkeyboard.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,101 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "mockkeyboard.h" + +void keyboardKeymap(void *keyboard, struct wl_keyboard *wl_keyboard, uint32_t format, int32_t fd, uint32_t size) +{ + Q_UNUSED(keyboard); + Q_UNUSED(wl_keyboard); + Q_UNUSED(format); + Q_UNUSED(fd); + Q_UNUSED(size); +} + +void keyboardEnter(void *keyboard, struct wl_keyboard *wl_keyboard, uint32_t serial, struct wl_surface *surface, struct wl_array *keys) +{ + Q_UNUSED(wl_keyboard); + Q_UNUSED(serial); + Q_UNUSED(surface); + Q_UNUSED(keys); + + static_cast(keyboard)->m_enteredSurface = surface; +} + +void keyboardLeave(void *keyboard, struct wl_keyboard *wl_keyboard, uint32_t serial, struct wl_surface *surface) +{ + Q_UNUSED(wl_keyboard); + Q_UNUSED(serial); + Q_UNUSED(surface); + + static_cast(keyboard)->m_enteredSurface = nullptr; +} + +void keyboardKey(void *keyboard, struct wl_keyboard *wl_keyboard, uint32_t serial, uint32_t time, uint32_t key, uint32_t state) +{ + Q_UNUSED(keyboard); + Q_UNUSED(wl_keyboard); + Q_UNUSED(serial); + Q_UNUSED(time); + Q_UNUSED(key); + Q_UNUSED(state); + auto kb = static_cast(keyboard); + kb->m_lastKeyCode = key; + kb->m_lastKeyState = state; +} + +void keyboardModifiers(void *keyboard, struct wl_keyboard *wl_keyboard, uint32_t serial, uint32_t mods_depressed, uint32_t mods_latched, uint32_t mods_locked, uint32_t group) +{ + Q_UNUSED(keyboard); + Q_UNUSED(wl_keyboard); + Q_UNUSED(serial); + Q_UNUSED(mods_depressed); + Q_UNUSED(mods_latched); + Q_UNUSED(mods_locked); + auto kb = static_cast(keyboard); + kb->m_group = group; +} + +static const struct wl_keyboard_listener keyboardListener = { + keyboardKeymap, + keyboardEnter, + keyboardLeave, + keyboardKey, + keyboardModifiers +}; + +MockKeyboard::MockKeyboard(wl_seat *seat) + : m_keyboard(wl_seat_get_keyboard(seat)) +{ + wl_keyboard_add_listener(m_keyboard, &keyboardListener, this); +} + +MockKeyboard::~MockKeyboard() +{ + wl_keyboard_destroy(m_keyboard); +} diff -Nru qtwayland-opensource-src-5.11.3/tests/auto/compositor/compositor/mockkeyboard.h qtwayland-opensource-src-5.12.2/tests/auto/compositor/compositor/mockkeyboard.h --- qtwayland-opensource-src-5.11.3/tests/auto/compositor/compositor/mockkeyboard.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/tests/auto/compositor/compositor/mockkeyboard.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,50 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MOCKKEYBOARD_H +#define MOCKKEYBOARD_H + +#include +#include + +class MockKeyboard : public QObject +{ + Q_OBJECT + +public: + explicit MockKeyboard(wl_seat *seat); + ~MockKeyboard() override; + + wl_keyboard *m_keyboard = nullptr; + wl_surface *m_enteredSurface = nullptr; + uint m_lastKeyCode = 0; + uint m_lastKeyState = 0; + uint m_group = 0; +}; + +#endif // MOCKKEYBOARD_H diff -Nru qtwayland-opensource-src-5.11.3/tests/auto/compositor/compositor/mockseat.cpp qtwayland-opensource-src-5.12.2/tests/auto/compositor/compositor/mockseat.cpp --- qtwayland-opensource-src-5.11.3/tests/auto/compositor/compositor/mockseat.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/tests/auto/compositor/compositor/mockseat.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -31,14 +31,11 @@ MockSeat::MockSeat(wl_seat *seat) : m_seat(seat) , m_pointer(new MockPointer(seat)) + , m_keyboard(new MockKeyboard(seat)) { - // Bind to the keyboard interface so that the compositor has - // the right resource associations - m_keyboard = wl_seat_get_keyboard(seat); } MockSeat::~MockSeat() { - wl_keyboard_destroy(m_keyboard); wl_seat_destroy(m_seat); } diff -Nru qtwayland-opensource-src-5.11.3/tests/auto/compositor/compositor/mockseat.h qtwayland-opensource-src-5.12.2/tests/auto/compositor/compositor/mockseat.h --- qtwayland-opensource-src-5.11.3/tests/auto/compositor/compositor/mockseat.h 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/tests/auto/compositor/compositor/mockseat.h 2019-02-21 12:36:59.000000000 +0000 @@ -29,6 +29,7 @@ #define MOCKSEAT #include "mockpointer.h" +#include "mockkeyboard.h" #include #include @@ -41,12 +42,13 @@ MockSeat(wl_seat *seat); ~MockSeat() override; MockPointer *pointer() const { return m_pointer.data(); } + MockKeyboard *keyboard() const { return m_keyboard.data(); } wl_seat *m_seat = nullptr; - wl_keyboard *m_keyboard = nullptr; private: QScopedPointer m_pointer; + QScopedPointer m_keyboard; }; #endif diff -Nru qtwayland-opensource-src-5.11.3/tests/auto/compositor/compositor/tst_compositor.cpp qtwayland-opensource-src-5.12.2/tests/auto/compositor/compositor/tst_compositor.cpp --- qtwayland-opensource-src-5.11.3/tests/auto/compositor/compositor/tst_compositor.cpp 2018-11-19 05:22:26.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/tests/auto/compositor/compositor/tst_compositor.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -40,11 +40,13 @@ #include #include #include +#include #include #include #include #include -#include +#include +#include #include #include @@ -56,18 +58,27 @@ private slots: void init(); void seatCapabilities(); +#if QT_CONFIG(xkbcommon) + void simpleKeyboard(); + void keyboardKeymaps(); + void keyboardLayoutSwitching(); +#endif void keyboardGrab(); void seatCreation(); void seatKeyboardFocus(); void seatMouseFocus(); + void inputRegion(); void singleClient(); void multipleClients(); void geometry(); void modes(); + void comparingModes(); void sizeFollowsWindow(); void mapSurface(); + void mapSurfaceHiDpi(); void frameCallback(); void removeOutput(); + void customSurface(); void advertisesXdgShellSupport(); void createsXdgSurfaces(); @@ -160,6 +171,121 @@ QTRY_COMPARE(compositor.surfaces.size(), 0); } +#if QT_CONFIG(xkbcommon) + +void tst_WaylandCompositor::simpleKeyboard() +{ + TestCompositor compositor; + compositor.create(); + + QWaylandSeat* seat = compositor.defaultSeat(); + seat->keymap()->setLayout("us"); + + MockClient client; + + QTRY_COMPARE(client.m_seats.size(), 1); + MockKeyboard *mockKeyboard = client.m_seats.at(0)->keyboard(); + + wl_surface *mockSurface = client.createSurface(); + QTRY_COMPARE(compositor.surfaces.size(), 1); + seat->setKeyboardFocus(compositor.surfaces.at(0)); + + compositor.flushClients(); + QTRY_COMPARE(mockKeyboard->m_enteredSurface, mockSurface); + + seat->sendKeyEvent(Qt::Key_A, true); + compositor.flushClients(); + QTRY_COMPARE(mockKeyboard->m_lastKeyState, 1u); + QTRY_COMPARE(mockKeyboard->m_lastKeyCode, 30u); // 30 is the scan code for A on us keyboard layouts + + seat->sendKeyEvent(Qt::Key_A, false); + compositor.flushClients(); + QTRY_COMPARE(mockKeyboard->m_lastKeyState, 0u); + QTRY_COMPARE(mockKeyboard->m_lastKeyCode, 30u); + + seat->sendKeyEvent(Qt::Key_Super_L, true); + seat->sendKeyEvent(Qt::Key_Super_L, false); + compositor.flushClients(); + QTRY_COMPARE(mockKeyboard->m_lastKeyCode, 125u); +} + +void tst_WaylandCompositor::keyboardKeymaps() +{ + TestCompositor compositor; + compositor.create(); + QWaylandSeat* seat = compositor.defaultSeat(); + MockClient client; + QTRY_COMPARE(client.m_seats.size(), 1); + MockKeyboard *mockKeyboard = client.m_seats.at(0)->keyboard(); + client.createSurface(); + QTRY_COMPARE(compositor.surfaces.size(), 1); + seat->setKeyboardFocus(compositor.surfaces.at(0)); + + seat->keymap()->setLayout("us"); + + seat->sendKeyEvent(Qt::Key_Y, true); + seat->sendKeyEvent(Qt::Key_Y, false); + compositor.flushClients(); + QTRY_COMPARE(mockKeyboard->m_lastKeyCode, 21u); + + seat->sendKeyEvent(Qt::Key_Z, true); + seat->sendKeyEvent(Qt::Key_Z, false); + compositor.flushClients(); + QTRY_COMPARE(mockKeyboard->m_lastKeyCode, 44u); + + seat->keymap()->setLayout("de"); // In the German layout y and z have changed places + + seat->sendKeyEvent(Qt::Key_Y, true); + seat->sendKeyEvent(Qt::Key_Y, false); + compositor.flushClients(); + QTRY_COMPARE(mockKeyboard->m_lastKeyCode, 44u); + + seat->sendKeyEvent(Qt::Key_Z, true); + seat->sendKeyEvent(Qt::Key_Z, false); + compositor.flushClients(); + QTRY_COMPARE(mockKeyboard->m_lastKeyCode, 21u); +} + +void tst_WaylandCompositor::keyboardLayoutSwitching() +{ + TestCompositor compositor; + compositor.create(); + QWaylandSeat* seat = compositor.defaultSeat(); + MockClient client; + QTRY_COMPARE(client.m_seats.size(), 1); + MockKeyboard *mockKeyboard = client.m_seats.at(0)->keyboard(); + client.createSurface(); + QTRY_COMPARE(compositor.surfaces.size(), 1); + seat->setKeyboardFocus(compositor.surfaces.at(0)); + + seat->keymap()->setLayout("us,de"); + seat->keymap()->setOptions("grp:lalt_toggle"); //toggle keyboard layout with left alt + + compositor.flushClients(); + QTRY_COMPARE(mockKeyboard->m_group, 0u); + + seat->sendKeyEvent(Qt::Key_Y, true); + seat->sendKeyEvent(Qt::Key_Y, false); + compositor.flushClients(); + QTRY_COMPARE(mockKeyboard->m_lastKeyCode, 21u); + + // It's not currently possible to switch layouts programmatically with the public APIs + // We will just fake it with the private APIs here. + auto keyboardPrivate = QWaylandKeyboardPrivate::get(seat->keyboard()); + const uint leftAltCode = 64; + keyboardPrivate->updateModifierState(leftAltCode, WL_KEYBOARD_KEY_STATE_PRESSED); + keyboardPrivate->updateModifierState(leftAltCode, WL_KEYBOARD_KEY_STATE_RELEASED); + compositor.flushClients(); + QTRY_COMPARE(mockKeyboard->m_group, 1u); + + seat->sendKeyEvent(Qt::Key_Y, true); + seat->sendKeyEvent(Qt::Key_Y, false); + compositor.flushClients(); + QTRY_COMPARE(mockKeyboard->m_lastKeyCode, 44u); +} + +#endif // QT_CONFIG(xkbcommon) + void tst_WaylandCompositor::keyboardGrab() { TestCompositor compositor; @@ -249,6 +375,28 @@ QTRY_COMPARE(client.geometry, QRect(QPoint(0, 0), QSize(1920, 1080))); } +void tst_WaylandCompositor::comparingModes() +{ + QWaylandOutputMode mode1(QSize(800, 600), 120000); + QWaylandOutputMode mode2(QSize(1024, 768), 100000); + QWaylandOutputMode mode3(QSize(1024, 768), 120000); + QWaylandOutputMode mode4(QSize(800, 600), 100000); + + QCOMPARE(mode1, mode1); + QCOMPARE(mode2, mode2); + QCOMPARE(mode3, mode3); + QCOMPARE(mode4, mode4); + + for (auto mode: {mode2, mode3, mode4}) + QVERIFY(mode1 != mode); + for (auto mode: {mode1, mode3, mode4}) + QVERIFY(mode2 != mode); + for (auto mode: {mode1, mode2, mode4}) + QVERIFY(mode3 != mode); + for (auto mode: {mode1, mode2, mode3}) + QVERIFY(mode4 != mode); +} + void tst_WaylandCompositor::sizeFollowsWindow() { TestCompositor compositor; @@ -298,9 +446,78 @@ wl_surface_damage(surface, 0, 0, size.width(), size.height()); wl_surface_commit(surface); - QTRY_COMPARE(waylandSurface->size(), size); - QTRY_COMPARE(waylandSurface->hasContent(), true); QTRY_COMPARE(hasContentSpy.count(), 1); + QCOMPARE(waylandSurface->hasContent(), true); + QCOMPARE(waylandSurface->size(), size); + + wl_surface_destroy(surface); +} + +void tst_WaylandCompositor::mapSurfaceHiDpi() +{ + TestCompositor compositor; + compositor.create(); + + MockClient client; + + wl_surface *surface = client.createSurface(); + QTRY_COMPARE(compositor.surfaces.size(), 1); + + QWaylandSurface *waylandSurface = compositor.surfaces.at(0); + + constexpr int bufferScale = 2; + const QSize surfaceSize(128, 128); + const QSize bufferSize = surfaceSize * bufferScale; + const QPoint attachOffset(1, 2); // in surface-local coordinates + + client.createShellSurface(surface); + ShmBuffer buffer(bufferSize, client.shm); + wl_surface_attach(surface, buffer.handle, attachOffset.x(), attachOffset.y()); + wl_surface_set_buffer_scale(surface, bufferScale); + // wl_surface_damage is given in surface coordinates + wl_surface_damage(surface, 0, 0, surfaceSize.width(), surfaceSize.height()); + + auto verifyComittedState = [=]() { + QCOMPARE(waylandSurface->size(), bufferSize); + QCOMPARE(waylandSurface->bufferScale(), bufferScale); + QCOMPARE(waylandSurface->hasContent(), true); + }; + + QObject::connect(waylandSurface, &QWaylandSurface::damaged, [=] (const QRegion &damage) { + // Currently, QWaylandSurface::size returns the size in pixels. + // Should be fixed or removed for Qt 6. + QCOMPARE(damage, QRect(QPoint(), surfaceSize)); + verifyComittedState(); + }); + QSignalSpy damagedSpy(waylandSurface, SIGNAL(damaged(const QRegion &))); + + QObject::connect(waylandSurface, &QWaylandSurface::hasContentChanged, verifyComittedState); + QSignalSpy hasContentSpy(waylandSurface, SIGNAL(hasContentChanged())); + + QObject::connect(waylandSurface, &QWaylandSurface::sizeChanged, verifyComittedState); + QSignalSpy sizeSpy(waylandSurface, SIGNAL(sizeChanged())); + + QObject::connect(waylandSurface, &QWaylandSurface::bufferScaleChanged, verifyComittedState); + QSignalSpy bufferScaleSpy(waylandSurface, SIGNAL(bufferScaleChanged())); + + QObject::connect(waylandSurface, &QWaylandSurface::offsetForNextFrame, [=](const QPoint &offset) { + QCOMPARE(offset, attachOffset); + verifyComittedState(); + }); + QSignalSpy offsetSpy(waylandSurface, SIGNAL(offsetForNextFrame(const QPoint &))); + + // No state should be applied before the commit + QCOMPARE(waylandSurface->size(), QSize()); + QCOMPARE(waylandSurface->hasContent(), false); + QCOMPARE(waylandSurface->bufferScale(), 1); + QCOMPARE(offsetSpy.count(), 0); + + wl_surface_commit(surface); + + QTRY_COMPARE(hasContentSpy.count(), 1); + QTRY_COMPARE(sizeSpy.count(), 1); + QTRY_COMPARE(bufferScaleSpy.count(), 1); + QTRY_COMPARE(offsetSpy.count(), 1); wl_surface_destroy(surface); } @@ -397,6 +614,32 @@ QTRY_COMPARE(client.m_outputs.size(), 1); } +class CustomSurface : public QWaylandSurface { + Q_OBJECT +public: + explicit CustomSurface() = default; +}; + +void tst_WaylandCompositor::customSurface() +{ + TestCompositor compositor; + QObject::connect(&compositor, &TestCompositor::surfaceRequested, this, [&compositor] (QWaylandClient *client, uint id, int version) { + auto *s = new CustomSurface(); + QCOMPARE(s->waylandClient(), nullptr); + s->initialize(&compositor, client, id, version); + QCOMPARE(s->waylandClient(), client->client()); + }); + QObject::connect(&compositor, &TestCompositor::surfaceCreated, this, [] (QWaylandSurface *surface) { + auto *custom = qobject_cast(surface); + QVERIFY(custom != nullptr); + }); + compositor.create(); + + MockClient client; + wl_surface *surface = client.createSurface(); + QTRY_COMPARE(compositor.surfaces.size(), 1); +} + void tst_WaylandCompositor::seatCapabilities() { TestCompositor compositor; @@ -450,13 +693,24 @@ // Create client after all the input devices have been set up as the mock client // does not dynamically listen to new seats MockClient client; + + QTRY_COMPARE(client.m_seats.size(), 1); + MockKeyboard *mockKeyboard = client.m_seats.first()->keyboard(); + QVERIFY(mockKeyboard); + QCOMPARE(mockKeyboard->m_enteredSurface, nullptr); + wl_surface *surface = client.createSurface(); QTRY_COMPARE(compositor.surfaces.size(), 1); QWaylandSurface *waylandSurface = compositor.surfaces.at(0); - QWaylandSeat* dev = compositor.defaultSeat(); - dev->setKeyboardFocus(waylandSurface); - QTRY_COMPARE(compositor.defaultSeat()->keyboardFocus(), waylandSurface); + QWaylandSeat* seat = compositor.defaultSeat(); + QVERIFY(seat->setKeyboardFocus(waylandSurface)); + QCOMPARE(compositor.defaultSeat()->keyboardFocus(), waylandSurface); + + compositor.flushClients(); + + qDebug() << mockKeyboard->m_enteredSurface; + QTRY_COMPARE(mockKeyboard->m_enteredSurface, surface); wl_surface_destroy(surface); QTRY_VERIFY(compositor.surfaces.size() == 0); @@ -517,6 +771,61 @@ delete view; } +void tst_WaylandCompositor::inputRegion() +{ + TestCompositor compositor(true); + compositor.create(); + + // Create client after all the seats have been set up as the mock client + // does not dynamically listen to new seats + MockClient client; + wl_surface *surface = client.createSurface(); + + // We need to attach a buffer, since QWaylandSurface::inputRegionContains will will return + // false for coordinates outside the buffer (so don't let it be 0x0). + QSize size(16, 16); + ShmBuffer buffer(size, client.shm); + wl_surface_attach(surface, buffer.handle, 0, 0); + wl_surface_damage(surface, 0, 0, size.width(), size.height()); + + // Set the input region + wl_region *region = wl_compositor_create_region(client.compositor); + wl_region_add(region, 1, 2, 3, 4); + wl_surface_set_input_region(surface, region); + + // Commit everything + wl_surface_commit(surface); + + QTRY_COMPARE(compositor.surfaces.size(), 1); + QWaylandSurface *waylandSurface = compositor.surfaces.at(0); + + QVERIFY(waylandSurface->inputRegionContains(QPoint(1, 2))); + QVERIFY(waylandSurface->inputRegionContains(QPoint(3, 5))); + QVERIFY(!waylandSurface->inputRegionContains(QPoint(0, 0))); + QVERIFY(!waylandSurface->inputRegionContains(QPoint(1, 6))); + QVERIFY(!waylandSurface->inputRegionContains(QPoint(4, 2))); + + // Setting a nullptr input region means we want all events + wl_surface_set_input_region(surface, nullptr); + wl_surface_commit(surface); + + QTRY_VERIFY(waylandSurface->inputRegionContains(QPoint(0, 0))); + QVERIFY(waylandSurface->inputRegionContains(QPoint(1, 6))); + QVERIFY(waylandSurface->inputRegionContains(QPoint(4, 2))); + + // But points outside the buffer should still return false + QVERIFY(!waylandSurface->inputRegionContains(QPoint(-1, -1))); + QVERIFY(!waylandSurface->inputRegionContains(QPoint(16, 16))); + + // Setting an empty region means we want no events + wl_region *emptyRegion = wl_compositor_create_region(client.compositor); + wl_surface_set_input_region(surface, emptyRegion); + wl_surface_commit(surface); + + QTRY_VERIFY(!waylandSurface->inputRegionContains(QPoint(0, 0))); + QVERIFY(!waylandSurface->inputRegionContains(QPoint(1, 2))); +} + class XdgTestCompositor: public TestCompositor { Q_OBJECT public: diff -Nru qtwayland-opensource-src-5.11.3/tests/manual/wip-cpp-compositor/compositor.cpp qtwayland-opensource-src-5.12.2/tests/manual/wip-cpp-compositor/compositor.cpp --- qtwayland-opensource-src-5.11.3/tests/manual/wip-cpp-compositor/compositor.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/tests/manual/wip-cpp-compositor/compositor.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,290 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of the Qt Wayland module +** +** $QT_BEGIN_LICENSE:BSD$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "compositor.h" +#include "window.h" + +#include +#include +#include + +#include + +QOpenGLTexture *View::getTexture() { + if (advance()) + m_texture = currentBuffer().toOpenGLTexture(); + return m_texture; +} + +void View::setGlobalPosition(const QPoint &position) +{ + if (m_globalPosition == position) + return; + + m_globalPosition = position; + emit globalPositionChanged(); +} + +QPoint View::mapToLocal(const QPoint &globalPosition) const +{ + return globalPosition - this->globalPosition(); +} + +void View::updateAnchoredPosition() +{ + QPoint offset; + QSize size = surface()->size(); + QSize delta = size - m_lastSize; + if (m_anchorEdges & Qt::RightEdge) + offset.setX(-delta.width()); + if (m_anchorEdges & Qt::BottomEdge) + offset.setY(-delta.height()); + setGlobalPosition(globalPosition() + offset); + m_lastSize = size; +} + +void View::handleResizeMove(const QPoint &delta) +{ + Q_UNUSED(delta); + qWarning() << "Resize not implemented for this view"; +} + +ToplevelView::ToplevelView(QWaylandXdgToplevel *toplevel) + : m_toplevel(toplevel) +{ + QWaylandXdgSurface *xdgSurface = toplevel->xdgSurface(); + setSurface(xdgSurface->surface()); + connect(toplevel, &QWaylandXdgToplevel::startMove, this, &View::startMove); + connect(toplevel, &QWaylandXdgToplevel::startResize, this, [this](QWaylandSeat *, Qt::Edges edges) { + m_resize.edges = edges; + m_resize.initialSize = m_toplevel->xdgSurface()->windowGeometry().size(); + Qt::Edges opposite = edges ^ Qt::Edges(0b1111); + setAnchorEdges(opposite); + emit startResize(); + }); + QVector states{QWaylandXdgToplevel::ActivatedState}; + toplevel->sendConfigure(QSize(0, 0), states); +} + +void ToplevelView::handleResizeMove(const QPoint &delta) +{ + QSize newSize = m_toplevel->sizeForResize(m_resize.initialSize, delta, m_resize.edges); + m_toplevel->sendResizing(newSize); +} + +void ToplevelView::handleResizeRelease() +{ + setAnchorEdges({}); + m_resize.edges = {}; + m_resize.initialSize = {}; +} + +Compositor::~Compositor() +{ + delete m_xdgShell; +} + +void Compositor::create() +{ + QWaylandCompositor::create(); + + m_xdgShell = new QWaylandXdgShell(this); + connect(m_xdgShell, &QWaylandXdgShell::toplevelCreated, this, &Compositor::handleXdgToplevelCreated); +} + +View *Compositor::viewAt(const QPoint &position) +{ + // Since views are stored in painting order (back to front), we have to iterate backwards + // to find the topmost view at the given point + for (auto it = m_views.crbegin(); it != m_views.crend(); ++it) { + View *view = *it; + if (view->globalGeometry().contains(position)) + return view; + } + return nullptr; +} + +void Compositor::raise(View *view) +{ + m_views.removeAll(view); + m_views << view; + defaultSeat()->setKeyboardFocus(view->surface()); + triggerRender(); +} + +void Compositor::handleMousePress(const QPoint &position, Qt::MouseButton button) +{ + if (m_grab.state == Grab::None) { + m_grab.view = viewAt(position); + if (m_grab.view) { + m_grab.state = Grab::Input; + m_grab.startGlobalPosition = position; + m_grab.startLocalPosition = m_grab.view->mapToLocal(position); + raise(m_grab.view); + } + } + + switch (m_grab.state) { + case Grab::Input: { + auto *seat = defaultSeat(); + seat->sendMouseMoveEvent(m_grab.view, m_grab.view->mapToLocal(position)); + seat->sendMousePressEvent(button); + break; + } + case Grab::Move: + case Grab::Resize: + case Grab::None: + break; + } +} + +void Compositor::handleMouseRelease(const QPoint &position, Qt::MouseButton button, Qt::MouseButtons buttons) +{ + auto *seat = defaultSeat(); + + switch (m_grab.state) { + case Grab::Input: + seat->sendMouseMoveEvent(m_grab.view, m_grab.view->mapToLocal(position)); + seat->sendMouseReleaseEvent(button); + if (buttons == Qt::NoButton) { + View *newView = viewAt(position); + if (newView != m_grab.view) { + seat->setMouseFocus(newView); + if (newView) + seat->sendMouseMoveEvent(newView, newView->mapToLocal(position)); + } + m_grab.view = nullptr; + m_grab.state = Grab::None; + } + break; + case Grab::Move: + case Grab::Resize: + m_grab.state = Grab::None; + m_grab.view = nullptr; + if (View *view = viewAt(position)) + seat->sendMouseMoveEvent(view, view->mapToLocal(position)); + break; + case Grab::None: + if (View *view = viewAt(position)) + seat->sendMouseMoveEvent(view, view->mapToLocal(position)); + break; + } +} + +void Compositor::handleMouseMove(const QPoint &position) +{ + switch (m_grab.state) { + case Grab::Input: + defaultSeat()->sendMouseMoveEvent(m_grab.view, m_grab.view->mapToLocal(position)); + break; + case Grab::None: + if (View *view = viewAt(position)) + defaultSeat()->sendMouseMoveEvent(view, view->mapToLocal(position)); + break; + case Grab::Resize: + m_grab.view->handleResizeMove(position - m_grab.startGlobalPosition); + break; + case Grab::Move: + m_grab.view->setGlobalPosition(position - m_grab.startLocalPosition); + break; + } +} + +void Compositor::handleMouseWheel(Qt::Orientation orientation, int delta) +{ + defaultSeat()->sendMouseWheelEvent(orientation, delta); +} + +void Compositor::handleKeyPress(quint32 nativeScanCode) +{ + defaultSeat()->sendKeyPressEvent(nativeScanCode); +} + +void Compositor::handleKeyRelease(quint32 nativeScanCode) +{ + defaultSeat()->sendKeyReleaseEvent(nativeScanCode); +} + +void Compositor::handleXdgToplevelCreated(QWaylandXdgToplevel *toplevel, QWaylandXdgSurface *xdgSurface) +{ + Q_UNUSED(xdgSurface); + auto *view = new ToplevelView(toplevel); + addView(view); +} + +void Compositor::addView(View *view) +{ + view->setOutput(outputFor(m_window)); + m_views << view; + connect(view, &QWaylandView::surfaceDestroyed, this, &Compositor::handleViewSurfaceDestroyed); + connect(view, &View::globalPositionChanged, this, &Compositor::triggerRender); + connect(view->surface(), &QWaylandSurface::redraw, this, &Compositor::triggerRender); + connect(view, &View::startMove, this, [this, view](){ + m_grab.view = view; + m_grab.state = Grab::Move; + }); + connect(view, &View::startResize, this, [this, view]() { + m_grab.view = view; + m_grab.state = Grab::Resize; + }); +} + +void Compositor::handleViewSurfaceDestroyed() +{ + auto *view = qobject_cast(sender()); + m_views.removeAll(view); + delete view; + triggerRender(); +} + +void Compositor::triggerRender() +{ + m_window->requestUpdate(); +} diff -Nru qtwayland-opensource-src-5.11.3/tests/manual/wip-cpp-compositor/compositor.h qtwayland-opensource-src-5.12.2/tests/manual/wip-cpp-compositor/compositor.h --- qtwayland-opensource-src-5.11.3/tests/manual/wip-cpp-compositor/compositor.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/tests/manual/wip-cpp-compositor/compositor.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,160 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of the Qt Wayland module +** +** $QT_BEGIN_LICENSE:BSD$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef COMPOSITOR_H +#define COMPOSITOR_H + +#include + +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class Window; +class QOpenGLTexture; +class QWaylandXdgShell; +class QWaylandXdgSurface; +class QWaylandXdgToplevel; + +class View : public QWaylandView +{ + Q_OBJECT +public: + explicit View() = default; + QOpenGLTexture *getTexture(); + QSize size() const { return surface() ? surface()->size() : QSize(); } + QRect globalGeometry() const { return {globalPosition(), surface()->size()}; } + QPoint globalPosition() const { return m_globalPosition; } + void setGlobalPosition(const QPoint &position); + QPoint mapToLocal(const QPoint &globalPosition) const; + void setAnchorEdges(Qt::Edges edges) { m_anchorEdges = edges; } + void updateAnchoredPosition(); + + virtual void handleResizeMove(const QPoint &delta); + virtual void handleResizeRelease() {} + +signals: + void globalPositionChanged(); + void startResize(); + void startMove(); + +private: + QOpenGLTexture *m_texture = nullptr; + QPoint m_globalPosition; + Qt::Edges m_anchorEdges; + QSize m_lastSize; +}; + +class ToplevelView : public View +{ + Q_OBJECT +public: + explicit ToplevelView(QWaylandXdgToplevel *toplevel); + void handleResizeMove(const QPoint &delta) override; + void handleResizeRelease() override; + +private: + QWaylandXdgToplevel *m_toplevel = nullptr; + struct Resize { + QSize initialSize; + Qt::Edges edges; + } m_resize; +}; + +class Compositor : public QWaylandCompositor +{ + Q_OBJECT +public: + explicit Compositor() = default; + ~Compositor() override; + void create() override; + void setWindow(Window *window) { m_window = window; } + + QList views() const { return m_views; } + View *viewAt(const QPoint &position); + + void raise(View *view); + + void handleGlInitialized() { create(); } + void handleMousePress(const QPoint &position, Qt::MouseButton button); + void handleMouseRelease(const QPoint &position, Qt::MouseButton button, Qt::MouseButtons buttons); + void handleMouseMove(const QPoint &position); + void handleMouseWheel(Qt::Orientation orientation, int delta); + + void handleKeyPress(quint32 nativeScanCode); + void handleKeyRelease(quint32 nativeScanCode); + +signals: + void startMove(); + +private slots: + void handleXdgToplevelCreated(QWaylandXdgToplevel *toplevel, QWaylandXdgSurface *xdgSurface); + void addView(View *view); + void handleViewSurfaceDestroyed(); + void triggerRender(); + +private: + Window *m_window = nullptr; + QWaylandXdgShell *m_xdgShell = nullptr; + QList m_views; // Sorted by painters algorithm (back to front) + struct Grab { + QPointer view; + enum State { None, Input, Move, Resize }; + State state = None; + QPoint startLocalPosition; // in View's coordinate system + QPoint startGlobalPosition; + } m_grab; +}; + +QT_END_NAMESPACE + +#endif // COMPOSITOR_H diff -Nru qtwayland-opensource-src-5.11.3/tests/manual/wip-cpp-compositor/main.cpp qtwayland-opensource-src-5.12.2/tests/manual/wip-cpp-compositor/main.cpp --- qtwayland-opensource-src-5.11.3/tests/manual/wip-cpp-compositor/main.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/tests/manual/wip-cpp-compositor/main.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of the Qt Wayland module +** +** $QT_BEGIN_LICENSE:BSD$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "window.h" +#include "compositor.h" + +int main(int argc, char *argv[]) +{ + QGuiApplication app(argc, argv); + + Compositor compositor; + Window window(&compositor); + compositor.setWindow(&window); + + window.resize(800, 600); + window.show(); + + return app.exec(); +} diff -Nru qtwayland-opensource-src-5.11.3/tests/manual/wip-cpp-compositor/README.md qtwayland-opensource-src-5.12.2/tests/manual/wip-cpp-compositor/README.md --- qtwayland-opensource-src-5.11.3/tests/manual/wip-cpp-compositor/README.md 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/tests/manual/wip-cpp-compositor/README.md 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,6 @@ +# Reference C++ Compositor + +An example showing what is required to get a C++-based compositor up and +running implementing basic functionality such as pointer and keyboard input as +well as resizing and moving windows. This example uses the stable xdg-shell +protocol. diff -Nru qtwayland-opensource-src-5.11.3/tests/manual/wip-cpp-compositor/window.cpp qtwayland-opensource-src-5.12.2/tests/manual/wip-cpp-compositor/window.cpp --- qtwayland-opensource-src-5.11.3/tests/manual/wip-cpp-compositor/window.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/tests/manual/wip-cpp-compositor/window.cpp 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,145 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of the Qt Wayland module +** +** $QT_BEGIN_LICENSE:BSD$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "window.h" +#include "compositor.h" + +#include +#include +#include +#include +#include + +Window::Window(Compositor *compositor) + : m_compositor(compositor) + , m_output(new QWaylandOutput(compositor, this)) +{ + m_output->setSizeFollowsWindow(true); +} + +void Window::initializeGL() +{ + m_textureBlitter.create(); + m_compositor->handleGlInitialized(); +} + +void Window::paintGL() +{ + m_output->frameStarted(); + + QOpenGLFunctions *functions = context()->functions(); + functions->glClearColor(.4f, .7f, .1f, 0.5f); + functions->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + GLenum currentTarget = GL_TEXTURE_2D; + m_textureBlitter.bind(currentTarget); + functions->glEnable(GL_BLEND); + functions->glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + const auto views = m_compositor->views(); + + for (View *view : views) { + auto *texture = view->getTexture(); + if (!texture) + continue; + if (texture->target() != currentTarget) { + currentTarget = texture->target(); + m_textureBlitter.bind(currentTarget); + } + GLuint textureId = texture->textureId(); + + // Anchored position needs to be updated immediately before rendering or + // position and size might get out of sync. + view->updateAnchoredPosition(); + + QWaylandSurface *surface = view->surface(); + if (surface && surface->hasContent()) { + QOpenGLTextureBlitter::Origin surfaceOrigin = + view->currentBuffer().origin() == QWaylandSurface::OriginTopLeft + ? QOpenGLTextureBlitter::OriginTopLeft + : QOpenGLTextureBlitter::OriginBottomLeft; + QMatrix4x4 targetTransform = QOpenGLTextureBlitter::targetTransform(view->globalGeometry(), QRect(QPoint(), size())); + m_textureBlitter.blit(textureId, targetTransform, surfaceOrigin); + } + } + m_textureBlitter.release(); + + m_output->sendFrameCallbacks(); +} + +void Window::mousePressEvent(QMouseEvent *event) +{ + m_compositor->handleMousePress(event->localPos().toPoint(), event->button()); +} + +void Window::mouseReleaseEvent(QMouseEvent *event) +{ + m_compositor->handleMouseRelease(event->localPos().toPoint(), event->button(), event->buttons()); +} + +void Window::mouseMoveEvent(QMouseEvent *event) +{ + m_compositor->handleMouseMove(event->localPos().toPoint()); +} + +void Window::wheelEvent(QWheelEvent *event) +{ + m_compositor->handleMouseWheel(event->orientation(), event->delta()); +} + +void Window::keyPressEvent(QKeyEvent *event) +{ + m_compositor->handleKeyPress(event->nativeScanCode()); +} + +void Window::keyReleaseEvent(QKeyEvent *event) +{ + m_compositor->handleKeyRelease(event->nativeScanCode()); +} diff -Nru qtwayland-opensource-src-5.11.3/tests/manual/wip-cpp-compositor/window.h qtwayland-opensource-src-5.12.2/tests/manual/wip-cpp-compositor/window.h --- qtwayland-opensource-src-5.11.3/tests/manual/wip-cpp-compositor/window.h 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/tests/manual/wip-cpp-compositor/window.h 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of the Qt Wayland module +** +** $QT_BEGIN_LICENSE:BSD$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef WINDOW_H +#define WINDOW_H + +#include +#include + +QT_BEGIN_NAMESPACE + +class Compositor; +class QWaylandOutput; + +class Window : public QOpenGLWindow +{ +public: + explicit Window(Compositor *compositor); + +protected: + void initializeGL() override; + void paintGL() override; + + void mousePressEvent(QMouseEvent *event) override; + void mouseReleaseEvent(QMouseEvent *event) override; + void mouseMoveEvent(QMouseEvent *event) override; + void wheelEvent(QWheelEvent *event) override; + + void keyPressEvent(QKeyEvent *event) override; + void keyReleaseEvent(QKeyEvent *event) override; + +private: + QOpenGLTextureBlitter m_textureBlitter; + Compositor *m_compositor = nullptr; + QWaylandOutput *m_output = nullptr; +}; + +QT_END_NAMESPACE + +#endif //WINDOW_H diff -Nru qtwayland-opensource-src-5.11.3/tests/manual/wip-cpp-compositor/wip-cpp-compositor.pro qtwayland-opensource-src-5.12.2/tests/manual/wip-cpp-compositor/wip-cpp-compositor.pro --- qtwayland-opensource-src-5.11.3/tests/manual/wip-cpp-compositor/wip-cpp-compositor.pro 1970-01-01 00:00:00.000000000 +0000 +++ qtwayland-opensource-src-5.12.2/tests/manual/wip-cpp-compositor/wip-cpp-compositor.pro 2019-02-21 12:36:59.000000000 +0000 @@ -0,0 +1,12 @@ +QT += gui waylandcompositor + +HEADERS += \ + compositor.h \ + window.h + +SOURCES += main.cpp \ + compositor.cpp \ + window.cpp + +target.path = $$[QT_INSTALL_EXAMPLES]/wayland/reference-cpp +INSTALLS += target