Date: Thursday, April 21, 2022 @ 23:48:00 Author: felixonmars Revision: 1187286
archrelease: copy trunk to community-x86_64 Added: deepin-kwin/repos/community-x86_64/PKGBUILD (from rev 1187285, deepin-kwin/trunk/PKGBUILD) deepin-kwin/repos/community-x86_64/dde-kwin.5.4.26.patch (from rev 1187285, deepin-kwin/trunk/dde-kwin.5.4.26.patch) deepin-kwin/repos/community-x86_64/deepin-kwin-added-functions-from-their-forked-kwin.patch (from rev 1187285, deepin-kwin/trunk/deepin-kwin-added-functions-from-their-forked-kwin.patch) deepin-kwin/repos/community-x86_64/deepin-kwin-tabbox-chameleon-rename.patch (from rev 1187285, deepin-kwin/trunk/deepin-kwin-tabbox-chameleon-rename.patch) Deleted: deepin-kwin/repos/community-x86_64/PKGBUILD deepin-kwin/repos/community-x86_64/dde-kwin.5.4.26.patch deepin-kwin/repos/community-x86_64/deepin-kwin-tabbox-chameleon-rename.patch ----------------------------------------------------------+ PKGBUILD | 84 dde-kwin.5.4.26.patch | 1552 ++++++------- deepin-kwin-added-functions-from-their-forked-kwin.patch | 133 + deepin-kwin-tabbox-chameleon-rename.patch | 118 4 files changed, 1044 insertions(+), 843 deletions(-) Deleted: PKGBUILD =================================================================== --- PKGBUILD 2022-04-21 23:47:44 UTC (rev 1187285) +++ PKGBUILD 2022-04-21 23:48:00 UTC (rev 1187286) @@ -1,37 +0,0 @@ -# Maintainer: Felix Yan <felixonm...@archlinux.org> -# Contributor: Josip Ponjavic <josipponjavic at gmail dot com> -# Contributor: Xu Fasheng <fasheng.xu[AT]gmail.com> - -pkgname=deepin-kwin -pkgver=5.4.26 -pkgrel=2 -pkgdesc='KWin configures on DDE' -arch=('x86_64') -url="https://github.com/linuxdeepin/dde-kwin" -license=('GPL3') -depends=('deepin-qt5integration' 'deepin-wallpapers' 'kwin') -makedepends=('extra-cmake-modules' 'ninja' 'qt5-tools') -source=("$pkgname-$pkgver.tar.gz::https://github.com/linuxdeepin/dde-kwin/archive/$pkgver.tar.gz" - $pkgname-tabbox-chameleon-rename.patch - dde-kwin.5.4.26.patch) -sha512sums=('0ce42973d5c4fb861e758f27b7afc3ebe3c743b7157b527c08771bc5d624e124914fbc92ad9e1a9845cc8d302f83352d6991cb287bf2447dbab6a2e87013809c' - '454889eaaf48f0e329d6cde870f57dd25dc1f9f88ade234fdb058249c5a9602fdd43dbfffe7c79c0d05843cec500285e719233bf1b4141c32b387bd1c86e02d7' - 'a94b808c79cae9f58eefed0075f8132692541fa0c5cdcf326b3ac61720371e82016158efee32fc57e151dde9f6342186d00d21796b312d3b93193324d2c09eab') - -prepare() { - cd dde-kwin-$pkgver - sed -i 's|/usr/share/backgrounds/default_background.jpg|/usr/share/backgrounds/deepin/desktop.jpg|' plugins/kwineffects/multitasking/background.cpp - patch -p1 -i ../dde-kwin.5.4.26.patch - patch -p1 -i ../$pkgname-tabbox-chameleon-rename.patch -} - -build() { - cd dde-kwin-$pkgver - cmake . -GNinja -DCMAKE_INSTALL_PREFIX=/usr -DUSE_WINDOW_TOOL=OFF -DENABLE_BUILTIN_BLUR=OFF -DENABLE_KDECORATION=ON -DENABLE_BUILTIN_MULTITASKING=OFF -DENABLE_BUILTIN_BLACK_SCREEN=OFF - ninja -} - -package() { - cd dde-kwin-$pkgver - DESTDIR="$pkgdir" ninja install -} Copied: deepin-kwin/repos/community-x86_64/PKGBUILD (from rev 1187285, deepin-kwin/trunk/PKGBUILD) =================================================================== --- PKGBUILD (rev 0) +++ PKGBUILD 2022-04-21 23:48:00 UTC (rev 1187286) @@ -0,0 +1,47 @@ +# Maintainer: Felix Yan <felixonm...@archlinux.org> +# Contributor: Josip Ponjavic <josipponjavic at gmail dot com> +# Contributor: Xu Fasheng <fasheng.xu[AT]gmail.com> + +pkgname=deepin-kwin +pkgver=5.4.26 +pkgrel=3 +pkgdesc='KWin configures on DDE' +arch=('x86_64') +url="https://github.com/linuxdeepin/dde-kwin" +license=('GPL3') +depends=('deepin-qt5integration' 'deepin-wallpapers' 'kwin') +makedepends=('extra-cmake-modules' 'ninja' 'qt5-tools') +source=("$pkgname-$pkgver.tar.gz::https://github.com/linuxdeepin/dde-kwin/archive/$pkgver.tar.gz" + $pkgname-tabbox-chameleon-rename.patch + $pkgname-added-functions-from-their-forked-kwin.patch + dde-kwin.5.4.26.patch) +sha512sums=('0ce42973d5c4fb861e758f27b7afc3ebe3c743b7157b527c08771bc5d624e124914fbc92ad9e1a9845cc8d302f83352d6991cb287bf2447dbab6a2e87013809c' + '454889eaaf48f0e329d6cde870f57dd25dc1f9f88ade234fdb058249c5a9602fdd43dbfffe7c79c0d05843cec500285e719233bf1b4141c32b387bd1c86e02d7' + '5ba72bb39469f77895a171eb49e787d5045df422c4b9937e85362d022d680710c13c6dd526456df34dc151b1f01101dbc08ad53cd31fbaf069b0bfb84f0ea07d' + '4186adebecc65e8586c7c7594557bc5421a9884a789052b0270007a4268cc0ea017357fce7de61c7a4e78ee59432f68561f9003d9ea37cd47e79b25cfa08e2f2') + +prepare() { + cd dde-kwin-$pkgver + sed -i 's|/usr/share/backgrounds/default_background.jpg|/usr/share/backgrounds/deepin/desktop.jpg|' plugins/kwineffects/multitasking/background.cpp + patch -p1 -i ../dde-kwin.5.4.26.patch + patch -Rp1 -i ../$pkgname-added-functions-from-their-forked-kwin.patch + patch -p1 -i ../$pkgname-tabbox-chameleon-rename.patch + sed -i 's/kwin 5.21.5/kwin 5.24.4/' configures/kwin_no_scale.in +} + +build() { + cd dde-kwin-$pkgver + cmake . -GNinja -DCMAKE_INSTALL_PREFIX=/usr \ + -DUSE_WINDOW_TOOL=OFF \ + -DENABLE_BUILTIN_BLUR=OFF \ + -DENABLE_KDECORATION=ON \ + -DENABLE_BUILTIN_MULTITASKING=OFF \ + -DENABLE_BUILTIN_BLACK_SCREEN=OFF \ + -DUSE_DEEPIN_WAYLAND=OFF + ninja +} + +package() { + cd dde-kwin-$pkgver + DESTDIR="$pkgdir" ninja install +} Deleted: dde-kwin.5.4.26.patch =================================================================== --- dde-kwin.5.4.26.patch 2022-04-21 23:47:44 UTC (rev 1187285) +++ dde-kwin.5.4.26.patch 2022-04-21 23:48:00 UTC (rev 1187286) @@ -1,747 +0,0 @@ -diff --git a/CMakeLists.txt b/CMakeLists.txt -index cbbf79e0c..8321a362c 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -15,6 +15,20 @@ add_definitions( - -DPROJECT_VERSION=\\"${PROJECT_VERSION}\\" - ) - -+option(USE_PLUGINS "use dde-kwin plugins" ON) -+option(USE_SCRIPTS "use scripts" ON) -+option(USE_DEEPIN_WM_DBUS "use deepin-wm dbus service" ON) -+option(USE_TABBOX "use deepin style tabbox" ON) -+option(USE_WINDOW_TOOL "support wayland and x11" ON) -+option(ENABLE_BUILTIN_SCISSOR_WINDOW "enable deepin built-in scissor window plugin" ON) -+option(ENABLE_BUILTIN_BLUR "enable deepin built-in blur plugin" ON) -+option(ENABLE_BUILTIN_MULTITASKING "enable deepin built-in multitasking plugin" ON) -+option(ENABLE_BUILTIN_BLACK_SCREEN "enable deepin built-in black screen plugin" ON) -+ -+if(ENABLE_BUILTIN_BLUR) -+ add_definitions(-DENABLE_BUILTIN_BLUR) -+endif(ENABLE_BUILTIN_BLUR) -+ - #when "KWIN_VERSION > KWIN_VERSION_CHECK(5, 18, 90, 0)" - find_path( - KWaylandServerPath -@@ -91,14 +105,28 @@ if (KWIN_VERSION) - ) - endif() - --add_subdirectory(configures) --set(DDE_KWIN_SUPPORTED_VERSION "5.21.5") --if (${KWIN_VERSION} STRLESS ${DDE_KWIN_SUPPORTED_VERSION} OR ${KWIN_VERSION} STREQUAL ${DDE_KWIN_SUPPORTED_VERSION}) -- add_subdirectory(plugins) -- add_subdirectory(scripts) -- add_subdirectory(deepin-wm-dbus) -- add_subdirectory(tabbox) -- if (BUILD_TESTING) -- add_subdirectory(tests) -- endif() -+if (USE_PLUGINS) -+ add_subdirectory(plugins) -+endif() -+ -+if (USE_SCRIPTS) -+ add_subdirectory(scripts) -+endif() -+ -+if (USE_DEEPIN_WM_DBUS) -+ add_subdirectory(deepin-wm-dbus) - endif() -+ -+if (USE_TABBOX) -+add_subdirectory(tabbox) -+endif() -+ -+if (BUILD_TESTING) -+ add_subdirectory(tests) -+endif() -+ -+if (USE_WINDOW_TOOL) -+ add_subdirectory(windowtool) -+endif() -+ -+add_subdirectory(configures) -diff --git a/configures/CMakeLists.txt b/configures/CMakeLists.txt -index 4ac0a906d..dfbdeaf48 100644 ---- a/configures/CMakeLists.txt -+++ b/configures/CMakeLists.txt -@@ -1,9 +1,17 @@ --configure_file(kwin_no_scale.in kwin_no_scale) -+option(USE_KWIN_NO_SCALE "use deepin LD_PRELOAD kwin_no_scale" ON) -+ -+if(ENABLE_BUILTIN_BLUR) -+ set(ENABLE_BUILTIN_BLUR_STRING "false") -+ else() -+ set(ENABLE_BUILTIN_BLUR_STRING "true") -+ endif() -+ -+configure_file(kwinrc.in kwinrc) - - install( - FILES - kglobalshortcutsrc -- kwinrc -+ ${CMAKE_CURRENT_BINARY_DIR}/kwinrc - kwinrulesrc - klaunchrc - kdeglobals -@@ -11,4 +19,7 @@ install( - "/etc/xdg" - ) - --install_files("/bin" FILES ${CMAKE_CURRENT_BINARY_DIR}/kwin_no_scale) -+if (USE_KWIN_NO_SCALE) -+ configure_file(kwin_no_scale.in kwin_no_scale) -+ install_files("/bin" FILES ${CMAKE_CURRENT_BINARY_DIR}/kwin_no_scale) -+endif() -diff --git a/configures/kwinrc b/configures/kwinrc.in -similarity index 98% -rename from configures/kwinrc -rename to configures/kwinrc.in -index c1fde055b..3d73073e5 100644 ---- a/configures/kwinrc -+++ b/configures/kwinrc.in -@@ -1,6 +1,6 @@ - [Plugins] - #默认使用com.deepin.blur --blurEnabled=false -+blurEnabled=@ENABLE_BUILTIN_BLUR_STRING@ - enforcedecoEnabled=false - minimizeallEnabled=true - kwin4_effect_dialogparentEnabled=false -diff --git a/deepin-wm-dbus/CMakeLists.txt b/deepin-wm-dbus/CMakeLists.txt -index 3312af1d9..3807bc8f9 100644 ---- a/deepin-wm-dbus/CMakeLists.txt -+++ b/deepin-wm-dbus/CMakeLists.txt -@@ -3,6 +3,7 @@ set(TARGET_NAME "deepin-wm-dbus") - - find_package(Qt5Core REQUIRED) - find_package(Qt5DBus REQUIRED) -+find_package(X11 REQUIRED) - find_package(KF5Config REQUIRED) - find_package(KF5WindowSystem REQUIRED) - find_package(KF5GlobalAccel REQUIRED) -diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt -index 11695a379..7a7e4bcbb 100644 ---- a/plugins/CMakeLists.txt -+++ b/plugins/CMakeLists.txt -@@ -1,3 +1,9 @@ - add_subdirectory(platforms) --add_subdirectory(kdecoration) -+ -+option(ENABLE_KDECORATION "enable deepin kdecoration plugin" ON) -+ -+if (ENABLE_KDECORATION) -+ add_subdirectory(kdecoration) -+endif() -+ - add_subdirectory(kwineffects) -diff --git a/plugins/kdecoration/CMakeLists.txt b/plugins/kdecoration/CMakeLists.txt -index 0a34ea25d..60196cf37 100644 ---- a/plugins/kdecoration/CMakeLists.txt -+++ b/plugins/kdecoration/CMakeLists.txt -@@ -5,6 +5,7 @@ add_definitions(-DTARGET_NAME=\\"${TARGET_NAME}\\") - find_package(Qt5 CONFIG REQUIRED COMPONENTS Core) - find_package(KF5CoreAddons REQUIRED) - find_package(Qt5DBus REQUIRED) -+find_package(X11 REQUIRED) - find_package(KF5Config REQUIRED) - find_package(KF5WindowSystem REQUIRED) - find_package(KDecoration2 REQUIRED) -diff --git a/plugins/kdecoration/chameleon.cpp b/plugins/kdecoration/chameleon.cpp -index 6896edbde..289b9c3cc 100644 ---- a/plugins/kdecoration/chameleon.cpp -+++ b/plugins/kdecoration/chameleon.cpp -@@ -80,6 +80,7 @@ void Chameleon::init() - updateTheme(); - - if (!QX11Info::isPlatformX11() && m_client) { -+#ifdef USE_DEEPIN_WAYLAND - m_ddeShellSurface = static_cast<KWayland::Server::DDEShellSurfaceInterface*>(KWinUtils::getDDEShellSurface(m_client)); - if (m_ddeShellSurface) { - connect(m_ddeShellSurface, &KWayland::Server::DDEShellSurfaceInterface::noTitleBarPropertyRequested, this, -@@ -102,6 +103,7 @@ void Chameleon::init() - } - ); - } -+#endif - } - - connect(global_config, &ChameleonConfig::themeChanged, this, &Chameleon::updateTheme); -diff --git a/plugins/kdecoration/chameleon.h b/plugins/kdecoration/chameleon.h -index 6bfde0b16..4eed1e543 100644 ---- a/plugins/kdecoration/chameleon.h -+++ b/plugins/kdecoration/chameleon.h -@@ -33,7 +33,11 @@ - #include <QSettings> - #include <QScreen> - #include <QPainterPath> -+#include <QFont> -+ -+#ifdef USE_DEEPIN_WAYLAND - #include <KWayland/Server/ddeshell_interface.h> -+#endif - - class Settings; - class ChameleonWindowTheme; -@@ -124,7 +128,10 @@ private: - - QPointer<KWin::EffectWindow> m_effect; - QFont m_font; -+ -+#ifdef USE_DEEPIN_WAYLAND - KWayland::Server::DDEShellSurfaceInterface * m_ddeShellSurface = nullptr; -+#endif - }; - - #endif // CHAMELEON_H -diff --git a/plugins/kdecoration/chameleonconfig.cpp b/plugins/kdecoration/chameleonconfig.cpp -index 8b6a03b8e..505a5639d 100644 ---- a/plugins/kdecoration/chameleonconfig.cpp -+++ b/plugins/kdecoration/chameleonconfig.cpp -@@ -141,7 +141,7 @@ void ChameleonConfig::onConfigChanged() - } - - #define D_KWIN_DEBUG_APP_START_TIME "D_KWIN_DEBUG_APP_START_TIME" --void ChameleonConfig::onClientAdded(KWin::Client *client) -+void ChameleonConfig::onClientAdded(KWin::AbstractClient *client) - { - QObject *c = reinterpret_cast<QObject*>(client); - -@@ -905,7 +905,7 @@ void ChameleonConfig::init() - { - #ifndef DISBLE_DDE_KWIN_XCB - connect(KWinUtils::workspace(), SIGNAL(configChanged()), this, SLOT(onConfigChanged())); -- connect(KWinUtils::workspace(), SIGNAL(clientAdded(KWin::Client*)), this, SLOT(onClientAdded(KWin::Client*))); -+ connect(KWinUtils::workspace(), SIGNAL(clientAdded(KWin::AbstractClient*)), this, SLOT(onClientAdded(KWin::AbstractClient*))); - connect(KWinUtils::workspace(), SIGNAL(unmanagedAdded(KWin::Unmanaged*)), this, SLOT(onUnmanagedAdded(KWin::Unmanaged*))); - connect(KWinUtils::compositor(), SIGNAL(compositingToggled(bool)), this, SLOT(onCompositingToggled(bool))); - connect(KWinUtils::instance(), &KWinUtils::windowPropertyChanged, this, &ChameleonConfig::onWindowPropertyChanged); -@@ -1225,7 +1225,7 @@ void ChameleonConfig::buildKWinX11Shadow(QObject *window) - effect = window->findChild<KWin::EffectWindow*>(QString(), Qt::FindDirectChildrenOnly); - - if (effect) { -- QRect shape_rect = effect->shape().boundingRect(); -+ QRect shape_rect = effect->clientGeometry(); - const QRect window_rect(QPoint(0, 0), window->property("size").toSize()); - - // 减去窗口的shape区域 -diff --git a/plugins/kdecoration/chameleonconfig.h b/plugins/kdecoration/chameleonconfig.h -index b9408267e..be5a48b9a 100644 ---- a/plugins/kdecoration/chameleonconfig.h -+++ b/plugins/kdecoration/chameleonconfig.h -@@ -38,7 +38,7 @@ - #define _NET_WM_WINDOW_TYPE "_NET_WM_WINDOW_TYPE" - - namespace KWin { --class Client; -+class AbstractClient; - class Unmanaged; - class EffectWindow; - class Toplevel; -@@ -93,7 +93,7 @@ protected: - - private slots: - void onConfigChanged(); -- void onClientAdded(KWin::Client *client); -+ void onClientAdded(KWin::AbstractClient *client); - // 针对X11BypassWindowManagerHint类型的窗口需要做一些特殊处理 - void onUnmanagedAdded(KWin::Unmanaged *client); - void onCompositingToggled(bool active); -diff --git a/plugins/kwineffects/CMakeLists.txt b/plugins/kwineffects/CMakeLists.txt -index 9832df92a..5a6036896 100644 ---- a/plugins/kwineffects/CMakeLists.txt -+++ b/plugins/kwineffects/CMakeLists.txt -@@ -1,10 +1,22 @@ - find_package(Qt5 CONFIG REQUIRED COMPONENTS Core Gui) -+find_package(X11 REQUIRED) - find_package(KF5CoreAddons REQUIRED) - find_package(KF5WindowSystem REQUIRED) - - set(INSTALL_PATH "${QT_INSTALL_PLUGINS}/kwin/effects/plugins") - --add_subdirectory(scissor-window) --add_subdirectory(blur) --add_subdirectory(multitasking) --add_subdirectory(black-screen) -+if (ENABLE_BUILTIN_SCISSOR_WINDOW) -+ add_subdirectory(scissor-window) -+endif() -+ -+if (ENABLE_BUILTIN_BLUR) -+ add_subdirectory(blur) -+endif() -+ -+if (ENABLE_BUILTIN_MULTITASKING) -+ add_subdirectory(multitasking) -+endif() -+ -+if (ENABLE_BUILTIN_BLACK_SCREEN) -+ add_subdirectory(black-screen) -+endif() -diff --git a/plugins/kwineffects/scissor-window/cornermask.frag.140 b/plugins/kwineffects/scissor-window/cornermask.frag -similarity index 100% -rename from plugins/kwineffects/scissor-window/cornermask.frag.140 -rename to plugins/kwineffects/scissor-window/cornermask.frag -diff --git a/plugins/kwineffects/scissor-window/cornermask.frag.110 b/plugins/kwineffects/scissor-window/cornermask_core.frag -similarity index 100% -rename from plugins/kwineffects/scissor-window/cornermask.frag.110 -rename to plugins/kwineffects/scissor-window/cornermask_core.frag -diff --git a/plugins/kwineffects/scissor-window/fullmask.frag.140 b/plugins/kwineffects/scissor-window/fullmask.frag -similarity index 100% -rename from plugins/kwineffects/scissor-window/fullmask.frag.140 -rename to plugins/kwineffects/scissor-window/fullmask.frag -diff --git a/plugins/kwineffects/scissor-window/fullmask.frag.110 b/plugins/kwineffects/scissor-window/fullmask_core.frag -similarity index 100% -rename from plugins/kwineffects/scissor-window/fullmask.frag.110 -rename to plugins/kwineffects/scissor-window/fullmask_core.frag -diff --git a/plugins/kwineffects/scissor-window/glsl.qrc b/plugins/kwineffects/scissor-window/glsl.qrc -index 8b2ecb6f3..69dd34a7e 100644 ---- a/plugins/kwineffects/scissor-window/glsl.qrc -+++ b/plugins/kwineffects/scissor-window/glsl.qrc -@@ -1,10 +1,16 @@ - <RCC> -+ <qresource prefix="/"> -+ <file>cornermask_core.frag</file> -+ <file>fullmask_core.frag</file> -+ <file>cornermask.frag</file> -+ <file>fullmask.frag</file> -+ </qresource> - <qresource prefix="/effect-shaders-1.10"> -- <file alias="corner-mask.frag">cornermask.frag.110</file> -- <file alias="full-mask.frag">fullmask.frag.110</file> -+ <file alias="corner-mask.frag">cornermask_core.frag</file> -+ <file alias="full-mask.frag">fullmask_core.frag</file> - </qresource> - <qresource prefix="/effect-shaders-1.40"> -- <file alias="corner-mask.frag">cornermask.frag.140</file> -- <file alias="full-mask.frag">fullmask.frag.140</file> -+ <file alias="cornermask.frag">cornermask.frag</file> -+ <file alias="fullmask.frag">fullmask.frag</file> - </qresource> - </RCC> -diff --git a/plugins/kwineffects/scissor-window/main.cpp b/plugins/kwineffects/scissor-window/main.cpp -index 73544556c..58438b49e 100644 ---- a/plugins/kwineffects/scissor-window/main.cpp -+++ b/plugins/kwineffects/scissor-window/main.cpp -@@ -23,19 +23,27 @@ - class ScissorWindowPluginFactory : public KWin::EffectPluginFactory - { - Q_OBJECT -- Q_INTERFACES(KPluginFactory) -+#if defined(KWIN_VERSION) && KWIN_VERSION < KWIN_VERSION_CHECK(5, 23, 4, 0) - Q_PLUGIN_METADATA(IID KPluginFactory_iid FILE "scissor-window.json") -- -+#else -+ Q_PLUGIN_METADATA(IID EffectPluginFactory_iid FILE "scissor-window.json") -+#endif -+ Q_INTERFACES(KPluginFactory) - public: -- explicit ScissorWindowPluginFactory(); -- ~ScissorWindowPluginFactory(); -+ explicit ScissorWindowPluginFactory() {} -+ ~ScissorWindowPluginFactory() {} - -- KWin::Effect *createEffect() const { -- return ScissorWindow::supported() ? new ScissorWindow() : nullptr; -+ bool isSupported() const override { -+ return ScissorWindow::supported(); - } --}; - --K_PLUGIN_FACTORY_DEFINITION(ScissorWindowPluginFactory, registerPlugin<ScissorWindow>();) --K_EXPORT_PLUGIN_VERSION(KWIN_EFFECT_API_VERSION) -+ bool enabledByDefault() const override { -+ return true; -+ } -+ -+ KWin::Effect *createEffect() const override { -+ return new ScissorWindow; -+ } -+}; - - #include "main.moc" -diff --git a/plugins/kwineffects/scissor-window/scissor-window.json b/plugins/kwineffects/scissor-window/scissor-window.json -index e2ebdc65d..56522ecd1 100644 ---- a/plugins/kwineffects/scissor-window/scissor-window.json -+++ b/plugins/kwineffects/scissor-window/scissor-window.json -@@ -4,6 +4,10 @@ - { - "Email": "zc...@live.com", - "Name": "zccrs" -+ }, -+ { -+ "Email": "l...@mkacg.com", -+ "Name": "justforlxz" - } - ], - "Description": "Allow clip of window content", -@@ -15,8 +19,15 @@ - "ServiceTypes": [ - "KWin/Effect" - ], -- "org.kde.kwin.effect": { -- "exclusiveGroup": "appearance" -- } -- } -+ "Category": "Appearance", -+ "License": "GPL", -+ "Version": "1.0" -+ }, -+ "org.kde.kwin.effect": { -+ "exclusiveGroup": "appearance", -+ "enabledByDefaultMethod": true -+ }, -+ "X-KDE-Ordering": "5", -+ "X-Plasma-API": "", -+ "X-Plasma-MainScript": "" - } -diff --git a/plugins/kwineffects/scissor-window/scissorwindow.cpp b/plugins/kwineffects/scissor-window/scissorwindow.cpp -index a80118421..b250d891a 100644 ---- a/plugins/kwineffects/scissor-window/scissorwindow.cpp -+++ b/plugins/kwineffects/scissor-window/scissorwindow.cpp -@@ -19,10 +19,6 @@ - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - #include "scissorwindow.h" --#ifndef DISBLE_DDE_KWIN_XCB --#include "kwinutils.h" --#endif -- - #include <kwinglutils.h> - #include <kwinglplatform.h> - #include <kwingltexture.h> -@@ -32,6 +28,7 @@ - #include <QExplicitlySharedDataPointer> - #include <QSignalBlocker> - #include <QPainterPath> -+#include <QScopedPointer> - - Q_DECLARE_METATYPE(QPainterPath) - -@@ -178,16 +175,16 @@ ScissorWindow::ScissorWindow(QObject *, const QVariantList &) - : Effect() - { - // 构建用于窗口圆角特效的着色器 -- m_shader = KWin::ShaderManager::instance()->generateShaderFromResources(KWin::ShaderTrait::MapTexture, QString(), "corner-mask.frag"); -+ m_shader = KWin::ShaderManager::instance()->generateShaderFromFile(KWin::ShaderTrait::MapTexture, QString(), ":/cornermask.frag"); - // 构建用于自定义窗口形状的着色器 -- m_fullMaskShader = KWin::ShaderManager::instance()->generateShaderFromResources(KWin::ShaderTrait::MapTexture, QString(), "full-mask.frag"); -+ m_fullMaskShader = KWin::ShaderManager::instance()->generateShaderFromFile(KWin::ShaderTrait::MapTexture, QString(), ":/fullmask.frag"); - - if (!m_shader->isValid()) { -- // qWarning() << Q_FUNC_INFO << "Invalid fragment shader of corner mask"; -+ qWarning() << Q_FUNC_INFO << "Invalid fragment shader of corner mask"; - } - - if (!m_fullMaskShader->isValid()) { -- // qWarning() << Q_FUNC_INFO << "Invalid fragment shader of full mask"; -+ qWarning() << Q_FUNC_INFO << "Invalid fragment shader of full mask"; - } - } - -@@ -205,6 +202,10 @@ void ScissorWindow::drawWindow(KWin::EffectWindow *w, int mask, QRegion region, - return Effect::drawWindow(w, mask, region, data); - } - -+ if (KWin::effects->hasActiveFullScreenEffect() || w->isFullScreen()) { -+ return Effect::drawWindow(w, mask, region, data); -+ } -+ - MaskCache::TextureData mask_texture = MaskCache::instance()->getTextureByWindow(w); - - if (!mask_texture) { -@@ -214,7 +215,7 @@ void ScissorWindow::drawWindow(KWin::EffectWindow *w, int mask, QRegion region, - QRegion corner_region; - - if (!mask_texture->customMask) { -- const QRect window_rect = w->geometry(); -+ const QRect window_rect = w->frameGeometry(); - QRect corner_rect(window_rect.topLeft(), mask_texture->size); - - // top left -@@ -241,6 +242,7 @@ void ScissorWindow::drawWindow(KWin::EffectWindow *w, int mask, QRegion region, - } - } - -+#if !defined(KWIN_VERSION) || KWIN_VERSION < KWIN_VERSION_CHECK(5, 23, 4, 0) - KWin::WindowQuadList decoration_quad_list; - KWin::WindowQuadList content_quad_list; - -@@ -257,20 +259,65 @@ void ScissorWindow::drawWindow(KWin::EffectWindow *w, int mask, QRegion region, - break; - } - } -+#endif - -+#ifndef DISBLE_DDE_KWIN_XCB -+ class SetWindowDepth { -+ public: -+ SetWindowDepth(KWin::EffectWindow *w, int depth) -+ : m_window(w) -+ { -+ // 此时正在进行窗口绘制,会有大量的调用,应当避免窗口发射hasAlphaChanged信号 -+ QSignalBlocker(w->parent()); -+ KWinUtils::setClientDepth(w->parent(), depth); -+ } -+ -+ ~SetWindowDepth() { -+ bool ok = false; -+ int depth = m_window->data(WindowDepthRole).toInt(&ok); -+ QObject *client = m_window->parent(); -+ -+ if (!ok) { -+ depth = KWinUtils::getWindowDepth(client); -+ // 保存以便下次使用 -+ m_window->setData(WindowDepthRole, depth); -+ } -+ -+ // 此时正在进行窗口绘制,会有大量的调用,应当避免窗口发射hasAlphaChanged信号 -+ QSignalBlocker blocker(client); -+ Q_UNUSED(blocker) -+ KWinUtils::setClientDepth(client, depth); -+ } -+ -+ private: -+ KWin::EffectWindow *m_window; -+ }; -+ -+ // 要想窗口裁剪生效,必须要保证窗口材质绘制时开启了alpha通道混合 -+ QScopedPointer<SetWindowDepth> setDepth; -+ if (!w->hasAlpha()) { -+ QScopedPointer<SetWindowDepth> alpha(new SetWindowDepth(w, 32)); -+ setDepth.swap(alpha); -+ } -+ #endif -+ -+#if !defined(KWIN_VERSION) || KWIN_VERSION < KWIN_VERSION_CHECK(5, 23, 4, 0) - if (!mask_texture->customMask) { - // 此时只允许绘制窗口边框和阴影 - // 针对设置了自定义裁剪的窗口,则不绘制标题栏和阴影 - data.quads = decoration_quad_list; - Effect::drawWindow(w, mask, region, data); - } -+#endif - - if (!corner_region.isEmpty()) { - QRegion new_region = region - corner_region; - - // 先绘制未处于mask区域的窗口材质 - if (!new_region.isEmpty()) { -+#if !defined(KWIN_VERSION) || KWIN_VERSION < KWIN_VERSION_CHECK(5, 23, 4, 0) - data.quads = content_quad_list; -+#endif - Effect::drawWindow(w, mask, new_region, data); - } - -@@ -278,6 +325,9 @@ void ScissorWindow::drawWindow(KWin::EffectWindow *w, int mask, QRegion region, - region = region - new_region; - } - -+ glEnable(GL_BLEND); -+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); -+ - // 将mask材质绑定到第二个材质 - glActiveTexture(GL_TEXTURE1); - mask_texture->bind(); -@@ -303,52 +353,13 @@ void ScissorWindow::drawWindow(KWin::EffectWindow *w, int mask, QRegion region, - - // 此时只允许绘制窗口内容 - auto old_shader = data.shader; -+#if !defined(KWIN_VERSION) || KWIN_VERSION < KWIN_VERSION_CHECK(5, 23, 4, 0) - data.quads = content_quad_list; -+ data.quads = content_quad_list; -+#endif - data.shader = shader; - --#ifndef DISBLE_DDE_KWIN_XCB -- class SetWindowDepth { -- public: -- SetWindowDepth(KWin::EffectWindow *w, int depth) -- : m_window(w) -- { -- // 此时正在进行窗口绘制,会有大量的调用,应当避免窗口发射hasAlphaChanged信号 -- QSignalBlocker blocker(w->parent()); -- Q_UNUSED(blocker) -- KWinUtils::setClientDepth(w->parent(), depth); -- } -- -- ~SetWindowDepth() { -- bool ok = false; -- int depth = m_window->data(WindowDepthRole).toInt(&ok); -- QObject *client = m_window->parent(); -- -- if (!ok) { -- depth = KWinUtils::getWindowDepth(client); -- // 保存以便下次使用 -- m_window->setData(WindowDepthRole, depth); -- } -- -- // 此时正在进行窗口绘制,会有大量的调用,应当避免窗口发射hasAlphaChanged信号 -- QSignalBlocker blocker(client); -- Q_UNUSED(blocker) -- KWinUtils::setClientDepth(client, depth); -- } -- -- private: -- KWin::EffectWindow *m_window; -- }; -- -- // 要想窗口裁剪生效,必须要保证窗口材质绘制时开启了alpha通道混合 -- if (!w->hasAlpha()) { -- SetWindowDepth set_depth(w, 32); -- Q_UNUSED(set_depth) -- Effect::drawWindow(w, mask, region, data); -- } else --#endif -- { -- Effect::drawWindow(w, mask, region, data); -- } -+ Effect::drawWindow(w, mask, region, data); - - data.shader = old_shader; - -@@ -357,4 +368,6 @@ void ScissorWindow::drawWindow(KWin::EffectWindow *w, int mask, QRegion region, - glActiveTexture(GL_TEXTURE1); - mask_texture->unbind(); - glActiveTexture(GL_TEXTURE0); -+ -+ glDisable(GL_BLEND); - } -diff --git a/plugins/kwineffects/scissor-window/scissorwindow.h b/plugins/kwineffects/scissor-window/scissorwindow.h -index 6e12a1adc..a778a1d97 100644 ---- a/plugins/kwineffects/scissor-window/scissorwindow.h -+++ b/plugins/kwineffects/scissor-window/scissorwindow.h -@@ -23,6 +23,10 @@ - - #include <kwineffects.h> - -+#ifndef DISBLE_DDE_KWIN_XCB -+#include "kwinutils.h" -+#endif -+ - class ScissorWindow : public KWin::Effect - { - Q_OBJECT -diff --git a/plugins/platforms/lib/CMakeLists.txt b/plugins/platforms/lib/CMakeLists.txt -index 9dbf2474f..06379d0ab 100644 ---- a/plugins/platforms/lib/CMakeLists.txt -+++ b/plugins/platforms/lib/CMakeLists.txt -@@ -3,6 +3,7 @@ set(TARGET_NAME "kwin-xcb") - find_package(Qt5Core REQUIRED) - find_package(Qt5X11Extras REQUIRED) - find_package(Qt5Qml REQUIRED) -+find_package(X11 REQUIRED) - find_package(KF5Config REQUIRED) - find_package(KF5WindowSystem REQUIRED) - find_package(KF5CoreAddons REQUIRED) -diff --git a/plugins/platforms/lib/kwinutils.cpp b/plugins/platforms/lib/kwinutils.cpp -index df1b8ce6b..ee283a60e 100644 ---- a/plugins/platforms/lib/kwinutils.cpp -+++ b/plugins/platforms/lib/kwinutils.cpp -@@ -87,7 +87,11 @@ public: - public Q_SLOTS: - void slotWindowMove(); - void slotWindowMaximize(); -- bool compositing() const; -+#if !defined(KWIN_VERSION) || KWIN_VERSION < KWIN_VERSION_CHECK(5, 23, 4, 0) -+ // remove by c61085dc2e28cb7d737c9b049499b4433916b194 -+ // change to Compositor::compositing() -+ bool compositing() const; -+ #endif - void slotTouchPadTomoveWindow(int x, int y); - void slotEndTouchPadToMoveWindow(); - -@@ -139,14 +143,23 @@ class Compositor : public QObject - public: - enum SuspendReason { NoReasonSuspend = 0, UserSuspend = 1<<0, BlockRuleSuspend = 1<<1, ScriptSuspend = 1<<2, AllReasonSuspend = 0xff }; - static Compositor *s_compositor; -+ bool isActive(); - }; - - // 光标管理 -+#if defined(KWIN_VERSION) && KWIN_VERSION >= KWIN_VERSION_CHECK(5, 23, 4, 0) -+class Cursors : public QObject -+{ -+public: -+ static Cursors *s_self; -+}; -+#else - class Cursor : public QObject - { - public: - static Cursor *s_self; - }; -+#endif - - class AbstractClient : public QObject {}; - class Options { -@@ -613,7 +626,11 @@ QObject *KWinUtils::tabBox() - - QObject *KWinUtils::cursor() - { -+#if defined(KWIN_VERSION) && KWIN_VERSION >= KWIN_VERSION_CHECK(5, 23, 4, 0) -+ return KWin::Cursors::s_self; -+#else - return KWin::Cursor::s_self; -+#endif - } - - QObject *KWinUtils::virtualDesktop() -@@ -643,8 +660,8 @@ QObjectList KWinUtils::clientList() - return {}; - } - -- QList<KWin::Client*> clients; -- bool ok = QMetaObject::invokeMethod(jsWorkspaceWrapper, "clientList", Q_RETURN_ARG(QList<KWin::Client*>, clients)); -+ QList<KWin::AbstractClient*> clients; -+ bool ok = QMetaObject::invokeMethod(jsWorkspaceWrapper, "clientList", Q_RETURN_ARG(QList<KWin::AbstractClient*>, clients)); - - if (!ok) { - return {}; -@@ -652,7 +669,7 @@ QObjectList KWinUtils::clientList() - - QObjectList list; - -- for (KWin::Client *c : clients) { -+ for (KWin::AbstractClient *c : clients) { - list << c; - } - -@@ -1057,12 +1074,19 @@ void KWinUtils::removeWindowPropertyMonitor(quint32 property_atom) - - bool KWinUtils::isCompositing() - { -+ #if defined(KWIN_VERSION) && KWIN_VERSION >= KWIN_VERSION_CHECK(5, 23, 4, 0) -+ if (KWin::Compositor::s_compositor) { -+ return KWin::Compositor::s_compositor->isActive(); -+ } -+ #else - KWin::Workspace *ws = static_cast<KWin::Workspace *>(workspace()); - if (ws) { - return ws->compositing(); - } else { - return compositorIsActive(); - } -+#endif -+ return compositorIsActive(); - } - - bool KWinUtils::buildNativeSettings(QObject *baseObject, quint32 windowID) -diff --git a/plugins/platforms/plugin/libkwinpreload.cpp b/plugins/platforms/plugin/libkwinpreload.cpp -index 55b509e4b..c8814bd8d 100644 ---- a/plugins/platforms/plugin/libkwinpreload.cpp -+++ b/plugins/platforms/plugin/libkwinpreload.cpp -@@ -279,9 +279,11 @@ void RuleBook::save() - - namespace BuiltInEffects { - bool supported(BuiltInEffect effect) { -+#ifdef ENABLE_BUILTIN_BLUR - if (effect == BuiltInEffect::Blur) { - return false; - } -+#endif - - typedef bool (*ClientBuiltInEffect)(KWin::BuiltInEffect); - ClientBuiltInEffect clientBuildInEffect = (ClientBuiltInEffect)QLibrary::resolve("kwin", qApp->applicationVersion(), "_ZN4KWin14BuiltInEffects9supportedENS_13BuiltInEffectE"); Copied: deepin-kwin/repos/community-x86_64/dde-kwin.5.4.26.patch (from rev 1187285, deepin-kwin/trunk/dde-kwin.5.4.26.patch) =================================================================== --- dde-kwin.5.4.26.patch (rev 0) +++ dde-kwin.5.4.26.patch 2022-04-21 23:48:00 UTC (rev 1187286) @@ -0,0 +1,805 @@ +commit df1937194c07b850425bd047ed4fc8a8986b0609 +Author: justforlxz <justfor...@gmail.com> +Date: Wed Apr 6 20:24:55 2022 +0800 + + refactor: scissor-window + + Adapt to kwin 4.24 + + Log: Adapt to kwin 4.24 + Change-Id: I5da82f2b20cfc6ed165e2e0559fa556624de1d77 + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index cbbf79e0c..60c2f3cd8 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -15,6 +15,26 @@ add_definitions( + -DPROJECT_VERSION=\\"${PROJECT_VERSION}\\" + ) + ++option(USE_PLUGINS "use dde-kwin plugins" ON) ++option(USE_SCRIPTS "use scripts" ON) ++option(USE_DEEPIN_WM_DBUS "use deepin-wm dbus service" ON) ++option(USE_TABBOX "use deepin style tabbox" ON) ++option(USE_WINDOW_TOOL "support wayland and x11" ON) ++option(USE_DEEPIN_WAYLAND "use deepin wayland" ON) ++option(USE_KWIN_NO_SCALE "use kwin_no_scale script" ON) ++option(ENABLE_BUILTIN_SCISSOR_WINDOW "enable deepin built-in scissor window plugin" ON) ++option(ENABLE_BUILTIN_BLUR "enable deepin built-in blur plugin" ON) ++option(ENABLE_BUILTIN_MULTITASKING "enable deepin built-in multitasking plugin" ON) ++option(ENABLE_BUILTIN_BLACK_SCREEN "enable deepin built-in black screen plugin" ON) ++ ++if(ENABLE_BUILTIN_BLUR) ++ add_definitions(-DENABLE_BUILTIN_BLUR) ++endif(ENABLE_BUILTIN_BLUR) ++ ++if (USE_DEEPIN_WAYLAND) ++ add_definitions(-DUSE_DEEPIN_WAYLAND) ++endif(USE_DEEPIN_WAYLAND) ++ + #when "KWIN_VERSION > KWIN_VERSION_CHECK(5, 18, 90, 0)" + find_path( + KWaylandServerPath +@@ -91,14 +111,28 @@ if (KWIN_VERSION) + ) + endif() + +-add_subdirectory(configures) +-set(DDE_KWIN_SUPPORTED_VERSION "5.21.5") +-if (${KWIN_VERSION} STRLESS ${DDE_KWIN_SUPPORTED_VERSION} OR ${KWIN_VERSION} STREQUAL ${DDE_KWIN_SUPPORTED_VERSION}) +- add_subdirectory(plugins) +- add_subdirectory(scripts) +- add_subdirectory(deepin-wm-dbus) +- add_subdirectory(tabbox) +- if (BUILD_TESTING) +- add_subdirectory(tests) +- endif() ++if (USE_PLUGINS) ++ add_subdirectory(plugins) ++endif() ++ ++if (USE_SCRIPTS) ++ add_subdirectory(scripts) ++endif() ++ ++if (USE_DEEPIN_WM_DBUS) ++ add_subdirectory(deepin-wm-dbus) + endif() ++ ++if (USE_TABBOX) ++add_subdirectory(tabbox) ++endif() ++ ++if (BUILD_TESTING) ++ add_subdirectory(tests) ++endif() ++ ++if (USE_WINDOW_TOOL) ++ add_subdirectory(windowtool) ++endif() ++ ++add_subdirectory(configures) +diff --git a/configures/CMakeLists.txt b/configures/CMakeLists.txt +index 4ac0a906d..99e0d0970 100644 +--- a/configures/CMakeLists.txt ++++ b/configures/CMakeLists.txt +@@ -1,9 +1,17 @@ + configure_file(kwin_no_scale.in kwin_no_scale) + ++if(ENABLE_BUILTIN_BLUR) ++ set(ENABLE_BUILTIN_BLUR_STRING "false") ++ else() ++ set(ENABLE_BUILTIN_BLUR_STRING "true") ++ endif() ++ ++configure_file(kwinrc.in kwinrc) ++ + install( + FILES + kglobalshortcutsrc +- kwinrc ++ ${CMAKE_CURRENT_BINARY_DIR}/kwinrc + kwinrulesrc + klaunchrc + kdeglobals +@@ -11,4 +19,9 @@ install( + "/etc/xdg" + ) + +-install_files("/bin" FILES ${CMAKE_CURRENT_BINARY_DIR}/kwin_no_scale) ++if (USE_KWIN_NO_SCALE) ++ configure_file(kwin_no_scale.in kwin_no_scale) ++ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/kwin_no_scale ++ DESTINATION bin ++ PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) ++endif() +diff --git a/configures/kwin_no_scale.in b/configures/kwin_no_scale.in +old mode 100755 +new mode 100644 +index d34aba1f7..8b4a5b18a +--- a/configures/kwin_no_scale.in ++++ b/configures/kwin_no_scale.in +@@ -1,20 +1,19 @@ +-#!/bin/sh +- +-KWIN_VERSION=`kwin_x11 --version 2>/dev/null` +-DDE_KWIN_SUPPORTED_VERSION='kwin 5.21.5' +-if [ "$KWIN_VERSION" \> "$DDE_KWIN_SUPPORTED_VERSION" ]; then +- kwin_x11 $@ +- exit 0 +-fi ++#!/bin/bash + + if [ -n "$HOME" ];then + cp -n /etc/xdg/kglobalshortcutsrc $HOME/.config/kglobalshortcutsrc + fi + +-EXECUTE_PATH=$(cd `dirname $0`; pwd) ++ARGS=$@ ++ ++function runDeepinKWin() { ++ local EXECUTE_PATH=$1 ++ export LD_PRELOAD=${PLUGIN_INSTALL_PATH}/libdde-kwin-xcb.so:$LD_PRELOAD ++ export QT_SCALE_FACTOR=1 ++ #":"后的"appFilePath=..."会传递给QPlatformIntegration::create调用 ++ # appFilePath 的值会覆盖 QCoreApplication::applicationPath,以确保kwin崩溃自动重启时也是启动的kwin_no_scale脚本 ++ kwin_x11 -platform dde-kwin-xcb:appFilePath=$EXECUTE_PATH/kwin_no_scale $ARGS ++ return $? ++} + +-export "LD_PRELOAD=${PLUGIN_INSTALL_PATH}/libdde-kwin-xcb.so:$LD_PRELOAD" +-export QT_SCALE_FACTOR=1 +-#":"后的"appFilePath=..."会传递给QPlatformIntegration::create调用 +-# appFilePath 的值会覆盖 QCoreApplication::applicationPath,以确保kwin崩溃自动重启时也是启动的kwin_no_scale脚本 +-kwin_x11 -platform dde-kwin-xcb:appFilePath=$EXECUTE_PATH/kwin_no_scale $@ ++runDeepinKWin "$(cd `dirname $0`; pwd)" || kwin_x11 $ARGS +diff --git a/configures/kwinrc b/configures/kwinrc.in +similarity index 98% +rename from configures/kwinrc +rename to configures/kwinrc.in +index c1fde055b..3d73073e5 100644 +--- a/configures/kwinrc ++++ b/configures/kwinrc.in +@@ -1,6 +1,6 @@ + [Plugins] + #默认使用com.deepin.blur +-blurEnabled=false ++blurEnabled=@ENABLE_BUILTIN_BLUR_STRING@ + enforcedecoEnabled=false + minimizeallEnabled=true + kwin4_effect_dialogparentEnabled=false +diff --git a/deepin-wm-dbus/CMakeLists.txt b/deepin-wm-dbus/CMakeLists.txt +index 3312af1d9..3807bc8f9 100644 +--- a/deepin-wm-dbus/CMakeLists.txt ++++ b/deepin-wm-dbus/CMakeLists.txt +@@ -3,6 +3,7 @@ set(TARGET_NAME "deepin-wm-dbus") + + find_package(Qt5Core REQUIRED) + find_package(Qt5DBus REQUIRED) ++find_package(X11 REQUIRED) + find_package(KF5Config REQUIRED) + find_package(KF5WindowSystem REQUIRED) + find_package(KF5GlobalAccel REQUIRED) +diff --git a/plugins/kdecoration/CMakeLists.txt b/plugins/kdecoration/CMakeLists.txt +index 0a34ea25d..60196cf37 100644 +--- a/plugins/kdecoration/CMakeLists.txt ++++ b/plugins/kdecoration/CMakeLists.txt +@@ -5,6 +5,7 @@ add_definitions(-DTARGET_NAME=\\"${TARGET_NAME}\\") + find_package(Qt5 CONFIG REQUIRED COMPONENTS Core) + find_package(KF5CoreAddons REQUIRED) + find_package(Qt5DBus REQUIRED) ++find_package(X11 REQUIRED) + find_package(KF5Config REQUIRED) + find_package(KF5WindowSystem REQUIRED) + find_package(KDecoration2 REQUIRED) +diff --git a/plugins/kdecoration/chameleon.cpp b/plugins/kdecoration/chameleon.cpp +index 6896edbde..289b9c3cc 100644 +--- a/plugins/kdecoration/chameleon.cpp ++++ b/plugins/kdecoration/chameleon.cpp +@@ -80,6 +80,7 @@ void Chameleon::init() + updateTheme(); + + if (!QX11Info::isPlatformX11() && m_client) { ++#ifdef USE_DEEPIN_WAYLAND + m_ddeShellSurface = static_cast<KWayland::Server::DDEShellSurfaceInterface*>(KWinUtils::getDDEShellSurface(m_client)); + if (m_ddeShellSurface) { + connect(m_ddeShellSurface, &KWayland::Server::DDEShellSurfaceInterface::noTitleBarPropertyRequested, this, +@@ -102,6 +103,7 @@ void Chameleon::init() + } + ); + } ++#endif + } + + connect(global_config, &ChameleonConfig::themeChanged, this, &Chameleon::updateTheme); +diff --git a/plugins/kdecoration/chameleon.h b/plugins/kdecoration/chameleon.h +index 6bfde0b16..4eed1e543 100644 +--- a/plugins/kdecoration/chameleon.h ++++ b/plugins/kdecoration/chameleon.h +@@ -33,7 +33,11 @@ + #include <QSettings> + #include <QScreen> + #include <QPainterPath> ++#include <QFont> ++ ++#ifdef USE_DEEPIN_WAYLAND + #include <KWayland/Server/ddeshell_interface.h> ++#endif + + class Settings; + class ChameleonWindowTheme; +@@ -124,7 +128,10 @@ private: + + QPointer<KWin::EffectWindow> m_effect; + QFont m_font; ++ ++#ifdef USE_DEEPIN_WAYLAND + KWayland::Server::DDEShellSurfaceInterface * m_ddeShellSurface = nullptr; ++#endif + }; + + #endif // CHAMELEON_H +diff --git a/plugins/kdecoration/chameleonconfig.cpp b/plugins/kdecoration/chameleonconfig.cpp +index 8b6a03b8e..3a12e93a1 100644 +--- a/plugins/kdecoration/chameleonconfig.cpp ++++ b/plugins/kdecoration/chameleonconfig.cpp +@@ -141,7 +141,7 @@ void ChameleonConfig::onConfigChanged() + } + + #define D_KWIN_DEBUG_APP_START_TIME "D_KWIN_DEBUG_APP_START_TIME" +-void ChameleonConfig::onClientAdded(KWin::Client *client) ++void ChameleonConfig::onClientAdded(KWin::AbstractClient *client) + { + QObject *c = reinterpret_cast<QObject*>(client); + +@@ -905,7 +905,7 @@ void ChameleonConfig::init() + { + #ifndef DISBLE_DDE_KWIN_XCB + connect(KWinUtils::workspace(), SIGNAL(configChanged()), this, SLOT(onConfigChanged())); +- connect(KWinUtils::workspace(), SIGNAL(clientAdded(KWin::Client*)), this, SLOT(onClientAdded(KWin::Client*))); ++ connect(KWinUtils::workspace(), SIGNAL(clientAdded(KWin::AbstractClient*)), this, SLOT(onClientAdded(KWin::AbstractClient*))); + connect(KWinUtils::workspace(), SIGNAL(unmanagedAdded(KWin::Unmanaged*)), this, SLOT(onUnmanagedAdded(KWin::Unmanaged*))); + connect(KWinUtils::compositor(), SIGNAL(compositingToggled(bool)), this, SLOT(onCompositingToggled(bool))); + connect(KWinUtils::instance(), &KWinUtils::windowPropertyChanged, this, &ChameleonConfig::onWindowPropertyChanged); +@@ -1225,7 +1225,11 @@ void ChameleonConfig::buildKWinX11Shadow(QObject *window) + effect = window->findChild<KWin::EffectWindow*>(QString(), Qt::FindDirectChildrenOnly); + + if (effect) { +- QRect shape_rect = effect->shape().boundingRect(); ++#if !defined(KWIN_VERSION) || KWIN_VERSION < KWIN_VERSION_CHECK(5, 23, 4, 0) ++ QRect shape_rect = effect->geometry(); ++#else ++ QRect shape_rect = effect->clientGeometry(); ++#endif + const QRect window_rect(QPoint(0, 0), window->property("size").toSize()); + + // 减去窗口的shape区域 +diff --git a/plugins/kdecoration/chameleonconfig.h b/plugins/kdecoration/chameleonconfig.h +index b9408267e..be5a48b9a 100644 +--- a/plugins/kdecoration/chameleonconfig.h ++++ b/plugins/kdecoration/chameleonconfig.h +@@ -38,7 +38,7 @@ + #define _NET_WM_WINDOW_TYPE "_NET_WM_WINDOW_TYPE" + + namespace KWin { +-class Client; ++class AbstractClient; + class Unmanaged; + class EffectWindow; + class Toplevel; +@@ -93,7 +93,7 @@ protected: + + private slots: + void onConfigChanged(); +- void onClientAdded(KWin::Client *client); ++ void onClientAdded(KWin::AbstractClient *client); + // 针对X11BypassWindowManagerHint类型的窗口需要做一些特殊处理 + void onUnmanagedAdded(KWin::Unmanaged *client); + void onCompositingToggled(bool active); +diff --git a/plugins/kwineffects/CMakeLists.txt b/plugins/kwineffects/CMakeLists.txt +index 9832df92a..5a6036896 100644 +--- a/plugins/kwineffects/CMakeLists.txt ++++ b/plugins/kwineffects/CMakeLists.txt +@@ -1,10 +1,22 @@ + find_package(Qt5 CONFIG REQUIRED COMPONENTS Core Gui) ++find_package(X11 REQUIRED) + find_package(KF5CoreAddons REQUIRED) + find_package(KF5WindowSystem REQUIRED) + + set(INSTALL_PATH "${QT_INSTALL_PLUGINS}/kwin/effects/plugins") + +-add_subdirectory(scissor-window) +-add_subdirectory(blur) +-add_subdirectory(multitasking) +-add_subdirectory(black-screen) ++if (ENABLE_BUILTIN_SCISSOR_WINDOW) ++ add_subdirectory(scissor-window) ++endif() ++ ++if (ENABLE_BUILTIN_BLUR) ++ add_subdirectory(blur) ++endif() ++ ++if (ENABLE_BUILTIN_MULTITASKING) ++ add_subdirectory(multitasking) ++endif() ++ ++if (ENABLE_BUILTIN_BLACK_SCREEN) ++ add_subdirectory(black-screen) ++endif() +diff --git a/plugins/kwineffects/scissor-window/cornermask.frag.140 b/plugins/kwineffects/scissor-window/cornermask.frag +similarity index 100% +rename from plugins/kwineffects/scissor-window/cornermask.frag.140 +rename to plugins/kwineffects/scissor-window/cornermask.frag +diff --git a/plugins/kwineffects/scissor-window/cornermask.frag.110 b/plugins/kwineffects/scissor-window/cornermask_core.frag +similarity index 100% +rename from plugins/kwineffects/scissor-window/cornermask.frag.110 +rename to plugins/kwineffects/scissor-window/cornermask_core.frag +diff --git a/plugins/kwineffects/scissor-window/fullmask.frag.140 b/plugins/kwineffects/scissor-window/fullmask.frag +similarity index 100% +rename from plugins/kwineffects/scissor-window/fullmask.frag.140 +rename to plugins/kwineffects/scissor-window/fullmask.frag +diff --git a/plugins/kwineffects/scissor-window/fullmask.frag.110 b/plugins/kwineffects/scissor-window/fullmask_core.frag +similarity index 100% +rename from plugins/kwineffects/scissor-window/fullmask.frag.110 +rename to plugins/kwineffects/scissor-window/fullmask_core.frag +diff --git a/plugins/kwineffects/scissor-window/glsl.qrc b/plugins/kwineffects/scissor-window/glsl.qrc +index 8b2ecb6f3..2e6bc448d 100644 +--- a/plugins/kwineffects/scissor-window/glsl.qrc ++++ b/plugins/kwineffects/scissor-window/glsl.qrc +@@ -1,10 +1,16 @@ + <RCC> ++ <qresource prefix="/"> ++ <file>cornermask_core.frag</file> ++ <file>fullmask_core.frag</file> ++ <file>cornermask.frag</file> ++ <file>fullmask.frag</file> ++ </qresource> + <qresource prefix="/effect-shaders-1.10"> +- <file alias="corner-mask.frag">cornermask.frag.110</file> +- <file alias="full-mask.frag">fullmask.frag.110</file> ++ <file alias="cornermask.frag">cornermask_core.frag</file> ++ <file alias="fullmask.frag">fullmask_core.frag</file> + </qresource> + <qresource prefix="/effect-shaders-1.40"> +- <file alias="corner-mask.frag">cornermask.frag.140</file> +- <file alias="full-mask.frag">fullmask.frag.140</file> ++ <file alias="cornermask.frag">cornermask.frag</file> ++ <file alias="fullmask.frag">fullmask.frag</file> + </qresource> + </RCC> +diff --git a/plugins/kwineffects/scissor-window/main.cpp b/plugins/kwineffects/scissor-window/main.cpp +index 73544556c..8d9659e19 100644 +--- a/plugins/kwineffects/scissor-window/main.cpp ++++ b/plugins/kwineffects/scissor-window/main.cpp +@@ -23,19 +23,27 @@ + class ScissorWindowPluginFactory : public KWin::EffectPluginFactory + { + Q_OBJECT +- Q_INTERFACES(KPluginFactory) ++#if KWIN_VERSION_MAJ <= 5 && KWIN_VERSION_MIN < 23 + Q_PLUGIN_METADATA(IID KPluginFactory_iid FILE "scissor-window.json") +- ++#else ++ Q_PLUGIN_METADATA(IID EffectPluginFactory_iid FILE "scissor-window.json") ++#endif ++ Q_INTERFACES(KPluginFactory) + public: +- explicit ScissorWindowPluginFactory(); +- ~ScissorWindowPluginFactory(); ++ explicit ScissorWindowPluginFactory() {} ++ ~ScissorWindowPluginFactory() {} + +- KWin::Effect *createEffect() const { +- return ScissorWindow::supported() ? new ScissorWindow() : nullptr; ++ bool isSupported() const override { ++ return ScissorWindow::supported(); + } +-}; + +-K_PLUGIN_FACTORY_DEFINITION(ScissorWindowPluginFactory, registerPlugin<ScissorWindow>();) +-K_EXPORT_PLUGIN_VERSION(KWIN_EFFECT_API_VERSION) ++ bool enabledByDefault() const override { ++ return true; ++ } ++ ++ KWin::Effect *createEffect() const override { ++ return new ScissorWindow; ++ } ++}; + + #include "main.moc" +diff --git a/plugins/kwineffects/scissor-window/scissor-window.json b/plugins/kwineffects/scissor-window/scissor-window.json +index e2ebdc65d..56522ecd1 100644 +--- a/plugins/kwineffects/scissor-window/scissor-window.json ++++ b/plugins/kwineffects/scissor-window/scissor-window.json +@@ -4,6 +4,10 @@ + { + "Email": "zc...@live.com", + "Name": "zccrs" ++ }, ++ { ++ "Email": "l...@mkacg.com", ++ "Name": "justforlxz" + } + ], + "Description": "Allow clip of window content", +@@ -15,8 +19,15 @@ + "ServiceTypes": [ + "KWin/Effect" + ], +- "org.kde.kwin.effect": { +- "exclusiveGroup": "appearance" +- } +- } ++ "Category": "Appearance", ++ "License": "GPL", ++ "Version": "1.0" ++ }, ++ "org.kde.kwin.effect": { ++ "exclusiveGroup": "appearance", ++ "enabledByDefaultMethod": true ++ }, ++ "X-KDE-Ordering": "5", ++ "X-Plasma-API": "", ++ "X-Plasma-MainScript": "" + } +diff --git a/plugins/kwineffects/scissor-window/scissorwindow.cpp b/plugins/kwineffects/scissor-window/scissorwindow.cpp +index a80118421..4785c1f22 100644 +--- a/plugins/kwineffects/scissor-window/scissorwindow.cpp ++++ b/plugins/kwineffects/scissor-window/scissorwindow.cpp +@@ -19,10 +19,6 @@ + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + #include "scissorwindow.h" +-#ifndef DISBLE_DDE_KWIN_XCB +-#include "kwinutils.h" +-#endif +- + #include <kwinglutils.h> + #include <kwinglplatform.h> + #include <kwingltexture.h> +@@ -32,6 +28,7 @@ + #include <QExplicitlySharedDataPointer> + #include <QSignalBlocker> + #include <QPainterPath> ++#include <QScopedPointer> + + Q_DECLARE_METATYPE(QPainterPath) + +@@ -178,16 +175,24 @@ ScissorWindow::ScissorWindow(QObject *, const QVariantList &) + : Effect() + { + // 构建用于窗口圆角特效的着色器 +- m_shader = KWin::ShaderManager::instance()->generateShaderFromResources(KWin::ShaderTrait::MapTexture, QString(), "corner-mask.frag"); ++#if KWIN_VERSION_MAJ <= 5 && KWIN_VERSION_MIN < 23 ++ m_shader = KWin::ShaderManager::instance()->generateShaderFromResources(KWin::ShaderTrait::MapTexture, QString(), ":/cornermask.frag"); ++#else ++ m_shader = KWin::ShaderManager::instance()->generateShaderFromFile(KWin::ShaderTrait::MapTexture, QString(), ":/cornermask.frag"); ++#endif + // 构建用于自定义窗口形状的着色器 +- m_fullMaskShader = KWin::ShaderManager::instance()->generateShaderFromResources(KWin::ShaderTrait::MapTexture, QString(), "full-mask.frag"); ++#if KWIN_VERSION_MAJ <= 5 && KWIN_VERSION_MIN < 23 ++ m_fullMaskShader = KWin::ShaderManager::instance()->generateShaderFromResources(KWin::ShaderTrait::MapTexture, QString(), ":/fullmask.frag"); ++#else ++ m_fullMaskShader = KWin::ShaderManager::instance()->generateShaderFromFile(KWin::ShaderTrait::MapTexture, QString(), ":/fullmask.frag"); ++#endif + + if (!m_shader->isValid()) { +- // qWarning() << Q_FUNC_INFO << "Invalid fragment shader of corner mask"; ++ qWarning() << Q_FUNC_INFO << "Invalid fragment shader of corner mask"; + } + + if (!m_fullMaskShader->isValid()) { +- // qWarning() << Q_FUNC_INFO << "Invalid fragment shader of full mask"; ++ qWarning() << Q_FUNC_INFO << "Invalid fragment shader of full mask"; + } + } + +@@ -205,6 +210,10 @@ void ScissorWindow::drawWindow(KWin::EffectWindow *w, int mask, QRegion region, + return Effect::drawWindow(w, mask, region, data); + } + ++ if (KWin::effects->hasActiveFullScreenEffect() || w->isFullScreen()) { ++ return Effect::drawWindow(w, mask, region, data); ++ } ++ + MaskCache::TextureData mask_texture = MaskCache::instance()->getTextureByWindow(w); + + if (!mask_texture) { +@@ -214,7 +223,11 @@ void ScissorWindow::drawWindow(KWin::EffectWindow *w, int mask, QRegion region, + QRegion corner_region; + + if (!mask_texture->customMask) { ++#if KWIN_VERSION_MAJ <= 5 && KWIN_VERSION_MIN < 23 + const QRect window_rect = w->geometry(); ++#else ++ const QRect window_rect = w->frameGeometry(); ++#endif + QRect corner_rect(window_rect.topLeft(), mask_texture->size); + + // top left +@@ -241,6 +254,7 @@ void ScissorWindow::drawWindow(KWin::EffectWindow *w, int mask, QRegion region, + } + } + ++#if !defined(KWIN_VERSION) || KWIN_VERSION < KWIN_VERSION_CHECK(5, 23, 4, 0) + KWin::WindowQuadList decoration_quad_list; + KWin::WindowQuadList content_quad_list; + +@@ -257,20 +271,65 @@ void ScissorWindow::drawWindow(KWin::EffectWindow *w, int mask, QRegion region, + break; + } + } ++#endif + ++#ifndef DISBLE_DDE_KWIN_XCB ++ class SetWindowDepth { ++ public: ++ SetWindowDepth(KWin::EffectWindow *w, int depth) ++ : m_window(w) ++ { ++ // 此时正在进行窗口绘制,会有大量的调用,应当避免窗口发射hasAlphaChanged信号 ++ QSignalBlocker(w->parent()); ++ KWinUtils::setClientDepth(w->parent(), depth); ++ } ++ ++ ~SetWindowDepth() { ++ bool ok = false; ++ int depth = m_window->data(WindowDepthRole).toInt(&ok); ++ QObject *client = m_window->parent(); ++ ++ if (!ok) { ++ depth = KWinUtils::getWindowDepth(client); ++ // 保存以便下次使用 ++ m_window->setData(WindowDepthRole, depth); ++ } ++ ++ // 此时正在进行窗口绘制,会有大量的调用,应当避免窗口发射hasAlphaChanged信号 ++ QSignalBlocker blocker(client); ++ Q_UNUSED(blocker) ++ KWinUtils::setClientDepth(client, depth); ++ } ++ ++ private: ++ KWin::EffectWindow *m_window; ++ }; ++ ++ // 要想窗口裁剪生效,必须要保证窗口材质绘制时开启了alpha通道混合 ++ QScopedPointer<SetWindowDepth> setDepth; ++ if (!w->hasAlpha()) { ++ QScopedPointer<SetWindowDepth> alpha(new SetWindowDepth(w, 32)); ++ setDepth.swap(alpha); ++ } ++ #endif ++ ++#if !defined(KWIN_VERSION) || KWIN_VERSION < KWIN_VERSION_CHECK(5, 23, 4, 0) + if (!mask_texture->customMask) { + // 此时只允许绘制窗口边框和阴影 + // 针对设置了自定义裁剪的窗口,则不绘制标题栏和阴影 + data.quads = decoration_quad_list; + Effect::drawWindow(w, mask, region, data); + } ++#endif + + if (!corner_region.isEmpty()) { + QRegion new_region = region - corner_region; + + // 先绘制未处于mask区域的窗口材质 + if (!new_region.isEmpty()) { ++#if !defined(KWIN_VERSION) || KWIN_VERSION < KWIN_VERSION_CHECK(5, 23, 4, 0) + data.quads = content_quad_list; ++#endif + Effect::drawWindow(w, mask, new_region, data); + } + +@@ -278,6 +337,9 @@ void ScissorWindow::drawWindow(KWin::EffectWindow *w, int mask, QRegion region, + region = region - new_region; + } + ++ glEnable(GL_BLEND); ++ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); ++ + // 将mask材质绑定到第二个材质 + glActiveTexture(GL_TEXTURE1); + mask_texture->bind(); +@@ -303,52 +365,13 @@ void ScissorWindow::drawWindow(KWin::EffectWindow *w, int mask, QRegion region, + + // 此时只允许绘制窗口内容 + auto old_shader = data.shader; ++#if !defined(KWIN_VERSION) || KWIN_VERSION < KWIN_VERSION_CHECK(5, 23, 4, 0) + data.quads = content_quad_list; ++ data.quads = content_quad_list; ++#endif + data.shader = shader; + +-#ifndef DISBLE_DDE_KWIN_XCB +- class SetWindowDepth { +- public: +- SetWindowDepth(KWin::EffectWindow *w, int depth) +- : m_window(w) +- { +- // 此时正在进行窗口绘制,会有大量的调用,应当避免窗口发射hasAlphaChanged信号 +- QSignalBlocker blocker(w->parent()); +- Q_UNUSED(blocker) +- KWinUtils::setClientDepth(w->parent(), depth); +- } +- +- ~SetWindowDepth() { +- bool ok = false; +- int depth = m_window->data(WindowDepthRole).toInt(&ok); +- QObject *client = m_window->parent(); +- +- if (!ok) { +- depth = KWinUtils::getWindowDepth(client); +- // 保存以便下次使用 +- m_window->setData(WindowDepthRole, depth); +- } +- +- // 此时正在进行窗口绘制,会有大量的调用,应当避免窗口发射hasAlphaChanged信号 +- QSignalBlocker blocker(client); +- Q_UNUSED(blocker) +- KWinUtils::setClientDepth(client, depth); +- } +- +- private: +- KWin::EffectWindow *m_window; +- }; +- +- // 要想窗口裁剪生效,必须要保证窗口材质绘制时开启了alpha通道混合 +- if (!w->hasAlpha()) { +- SetWindowDepth set_depth(w, 32); +- Q_UNUSED(set_depth) +- Effect::drawWindow(w, mask, region, data); +- } else +-#endif +- { +- Effect::drawWindow(w, mask, region, data); +- } ++ Effect::drawWindow(w, mask, region, data); + + data.shader = old_shader; + +@@ -357,4 +380,6 @@ void ScissorWindow::drawWindow(KWin::EffectWindow *w, int mask, QRegion region, + glActiveTexture(GL_TEXTURE1); + mask_texture->unbind(); + glActiveTexture(GL_TEXTURE0); ++ ++ glDisable(GL_BLEND); + } +diff --git a/plugins/kwineffects/scissor-window/scissorwindow.h b/plugins/kwineffects/scissor-window/scissorwindow.h +index 6e12a1adc..a778a1d97 100644 +--- a/plugins/kwineffects/scissor-window/scissorwindow.h ++++ b/plugins/kwineffects/scissor-window/scissorwindow.h +@@ -23,6 +23,10 @@ + + #include <kwineffects.h> + ++#ifndef DISBLE_DDE_KWIN_XCB ++#include "kwinutils.h" ++#endif ++ + class ScissorWindow : public KWin::Effect + { + Q_OBJECT +diff --git a/plugins/platforms/lib/CMakeLists.txt b/plugins/platforms/lib/CMakeLists.txt +index 9dbf2474f..06379d0ab 100644 +--- a/plugins/platforms/lib/CMakeLists.txt ++++ b/plugins/platforms/lib/CMakeLists.txt +@@ -3,6 +3,7 @@ set(TARGET_NAME "kwin-xcb") + find_package(Qt5Core REQUIRED) + find_package(Qt5X11Extras REQUIRED) + find_package(Qt5Qml REQUIRED) ++find_package(X11 REQUIRED) + find_package(KF5Config REQUIRED) + find_package(KF5WindowSystem REQUIRED) + find_package(KF5CoreAddons REQUIRED) +diff --git a/plugins/platforms/lib/kwinutils.cpp b/plugins/platforms/lib/kwinutils.cpp +index df1b8ce6b..ee283a60e 100644 +--- a/plugins/platforms/lib/kwinutils.cpp ++++ b/plugins/platforms/lib/kwinutils.cpp +@@ -87,7 +87,11 @@ public: + public Q_SLOTS: + void slotWindowMove(); + void slotWindowMaximize(); +- bool compositing() const; ++#if !defined(KWIN_VERSION) || KWIN_VERSION < KWIN_VERSION_CHECK(5, 23, 4, 0) ++ // remove by c61085dc2e28cb7d737c9b049499b4433916b194 ++ // change to Compositor::compositing() ++ bool compositing() const; ++ #endif + void slotTouchPadTomoveWindow(int x, int y); + void slotEndTouchPadToMoveWindow(); + +@@ -139,14 +143,23 @@ class Compositor : public QObject + public: + enum SuspendReason { NoReasonSuspend = 0, UserSuspend = 1<<0, BlockRuleSuspend = 1<<1, ScriptSuspend = 1<<2, AllReasonSuspend = 0xff }; + static Compositor *s_compositor; ++ bool isActive(); + }; + + // 光标管理 ++#if defined(KWIN_VERSION) && KWIN_VERSION >= KWIN_VERSION_CHECK(5, 23, 4, 0) ++class Cursors : public QObject ++{ ++public: ++ static Cursors *s_self; ++}; ++#else + class Cursor : public QObject + { + public: + static Cursor *s_self; + }; ++#endif + + class AbstractClient : public QObject {}; + class Options { +@@ -613,7 +626,11 @@ QObject *KWinUtils::tabBox() + + QObject *KWinUtils::cursor() + { ++#if defined(KWIN_VERSION) && KWIN_VERSION >= KWIN_VERSION_CHECK(5, 23, 4, 0) ++ return KWin::Cursors::s_self; ++#else + return KWin::Cursor::s_self; ++#endif + } + + QObject *KWinUtils::virtualDesktop() +@@ -643,8 +660,8 @@ QObjectList KWinUtils::clientList() + return {}; + } + +- QList<KWin::Client*> clients; +- bool ok = QMetaObject::invokeMethod(jsWorkspaceWrapper, "clientList", Q_RETURN_ARG(QList<KWin::Client*>, clients)); ++ QList<KWin::AbstractClient*> clients; ++ bool ok = QMetaObject::invokeMethod(jsWorkspaceWrapper, "clientList", Q_RETURN_ARG(QList<KWin::AbstractClient*>, clients)); + + if (!ok) { + return {}; +@@ -652,7 +669,7 @@ QObjectList KWinUtils::clientList() + + QObjectList list; + +- for (KWin::Client *c : clients) { ++ for (KWin::AbstractClient *c : clients) { + list << c; + } + +@@ -1057,12 +1074,19 @@ void KWinUtils::removeWindowPropertyMonitor(quint32 property_atom) + + bool KWinUtils::isCompositing() + { ++ #if defined(KWIN_VERSION) && KWIN_VERSION >= KWIN_VERSION_CHECK(5, 23, 4, 0) ++ if (KWin::Compositor::s_compositor) { ++ return KWin::Compositor::s_compositor->isActive(); ++ } ++ #else + KWin::Workspace *ws = static_cast<KWin::Workspace *>(workspace()); + if (ws) { + return ws->compositing(); + } else { + return compositorIsActive(); + } ++#endif ++ return compositorIsActive(); + } + + bool KWinUtils::buildNativeSettings(QObject *baseObject, quint32 windowID) +diff --git a/plugins/platforms/plugin/libkwinpreload.cpp b/plugins/platforms/plugin/libkwinpreload.cpp +index 55b509e4b..c8814bd8d 100644 +--- a/plugins/platforms/plugin/libkwinpreload.cpp ++++ b/plugins/platforms/plugin/libkwinpreload.cpp +@@ -279,9 +279,11 @@ void RuleBook::save() + + namespace BuiltInEffects { + bool supported(BuiltInEffect effect) { ++#ifdef ENABLE_BUILTIN_BLUR + if (effect == BuiltInEffect::Blur) { + return false; + } ++#endif + + typedef bool (*ClientBuiltInEffect)(KWin::BuiltInEffect); + ClientBuiltInEffect clientBuildInEffect = (ClientBuiltInEffect)QLibrary::resolve("kwin", qApp->applicationVersion(), "_ZN4KWin14BuiltInEffects9supportedENS_13BuiltInEffectE"); Copied: deepin-kwin/repos/community-x86_64/deepin-kwin-added-functions-from-their-forked-kwin.patch (from rev 1187285, deepin-kwin/trunk/deepin-kwin-added-functions-from-their-forked-kwin.patch) =================================================================== --- deepin-kwin-added-functions-from-their-forked-kwin.patch (rev 0) +++ deepin-kwin-added-functions-from-their-forked-kwin.patch 2022-04-21 23:48:00 UTC (rev 1187286) @@ -0,0 +1,133 @@ +From 23a92e4839509ee3ef8886618ce1ee4cfbec3427 Mon Sep 17 00:00:00 2001 +From: wangxinbo <wangxi...@uniontech.com> +Date: Tue, 11 Aug 2020 14:19:26 +0800 +Subject: [PATCH] feat: add touch pad double click with three fingers to move + active client + +pms task id 30501 +--- + deepin-wm-dbus/com.deepin.wm.xml.in | 6 ++++++ + deepin-wm-dbus/deepinwmfaker.cpp | 10 ++++++++++ + deepin-wm-dbus/deepinwmfaker.h | 3 +++ + plugins/platforms/lib/kwinutils.cpp | 18 ++++++++++++++++++ + plugins/platforms/lib/kwinutils.h | 2 ++ + .../plugin/org.kde.kwin.KWinUtils.xml | 6 ++++++ + 6 files changed, 45 insertions(+) + +diff --git a/deepin-wm-dbus/com.deepin.wm.xml.in b/deepin-wm-dbus/com.deepin.wm.xml.in +index 8a45365..ff4629a 100644 +--- a/deepin-wm-dbus/com.deepin.wm.xml.in ++++ b/deepin-wm-dbus/com.deepin.wm.xml.in +@@ -184,4 +184,10 @@ + <method name="GetCurrentDesktopStatus"> + <arg type="b" name="isDesktop" direction="out"/> + </method> ++ <method name="TouchToMove"> ++ <arg type="i" name="x" direction="in"/> ++ <arg type="i" name="y" direction="in"/> ++ </method> ++ <method name="ClearMoveStatus"> ++ </method> + </interface> +diff --git a/deepin-wm-dbus/deepinwmfaker.cpp b/deepin-wm-dbus/deepinwmfaker.cpp +index 453280d..2f3f48a 100644 +--- a/deepin-wm-dbus/deepinwmfaker.cpp ++++ b/deepin-wm-dbus/deepinwmfaker.cpp +@@ -681,6 +681,20 @@ void DeepinWMFaker::BeginToMoveActiveWindow() + m_kwinUtilsInter->WindowMove(); + } + ++void DeepinWMFaker::TouchToMove(int x, int y) ++{ ++#ifndef DISABLE_DEEPIN_WM ++ m_kwinUtilsInter->TouchPadToMoveWindow(x,y); ++#endif ++} ++ ++void DeepinWMFaker::ClearMoveStatus() ++{ ++#ifndef DISABLE_DEEPIN_WM ++ m_kwinUtilsInter->EndTouchPadToMoveWindow(); ++#endif ++} ++ + void DeepinWMFaker::SwitchApplication(bool backward) + { + if (!m_kwinUtilsInter->isValid()) { +diff --git a/deepin-wm-dbus/deepinwmfaker.h b/deepin-wm-dbus/deepinwmfaker.h +index 9ee73ab..ae6374a 100644 +--- a/deepin-wm-dbus/deepinwmfaker.h ++++ b/deepin-wm-dbus/deepinwmfaker.h +@@ -136,6 +136,8 @@ public Q_SLOTS: + bool GetIsShowDesktop(); + void SetShowDesktop(bool isShowDesktop); + ++ void TouchToMove(int x, int y); ++ void ClearMoveStatus(); + Q_SIGNALS: + void WorkspaceBackgroundChanged(int index, const QString &newUri); + void WorkspaceBackgroundChangedForMonitor(int index, const QString &strMonitorName, const QString &newUri); +diff --git a/plugins/platforms/lib/kwinutils.cpp b/plugins/platforms/lib/kwinutils.cpp +index 8bf9e27..0be9682 100644 +--- a/plugins/platforms/lib/kwinutils.cpp ++++ b/plugins/platforms/lib/kwinutils.cpp +@@ -88,6 +88,8 @@ public Q_SLOTS: + // change to Compositor::compositing() + bool compositing() const; + #endif ++ void slotTouchPadTomoveWindow(int x, int y); ++ void slotEndTouchPadToMoveWindow(); + + #if !defined(KWIN_VERSION) || KWIN_VERSION < KWIN_VERSION_CHECK(5, 10, 95, 0) + // kwin < 5.10.95 +@@ -1082,6 +1084,22 @@ void KWinUtils::WindowMove() + } + } + ++void KWinUtils::TouchPadToMoveWindow(int x, int y) ++{ ++ KWin::Workspace *ws = static_cast<KWin::Workspace *>(workspace()); ++ if (ws) { ++ ws->slotTouchPadTomoveWindow(x,y); ++ } ++} ++ ++void KWinUtils::EndTouchPadToMoveWindow() ++{ ++ KWin::Workspace *ws = static_cast<KWin::Workspace *>(workspace()); ++ if (ws) { ++ ws->slotEndTouchPadToMoveWindow(); ++ } ++} ++ + void KWinUtils::WindowMaximize() + { + KWin::Workspace *ws = static_cast<KWin::Workspace *>(workspace()); +diff --git a/plugins/platforms/lib/kwinutils.h b/plugins/platforms/lib/kwinutils.h +index 57edb86..2c75875 100644 +--- a/plugins/platforms/lib/kwinutils.h ++++ b/plugins/platforms/lib/kwinutils.h +@@ -156,6 +156,8 @@ public Q_SLOTS: + void ShowWindowsView(); + void ResumeCompositor(int type); + void SuspendCompositor(int type); ++ void TouchPadToMoveWindow(int x, int y); ++ void EndTouchPadToMoveWindow(); + + Q_SIGNALS: + void initialized(); +diff --git a/plugins/platforms/plugin/org.kde.kwin.KWinUtils.xml b/plugins/platforms/plugin/org.kde.kwin.KWinUtils.xml +index aa61b6c..5854ed0 100644 +--- a/plugins/platforms/plugin/org.kde.kwin.KWinUtils.xml ++++ b/plugins/platforms/plugin/org.kde.kwin.KWinUtils.xml +@@ -22,4 +22,10 @@ + <method name="SuspendCompositor"> + <arg type="i" name="type" direction="in"/> + </method> ++ <method name="TouchPadToMoveWindow"> ++ <arg type="i" name="x" direction="in"/> ++ <arg type="i" name="y" direction="in"/> ++ </method> ++ <method name="EndTouchPadToMoveWindow"> ++ </method> + </interface> Deleted: deepin-kwin-tabbox-chameleon-rename.patch =================================================================== --- deepin-kwin-tabbox-chameleon-rename.patch 2022-04-21 23:47:44 UTC (rev 1187285) +++ deepin-kwin-tabbox-chameleon-rename.patch 2022-04-21 23:48:00 UTC (rev 1187286) @@ -1,59 +0,0 @@ -commit 30f09148b0c1ab4843d6a146a26c99a8945a4346 -Author: Felix Yan <felixonm...@archlinux.org> -Date: Wed Feb 26 18:36:20 2020 +0800 - - Rename thumbnail_grid to avoid conflict with new kdeplasma-addons - -diff --git a/configures/kwinrc.in b/configures/kwinrc.in -index 9551f40ce..d5493c285 100644 ---- a/configures/kwinrc.in -+++ b/configures/kwinrc.in -@@ -40,7 +40,7 @@ ActivitiesMode=1 - ApplicationsMode=0 - DesktopMode=1 - HighlightWindows=true --LayoutName=thumbnail_grid -+LayoutName=chameleon - MinimizedMode=0 - MultiScreenMode=0 - ShowDesktopMode=1 -diff --git a/tabbox/CMakeLists.txt b/tabbox/CMakeLists.txt -index af1c0d929..d377f3056 100644 ---- a/tabbox/CMakeLists.txt -+++ b/tabbox/CMakeLists.txt -@@ -1,6 +1,6 @@ - install( - DIRECTORY -- thumbnail_grid -+ chameleon - DESTINATION - ${CMAKE_INSTALL_PREFIX}/share/kwin/tabbox - ) -diff --git a/tabbox/thumbnail_grid/contents/ui/main.qml b/tabbox/chameleon/contents/ui/main.qml -similarity index 100% -rename from tabbox/thumbnail_grid/contents/ui/main.qml -rename to tabbox/chameleon/contents/ui/main.qml -diff --git a/tabbox/thumbnail_grid/metadata.desktop b/tabbox/chameleon/metadata.desktop -similarity index 71% -rename from tabbox/thumbnail_grid/metadata.desktop -rename to tabbox/chameleon/metadata.desktop -index 7114afe0b..97ae44aa3 100755 ---- a/tabbox/thumbnail_grid/metadata.desktop -+++ b/tabbox/chameleon/metadata.desktop -@@ -1,5 +1,5 @@ - [Desktop Entry] --Name=Thumbnail Grid -+Name=Chameleon - Comment= - - Type=Service -@@ -11,7 +11,7 @@ X-Plasma-MainScript=ui/main.qml - Icon=preferences-system-windows-switcher-big-icons - X-KDE-PluginInfo-Author=Chris Holland - X-KDE-PluginInfo-Email=zrenf...@gmail.com --X-KDE-PluginInfo-Name=thumbnail_grid -+X-KDE-PluginInfo-Name=chameleon - X-KDE-PluginInfo-Version=4 --X-KDE-PluginInfo-Website=https://github.com/Zren/kwin-tabbox-thumbnail_grid -+X-KDE-PluginInfo-Website=https://github.com/linuxdeepin/dde-kwin - X-KDE-PluginInfo-Depends= Copied: deepin-kwin/repos/community-x86_64/deepin-kwin-tabbox-chameleon-rename.patch (from rev 1187285, deepin-kwin/trunk/deepin-kwin-tabbox-chameleon-rename.patch) =================================================================== --- deepin-kwin-tabbox-chameleon-rename.patch (rev 0) +++ deepin-kwin-tabbox-chameleon-rename.patch 2022-04-21 23:48:00 UTC (rev 1187286) @@ -0,0 +1,59 @@ +commit 30f09148b0c1ab4843d6a146a26c99a8945a4346 +Author: Felix Yan <felixonm...@archlinux.org> +Date: Wed Feb 26 18:36:20 2020 +0800 + + Rename thumbnail_grid to avoid conflict with new kdeplasma-addons + +diff --git a/configures/kwinrc.in b/configures/kwinrc.in +index 9551f40ce..d5493c285 100644 +--- a/configures/kwinrc.in ++++ b/configures/kwinrc.in +@@ -40,7 +40,7 @@ ActivitiesMode=1 + ApplicationsMode=0 + DesktopMode=1 + HighlightWindows=true +-LayoutName=thumbnail_grid ++LayoutName=chameleon + MinimizedMode=0 + MultiScreenMode=0 + ShowDesktopMode=1 +diff --git a/tabbox/CMakeLists.txt b/tabbox/CMakeLists.txt +index af1c0d929..d377f3056 100644 +--- a/tabbox/CMakeLists.txt ++++ b/tabbox/CMakeLists.txt +@@ -1,6 +1,6 @@ + install( + DIRECTORY +- thumbnail_grid ++ chameleon + DESTINATION + ${CMAKE_INSTALL_PREFIX}/share/kwin/tabbox + ) +diff --git a/tabbox/thumbnail_grid/contents/ui/main.qml b/tabbox/chameleon/contents/ui/main.qml +similarity index 100% +rename from tabbox/thumbnail_grid/contents/ui/main.qml +rename to tabbox/chameleon/contents/ui/main.qml +diff --git a/tabbox/thumbnail_grid/metadata.desktop b/tabbox/chameleon/metadata.desktop +similarity index 71% +rename from tabbox/thumbnail_grid/metadata.desktop +rename to tabbox/chameleon/metadata.desktop +index 7114afe0b..97ae44aa3 100755 +--- a/tabbox/thumbnail_grid/metadata.desktop ++++ b/tabbox/chameleon/metadata.desktop +@@ -1,5 +1,5 @@ + [Desktop Entry] +-Name=Thumbnail Grid ++Name=Chameleon + Comment= + + Type=Service +@@ -11,7 +11,7 @@ X-Plasma-MainScript=ui/main.qml + Icon=preferences-system-windows-switcher-big-icons + X-KDE-PluginInfo-Author=Chris Holland + X-KDE-PluginInfo-Email=zrenf...@gmail.com +-X-KDE-PluginInfo-Name=thumbnail_grid ++X-KDE-PluginInfo-Name=chameleon + X-KDE-PluginInfo-Version=4 +-X-KDE-PluginInfo-Website=https://github.com/Zren/kwin-tabbox-thumbnail_grid ++X-KDE-PluginInfo-Website=https://github.com/linuxdeepin/dde-kwin + X-KDE-PluginInfo-Depends=