[arch-commits] Commit in deepin-kwin/repos/community-x86_64 (7 files)

Felix Yan felixonmars at gemini.archlinux.org
Thu Apr 21 23:48:00 UTC 2022


    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 <felixonmars at 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 <felixonmars at 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": "zccrs at live.com",
-                 "Name": "zccrs"
-+            },
-+            {
-+                "Email": "lxz at 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 <justforlxz at 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": "zccrs at live.com",
+                 "Name": "zccrs"
++            },
++            {
++                "Email": "lxz at 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 <wangxinbo at 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 <felixonmars at 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=zrenfire at 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 <felixonmars at 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=zrenfire at 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=



More information about the arch-commits mailing list