diff -Nru kwin-5.24.4/debian/changelog kwin-5.24.4/debian/changelog
--- kwin-5.24.4/debian/changelog	2024-11-18 16:10:17.000000000 +0800
+++ kwin-5.24.4/debian/changelog	2025-02-19 11:19:22.000000000 +0800
@@ -1,3 +1,10 @@
+kwin (4:5.24.4-ok10.1) nile; urgency=medium
+
+  * allow repeated creation of ukui_surface  for the same wl_surface
+  * ignore right button click event on user action menu
+
+ -- Jie Liu <liujie01@kylinos.cn>  Wed, 19 Feb 2025 11:19:22 +0800
+
 kwin (4:5.24.4-ok10~1118) nile; urgency=medium
 
   * x11client: x11client: enable NET_RESIZE for dock window
diff -Nru kwin-5.24.4/debian/patches/0203-update-changelog-4-5.24.4-ok10.1.patch kwin-5.24.4/debian/patches/0203-update-changelog-4-5.24.4-ok10.1.patch
--- kwin-5.24.4/debian/patches/0203-update-changelog-4-5.24.4-ok10.1.patch	1970-01-01 08:00:00.000000000 +0800
+++ kwin-5.24.4/debian/patches/0203-update-changelog-4-5.24.4-ok10.1.patch	2025-02-19 11:19:22.000000000 +0800
@@ -0,0 +1,216 @@
+From: Jie Liu <liujie01@kylinos.cn>
+Date: Wed, 19 Feb 2025 11:20:37 +0800
+Subject: update changelog: 4:5.24.4-ok10.1
+
+---
+ src/useractions.cpp                 | 56 ++++++++++++++++++++++++++-----------
+ src/useractions.h                   | 24 ++++++++++++----
+ src/wayland/ukuishell_interface.cpp |  8 +++---
+ 3 files changed, 62 insertions(+), 26 deletions(-)
+
+diff --git a/src/useractions.cpp b/src/useractions.cpp
+index 9ac03ef..fac6345 100644
+--- a/src/useractions.cpp
++++ b/src/useractions.cpp
+@@ -45,14 +45,14 @@
+ 
+ #include <QAction>
+ #include <QCheckBox>
++#include <QFile>
++#include <QMouseEvent>
+ #include <QPushButton>
+ #include <QtConcurrentRun>
+-#include <QFile>
+ 
+ #include <KGlobalAccel>
+ #include <KLocalizedString>
+ #include <QAction>
+-#include <QMenu>
+ #include <QRegularExpression>
+ #include <kauthorized.h>
+ #include <kconfig.h>
+@@ -65,6 +65,30 @@
+ namespace KWin
+ {
+ 
++void CustomMenu::mousePressEvent(QMouseEvent *event)
++{
++    if (event->button() != Qt::LeftButton) {
++        event->accept();
++        if (!rect().contains(event->pos())) {
++            close();
++        }
++    } else {
++        QMenu::mousePressEvent(event);
++    }
++}
++
++void CustomMenu::mouseReleaseEvent(QMouseEvent *event)
++{
++    if (event->button() != Qt::LeftButton) {
++        event->accept();
++        if (!rect().contains(event->pos())) {
++            close();
++        }
++    } else {
++        QMenu::mouseReleaseEvent(event);
++    }
++}
++
+ UserActionsMenu::UserActionsMenu(QObject *parent)
+     : QObject(parent)
+     , m_menu(nullptr)
+@@ -217,11 +241,11 @@ void UserActionsMenu::init()
+     if (m_menu) {
+         return;
+     }
+-    m_menu = new QMenu;
+-    connect(m_menu, &QMenu::aboutToShow, this, &UserActionsMenu::menuAboutToShow);
+-    connect(m_menu, &QMenu::triggered, this, &UserActionsMenu::slotWindowOperation, Qt::QueuedConnection);
++    m_menu = new CustomMenu;
++    connect(m_menu, &CustomMenu::aboutToShow, this, &UserActionsMenu::menuAboutToShow);
++    connect(m_menu, &CustomMenu::triggered, this, &UserActionsMenu::slotWindowOperation, Qt::QueuedConnection);
+ 
+-    QMenu *advancedMenu = new QMenu(m_menu);
++    CustomMenu *advancedMenu = new CustomMenu(m_menu);
+ 
+     auto setShortcut = [](QAction *action, const QString &actionName) {
+         const auto shortcuts = KGlobalAccel::self()->shortcut(Workspace::self()->findChild<QAction *>(actionName));
+@@ -390,7 +414,7 @@ void UserActionsMenu::menuAboutToShow()
+     // ask scripts whether they want to add entries for the given Client
+     QList<QAction *> scriptActions = Scripting::self()->actionsForUserActionMenu(m_client.data(), m_scriptsMenu);
+     if (!scriptActions.isEmpty()) {
+-        m_scriptsMenu = new QMenu(m_menu);
++        m_scriptsMenu = new CustomMenu(m_menu);
+         m_scriptsMenu->addActions(scriptActions);
+ 
+         QAction *action = m_scriptsMenu->menuAction();
+@@ -429,8 +453,8 @@ void UserActionsMenu::initDesktopPopup()
+             return;
+         }
+ 
+-        m_multipleDesktopsMenu = new QMenu(m_menu);
+-        connect(m_multipleDesktopsMenu, &QMenu::aboutToShow, this, &UserActionsMenu::multipleDesktopsPopupAboutToShow);
++        m_multipleDesktopsMenu = new CustomMenu(m_menu);
++        connect(m_multipleDesktopsMenu, &CustomMenu::aboutToShow, this, &UserActionsMenu::multipleDesktopsPopupAboutToShow);
+ 
+         QAction *action = m_multipleDesktopsMenu->menuAction();
+         // set it as the first item
+@@ -442,8 +466,8 @@ void UserActionsMenu::initDesktopPopup()
+         if (m_desktopMenu)
+             return;
+ 
+-        m_desktopMenu = new QMenu(m_menu);
+-        connect(m_desktopMenu, &QMenu::aboutToShow, this, &UserActionsMenu::desktopPopupAboutToShow);
++        m_desktopMenu = new CustomMenu(m_menu);
++        connect(m_desktopMenu, &CustomMenu::aboutToShow, this, &UserActionsMenu::desktopPopupAboutToShow);
+ 
+         QAction *action = m_desktopMenu->menuAction();
+         // set it as the first item
+@@ -459,8 +483,8 @@ void UserActionsMenu::initScreenPopup()
+         return;
+     }
+ 
+-    m_screenMenu = new QMenu(m_menu);
+-    connect(m_screenMenu, &QMenu::aboutToShow, this, &UserActionsMenu::screenPopupAboutToShow);
++    m_screenMenu = new CustomMenu(m_menu);
++    connect(m_screenMenu, &CustomMenu::aboutToShow, this, &UserActionsMenu::screenPopupAboutToShow);
+ 
+     QAction *action = m_screenMenu->menuAction();
+     // set it as the first item after desktop
+@@ -474,9 +498,9 @@ void UserActionsMenu::initActivityPopup()
+     if (m_activityMenu)
+         return;
+ 
+-    m_activityMenu = new QMenu(m_menu);
+-    connect(m_activityMenu, &QMenu::triggered, this, &UserActionsMenu::slotToggleOnActivity);
+-    connect(m_activityMenu, &QMenu::aboutToShow, this, &UserActionsMenu::activityPopupAboutToShow);
++    m_activityMenu = new CustomMenu(m_menu);
++    connect(m_activityMenu, &CustomMenu::triggered, this, &UserActionsMenu::slotToggleOnActivity);
++    connect(m_activityMenu, &CustomMenu::aboutToShow, this, &UserActionsMenu::activityPopupAboutToShow);
+ 
+     QAction *action = m_activityMenu->menuAction();
+     // set it as the first item
+diff --git a/src/useractions.h b/src/useractions.h
+index 97d54a3..f16d94b 100644
+--- a/src/useractions.h
++++ b/src/useractions.h
+@@ -14,6 +14,7 @@
+ 
+ // Qt
+ #include <QDialog>
++#include <QMenu>
+ #include <QObject>
+ #include <QPointer>
+ 
+@@ -24,6 +25,17 @@ namespace KWin
+ {
+ class AbstractClient;
+ 
++class KWIN_EXPORT CustomMenu : public QMenu
++{
++    Q_OBJECT
++public:
++    using QMenu::QMenu;
++
++protected:
++    void mousePressEvent(QMouseEvent *event) override;
++    void mouseReleaseEvent(QMouseEvent *event) override;
++};
++
+ /**
+  * @brief Menu shown for a Client.
+  *
+@@ -170,27 +182,27 @@ private:
+     /**
+      * The actual main context menu which is show when the UserActionsMenu is invoked.
+      */
+-    QMenu *m_menu;
++    CustomMenu *m_menu;
+     /**
+      * The move to desktop sub menu.
+      */
+-    QMenu *m_desktopMenu;
++    CustomMenu *m_desktopMenu;
+     /**
+      * The move to desktop sub menu, with the Wayland protocol.
+      */
+-    QMenu *m_multipleDesktopsMenu;
++    CustomMenu *m_multipleDesktopsMenu;
+     /**
+      * The move to screen sub menu.
+      */
+-    QMenu *m_screenMenu;
++    CustomMenu *m_screenMenu;
+     /**
+      * The activities sub menu.
+      */
+-    QMenu *m_activityMenu;
++    CustomMenu *m_activityMenu;
+     /**
+      * Menu for further entries added by scripts.
+      */
+-    QMenu *m_scriptsMenu;
++    CustomMenu *m_scriptsMenu;
+     QAction *m_resizeOperation;
+     QAction *m_moveOperation;
+     QAction *m_maximizeOperation;
+diff --git a/src/wayland/ukuishell_interface.cpp b/src/wayland/ukuishell_interface.cpp
+index ecab6ad..8236fcd 100644
+--- a/src/wayland/ukuishell_interface.cpp
++++ b/src/wayland/ukuishell_interface.cpp
+@@ -128,10 +128,10 @@ void UkuiShellInterfacePrivate::ukui_shell_create_surface(QtWaylandServer::ukui_
+         return;
+     }
+ 
+-    if (UkuiSurfaceInterface::get(surface)) {
+-        wl_resource_post_error(resource->handle, 0, "ukui_surface already exists");
+-        return;
+-    }
++    // if (UkuiSurfaceInterface::get(surface)) {
++        // wl_resource_post_error(resource->handle, 0, "ukui_surface already exists");
++    //     return;
++    // }
+ 
+     wl_resource *ukuiSurfaceResource = wl_resource_create(resource->client(), &ukui_surface_interface, resource->version(), id);
+ 
diff -Nru kwin-5.24.4/debian/patches/series kwin-5.24.4/debian/patches/series
--- kwin-5.24.4/debian/patches/series	2024-11-18 16:10:17.000000000 +0800
+++ kwin-5.24.4/debian/patches/series	2025-02-19 11:19:22.000000000 +0800
@@ -200,3 +200,4 @@
 0200-Add-get-modify-block-reset-shortcut-interface.patch
 0201-Add-new-rule-Unlimited-window-size.patch
 0202-update-changlog-4-5.24.4-ok10-1118.patch
+0203-update-changelog-4-5.24.4-ok10.1.patch