diff --git a/org.kde.Sdk.json b/org.kde.Sdk.json index 58d5f06..b5b050e 100644 --- a/org.kde.Sdk.json +++ b/org.kde.Sdk.json @@ -1,932 +1,948 @@ { "build-runtime": true, "id": "org.kde.Sdk", "id-platform": "org.kde.Platform", "branch": "5.12", "runtime": "org.freedesktop.Platform", "sdk": "org.freedesktop.Sdk", "runtime-version": "18.08", "sdk-extensions": ["org.freedesktop.Sdk.Debug", "org.freedesktop.Sdk.Locale", "org.freedesktop.Sdk.Docs"], "platform-extensions": ["org.freedesktop.Platform.Locale"], "inherit-extensions": [ "org.freedesktop.Platform.GL", "org.freedesktop.Platform.Timezones", "org.freedesktop.Platform.GStreamer", "org.freedesktop.Platform.Icontheme", "org.freedesktop.Platform.VAAPI.Intel", "org.freedesktop.Platform.html5-codecs", "org.gtk.Gtk3theme" ], "inherit-sdk-extensions": [ "org.freedesktop.Sdk.Extension" ], "add-extensions": { "org.kde.Sdk.Docs" : { "directory": "share/runtime/docs", "bundle": true, "autodelete": true, "no-autodownload": true }, "org.kde.KStyle" : { "directory": "share/runtime/lib/plugins/", "subdirectories": true, "no-autodownload": true, "version": "5.12", "merge-dirs": "styles", "download-if": "active-gtk-theme" }, "org.kde.PlatformTheme" : { "directory": "share/runtime/lib/plugins/", "subdirectories": true, "no-autodownload": true, "version": "5.12", "merge-dirs": "platformthemes", "//TODO": "This is currently only used for gnome platform plugin and should be its own extension point", "download-if": "on-xdg-desktop-GNOME;on-xdg-desktop-GNOME-classic" } }, "finish-args": [ "--env=GI_TYPELIB_PATH=/app/lib/girepository-1.0", "--env=GST_PLUGIN_PATH=/app/lib/gstreamer-1.0:/app/lib/@SDK_ARCH@-linux-gnu/extensions/gstreamer-1.0:/usr/lib/@SDK_ARCH@-linux-gnu/extensions/gstreamer-1.0", "--env=XDG_DATA_DIRS=/app/share:/usr/share:/usr/share/runtime/share:/run/host/share", "--env=QT_PLUGIN_PATH=/app/lib64/plugins:/app/lib/plugins:/usr/share/runtime/lib/plugins", "--env=QML2_IMPORT_PATH=/app/lib64/qml:/app/lib/qml", "--env=KDE_FORK_SLAVES=1", "--env=DCONF_USER_CONFIG_DIR=.config/dconf", "--filesystem=xdg-config/kdeglobals:ro", "--filesystem=xdg-run/dconf", "--filesystem=~/.config/dconf:ro", "--talk-name=com.canonical.AppMenu.Registrar", "--sdk=org.kde.Sdk//5.12", "--runtime=org.kde.Platform//5.12" ], "cleanup": [ "/man", "/share/man", "/lib/systemd", "*.la"], "cleanup-commands": [ "/usr/libexec/freedesktop-post.sh" ], "cleanup-platform": [ "/share/runtime/docs", "/include", "/share/aclocal", "/share/pkgconfig", "/lib/pkgconfig", "*.a", "*.cmake" ], "cleanup-platform-commands": [ "/usr/libexec/freedesktop-post.sh" ], "modules": [ { "name": "qt5-qtbase", "cleanup-platform": [ "/bin", "/mkspecs" ], "build-options" : { "arch" : { "x86_64" : { "config-opts" : [ "-reduce-relocations", "-force-debug-info" ] }, "arm" : { "config-opts" : [ "-no-reduce-relocations", "-optimize-size", "-opengl es2" ] }, "aarch64" : { "config-opts" : [ "-no-reduce-relocations", "-optimize-size", "-opengl es2" ] } } }, "config-opts": [ "-confirm-license", "-opensource", "-shared", "-platform", "linux-g++", "-optimized-qmake", "-nomake", "examples", "-nomake", "tests", "-system-harfbuzz", "-system-sqlite", "-accessibility", "-dbus-linked", "-fontconfig", "-glib", "-icu", "-openssl-linked", "-no-pch", "-no-rpath", "-no-directfb", "-no-linuxfb", "-no-kms", "-no-cups", "-system-proxies", "-gtk", "-no-use-gold-linker", "-archdatadir", "/usr/lib/" ], "sources": [ { "type": "archive", "url": "http://download.qt.io/archive/qt/5.12/5.12.4/submodules/qtbase-everywhere-src-5.12.4.tar.xz", "sha256": "20fbc7efa54ff7db9552a7a2cdf9047b80253c1933c834f35b0bc5c1ae021195" }, { "type": "patch", "path": "patch/qtbase-avoid-hardcoding-kernel-version.patch" }, { "type": "shell", "commands": [ "mv configure configure.qt" ] }, { "type": "script", "commands": [ "processed=`sed -e 's/--/-/g ; s/=/ /g' <<< $@`", "./configure.qt $processed" ], "dest-filename": "configure" } ] }, { "name": "qt5-qtdeclarative", "buildsystem": "qmake", "cleanup-platform": [ "/bin", "/mkspecs", "lib/plugins/qmltooling" ], "sources": [ { "type": "archive", "url": "http://download.qt.io/archive/qt/5.12/5.12.4/submodules/qtdeclarative-everywhere-src-5.12.4.tar.xz", "sha256": "614105ed73079d67d81b34fef31c9934c5e751342e4b2e0297128c8c301acda7" } ] }, { "name": "qt5-qttools", "buildsystem": "qmake", "cleanup-platform": [ "/mkspecs", "/bin/assistant", "/bin/qhelpgenerator", "/bin/qcollectiongenerator", "/bin/qhelpconverter", "/bin/pixeltool", "/bin/designer", "/bin/lrelease", "/bin/lupdate", "/bin/lconvert", "/bin/linguist", "/bin/qdoc", "/bin/qtattributionsscanner", "/bin/qtplugininfo", "/bin/qtdiag", "/bin/qdbusviewer" ], "sources": [ { "type": "archive", "url": "http://download.qt.io/archive/qt/5.12/5.12.4/submodules/qttools-everywhere-src-5.12.4.tar.xz", "sha256": "3b0e353860a9c0cd4db9eeae5f94fef8811ed7d107e3e5e97e4a557f61bd6eb6" } ] }, { "name": "qt5-qtscript", "buildsystem": "qmake", "cleanup-platform": [ "/bin", "/mkspecs" ], "sources": [ { "type": "archive", "url": "http://download.qt.io/archive/qt/5.12/5.12.4/submodules/qtscript-everywhere-src-5.12.4.tar.xz", "sha256": "7adb3fe77638c7a6f2a26bca850b0ff54f5fb7e5561d2e4141d14a84305c2b6a" } ] }, { "name": "qt5-webchannel", "buildsystem": "qmake", "cleanup-platform": [ "/bin", "/mkspecs" ], "sources": [ { "type": "archive", "url": "http://download.qt.io/archive/qt/5.12/5.12.4/submodules/qtwebchannel-everywhere-src-5.12.4.tar.xz", "sha256": "ab571a1b699e61a86be1a6b8d6ffd998d431c4850cc27e9a21f81fa5923bfdb7" } ] }, { "name": "qt5-qtlocation", "buildsystem": "qmake", "cleanup-platform": [ "/bin", "/mkspecs" ], "sources": [ { "type": "archive", "url": "http://download.qt.io/archive/qt/5.12/5.12.4/submodules/qtlocation-everywhere-src-5.12.4.tar.xz", "sha256": "127b40bd7679fead3fb98f4c9c1d71dde9d6d416e90a6000129b61a5f128b3a0" } ] }, { "name": "qt5-qtwebengine", "buildsystem": "qmake", "cleanup-platform": [ "/bin", "/mkspecs" ], "config-opts": [ "--", "-system-ffmpeg", "-webengine-proprietary-codecs", "-webengine-icu", "-webp" ], "modules": [ { "name": "pciutils", "no-autogen": true, "make-args": ["SHARED=no", "ZLIB=no", "PREFIX=/usr"], "post-install": [ "make install-pcilib", "make install-lib" ], "sources": [ { "type": "git", "url": "https://kernel.googlesource.com/pub/scm/utils/pciutils/pciutils", "branch": "v3.6.2" }, { "type": "shell", "commands": [ "sed -i 's@PREFIX=/usr/local@PREFIX=/usr@' Makefile" ] } ] }, { "name": "opus", "sources": [ { "type": "git", "url": "https://github.com/xiph/opus.git", "branch": "v1.2.1" } ] } ], "sources": [ { "type": "archive", "url": "http://download.qt.io/archive/qt/5.12/5.12.4/submodules/qtwebengine-everywhere-src-5.12.4.tar.xz", "sha256": "fccf5c945412c19c3805323211b504ac8becbf191c638a2dc85ec91abfb1b331" }, { "type": "patch", "path": "patch/qtwebengine-no-udev.patch" } ] }, { "name": "qt5-qtsvg", "buildsystem": "qmake", "cleanup-platform": [ "/bin", "/mkspecs" ], "sources": [ { "type": "archive", "url": "http://download.qt.io/archive/qt/5.12/5.12.4/submodules/qtsvg-everywhere-src-5.12.4.tar.xz", "sha256": "110812515a73c650e5ebc41305d9a243dadeb21f485aaed773e394dd84ce0d04" } ] }, { "name": "qt5-qtx11extras", "buildsystem": "qmake", "cleanup-platform": [ "/bin", "/mkspecs" ], "sources": [ { "type": "archive", "url": "http://download.qt.io/archive/qt/5.12/5.12.4/submodules/qtx11extras-everywhere-src-5.12.4.tar.xz", "sha256": "49cc009eaf4a01ca7dbe12651ef39de9a43860acb674aec372e70b209f9bae1e" } ] }, { "name": "qt5-qtmultimedia", "buildsystem": "qmake", "cleanup-platform": [ "/bin", "/mkspecs" ], "sources": [ { "type": "archive", "url": "http://download.qt.io/archive/qt/5.12/5.12.4/submodules/qtmultimedia-everywhere-src-5.12.4.tar.xz", "sha256": "7c0759ab6fca2480b10b71a35beeffe0b847adeff5af94eacd1a4531d033423d" } ] }, { "name": "qt5-qtsensors", "buildsystem": "qmake", "cleanup-platform": [ "/bin", "/mkspecs" ], "sources": [ { "type": "archive", "url": "http://download.qt.io/archive/qt/5.12/5.12.4/submodules/qtsensors-everywhere-src-5.12.4.tar.xz", "sha256": "95873c7ea5960008d6eb41368ca64d68fbd05594ca8c2cd848b1612fc4aec0a9" } ] }, { "name": "qt5-qtquickcontrols", "buildsystem": "qmake", "cleanup-platform": [ "/bin", "/mkspecs" ], "sources": [ { "type": "archive", "url": "http://download.qt.io/archive/qt/5.12/5.12.4/submodules/qtquickcontrols-everywhere-src-5.12.4.tar.xz", "sha256": "32d4c2505337c67b0bac26d7f565ec8fabdc616e61247e98674820769dda9858" } ] }, { "name": "qt5-qtquickcontrols2", "buildsystem": "qmake", "cleanup-platform": [ "/bin", "/mkspecs" ], "sources": [ { "type": "archive", "url": "http://download.qt.io/archive/qt/5.12/5.12.4/submodules/qtquickcontrols2-everywhere-src-5.12.4.tar.xz", "sha256": "9a447eed38bc8c7d7be7bc407317f58940377c077ddca74c9a641b1ee6200331" } ] }, { "name": "qt5-qtgraphicaleffects", "buildsystem": "qmake", "cleanup-platform": [ "/bin", "/mkspecs" ], "sources": [ { "type": "archive", "url": "http://download.qt.io/archive/qt/5.12/5.12.4/submodules/qtgraphicaleffects-everywhere-src-5.12.4.tar.xz", "sha256": "0bc38b168fa724411984525173d667aa47076c8cbd4eeb791d0da7fe4b9bdf73" } ] }, { "name": "qt5-qtxmlpatterns", "buildsystem": "qmake", "cleanup-platform": [ "/bin", "/mkspecs" ], "sources": [ { "type": "archive", "url": "http://download.qt.io/archive/qt/5.12/5.12.4/submodules/qtxmlpatterns-everywhere-src-5.12.4.tar.xz", "sha256": "0bea1719bb948f65cbed4375cc3e997a6464f35d25b631bafbd7a3161f8f5666" } ] }, { "name": "qt5-qtimageformats", "buildsystem": "qmake", "cleanup-platform": [ "/bin", "/mkspecs" ], "sources": [ { "type": "archive", "url": "http://download.qt.io/archive/qt/5.12/5.12.4/submodules/qtimageformats-everywhere-src-5.12.4.tar.xz", "sha256": "2dee25c3eea90d172cbd40f41450153322b902da1daa7d2370a55124b2307bb3" } ] }, { "name": "qt5-connectivity", "buildsystem": "qmake", "cleanup-platform": [ "/bin", "/mkspecs" ], "sources": [ { "type": "archive", "url": "http://download.qt.io/archive/qt/5.12/5.12.4/submodules/qtconnectivity-everywhere-src-5.12.4.tar.xz", "sha256": "749d05242b9fae12e80f569fb6b918dc011cb191eeb05147cbde474ca6b173ef" } ] }, { "name": "qt5-wayland", "buildsystem": "qmake", "cleanup-platform": [ "/bin", "/mkspecs" ], "sources": [ { "type": "archive", "url": "http://download.qt.io/archive/qt/5.12/5.12.4/submodules/qtwayland-everywhere-src-5.12.4.tar.xz", "sha256": "2fade959c3927687134c597d85c12ba1af22129a60ab326c2dc77a648e74e6b7" + }, + { + "type": "patch", + "path": "patch/qtwayland-fix-stuttering-when-gui-thread-is-busy.patch" + }, + { + "type": "patch", + "path": "patch/qtwayland-reset-frame-callback-timer-when-hiding-window.patch" + }, + { + "type": "patch", + "path": "patch/qtwayland-emit-wl-surfare-lifetime-signals.patch" + }, + { + "type": "patch", + "path": "patch/qtwayland-dont-send-fake-surface-created-destroyed-events.patch" } ] }, { "name": "qt5-virtualkeyboard", "buildsystem": "qmake", "cleanup-platform": [ "/bin", "/mkspecs" ], "sources": [ { "type": "archive", "url": "http://download.qt.io/archive/qt/5.12/5.12.4/submodules/qtvirtualkeyboard-everywhere-src-5.12.4.tar.xz", "sha256": "33ac0356f916995fe5a91582e12b4c4f730c705808ea3c14e75c6e350e8131e6" } ] }, { "name": "qt5-qtserialport", "buildsystem": "qmake", "cleanup-platform": [ "/bin", "/mkspecs" ], "sources": [ { "type": "archive", "url": "http://download.qt.io/archive/qt/5.12/5.12.4/submodules/qtserialport-everywhere-src-5.12.4.tar.xz", "sha256": "bf487df8a9fb2eddf103842b57a75b17ef4c498ee40306ae9997017c82b0ad39" } ] }, { "name": "qt5-qtwebsockets", "buildsystem": "qmake", "cleanup-platform": [ "/bin", "/mkspecs" ], "sources": [ { "type": "archive", "url": "http://download.qt.io/archive/qt/5.12/5.12.4/submodules/qtwebsockets-everywhere-src-5.12.4.tar.xz", "sha256": "b471eda2f486d21c51fc3bc53bb8844022117e746d5f15c5eabb82cd37eb2abe" } ] }, { "name": "qt5-qtcharts", "buildsystem": "qmake", "cleanup-platform": [ "/bin", "/mkspecs" ], "sources": [ { "type": "archive", "url": "http://download.qt.io/archive/qt/5.12/5.12.4/submodules/qtcharts-everywhere-src-5.12.4.tar.xz", "sha256": "06ff68a80dc377847429cdd87d4e46465e1d6fbc417d52700a0a59d197669c9e" } ] }, { "name": "qt5-qt3d", "buildsystem": "qmake", "cleanup-platform": [ "/bin", "/mkspecs" ], "sources": [ { "type": "archive", "url": "http://download.qt.io/archive/qt/5.12/5.12.4/submodules/qt3d-everywhere-src-5.12.4.tar.xz", "sha256": "cfad2e16f40fa07f8be59fa29c0c246743ee67db417ca29772a92f36fa322af3" } ] }, { "name": "qt5-qtspeech", "buildsystem": "qmake", "cleanup-platform": [ "/bin", "/mkspecs" ], "sources": [ { "type": "archive", "url": "http://download.qt.io/archive/qt/5.12/5.12.4/submodules/qtspeech-everywhere-src-5.12.4.tar.xz", "sha256": "2ff9660fb3f5663c9161f491d1a304db62691720136ae22c145ef6a1c94b90ec" } ] }, { "name": "qt5-qtnetworkauth", "buildsystem": "qmake", "cleanup-platform": [ "/bin", "/mkspecs" ], "sources": [ { "type": "archive", "url": "http://download.qt.io/archive/qt/5.12/5.12.4/submodules/qtnetworkauth-everywhere-src-5.12.4.tar.xz", "sha256": "e501eb46b8405a2b7db9fe90a1c224cf6676a07dc22c0662317ffe3dee1dbf55" } ] }, { "name": "qt5-qtgamepad", "buildsystem": "qmake", "cleanup-platform": [ "/bin", "/mkspecs" ], "sources": [ { "type": "archive", "url": "http://download.qt.io/archive/qt/5.12/5.12.4/submodules/qtgamepad-everywhere-src-5.12.4.tar.xz", "sha256": "25de6f10fb18f2484d1e569688bf33deb90ecbfb97ce41c2b5fb3521146e4c45" } ] }, { "name": "libdbusmenuqt", "buildsystem": "cmake-ninja", "config-opts": ["-DENABLE_TESTING=OFF", "-DWITH_DOC=OFF"], "sources": [ { "type": "bzr", "url": "http://bazaar.launchpad.net/~dbusmenu-team/libdbusmenu-qt/trunk/", "revision": "0.9.3+16.04.20160218-0ubuntu1" } ] }, { "name": "extra-cmake-modules", "cleanup-platform": ["*"], "buildsystem": "cmake-ninja", "config-opts": [ "-DENABLE_TESTING=OFF" ], "sources": [ { "type": "git", "url": "git://anongit.kde.org/extra-cmake-modules.git", "branch": "v5.59.0" } ] }, { "name": "kwidgetsaddons", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/kwidgetsaddons.git", "branch": "v5.59.0" } ] }, { "name": "ki18n", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/ki18n.git", "branch": "v5.59.0" } ] }, { "name": "kconfig", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/kconfig.git", "branch": "v5.59.0" } ] }, { "name": "attica", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/attica.git", "branch": "v5.59.0" } ] }, { "name": "kguiaddons", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/kguiaddons.git", "branch": "v5.59.0" } ] }, { "name": "kcoreaddons", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/kcoreaddons.git", "branch": "v5.59.0" } ] }, { "name": "kauth", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/kauth.git", "branch": "v5.59.0" } ] }, { "name": "karchive", "config-opts": ["-DENABLE_TESTING=OFF", "-DCMAKE_DISABLE_FIND_PACKAGE_Qt5Test=TRUE"], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/karchive.git", "branch": "v5.59.0" } ] }, { "name": "kcodecs", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/kcodecs.git", "branch": "v5.59.0" } ] }, { "name": "kconfigwidgets", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/kconfigwidgets.git", "branch": "v5.59.0" } ] }, { "name": "kitemviews", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/kitemviews.git", "branch": "v5.59.0" } ] }, { "name": "kiconthemes", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/kiconthemes.git", "branch": "v5.59.0" } ] }, { "name": "kwindowsystem", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/kwindowsystem.git", "branch": "v5.59.0" } ] }, { "name": "kcrash", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/kcrash.git", "branch": "v5.59.0" } ] }, { "name": "kdbusaddons", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/kdbusaddons.git", "branch": "v5.59.0" } ] }, { "name": "kservice", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "builddir": true, "sources": [ { "type": "git", "url": "git://anongit.kde.org/kservice.git", "branch": "v5.59.0" } ] }, { "name": "kglobalaccel", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/kglobalaccel.git", "branch": "v5.59.0" } ] }, { "name": "sonnet", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/sonnet.git", "branch": "v5.59.0" } ] }, { "name": "kcompletion", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/kcompletion.git", "branch": "v5.59.0" } ] }, { "name": "ktextwidgets", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/ktextwidgets.git", "branch": "v5.59.0" } ] }, { "name": "kxmlgui", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/kxmlgui.git", "branch": "v5.59.0" } ] }, { "name": "perl-uri-escape", "cleanup-platform": ["*"], "sources": [{ "type": "archive", "url": "https://cpan.metacpan.org/authors/id/E/ET/ETHER/URI-1.74.tar.gz", "sha256": "a9c254f45f89cb1dd946b689dfe433095404532a4543bdaab0b71ce0fdcdd53d" }, { "type": "script", "commands": [ "perl Makefile.PL INSTALLDIRS=vendor"], "dest-filename": "configure" } ] }, { "name": "kdoctools", "config-opts": [ "-DENABLE_TESTING=OFF", "-DDocBookXSL_DIR=/usr/share/xml/docbook/xml/xsl-stylesheets/", "-DDTD_PATH_LIST=/usr/share/xml/docbook/xml-dtd/4.5/" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/kdoctools.git", "branch": "v5.59.0" } ] }, { "name": "kpackage", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/kpackage.git", "branch": "v5.59.0" } ] }, { "name": "kbookmarks", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/kbookmarks.git", "branch": "v5.59.0" } ] }, { "name": "phonon", "config-opts": ["-DENABLE_TESTING=OFF", "-DPHONON_BUILD_PHONON4QT5=ON"], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/phonon.git", "branch": "v4.10.2" } ] }, { "name": "knotifications", "buildsystem": "cmake-ninja", "config-opts": [ "-DENABLE_TESTING=OFF" ], "sources": [ { "type": "git", "url": "git://anongit.kde.org/knotifications.git", "branch": "v5.59.0" } ] }, { "name": "kwallet", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/kwallet.git", "branch": "v5.59.0" } ] }, { "name": "kjobwidgets", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/kjobwidgets.git", "branch": "v5.59.0" } ] }, { "name": "solid", "config-opts": [ "-DENABLE_TESTING=OFF", "-DUDEV_DISABLED=ON", "-DBUILD_DEVICE_BACKEND_udisks2=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/solid.git", "branch": "v5.59.0" } ] }, { "name": "kio", "buildsystem": "cmake-ninja", "config-opts": [ "-DENABLE_TESTING=OFF" ], "sources": [ { "type": "git", "url": "git://anongit.kde.org/kio.git", "branch": "v5.59.0" } ] }, { "name": "kparts", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/kparts.git", "branch": "v5.59.0" } ] }, { "name": "kplotting", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/kplotting.git", "branch": "v5.59.0" } ] }, { "name": "kdesignerplugin", "buildsystem": "cmake-ninja", "builddir": true, "config-opts": [ "-DENABLE_TESTING=OFF" ], "sources": [ { "type": "git", "url": "git://anongit.kde.org/kdesignerplugin.git", "branch": "v5.59.0" } ] }, { "name": "kinit", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/kinit.git", "branch": "v5.59.0" } ] }, { "name": "kded", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/kded.git", "branch": "v5.59.0" } ] }, { "name": "kunitconversion", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/kunitconversion.git", "branch": "v5.59.0" } ] }, { "name": "kdeclarative", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/kdeclarative.git", "branch": "v5.59.0" } ] }, { "name": "kcmutils", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/kcmutils.git", "branch": "v5.59.0" } ] }, { "name": "knotifyconfig", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "builddir": true, "sources": [ { "type": "git", "url": "git://anongit.kde.org/knotifyconfig.git", "branch": "v5.59.0" } ] }, { "name": "knewstuff", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/knewstuff.git", "branch": "v5.59.0" } ] }, { "name": "kidletime", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/kidletime.git", "branch": "v5.59.0" } ] }, { "name": "threadweaver", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/threadweaver.git", "branch": "v5.59.0" } ] }, { "name": "kitemmodels", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/kitemmodels.git", "branch": "v5.59.0" } ] }, { "name": "kxmlrpcclient", "buildsystem": "cmake-ninja", "config-opts": [ "-DENABLE_TESTING=OFF" ], "sources": [ { "type": "git", "url": "git://anongit.kde.org/kxmlrpcclient.git", "branch": "v5.59.0" } ] }, { "name": "kdnssd", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/kdnssd.git", "branch": "v5.59.0" } ] }, { "config-opts": [ "-DENABLE_TESTING=OFF" ], "name": "syntax-highlighting", "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/syntax-highlighting.git", "branch": "v5.59.0" } ] }, { "config-opts": [ "-DENABLE_TESTING=OFF" ], "name": "ktexteditor", "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/ktexteditor.git", "branch": "v5.59.0" } ] }, { "name": "frameworkintegration", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "builddir": true, "sources": [ { "type": "git", "url": "git://anongit.kde.org/frameworkintegration.git", "branch": "v5.59.0" } ] }, { "name": "kemoticons", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/kemoticons.git", "branch": "v5.59.0" } ] }, { "name": "kpty", "buildsystem": "cmake-ninja", "config-opts": [ "-DENABLE_TESTING=OFF" ], "sources": [ { "type": "git", "url": "git://anongit.kde.org/kpty.git", "branch": "v5.59.0" } ] }, { "name": "kwayland", "buildsystem": "cmake-ninja", "config-opts": ["-DENABLE_TESTING=OFF" ], "sources": [ { "type": "git", "url": "git://anongit.kde.org/kwayland.git", "branch": "v5.59.0" } ] }, { "name": "kirigami", "config-opts": ["-DENABLE_TESTING=OFF", "-DPLASMA_ENABLED=OFF"], "buildsystem": "cmake-ninja", "builddir": true, "sources": [ { "type": "git", "url": "git://anongit.kde.org/kirigami.git", "branch": "v5.59.0" } ] }, { "name": "qqc2-desktop-style", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "builddir": true, "sources": [ { "type": "git", "url": "git://anongit.kde.org/qqc2-desktop-style.git", "branch": "v5.59.0" } ] }, { "name": "kactivities", "config-opts": [ "-DENABLE_TESTING=OFF", "-DKACTIVITIES_LIBRARY_ONLY=ON" ], "buildsystem": "cmake-ninja", "builddir": true, "sources": [ { "type": "git", "url": "git://anongit.kde.org/kactivities.git", "branch": "v5.59.0" } ] }, { "name": "plasma-framework", "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "builddir": true, "sources": [ { "type": "git", "url": "git://anongit.kde.org/plasma-framework.git", "branch": "v5.59.0" } ] }, { "name": "breeze-icons", "cleanup-platform": [ "*.rcc" ], "config-opts": [ "-DENABLE_TESTING=OFF" ], "buildsystem": "cmake-ninja", "sources": [ { "type": "git", "url": "git://anongit.kde.org/breeze-icons.git", "branch": "v5.59.0" } ] }, { "name": "breeze", "buildsystem": "cmake-ninja", "config-opts": ["-DENABLE_TESTING=OFF", "-DWITH_DECORATIONS=OFF", "-DWITH_WALLPAPERS=OFF" ], "sources": [ { "type": "git", "url": "git://anongit.kde.org/breeze.git", "branch": "Plasma/5.15" } ] }, { "name": "plasma-integration", "buildsystem": "cmake-ninja", "config-opts": [ "-DENABLE_TESTING=OFF", "-DBUILD_TESTING=OFF" ], "sources": [ { "type": "git", "url": "git://anongit.kde.org/plasma-integration.git", "branch": "Plasma/5.15" } ] }, { "name": "kwayland-integration", "buildsystem": "cmake-ninja", "config-opts": [ "-DENABLE_TESTING=OFF" ], "sources": [ { "type": "git", "url": "git://anongit.kde.org/kwayland-integration.git", "branch": "Plasma/5.15" } ] }, { "name": "phonon-gstreamer", "buildsystem": "cmake-ninja", "config-opts": ["-DENABLE_TESTING=OFF", "-DPHONON_BUILD_PHONON4QT5=ON"], "sources": [ { "type": "git", "url": "git://anongit.kde.org/phonon-gstreamer.git", "branch": "v4.9.0" } ] }, { "name": "fcitx-platforminputcontext", "buildsystem": "cmake-ninja", "config-opts": ["-DENABLE_LIBRARY=OFF" ], "sources": [ { "type": "git", "url": "https://github.com/fcitx/fcitx-qt5", "branch": "1.2.3" } ] }, { "name": "os-release", "post-install": [ "mkdir -p /usr/share/runtime/lib/plugins/" ], "sources": [ { "type": "file", "path": "os-release" }, { "type": "file", "path": "issue" }, { "type": "file", "path": "issue.net" }, { "type": "file", "path": "org.kde.Sdk.appdata.xml" }, { "type": "file", "path": "org.kde.Platform.appdata.xml" }, { "type": "file", "path": "os-release-configure", "dest-filename": "configure" } ] } ] } diff --git a/patch/qtwayland-dont-send-fake-surface-created-destroyed-events.patch b/patch/qtwayland-dont-send-fake-surface-created-destroyed-events.patch new file mode 100644 index 0000000..0782a94 --- /dev/null +++ b/patch/qtwayland-dont-send-fake-surface-created-destroyed-events.patch @@ -0,0 +1,49 @@ +diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp +index 731ed7f..ed0fe87 100644 +--- a/src/client/qwaylandwindow.cpp ++++ b/src/client/qwaylandwindow.cpp +@@ -98,7 +98,7 @@ QWaylandWindow::~QWaylandWindow() + delete mWindowDecoration; + + if (isInitialized()) +- reset(false); ++ reset(); + + QList inputDevices = mDisplay->inputDevices(); + for (int i = 0; i < inputDevices.size(); ++i) +@@ -128,8 +128,6 @@ void QWaylandWindow::initWindow() + + if (!isInitialized()) { + initializeWlSurface(); +- QPlatformSurfaceEvent e(QPlatformSurfaceEvent::SurfaceCreated); +- QGuiApplication::sendEvent(window(), &e); + } + + if (shouldCreateSubSurface()) { +@@ -237,12 +235,8 @@ bool QWaylandWindow::shouldCreateSubSurface() const + return QPlatformWindow::parent() != nullptr; + } + +-void QWaylandWindow::reset(bool sendDestroyEvent) ++void QWaylandWindow::reset() + { +- if (isInitialized() && sendDestroyEvent) { +- QPlatformSurfaceEvent e(QPlatformSurfaceEvent::SurfaceAboutToBeDestroyed); +- QGuiApplication::sendEvent(window(), &e); +- } + delete mShellSurface; + mShellSurface = nullptr; + delete mSubSurfaceWindow; +diff --git a/src/client/qwaylandwindow_p.h b/src/client/qwaylandwindow_p.h +index 0e32b59..746a7a5 100644 +--- a/src/client/qwaylandwindow_p.h ++++ b/src/client/qwaylandwindow_p.h +@@ -259,7 +259,7 @@ private: + void initializeWlSurface(); + bool shouldCreateShellSurface() const; + bool shouldCreateSubSurface() const; +- void reset(bool sendDestroyEvent = true); ++ void reset(); + void sendExposeEvent(const QRect &rect); + static void closePopups(QWaylandWindow *parent); + QWaylandScreen *calculateScreenFromSurfaceEvents() const; diff --git a/patch/qtwayland-emit-wl-surfare-lifetime-signals.patch b/patch/qtwayland-emit-wl-surfare-lifetime-signals.patch new file mode 100644 index 0000000..45822dc --- /dev/null +++ b/patch/qtwayland-emit-wl-surfare-lifetime-signals.patch @@ -0,0 +1,41 @@ +diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp +index e3785f5..731ed7f 100644 +--- a/src/client/qwaylandwindow.cpp ++++ b/src/client/qwaylandwindow.cpp +@@ -210,7 +210,9 @@ void QWaylandWindow::initWindow() + + void QWaylandWindow::initializeWlSurface() + { ++ Q_ASSERT(!isInitialized()); + init(mDisplay->createSurface(static_cast(this))); ++ emit wlSurfaceCreated(); + } + + bool QWaylandWindow::shouldCreateShellSurface() const +@@ -245,8 +247,10 @@ void QWaylandWindow::reset(bool sendDestroyEvent) + mShellSurface = nullptr; + delete mSubSurfaceWindow; + mSubSurfaceWindow = nullptr; +- if (isInitialized()) ++ if (isInitialized()) { ++ emit wlSurfaceDestroyed(); + destroy(); ++ } + mScreens.clear(); + + if (mFrameCallback) { +diff --git a/src/client/qwaylandwindow_p.h b/src/client/qwaylandwindow_p.h +index c47123d..0e32b59 100644 +--- a/src/client/qwaylandwindow_p.h ++++ b/src/client/qwaylandwindow_p.h +@@ -199,6 +199,10 @@ public: + public slots: + void applyConfigure(); + ++signals: ++ void wlSurfaceCreated(); ++ void wlSurfaceDestroyed(); ++ + protected: + void surface_enter(struct ::wl_output *output) override; + void surface_leave(struct ::wl_output *output) override; diff --git a/patch/qtwayland-fix-stuttering-when-gui-thread-is-busy.patch b/patch/qtwayland-fix-stuttering-when-gui-thread-is-busy.patch new file mode 100644 index 0000000..bbded1c --- /dev/null +++ b/patch/qtwayland-fix-stuttering-when-gui-thread-is-busy.patch @@ -0,0 +1,127 @@ +From ec9057081f1094fbfeb11449bc533997731e4079 Mon Sep 17 00:00:00 2001 +From: Johan Klokkhammer Helsing +Date: Wed, 19 Jun 2019 14:05:22 +0200 +Subject: Client: Fix stuttering when the GUI thread is busy + +When we did invokeMethod for handling the frame callbacks, we had to wait for +the GUI thread to finish whatever it's doing before we would stop blocking. + +Fix it by clearing the frame callback timer and stop blocking immediately, +while delaying the rest of the work until it can be run on the other thread. + +Fixes: QTBUG-76397 +Change-Id: I343e4feac4838926b4fa2ccac2948988bc6c3bb7 +Reviewed-by: Paul Olav Tvete + +diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp +index cecdbda9..7c8ecada 100644 +--- a/src/client/qwaylandwindow.cpp ++++ b/src/client/qwaylandwindow.cpp +@@ -610,29 +610,34 @@ const wl_callback_listener QWaylandWindow::callbackListener = { + Q_UNUSED(callback); + Q_UNUSED(time); + auto *window = static_cast(data); +- if (window->thread() != QThread::currentThread()) +- QMetaObject::invokeMethod(window, [=] { window->handleFrameCallback(); }, Qt::QueuedConnection); +- else +- window->handleFrameCallback(); ++ window->handleFrameCallback(); + } + }; + + void QWaylandWindow::handleFrameCallback() + { +- bool wasExposed = isExposed(); ++ // Stop the timer and stop waiting immediately ++ int timerId = mFrameCallbackTimerId.fetchAndStoreOrdered(-1); ++ mWaitingForFrameCallback = false; + +- if (mFrameCallbackTimerId != -1) { +- killTimer(mFrameCallbackTimerId); +- mFrameCallbackTimerId = -1; +- } ++ // The rest can wait until we can run it on the correct thread ++ auto doHandleExpose = [this, timerId]() { ++ if (timerId != -1) ++ killTimer(timerId); + +- mWaitingForFrameCallback = false; +- mFrameCallbackTimedOut = false; ++ bool wasExposed = isExposed(); ++ mFrameCallbackTimedOut = false; ++ if (!wasExposed && isExposed()) // Did setting mFrameCallbackTimedOut make the window exposed? ++ sendExposeEvent(QRect(QPoint(), geometry().size())); ++ if (wasExposed && hasPendingUpdateRequest()) ++ deliverUpdateRequest(); ++ }; + +- if (!wasExposed && isExposed()) +- sendExposeEvent(QRect(QPoint(), geometry().size())); +- if (wasExposed && hasPendingUpdateRequest()) +- deliverUpdateRequest(); ++ if (thread() != QThread::currentThread()) { ++ QMetaObject::invokeMethod(this, doHandleExpose); ++ } else { ++ doHandleExpose(); ++ } + } + + QMutex QWaylandWindow::mFrameSyncMutex; +@@ -654,11 +659,11 @@ bool QWaylandWindow::waitForFrameSync(int timeout) + } + + // Stop current frame timer if any, can't use killTimer directly, because we might be on a diffent thread +- if (mFrameCallbackTimerId != -1) { +- int id = mFrameCallbackTimerId; +- mFrameCallbackTimerId = -1; +- QMetaObject::invokeMethod(this, [=] { killTimer(id); }, Qt::QueuedConnection); +- } ++ // Ordered semantics is needed to avoid stopping the timer twice and not miss it when it's ++ // started by other writes ++ int fcbId = mFrameCallbackTimerId.fetchAndStoreOrdered(-1); ++ if (fcbId != -1) ++ QMetaObject::invokeMethod(this, [=] { killTimer(fcbId); }, Qt::QueuedConnection); + + return !mWaitingForFrameCallback; + } +@@ -1090,9 +1095,9 @@ void QWaylandWindow::timerEvent(QTimerEvent *event) + } + } + +- if (event->timerId() == mFrameCallbackTimerId) { +- killTimer(mFrameCallbackTimerId); +- mFrameCallbackTimerId = -1; ++ ++ if (mFrameCallbackTimerId.testAndSetOrdered(event->timerId(), -1)) { ++ killTimer(event->timerId()); + qCDebug(lcWaylandBackingstore) << "Didn't receive frame callback in time, window should now be inexposed"; + mFrameCallbackTimedOut = true; + mWaitingForUpdate = false; +@@ -1154,11 +1159,9 @@ void QWaylandWindow::handleUpdate() + mWaitingForUpdate = false; + + // Stop current frame timer if any, can't use killTimer directly, see comment above. +- if (mFrameCallbackTimerId != -1) { +- int id = mFrameCallbackTimerId; +- mFrameCallbackTimerId = -1; +- QMetaObject::invokeMethod(this, [=] { killTimer(id); }, Qt::QueuedConnection); +- } ++ int fcbId = mFrameCallbackTimerId.fetchAndStoreOrdered(-1); ++ if (fcbId != -1) ++ QMetaObject::invokeMethod(this, [=] { killTimer(fcbId); }, Qt::QueuedConnection); + + // Start a timer for handling the case when the compositor stops sending frame callbacks. + QMetaObject::invokeMethod(this, [=] { // Again; can't do it directly +diff --git a/src/client/qwaylandwindow_p.h b/src/client/qwaylandwindow_p.h +index c47123dc..e8c9d568 100644 +--- a/src/client/qwaylandwindow_p.h ++++ b/src/client/qwaylandwindow_p.h +@@ -216,7 +216,7 @@ protected: + WId mWindowId; + bool mWaitingForFrameCallback = false; + bool mFrameCallbackTimedOut = false; // Whether the frame callback has timed out +- int mFrameCallbackTimerId = -1; // Started on commit, reset on frame callback ++ QAtomicInt mFrameCallbackTimerId = -1; // Started on commit, reset on frame callback + struct ::wl_callback *mFrameCallback = nullptr; + struct ::wl_event_queue *mFrameQueue = nullptr; + QWaitCondition mFrameSyncWait; diff --git a/patch/qtwayland-reset-frame-callback-timer-when-hiding-window.patch b/patch/qtwayland-reset-frame-callback-timer-when-hiding-window.patch new file mode 100644 index 0000000..602d6eb --- /dev/null +++ b/patch/qtwayland-reset-frame-callback-timer-when-hiding-window.patch @@ -0,0 +1,18 @@ +diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp +index cecdbda..e3785f5 100644 +--- a/src/client/qwaylandwindow.cpp ++++ b/src/client/qwaylandwindow.cpp +@@ -254,6 +254,13 @@ void QWaylandWindow::reset(bool sendDestroyEvent) + mFrameCallback = nullptr; + } + ++ int timerId = mFrameCallbackTimerId.fetchAndStoreOrdered(-1); ++ if (timerId != -1) { ++ killTimer(timerId); ++ } ++ mWaitingForFrameCallback = false; ++ mFrameCallbackTimedOut = false; ++ + mMask = QRegion(); + mQueuedBuffer = nullptr; + }