-
Notifications
You must be signed in to change notification settings - Fork 58
WIP: refactor: migrate taskmanager model to the new DockItemModel #1148
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
WIP: refactor: migrate taskmanager model to the new DockItemModel #1148
Conversation
切换 taskmanager 区域的 model 为新的 DockItemModel,以解决一系列问题: 1. 部分场景下企业微信和微信图标合并/钉钉和微信合并等问题 2. 终端执行 gitk/dde-dconfig-editor 时不会单独显示任务栏图标 3. 没有 desktop-id 的带界面的可执行程序不会单独显示任务栏图标 Log:
|
Skipping CI for Draft Pull Request. |
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: BLumia The full list of commands accepted by this bot can be found here. DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
Reviewer's GuideMigrate TaskManager to the new index-based DockItemModel by replacing AppItem-centric models with QModelIndexList handling, unifying preview logic, aligning monitors with AbstractTaskManagerInterface, modernizing TaskManager initialization, updating QML delegates for modelIndex usage, fixing role-proxy models, and miscellaneous cleanups. Sequence Diagram for X11 Window Preview RequestsequenceDiagram
actor User
participant AppItem_qml as "AppItem.qml (UI)"
participant TaskManager_Applet as "TaskManager (Applet)"
participant X11WM as "X11WindowMonitor"
participant X11PreviewCont as "X11WindowPreviewContainer"
participant DIMAdapter as "DockItemWindowModel"
participant GlobalFunc as "fetchWindowPreview()"
participant KWinService as "KWin (D-Bus)"
User->>AppItem_qml: Hover over task item
AppItem_qml->>TaskManager_Applet: requestPreview([modelIndex], ...)
TaskManager_Applet->>X11WM: requestPreview(indexes, ...)
X11WM->>X11PreviewCont: showPreview(indexes, ...)
X11PreviewCont->>DIMAdapter: setData(indexes)
DIMAdapter->>DIMAdapter: resetPreviewPixmap()
loop for each window in indexes
DIMAdapter->>GlobalFunc: fetchWindowPreview(winId)
GlobalFunc->>KWinService: CaptureWindow(winId, options, fd)
KWinService-->>GlobalFunc: Pixmap data (via fd)
GlobalFunc-->>DIMAdapter: QPixmap
end
DIMAdapter-->>X11PreviewCont: Provides preview data
X11PreviewCont->>X11PreviewCont: Update view, show previews
X11PreviewCont-->>User: Display window previews
Sequence Diagram for X11 Window Activation from PreviewsequenceDiagram
actor User
participant X11PreviewCont as "X11WindowPreviewContainer"
participant TaskManagerRoles as "TaskManager (Roles Accessor)"
participant X11Utils_Instance as "X11Utils"
User->>X11PreviewCont: Click on a window preview
X11PreviewCont->>X11PreviewCont: Get QModelIndex for clicked preview
X11PreviewCont->>TaskManagerRoles: data(index, TaskManager::WinIdRole)
TaskManagerRoles-->>X11PreviewCont: winId
X11PreviewCont->>X11Utils_Instance: setActiveWindow(winId)
X11Utils_Instance-->>User: Window is activated
Sequence Diagram for App Item Click (Launch or Activate)sequenceDiagram
actor User
participant AppItem_qml as "AppItem.qml (UI)"
participant TaskManager_Applet as "TaskManager (Applet)"
participant AWM as "AbstractWindowMonitor"
participant TargetWindow as "AbstractWindow"
User->>AppItem_qml: Click App Item
alt No open windows for app
AppItem_qml->>TaskManager_Applet: requestNewInstance(modelIndex, "")
TaskManager_Applet->>AWM: requestNewInstance(modelIndex, "")
AWM->>AWM: Handle new instance creation
AWM-->>User: New application instance starts
else Has open windows
AppItem_qml->>TaskManager_Applet: requestActivate(modelIndex)
TaskManager_Applet->>AWM: requestActivate(modelIndex)
AWM->>TargetWindow: window.activate() or window.minimize()
TargetWindow-->>User: Window activated or minimized
end
Class Diagram for Window Preview Model Refactoring (DockItemWindowModel)classDiagram
class QAbstractListModel {
<<Abstract>>
}
class DockItemWindowModel {
-m_dockItemModelIndexes : QModelIndexList
-m_previewPixmaps : QHash~uint32_t, QPixmap~
+DockItemWindowModel(QObject* parent)
+rowCount() int
+data(QModelIndex index, int role) QVariant
+setData(const QModelIndexList& itemIndexes) void
+resetPreviewPixmap() void
}
QAbstractListModel <|-- DockItemWindowModel
class X11WindowPreviewContainer {
-m_model : DockItemWindowModel*
+X11WindowPreviewContainer(X11WindowMonitor* monitor, QWidget* parent)
+showPreview(const QModelIndexList& indexes, ...) void
+updateSize(int windowCount) void
}
X11WindowPreviewContainer o-- "1" DockItemWindowModel : uses
class fetchWindowPreview {
<<Global Function>>
+fetchWindowPreview(const uint32_t& winId) QPixmap
}
DockItemWindowModel ..> fetchWindowPreview : uses
class AppItemWindowModel {
<<Old Class - Refactored>>
-m_item : QPointer~AppItem~
+setData(const QPointer~AppItem~& item) void
-fetchWindowPreview(const uint32_t& winId) QPixmap
}
AppItemWindowModel --|> QAbstractListModel
Class Diagram for TaskManager and Monitor Hierarchy with AbstractTaskManagerInterfaceclassDiagram
class TaskManager {
-m_itemModel : DockItemModel*
-m_windowMonitor : QScopedPointer~AbstractWindowMonitor~
+dataModel() DockItemModel*
+init() bool
+load() bool
# requestActivate(const QModelIndex& index) const
# requestNewInstance(const QModelIndex& index, const QString& action) const
# requestPreview(const QModelIndexList& indexes, ...) const
}
class AbstractTaskManagerInterface {
<<Interface>>
+requestActivate(const QModelIndex& index) const = 0
+requestOpenUrls(const QModelIndex& index, const QList~QUrl~& urls) const = 0
+requestNewInstance(const QModelIndex& index, const QString& action) const = 0
+requestClose(const QModelIndex& index, bool force) const = 0
+requestPreview(const QModelIndexList& indexes, ...) const = 0
}
AbstractTaskManagerInterface <|.. TaskManager
class DockItemModel {
<<Model>>
}
TaskManager o-- "1" DockItemModel : uses
class QAbstractListModel {
<<Abstract>>
}
class AbstractWindowMonitor {
-m_trackedWindows : QList~AbstractWindow*~
+roleNames() QHash~int, QByteArray~
+data(const QModelIndex& index, int role) QVariant
+trackWindow(AbstractWindow* window) void
# requestActivate(const QModelIndex& index) const override
# requestNewInstance(const QModelIndex& index, const QString& action) const override
# requestPreview(const QModelIndexList& indexes, ...) const override
}
QAbstractListModel <|-- AbstractWindowMonitor
AbstractTaskManagerInterface <|.. AbstractWindowMonitor
class X11WindowMonitor {
-m_windowPreview : QScopedPointer~X11WindowPreviewContainer~
+requestPreview(const QModelIndexList& indexes, ...) const override
}
AbstractWindowMonitor <|-- X11WindowMonitor
class TreeLandWindowMonitor {
-m_dockPreview : QScopedPointer~TreeLandDockPreviewContext~
+requestPreview(const QModelIndexList& indexes, ...) const override
}
AbstractWindowMonitor <|-- TreeLandWindowMonitor
TaskManager o-- "1" AbstractWindowMonitor : uses
Class Diagram for QML Task Item Delegate Structure using modelIndexclassDiagram
class TaskManager_qml {
+OverflowContainer appContainer
}
class OverflowContainer_qml {
+ListView listView
+model: VisualItemModel
+delegate: DropArea_delegate
+property bool interactive
+function scrollIncrease()
+function scrollDecrease()
}
class DropArea_delegate {
+required property int index
+property var modelIndex
+Row itemHolder
}
class Row_itemHolder {
+AppItem_qml app
+Label windowTitleLabel
}
class AppItem_qml {
+required property var modelIndex
+MouseArea mouseArea
# onClicked: TaskManager.requestActivate(modelIndex) / requestNewInstance(modelIndex)
# onEntered (for preview): taskmanager.Applet.requestPreview([modelIndex], ...)
}
TaskManager_qml *-- "1" OverflowContainer_qml : contains
OverflowContainer_qml *-- "1" DropArea_delegate : delegate for
DropArea_delegate *-- "1" Row_itemHolder : contains
Row_itemHolder *-- "1" AppItem_qml : contains
Row_itemHolder *-- "0..1" Label : contains
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
|
TAG Bot New tag: 1.99.39 |
|
TAG Bot New tag: 2.0.0 |
|
TAG Bot New tag: 2.0.1 |
|
TAG Bot New tag: 2.0.2 |
|
TAG Bot New tag: 2.0.3 |
|
此 PR 关闭处理,后续工作移到 #1201 (不完全替代此 PR)以及随后的其他 PR 处理。 |
Summary by Sourcery
Migrate TaskManager from legacy AppItem-based APIs to a fully model-driven implementation using DockItemModel and standardized TaskManager roles.
Enhancements:
Tests: