Skip to content

Commit 367cf57

Browse files
committed
fix(taskmanager): restore dock taskbar icons
1 parent 79b619b commit 367cf57

8 files changed

Lines changed: 98 additions & 33 deletions

File tree

debian/changelog

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
dde-shell (2.0.38) unstable; urgency=medium
2+
3+
* fix: restore dock taskbar application icons
4+
5+
-- shule1987 <shule1987@qq.com> Wed, 29 Apr 2026 14:43:14 +0800
6+
17
dde-shell (2.0.37) unstable; urgency=medium
28

39
* feat: refine dock launchpad, task items, and fashion left plugins

panels/dock/taskmanager/appitem.cpp

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,26 @@
1919
Q_LOGGING_CATEGORY(appitemLog, "org.deepin.dde.shell.dock.taskmanger.appitem")
2020

2121
namespace dock {
22+
namespace {
23+
QString desktopIconName(const QSharedPointer<DesktopfileAbstractParser> &parser)
24+
{
25+
if (!parser || !parser->isValied().first) {
26+
return {};
27+
}
28+
29+
return parser->desktopIcon().trimmed();
30+
}
31+
32+
QString windowIconName(const QPointer<AbstractWindow> &window)
33+
{
34+
if (window.isNull()) {
35+
return {};
36+
}
37+
38+
return window->icon().trimmed();
39+
}
40+
}
41+
2242
AppItem::AppItem(QString id, QObject *parent)
2343
: AbstractItem(QStringLiteral("AppItem/%1").arg(escapeToObjectPath(id)), parent)
2444
, m_id(id)
@@ -52,21 +72,17 @@ QString AppItem::type() const
5272

5373
QString AppItem::icon() const
5474
{
55-
if (!m_currentActiveWindow.isNull()) {
56-
const QString windowIcon = m_currentActiveWindow->icon().trimmed();
57-
if (!windowIcon.isEmpty()) {
58-
return windowIcon;
59-
}
75+
const QString windowIcon = windowIconName(m_currentActiveWindow);
76+
if (!windowIcon.isEmpty()) {
77+
return windowIcon;
6078
}
6179

62-
if (m_desktopfileParser && m_desktopfileParser->isValied().first) {
63-
const QString desktopIcon = m_desktopfileParser->desktopIcon().trimmed();
64-
if (!desktopIcon.isEmpty()) {
65-
return desktopIcon;
66-
}
80+
const QString desktopIcon = desktopIconName(m_desktopfileParser);
81+
if (!desktopIcon.isEmpty()) {
82+
return desktopIcon;
6783
}
6884

69-
return QStringLiteral("application-default-icon");
85+
return QString::fromLatin1(DEFAULT_APP_ICONNAME);
7086
}
7187

7288
QString AppItem::name() const
@@ -316,7 +332,12 @@ QString AppItem::getCurrentActiveWindowName() const
316332

317333
QString AppItem::getCurrentActiveWindowIcon() const
318334
{
319-
return m_currentActiveWindow.isNull() ? this->icon() : m_currentActiveWindow->icon();
335+
const QString windowIcon = windowIconName(m_currentActiveWindow);
336+
if (!windowIcon.isEmpty()) {
337+
return windowIcon;
338+
}
339+
340+
return icon();
320341
}
321342

322343
void AppItem::updateCurrentActiveWindow(QPointer<AbstractWindow> window)

panels/dock/taskmanager/dockcombinemodel.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,11 @@ QVariant DockCombineModel::data(const QModelIndex &index, int role) const
5555
return res;
5656
}
5757
case TaskManager::IconNameRole: {
58-
QString winTitle = RoleCombineModel::data(index, m_roleMaps.value(TaskManager::WinIconRole)).toString();
58+
const QString windowIcon = RoleCombineModel::data(index, m_roleMaps.value(TaskManager::WinIconRole)).toString();
5959
auto icon = RoleCombineModel::data(index, m_roleMaps.value(TaskManager::IconNameRole)).toString();
60-
if (icon.isEmpty()) {
61-
icon = RoleCombineModel::data(index, m_roleMaps.value(TaskManager::WinIconRole)).toString();
60+
if ((icon.isEmpty() || icon == QLatin1String(DEFAULT_APP_ICONNAME))
61+
&& !windowIcon.isEmpty()) {
62+
icon = windowIcon;
6263
}
6364
return icon;
6465
}

panels/dock/taskmanager/package/AppItem.qml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -284,12 +284,11 @@ Item {
284284
target: Panel
285285
}
286286

287-
D.DciIcon {
287+
TaskIcon {
288288
id: icon
289-
name: root.iconName
289+
iconName: root.iconName
290290
height: iconSize
291291
width: iconSize
292-
sourceSize: Qt.size(iconSize, iconSize)
293292
anchors.centerIn: parent
294293
retainWhileLoading: true
295294
smooth: false

panels/dock/taskmanager/package/DockPinnedPopup.qml

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1164,12 +1164,11 @@ FocusScope {
11641164
visible: gridButton.thumbnailReady
11651165
}
11661166

1167-
D.DciIcon {
1167+
TaskIcon {
11681168
anchors.centerIn: parent
11691169
width: root.itemIconSize
11701170
height: root.itemIconSize
1171-
sourceSize: Qt.size(width, height)
1172-
name: modelData.iconName
1171+
iconName: modelData.iconName
11731172
smooth: false
11741173
retainWhileLoading: true
11751174
visible: !gridButton.thumbnailReady
@@ -1293,12 +1292,11 @@ FocusScope {
12931292
visible: gridButton.thumbnailAvailable && dragThumbnailImage.status === Image.Ready
12941293
}
12951294

1296-
D.DciIcon {
1295+
TaskIcon {
12971296
anchors.centerIn: parent
12981297
width: root.itemIconSize
12991298
height: root.itemIconSize
1300-
sourceSize: Qt.size(width, height)
1301-
name: gridButton.modelData && gridButton.modelData.iconName ? String(gridButton.modelData.iconName) : ""
1299+
iconName: gridButton.modelData && gridButton.modelData.iconName ? String(gridButton.modelData.iconName) : ""
13021300
visible: !gridButton.thumbnailAvailable || dragThumbnailImage.status !== Image.Ready
13031301
smooth: false
13041302
retainWhileLoading: true

panels/dock/taskmanager/package/PinnedItemIcon.qml

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,26 +66,24 @@ Item {
6666

6767
Repeater {
6868
model: root.useCompositePreview ? root.visiblePreviewIcons : 0
69-
delegate: D.DciIcon {
69+
delegate: TaskIcon {
7070
required property string modelData
7171

72-
name: modelData
72+
iconName: modelData
7373
width: root.compositeIconSize
7474
height: root.compositeIconSize
75-
sourceSize: Qt.size(width, height)
7675
smooth: false
7776
retainWhileLoading: true
7877
}
7978
}
8079
}
8180
}
8281

83-
D.DciIcon {
82+
TaskIcon {
8483
anchors.centerIn: parent
8584
width: root.iconSize
8685
height: root.iconSize
87-
sourceSize: Qt.size(width, height)
88-
name: root.visiblePreviewIcons.length === 1 ? root.visiblePreviewIcons[0] : root.iconName
86+
iconName: root.visiblePreviewIcons.length === 1 ? root.visiblePreviewIcons[0] : root.iconName
8987
visible: !root.useCompositePreview
9088
smooth: false
9189
retainWhileLoading: true
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd.
2+
//
3+
// SPDX-License-Identifier: GPL-3.0-or-later
4+
5+
import QtQuick 2.15
6+
import org.deepin.dtk 1.0 as D
7+
8+
Item {
9+
id: root
10+
11+
property string iconName: ""
12+
property bool smooth: false
13+
property bool retainWhileLoading: true
14+
readonly property bool useSourceImage: iconName.indexOf("data:") === 0
15+
|| iconName.indexOf("file:") === 0
16+
|| iconName.indexOf("qrc:") === 0
17+
|| iconName.indexOf("image:") === 0
18+
|| iconName.indexOf("http:") === 0
19+
|| iconName.indexOf("https:") === 0
20+
|| iconName.indexOf(":/") === 0
21+
|| iconName.indexOf("/") === 0
22+
23+
D.DciIcon {
24+
anchors.fill: parent
25+
sourceSize: Qt.size(Math.max(1, Math.round(root.width)),
26+
Math.max(1, Math.round(root.height)))
27+
name: root.useSourceImage ? "" : root.iconName
28+
smooth: root.smooth
29+
retainWhileLoading: root.retainWhileLoading
30+
visible: root.iconName.length > 0 && !root.useSourceImage
31+
}
32+
33+
Image {
34+
anchors.fill: parent
35+
source: root.useSourceImage ? root.iconName : ""
36+
sourceSize: Qt.size(Math.max(1, Math.round(width)),
37+
Math.max(1, Math.round(height)))
38+
fillMode: Image.PreserveAspectFit
39+
asynchronous: true
40+
smooth: root.smooth
41+
visible: root.iconName.length > 0 && root.useSourceImage
42+
}
43+
}

panels/dock/taskmanager/package/TaskManager.qml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -496,16 +496,15 @@ ContainmentItem {
496496
Repeater {
497497
model: overflowFooter.previewCount
498498

499-
D.DciIcon {
499+
TaskIcon {
500500
required property int index
501501

502502
readonly property int previewIndex: overflowFooter.previewStartIndex + index
503503
readonly property var previewItem: taskmanager.adaptiveFashionOverflowItems[previewIndex]
504504

505-
name: previewItem && previewItem.iconName ? previewItem.iconName : ""
505+
iconName: previewItem && previewItem.iconName ? previewItem.iconName : ""
506506
width: overflowFooter.stackedIconSize
507507
height: overflowFooter.stackedIconSize
508-
sourceSize: Qt.size(width, height)
509508
smooth: false
510509
retainWhileLoading: true
511510
x: index * overflowFooter.stackXOffset

0 commit comments

Comments
 (0)