From 5f02e1d7746590ebf32f9f9c5a6bf1c65570c460 Mon Sep 17 00:00:00 2001 From: zhangyuanyuan1 Date: Tue, 3 Feb 2026 15:53:30 +0800 Subject: [PATCH 1/2] feat(windowsview): add right-click menu for VirtualDesktopWindow(story#66123) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 任务视图工作区添加右键菜单:重命名、向右移动、向左移动、删除 Task: #593865 Req: yes From: kylin Severity: Moderate Changelog-Story: #66123 【多任务视图】工作区增加右键菜单 --- windowsview/qml/VirtualDesktopWindow.qml | 33 +++++++++++++--- windowsview/windowmanagerinterface.cpp | 49 ++++++++++++++++++++++++ windowsview/windowmanagerinterface.h | 9 +++++ 3 files changed, 86 insertions(+), 5 deletions(-) diff --git a/windowsview/qml/VirtualDesktopWindow.qml b/windowsview/qml/VirtualDesktopWindow.qml index 068b30bc2..2bdd9c9b4 100644 --- a/windowsview/qml/VirtualDesktopWindow.qml +++ b/windowsview/qml/VirtualDesktopWindow.qml @@ -154,6 +154,7 @@ Item { MouseArea { id : previewMouseArea anchors.fill : parent + acceptedButtons: Qt.LeftButton | Qt.RightButton hoverEnabled : true preventStealing : true drag.axis : isVerticalLayout ? Drag.XAxis : Drag.YAxis @@ -170,7 +171,11 @@ Item { controller.setDefaultStatus() } onClicked : { - controller.onWindowClicked(root.wid) + if (mouse.button == Qt.RightButton) { + multitaskViewModel.openDesktopMenu(root.wid, root) + } else { + controller.onWindowClicked(root.wid) + } } ColumnLayout { @@ -264,10 +269,6 @@ Item { Accessible.description: "close-button, click to remove the desktop" onClicked : { - if (desktopListModel.rowCount() > 2) { - //剩余[1个工作区+"新建工作区"]时不会删除"工作区1",属性绑定不能解除 - defaultTextBinding.when = false - } controller.removePreviewWindow(root.wid) } onExited: { @@ -412,4 +413,26 @@ Item { root.forceActiveFocus() } } + + Connections { + target: multitaskViewModel + enabled: highlightDesktop === root.wid + function onDesktopRemoved(desktopIndex) { + // 删除工作区时解除默认名称绑定,避免删除时显示“工作区0” fix issue #IBBJ3F + // 剩余[1个工作区+"新建工作区"]时不会删除"工作区1",属性绑定不能解除 fix bug #354325 + if (desktopListModel.rowCount() > 2) + defaultTextBinding.when = false + } + + // 工作区重命名 + function onRenameDesktopSignal(item) { + if (item !== root) { + return + } + if (!captionEdit.activeFocus) { + captionEdit.forceActiveFocus() + } + captionEdit.editable = true + } + } } diff --git a/windowsview/windowmanagerinterface.cpp b/windowsview/windowmanagerinterface.cpp index 28ed5c496..a69486904 100644 --- a/windowsview/windowmanagerinterface.cpp +++ b/windowsview/windowmanagerinterface.cpp @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -103,6 +104,54 @@ bool WindowManagerInterface::currentDesktopHasWindow() const return false; } +void WindowManagerInterface::openDesktopMenu(int desktopIndex, QQuickItem *item) +{ + if (!validateDesktopIndex(desktopIndex)) { + return; + } + if (m_desktopContextMenu) { + m_desktopContextMenu->close(); + } + auto *menu = new QMenu; + menu->setAttribute(Qt::WA_DeleteOnClose); + + // 重命名 + auto *renameAction = new QAction(QIcon::fromTheme("document-edit-symbolic"), tr("Rename"), menu); + menu->addAction(renameAction); + connect(renameAction, &QAction::triggered, this, [this, item]{ + emit renameDesktopSignal(item); + }); + + // 向右移动 + if (desktopIndex < getNumberOfDesktops()) { + auto *moveRightAction = new QAction(QIcon::fromTheme("go-previous-rtl-symbolic"), tr("Move Right"), menu); + menu->addAction(moveRightAction); + connect(moveRightAction, &QAction::triggered, this, [this, desktopIndex]{ + this->moveDesktop(desktopIndex, desktopIndex + 1); + }); + } + // 向左移动 + if (desktopIndex > 1) { + auto *moveLeftAction = new QAction(QIcon::fromTheme("go-next-rtl-symbolic"), tr("Move Left"), menu); + menu->addAction(moveLeftAction); + connect(moveLeftAction, &QAction::triggered, this, [this, desktopIndex]{ + this->moveDesktop(desktopIndex, desktopIndex - 1); + }); + } + // 删除 + auto *deleteAction = new QAction(QIcon::fromTheme("edit-delete-symbolic"), tr("Delete"), menu); + menu->addAction(deleteAction); + connect(deleteAction, &QAction::triggered, this, [this, desktopIndex]{ + this->removeDesktop(desktopIndex); + }); + + m_desktopContextMenu = menu; + if(m_desktopContextMenu->windowHandle()) { + m_desktopContextMenu->windowHandle()->setTransientParent(item->window()); + } + m_desktopContextMenu->popup(QCursor::pos()); +} + void WindowManagerInterface::setDesktopName(const int desktopIndex, const QString name) { if (!validateDesktopIndex(desktopIndex)) { diff --git a/windowsview/windowmanagerinterface.h b/windowsview/windowmanagerinterface.h index 11793fe44..2373919cc 100644 --- a/windowsview/windowmanagerinterface.h +++ b/windowsview/windowmanagerinterface.h @@ -27,6 +27,9 @@ #include #include #include +#include +#include +#include #include "multitaskviewabstractmodelhandler.h" #include "screens-manager.h" @@ -73,6 +76,9 @@ public: Q_INVOKABLE void removeAllAppWindowOnDesktop(int desktopIndex, int screenIndex); Q_INVOKABLE bool isCurrentDesktopShowingDesktop() const; Q_INVOKABLE bool currentDesktopHasWindow() const; + // 工作区右键菜单 + Q_INVOKABLE void openDesktopMenu(int desktopIndex, QQuickItem *item); + void setDesktopName(const int desktopIndex, const QString name); int getNumberOfDesktops() const; @@ -106,6 +112,8 @@ signals: void touchStateChanged(bool); void screenRectListChanged(); void logicalScreenCountChanged(); + // 工作区重命名信号,激活编辑状态 + void renameDesktopSignal(QQuickItem *item); private slots: void onMouseCountChanged(const int count); @@ -147,6 +155,7 @@ private: bool m_flagNeedGetTouchpad = true; ScreensManager *m_screenManager = nullptr; QList m_screenRectList; + QPointer m_desktopContextMenu; }; #endif // WINDOWMANAGERINTERFACE_H -- Gitee From 6b1007630bc715e8f00bd4c7f2a2cf789d787259 Mon Sep 17 00:00:00 2001 From: zhangyuanyuan1 Date: Tue, 3 Feb 2026 17:01:48 +0800 Subject: [PATCH 2/2] feat(translations): update translation files(story#66123) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1.所有ts文件新增字段 2.仅完成中文翻译 Task: #593865 Req: yes From: kylin Severity: Moderate Changelog-Story: #66123 【多任务视图】工作区增加右键菜单 --- .../translations/ukui-window-switch_bo_CN.ts | 39 +++++++++++++++++-- .../translations/ukui-window-switch_de.ts | 39 +++++++++++++++++-- .../translations/ukui-window-switch_es.ts | 39 +++++++++++++++++-- .../translations/ukui-window-switch_fr.ts | 39 +++++++++++++++++-- .../translations/ukui-window-switch_kk.ts | 39 +++++++++++++++++-- .../translations/ukui-window-switch_ky.ts | 39 +++++++++++++++++-- .../translations/ukui-window-switch_mn.ts | 39 +++++++++++++++++-- .../translations/ukui-window-switch_ug.ts | 39 +++++++++++++++++-- .../translations/ukui-window-switch_vi.ts | 39 +++++++++++++++++-- .../translations/ukui-window-switch_zh_CN.ts | 39 +++++++++++++++++-- .../ukui-window-switch_zh_Hant.ts | 39 +++++++++++++++++-- 11 files changed, 385 insertions(+), 44 deletions(-) diff --git a/windowsview/translations/ukui-window-switch_bo_CN.ts b/windowsview/translations/ukui-window-switch_bo_CN.ts index 6ce331fc2..ce5e04976 100644 --- a/windowsview/translations/ukui-window-switch_bo_CN.ts +++ b/windowsview/translations/ukui-window-switch_bo_CN.ts @@ -1,10 +1,18 @@ + + DesktopListModel + + + Desktop + ཅོག་ཙེའི་སྟེང་གི + + NewDesktopButton - + New Desktop ལས་ཁུལ་གསར་འཛུགས། @@ -12,12 +20,12 @@ TabletViewMain - + No recent tasks བེད་སྤྱོད་སྒོ་འབྱེད་མེད། - + Clear གསལ་པོར་བཤད་ན། @@ -25,9 +33,32 @@ VirtualDesktopWindow - + Desktop ཅོག་ཙེའི་སྟེང་གི + + WindowManagerInterface + + + Rename + + + + + Move Right + + + + + Move Left + + + + + Delete + + + diff --git a/windowsview/translations/ukui-window-switch_de.ts b/windowsview/translations/ukui-window-switch_de.ts index c0a5de431..d865cee56 100644 --- a/windowsview/translations/ukui-window-switch_de.ts +++ b/windowsview/translations/ukui-window-switch_de.ts @@ -1,10 +1,18 @@ + + DesktopListModel + + + Desktop + Desktop + + NewDesktopButton - + New Desktop Neuer Desktop @@ -12,12 +20,12 @@ TabletViewMain - + No recent tasks Keine aktuellen Aufgaben - + Clear Klar @@ -25,9 +33,32 @@ VirtualDesktopWindow - + Desktop Desktop + + WindowManagerInterface + + + Rename + + + + + Move Right + + + + + Move Left + + + + + Delete + + + diff --git a/windowsview/translations/ukui-window-switch_es.ts b/windowsview/translations/ukui-window-switch_es.ts index d6b024454..ec058f787 100644 --- a/windowsview/translations/ukui-window-switch_es.ts +++ b/windowsview/translations/ukui-window-switch_es.ts @@ -1,10 +1,18 @@ + + DesktopListModel + + + Desktop + Escritorio + + NewDesktopButton - + New Desktop Nuevo escritorio @@ -12,12 +20,12 @@ TabletViewMain - + No recent tasks No hay tareas recientes - + Clear Claro @@ -25,9 +33,32 @@ VirtualDesktopWindow - + Desktop Escritorio + + WindowManagerInterface + + + Rename + + + + + Move Right + + + + + Move Left + + + + + Delete + + + diff --git a/windowsview/translations/ukui-window-switch_fr.ts b/windowsview/translations/ukui-window-switch_fr.ts index bdb68d96c..f4c6f8253 100644 --- a/windowsview/translations/ukui-window-switch_fr.ts +++ b/windowsview/translations/ukui-window-switch_fr.ts @@ -1,10 +1,18 @@ + + DesktopListModel + + + Desktop + Bureau + + NewDesktopButton - + New Desktop Nouveau bureau @@ -12,12 +20,12 @@ TabletViewMain - + No recent tasks Pas de tâches récentes - + Clear Clair @@ -25,9 +33,32 @@ VirtualDesktopWindow - + Desktop Bureau + + WindowManagerInterface + + + Rename + + + + + Move Right + + + + + Move Left + + + + + Delete + + + diff --git a/windowsview/translations/ukui-window-switch_kk.ts b/windowsview/translations/ukui-window-switch_kk.ts index b3fd344ba..2ba7837bb 100644 --- a/windowsview/translations/ukui-window-switch_kk.ts +++ b/windowsview/translations/ukui-window-switch_kk.ts @@ -1,10 +1,18 @@ + + DesktopListModel + + + Desktop + ۇستەل بەتى + + NewDesktopButton - + New Desktop ۇستەل جوعارعى @@ -12,12 +20,12 @@ TabletViewMain - + No recent tasks جاقىنعى مىندەتتەر جوق - + Clear تازالاۋ @@ -25,9 +33,32 @@ VirtualDesktopWindow - + Desktop ۇستەل بەتى + + WindowManagerInterface + + + Rename + + + + + Move Right + + + + + Move Left + + + + + Delete + + + diff --git a/windowsview/translations/ukui-window-switch_ky.ts b/windowsview/translations/ukui-window-switch_ky.ts index cbd03e0fe..2a8c7d9aa 100644 --- a/windowsview/translations/ukui-window-switch_ky.ts +++ b/windowsview/translations/ukui-window-switch_ky.ts @@ -1,10 +1,18 @@ + + DesktopListModel + + + Desktop + ئۈستەلئۈستى + + NewDesktopButton - + New Desktop شىرە ۉستۉ @@ -12,12 +20,12 @@ TabletViewMain - + No recent tasks جاقىندا مٸلدەتتەر جوق - + Clear تازالوو @@ -25,9 +33,32 @@ VirtualDesktopWindow - + Desktop ئۈستەلئۈستى + + WindowManagerInterface + + + Rename + + + + + Move Right + + + + + Move Left + + + + + Delete + + + diff --git a/windowsview/translations/ukui-window-switch_mn.ts b/windowsview/translations/ukui-window-switch_mn.ts index b7682dd1a..0a578fe08 100644 --- a/windowsview/translations/ukui-window-switch_mn.ts +++ b/windowsview/translations/ukui-window-switch_mn.ts @@ -1,10 +1,18 @@ + + DesktopListModel + + + Desktop + ᠠᠵᠢᠯᠯᠠᠬᠤ ᠤᠷᠤᠨ + + NewDesktopButton - + New Desktop ᠱᠢᠨ᠎ᠡ᠎ᠪᠡᠷ ᠪᠠᠢᠭᠤᠯᠤᠭ᠍ᠰᠠᠨ ᠠᠵᠢᠯᠯᠠᠬᠤ ᠤᠷᠤᠨ @@ -12,12 +20,12 @@ TabletViewMain - + No recent tasks ᠨᠡᠬᠡᠬᠡᠬᠦ᠌ ᠬᠡᠷᠡᠭᠯᠡᠭᠡ ᠪᠠᠢᠬᠤ ᠦᠬᠡᠢ - + Clear ᠤᠰᠠᠳᠬᠠᠬᠤ @@ -25,9 +33,32 @@ VirtualDesktopWindow - + Desktop ᠠᠵᠢᠯᠯᠠᠬᠤ ᠤᠷᠤᠨ + + WindowManagerInterface + + + Rename + + + + + Move Right + + + + + Move Left + + + + + Delete + + + diff --git a/windowsview/translations/ukui-window-switch_ug.ts b/windowsview/translations/ukui-window-switch_ug.ts index c25db44f8..e6a5aeba7 100644 --- a/windowsview/translations/ukui-window-switch_ug.ts +++ b/windowsview/translations/ukui-window-switch_ug.ts @@ -1,10 +1,18 @@ + + DesktopListModel + + + Desktop + ئۈستەل يۈزى + + NewDesktopButton - + New Desktop ئۈستەل ئۈستىلىرى @@ -12,12 +20,12 @@ TabletViewMain - + No recent tasks يېقىنقى ۋەزىپىلەر يوق - + Clear تازلاش @@ -25,9 +33,32 @@ VirtualDesktopWindow - + Desktop ئۈستەل يۈزى + + WindowManagerInterface + + + Rename + + + + + Move Right + + + + + Move Left + + + + + Delete + + + diff --git a/windowsview/translations/ukui-window-switch_vi.ts b/windowsview/translations/ukui-window-switch_vi.ts index 234f4feb6..3f66d52ac 100644 --- a/windowsview/translations/ukui-window-switch_vi.ts +++ b/windowsview/translations/ukui-window-switch_vi.ts @@ -1,10 +1,18 @@ + + DesktopListModel + + + Desktop + Bàn làm việc + + NewDesktopButton - + New Desktop Máy tính để bàn mới @@ -12,12 +20,12 @@ TabletViewMain - + No recent tasks Không có ứng dụng nào được mở - + Clear Xóa sạch clipboard @@ -25,9 +33,32 @@ VirtualDesktopWindow - + Desktop Bàn làm việc + + WindowManagerInterface + + + Rename + + + + + Move Right + + + + + Move Left + + + + + Delete + + + diff --git a/windowsview/translations/ukui-window-switch_zh_CN.ts b/windowsview/translations/ukui-window-switch_zh_CN.ts index 4349d6bc2..fd98f86a3 100644 --- a/windowsview/translations/ukui-window-switch_zh_CN.ts +++ b/windowsview/translations/ukui-window-switch_zh_CN.ts @@ -1,10 +1,18 @@ + + DesktopListModel + + + Desktop + 工作区 + + NewDesktopButton - + New Desktop 新建工作区 @@ -12,12 +20,12 @@ TabletViewMain - + No recent tasks 无应用开启 - + Clear 清除 @@ -25,9 +33,32 @@ VirtualDesktopWindow - + Desktop 工作区 + + WindowManagerInterface + + + Rename + 重命名 + + + + Move Right + 向右移动 + + + + Move Left + 向左移动 + + + + Delete + 删除 + + diff --git a/windowsview/translations/ukui-window-switch_zh_Hant.ts b/windowsview/translations/ukui-window-switch_zh_Hant.ts index 953b8246d..1d42a48aa 100644 --- a/windowsview/translations/ukui-window-switch_zh_Hant.ts +++ b/windowsview/translations/ukui-window-switch_zh_Hant.ts @@ -1,10 +1,18 @@ + + DesktopListModel + + + Desktop + 工作區 + + NewDesktopButton - + New Desktop 新建工作區 @@ -12,12 +20,12 @@ TabletViewMain - + No recent tasks 無應用開啟 - + Clear 清除 @@ -25,9 +33,32 @@ VirtualDesktopWindow - + Desktop 工作區 + + WindowManagerInterface + + + Rename + + + + + Move Right + + + + + Move Left + + + + + Delete + + + -- Gitee