Skip to content

Commit 5a2fb99

Browse files
committed
chore: implement dock item menus for DockGlobalElementModel
This patch is to continue prepare for linuxdeepin#1201, by add previously missing changed signal for Docked and Menu role when docked state is changed, and implementing actions for menu entries. Log:
1 parent 332f038 commit 5a2fb99

File tree

4 files changed

+26
-6
lines changed

4 files changed

+26
-6
lines changed

panels/dock/taskmanager/desktopfileabstractparser.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,9 +148,9 @@ void DesktopfileAbstractParser::setDocked(bool docked)
148148
auto desktopElement = QStringLiteral("desktop/%1").arg(id());
149149

150150
if (docked) {
151-
TaskManagerSettings::instance()->appendDockedElements(desktopElement);
151+
TaskManagerSettings::instance()->appendDockedElement(desktopElement);
152152
} else {
153-
TaskManagerSettings::instance()->removeDockedElements(desktopElement);
153+
TaskManagerSettings::instance()->removeDockedElement(desktopElement);
154154
}
155155

156156
Q_EMIT dockedChanged();

panels/dock/taskmanager/dockglobalelementmodel.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,11 @@ void DockGlobalElementModel::loadDockedElements()
234234
}
235235

236236
m_dockedElements = newDocked;
237+
238+
if (!m_data.isEmpty()) {
239+
// MenusRole should also be handled here due to it contains the copywriting of docked or undocked
240+
Q_EMIT dataChanged(index(0, 0), index(m_data.size() - 1, 0), {TaskManager::DockedRole, TaskManager::MenusRole});
241+
}
237242
}
238243

239244
QString DockGlobalElementModel::getMenus(const QModelIndex &index) const
@@ -325,8 +330,13 @@ void DockGlobalElementModel::requestOpenUrls(const QModelIndex &index, const QLi
325330
void DockGlobalElementModel::requestNewInstance(const QModelIndex &index, const QString &action) const
326331
{
327332
if (action == DOCK_ACTION_DOCK) {
333+
auto data = m_data.value(index.row());
334+
auto id = std::get<0>(data);
335+
TaskManagerSettings::instance()->toggleDockedElement(QStringLiteral("desktop/%1").arg(id));
328336
} else if (action == DOCK_ACTION_FORCEQUIT) {
337+
requestClose(index, true);
329338
} else if (action == DOCK_ACTION_CLOSEALL) {
339+
requestClose(index);
330340
} else {
331341
auto data = m_data.value(index.row());
332342
auto id = std::get<0>(data);

panels/dock/taskmanager/taskmanagersettings.cpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,14 +148,23 @@ void TaskManagerSettings::setDockedElements(const QStringList &elements)
148148
saveDockedElements();
149149
}
150150

151-
void TaskManagerSettings::appendDockedElements(const QString &element)
151+
void TaskManagerSettings::toggleDockedElement(const QString &element)
152+
{
153+
if (isDocked(element)) {
154+
removeDockedElement(element);
155+
} else {
156+
appendDockedElement(element);
157+
}
158+
}
159+
160+
void TaskManagerSettings::appendDockedElement(const QString &element)
152161
{
153162
m_dockedElements.append(element);
154163
Q_EMIT dockedElementsChanged();
155164
saveDockedElements();
156165
}
157166

158-
void TaskManagerSettings::removeDockedElements(const QString &element)
167+
void TaskManagerSettings::removeDockedElement(const QString &element)
159168
{
160169
m_dockedElements.removeAll(element);
161170
Q_EMIT dockedElementsChanged();

panels/dock/taskmanager/taskmanagersettings.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,9 @@ class TaskManagerSettings : public QObject
3232
bool cgroupsBasedGrouping() const;
3333

3434
void setDockedElements(const QStringList &elements);
35-
void appendDockedElements(const QString &element);
36-
void removeDockedElements(const QString &element);
35+
void toggleDockedElement(const QString &element);
36+
void appendDockedElement(const QString &element);
37+
void removeDockedElement(const QString &element);
3738
QStringList dockedElements() const;
3839
bool isDocked(const QString &elementId) const;
3940

0 commit comments

Comments
 (0)