Skip to content

Commit 91c590c

Browse files
committed
feat: drop to dock task icon to launch with uri
拖拽文件到图标上以打开新实例并将拖拽的文件作为参数. 注:仅实现了拖拽打开行为.并未进行拖拽到图标上则激活现有窗口的实现. PMS: BUG-275395 Log:
1 parent be4e8fe commit 91c590c

File tree

11 files changed

+44
-4
lines changed

11 files changed

+44
-4
lines changed

panels/dock/taskmanager/abstractitem.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ class AbstractItem : public QObject
5656
virtual void setDocked(bool docked) =0;
5757

5858
virtual void handleClick(const QString& clickItem) = 0;
59+
virtual void handleFileDrop(const QStringList & urls) = 0;
5960

6061
// three type data
6162
virtual QVariant data() = 0;
@@ -75,4 +76,4 @@ class AbstractItem : public QObject
7576
void dataChanged();
7677

7778
};
78-
}
79+
}

panels/dock/taskmanager/appitem.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,13 @@ void AppItem::handleClick(const QString& clickItem)
201201

202202
}
203203

204+
void AppItem::handleFileDrop(const QStringList & urls)
205+
{
206+
if (m_desktopfileParser && !m_desktopfileParser.isNull()) {
207+
m_desktopfileParser->launchWithUrls(urls);
208+
}
209+
}
210+
204211
QVariant AppItem::data()
205212
{
206213
QStringList ret;

panels/dock/taskmanager/appitem.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ class AppItem : public AbstractItem
4242
void setDocked(bool docked) override;
4343

4444
void handleClick(const QString& clickItem) override;
45+
void handleFileDrop(const QStringList & urls) override;
4546

4647
QVariant data() override;
4748

panels/dock/taskmanager/desktopfileabstractparser.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ void DesktopfileAbstractParser::launchWithAction(const QString& action)
3737

3838
}
3939

40+
void DesktopfileAbstractParser::launchWithUrls(const QStringList & urls)
41+
{
42+
}
43+
4044
void DesktopfileAbstractParser::requestQuit()
4145
{
4246

panels/dock/taskmanager/desktopfileabstractparser.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,12 @@ class DesktopfileAbstractParser : public QObject
3939
virtual QString genericName();
4040
virtual QString desktopIcon();
4141
virtual QString xDeepinVendor();
42-
42+
4343
virtual std::pair<bool, QString> isValied();
4444

4545
virtual void launch();
4646
virtual void launchWithAction(const QString& action);
47+
virtual void launchWithUrls(const QStringList & urls);
4748
virtual void requestQuit();
4849
virtual QString type();
4950

panels/dock/taskmanager/desktopfileamparser.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ DesktopFileAMParser::DesktopFileAMParser(QString id, QObject* parent)
3939
{
4040
if (!m_amIsAvaliable) m_amIsAvaliable = QDBusConnection::sessionBus().
4141
interface()->isServiceRegistered(AM_DBUS_PATH);
42-
42+
4343
connect(&desktopobjectManager, &ObjectManager::InterfacesRemoved, this, [this] (const QDBusObjectPath& path, const QStringList& interfaces) {
4444
if (m_applicationInterface->path() == path.path()) {
4545
getAppItem()->setDocked(false);
@@ -191,6 +191,11 @@ void DesktopFileAMParser::launchWithAction(const QString& action)
191191
return launchByAMTool(action);
192192
}
193193

194+
void DesktopFileAMParser::launchWithUrls(const QStringList & urls)
195+
{
196+
m_applicationInterface->Launch(QString(), urls, QVariantMap());
197+
}
198+
194199
void DesktopFileAMParser::requestQuit()
195200
{
196201

panels/dock/taskmanager/desktopfileamparser.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ class DesktopFileAMParser : public DesktopfileAbstractParser
2222

2323
virtual void launch() override;
2424
virtual void launchWithAction(const QString& action) override;
25+
virtual void launchWithUrls(const QStringList & urls) override;
2526
virtual void requestQuit() override;
2627

2728
virtual QString id() override;

panels/dock/taskmanager/package/AppItem.qml

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ Item {
2424
required property int visualIndex
2525

2626
signal clickItem(itemId: string, menuId: string)
27+
signal dropFilesOnItem(itemId: string, files: list<string>)
2728
signal dragFinished()
2829

2930
Drag.active: mouseArea.drag.active
@@ -245,7 +246,7 @@ Item {
245246
NumberAnimation { target: rect; property: "width"; from: originSize * (index + 1); to: originSize * (index + 2); duration: 1200 }
246247
ColorAnimation { target: rect; property: "color"; from: Qt.rgba(1, 1, 1, 0.4); to: Qt.rgba(1, 1, 1, 0.1); duration: 1200 }
247248
}
248-
}
249+
}
249250

250251
// TODO Remove it because of consuming performance.
251252
// D.BoxShadow {
@@ -384,6 +385,15 @@ Item {
384385
}
385386
}
386387

388+
DropArea {
389+
anchors.fill: parent
390+
keys: ["dfm_app_type_for_drag"]
391+
392+
onDropped: function (drop){
393+
root.dropFilesOnItem(root.itemId, drop.urls)
394+
}
395+
}
396+
387397
onWindowsChanged: {
388398
updateWindowIconGeometryTimer.start()
389399
}

panels/dock/taskmanager/package/TaskManager.qml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ ContainmentItem {
104104
ListView.delayRemove: Drag.active
105105
Component.onCompleted: {
106106
clickItem.connect(taskmanager.Applet.clickItem)
107+
dropFilesOnItem.connect(taskmanager.Applet.dropFilesOnItem)
107108
}
108109
onDragFinished: function() {
109110
launcherDndDropArea.resetDndState()

panels/dock/taskmanager/taskmanager.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,14 @@ void TaskManager::clickItem(const QString& itemId, const QString& menuId)
180180
item->handleClick(menuId);
181181
}
182182

183+
void TaskManager::dropFilesOnItem(const QString& itemId, const QStringList& urls)
184+
{
185+
auto item = ItemModel::instance()->getItemById(itemId);
186+
if(!item) return;
187+
188+
item->handleFileDrop(urls);
189+
}
190+
183191
void TaskManager::showItemPreview(const QString &itemId, QObject* relativePositionItem, int32_t previewXoffset, int32_t previewYoffset, uint32_t direction)
184192
{
185193
auto item = ItemModel::instance()->getItemById(itemId).get();

0 commit comments

Comments
 (0)