@@ -44,9 +44,7 @@ TaskManagerSettings::TaskManagerSettings(QObject *parent)
4444 m_windowSplit = m_taskManagerDconfig->value (TASKMANAGER_WINDOWSPLIT_KEY).toBool ();
4545 Q_EMIT windowSplitChanged ();
4646 } else if (TASKMANAGER_DOCKEDITEMS_KEY == key) {
47- loadDockedItems ();
48- Q_EMIT dockedItemsChanged ();
49- Q_EMIT dockedElementsChanged ();
47+ qDebug () << " TASKMANAGER_DOCKEDITEMS_KEY is deprecated, please use TASKMANAGER_DOCKEDELEMENTS_KEY instead" ;
5048 } else if (TASKMANAGER_DOCKEDELEMENTS_KEY == key) {
5149 m_dockedElements = m_taskManagerDconfig->value (TASKMANAGER_DOCKEDELEMENTS_KEY, {}).toStringList ();
5250 Q_EMIT dockedElementsChanged ();
@@ -56,7 +54,7 @@ TaskManagerSettings::TaskManagerSettings(QObject *parent)
5654 m_allowForceQuit = enableStr2Bool (m_taskManagerDconfig->value (TASKMANAGER_ALLOWFOCEQUIT_KEY).toString ());
5755 m_windowSplit = m_taskManagerDconfig->value (TASKMANAGER_WINDOWSPLIT_KEY).toBool ();
5856 m_dockedElements = m_taskManagerDconfig->value (TASKMANAGER_DOCKEDELEMENTS_KEY, {}).toStringList ();
59- loadDockedItems ();
57+ migrateFromDockedItems ();
6058}
6159
6260bool TaskManagerSettings::isAllowedForceQuit ()
@@ -81,34 +79,20 @@ void TaskManagerSettings::setWindowSplit(bool split)
8179 m_taskManagerDconfig->setValue (TASKMANAGER_WINDOWSPLIT_KEY, m_windowSplit);
8280}
8381
84- QStringList TaskManagerSettings::dockedElements ()
82+ QStringList TaskManagerSettings::dockedElements () const
8583{
8684 return m_dockedElements;
8785}
8886
89- void TaskManagerSettings::dockedItemsPersisted ()
87+ // elementId is like "desktop/sample.app.id"
88+ bool TaskManagerSettings::isDocked (const QString &elementId) const
9089{
91- QStringList list;
92-
93- for (auto dockedDesktopFile : m_dockedItems) {
94- if (!dockedDesktopFile.isObject ()) {
95- continue ;
96- }
97- YAML::Node node;
98- auto dockedDesktopFileObj = dockedDesktopFile.toObject ();
99- for (auto key : dockedDesktopFileObj.keys ()) {
100- node[key.toStdString ()] = dockedDesktopFileObj[key].toString ().toStdString ();
101- }
102- auto str = QString::fromStdString (YAML::Dump (node));
103- list << str.replace (" \n " ," ," );
104- }
105-
106- m_taskManagerDconfig->setValue (TASKMANAGER_DOCKEDITEMS_KEY, list);
90+ return m_dockedElements.contains (elementId);
10791}
10892
109- void TaskManagerSettings::loadDockedItems ()
93+ void TaskManagerSettings::migrateFromDockedItems ()
11094{
111- while (!m_dockedItems. isEmpty ()) m_dockedItems. removeLast () ;
95+ QJsonArray legacyDockedItems ;
11296
11397 auto dcokedDesktopFilesStrList = m_taskManagerDconfig->value (TASKMANAGER_DOCKEDITEMS_KEY).toStringList ();
11498 foreach (auto dcokedDesktopFilesStr, dcokedDesktopFilesStrList) {
@@ -126,49 +110,63 @@ void TaskManagerSettings::loadDockedItems()
126110 auto value = it->second .as <std::string>();
127111 dockedItem[QString::fromStdString (key)] = QString::fromStdString (value);
128112 }
129- m_dockedItems .append (dockedItem);
113+ legacyDockedItems .append (dockedItem);
130114 }
131115
132116 // Migrate data under the new dconfig setting entry
133- if (!m_dockedItems.isEmpty () && m_dockedElements.isEmpty ()) {
134- for (auto dockedDesktopFile : m_dockedItems) {
135- if (!dockedDesktopFile.isObject ()) {
136- continue ;
137- }
138- auto dockedDesktopFileObj = dockedDesktopFile.toObject ();
139- if (dockedDesktopFileObj.contains (QStringLiteral (" id" )) && dockedDesktopFileObj.contains (QStringLiteral (" type" ))) {
140- m_dockedElements.append (QStringLiteral (" desktop/%1" ).arg (dockedDesktopFileObj[QStringLiteral (" id" )].toString ()));
141- }
117+ if (!legacyDockedItems.isEmpty ()) {
118+ m_dockedElements = toDockedElementsStrings (legacyDockedItems);
119+ m_taskManagerDconfig->setValue (TASKMANAGER_DOCKEDITEMS_KEY, QStringList ());
120+ qDebug () << " Migrated from TASKMANAGER_DOCKEDITEMS_KEY to TASKMANAGER_DOCKEDELEMENTS_KEY, old data cleared" ;
121+ } else {
122+ qDebug () << " Already migrated to TASKMANAGER_DOCKEDELEMENTS_KEY since TASKMANAGER_DOCKEDITEMS_KEY is empty" ;
123+ }
124+ }
125+
126+ QStringList TaskManagerSettings::toDockedElementsStrings (const QJsonArray &items) const
127+ {
128+ QStringList list;
129+ for (auto item : items) {
130+ if (!item.isObject ()) {
131+ continue ;
132+ }
133+ auto itemObj = item.toObject ();
134+ if (itemObj.contains (QStringLiteral (" id" )) && itemObj.contains (QStringLiteral (" type" ))) {
135+ list << toDockedElementsString (itemObj);
142136 }
143137 }
138+ return list;
144139}
145140
146- void TaskManagerSettings::setDockedDesktopFiles (QJsonArray items)
141+ QString TaskManagerSettings::toDockedElementsString ( const QJsonObject &item) const
147142{
148- m_dockedItems = items;
149- dockedItemsPersisted ();
143+ return QStringLiteral (" desktop/%1" ).arg (item[QStringLiteral (" id" )].toString ());
150144}
151145
152- void TaskManagerSettings::appnedDockedDesktopfiles (QJsonObject item )
146+ void TaskManagerSettings::saveDockedElements ( )
153147{
154- m_dockedItems.append (item);
155- dockedItemsPersisted ();
148+ m_taskManagerDconfig->setValue (TASKMANAGER_DOCKEDELEMENTS_KEY, m_dockedElements);
156149}
157150
158- void TaskManagerSettings::removeDockedDesktopfile (QJsonObject desktopfile )
151+ void TaskManagerSettings::setDockedElements ( const QStringList &elements )
159152{
160- for (int i = 0 ; i < m_dockedItems.count (); i++) {
161- if (m_dockedItems.at (i) == desktopfile) {
162- m_dockedItems.removeAt (i);
163- break ;
164- }
165- }
166- dockedItemsPersisted ();
153+ m_dockedElements = elements;
154+ Q_EMIT dockedElementsChanged ();
155+ saveDockedElements ();
156+ }
157+
158+ void TaskManagerSettings::appendDockedElements (const QString &element)
159+ {
160+ m_dockedElements.append (element);
161+ Q_EMIT dockedElementsChanged ();
162+ saveDockedElements ();
167163}
168164
169- QJsonArray TaskManagerSettings::dockedDesktopFiles ( )
165+ void TaskManagerSettings::removeDockedElements ( const QString &element )
170166{
171- return m_dockedItems;
167+ m_dockedElements.removeAll (element);
168+ Q_EMIT dockedElementsChanged ();
169+ saveDockedElements ();
172170}
173171
174172}
0 commit comments