on xenial help sign in
add support for searching apps by keywords
5a150f6Michael Zanetti
plugins/Greeter/Unity/Launcher/launcheritem.cpp+13
@@ -76,6 +76,19 @@ void LauncherItem::setIcon(const QString &icon)
76 }
76 }
77}
77}
78
78
79+QStringList LauncherItem::keywords() const
80+{
81+ return m_keywords;
82+}
83+
84+void LauncherItem::setKeywords(const QStringList &keywords)
85+{
86+ if (m_keywords != keywords) {
87+ m_keywords = keywords;
88+ Q_EMIT keywordsChanged(keywords);
89+ }
90+}
91+
79bool LauncherItem::pinned() const
92bool LauncherItem::pinned() const
80{
93{
81 return m_pinned;
94 return m_pinned;
plugins/Greeter/Unity/Launcher/launcheritem.h+3
@@ -34,6 +34,7 @@ public:
34 QString appId() const override;
34 QString appId() const override;
35 QString name() const override;
35 QString name() const override;
36 QString icon() const override;
36 QString icon() const override;
37+ QStringList keywords() const override;
37 bool pinned() const override;
38 bool pinned() const override;
38 bool running() const override;
39 bool running() const override;
39 bool recent() const override;
40 bool recent() const override;
@@ -49,6 +50,7 @@ public:
49private:
50private:
50 void setName(const QString &name);
51 void setName(const QString &name);
51 void setIcon(const QString &icon);
52 void setIcon(const QString &icon);
53+ void setKeywords(const QStringList &keywords);
52 void setPinned(bool pinned);
54 void setPinned(bool pinned);
53 void setRunning(bool running);
55 void setRunning(bool running);
54 void setRecent(bool recent);
56 void setRecent(bool recent);
@@ -63,6 +65,7 @@ private:
63 QString m_appId;
65 QString m_appId;
64 QString m_name;
66 QString m_name;
65 QString m_icon;
67 QString m_icon;
68+ QStringList m_keywords;
66 bool m_pinned;
69 bool m_pinned;
67 bool m_running;
70 bool m_running;
68 bool m_recent;
71 bool m_recent;
plugins/Unity/Launcher/appdrawermodel.cpp+3−1
@@ -14,7 +14,7 @@ AppDrawerModel::AppDrawerModel(QObject *parent):
14 continue;
14 continue;
15 }
15 }
16 m_list.append(new LauncherItem(appId, info.name, info.icon, this));
16 m_list.append(new LauncherItem(appId, info.name, info.icon, this));
17− qDebug() << "added" << appId;
17+ m_list.last()->setKeywords(info.keywords);
18 }
18 }
19 qsrand(QDateTime::currentMSecsSinceEpoch() / 100);
19 qsrand(QDateTime::currentMSecsSinceEpoch() / 100);
20}
20}
@@ -34,6 +34,8 @@ QVariant AppDrawerModel::data(const QModelIndex &index, int role) const
34 return m_list.at(index.row())->name();
34 return m_list.at(index.row())->name();
35 case RoleIcon:
35 case RoleIcon:
36 return m_list.at(index.row())->icon();
36 return m_list.at(index.row())->icon();
37+ case RoleKeywords:
38+ return m_list.at(index.row())->keywords();
37 case RoleUsage:
39 case RoleUsage:
38 // FIXME: u-a-l needs to provide API for usage stats.
40 // FIXME: u-a-l needs to provide API for usage stats.
39 return qrand();
41 return qrand();
plugins/Unity/Launcher/launcheritem.cpp+13
@@ -89,6 +89,19 @@ void LauncherItem::setIcon(const QString &icon)
89 }
89 }
90}
90}
91
91
92+QStringList LauncherItem::keywords() const
93+{
94+ return m_keywords;
95+}
96+
97+void LauncherItem::setKeywords(const QStringList &keywords)
98+{
99+ if (m_keywords != keywords) {
100+ m_keywords = keywords;
101+ Q_EMIT keywordsChanged(keywords);
102+ }
103+}
104+
92bool LauncherItem::pinned() const
105bool LauncherItem::pinned() const
93{
106{
94 return m_pinned;
107 return m_pinned;
plugins/Unity/Launcher/launcheritem.h+4
@@ -37,6 +37,7 @@ public:
37 QString appId() const override;
37 QString appId() const override;
38 QString name() const override;
38 QString name() const override;
39 QString icon() const override;
39 QString icon() const override;
40+ QStringList keywords() const override;
40 bool pinned() const override;
41 bool pinned() const override;
41 bool running() const override;
42 bool running() const override;
42 bool recent() const override;
43 bool recent() const override;
@@ -52,6 +53,7 @@ public:
52private:
53private:
53 void setName(const QString &name);
54 void setName(const QString &name);
54 void setIcon(const QString &icon);
55 void setIcon(const QString &icon);
56+ void setKeywords(const QStringList &keywords);
55 void setPinned(bool pinned);
57 void setPinned(bool pinned);
56 void setRunning(bool running);
58 void setRunning(bool running);
57 void setRecent(bool recent);
59 void setRecent(bool recent);
@@ -66,6 +68,7 @@ private:
66 QString m_appId;
68 QString m_appId;
67 QString m_name;
69 QString m_name;
68 QString m_icon;
70 QString m_icon;
71+ QStringList m_keywords;
69 bool m_pinned;
72 bool m_pinned;
70 bool m_running;
73 bool m_running;
71 bool m_recent;
74 bool m_recent;
@@ -79,6 +82,7 @@ private:
79 QuickListEntry m_quitAction;
82 QuickListEntry m_quitAction;
80
83
81 friend class LauncherModel;
84 friend class LauncherModel;
85+ friend class AppDrawerModel;
82};
86};
83
87
84#endif // LAUNCHERITEM_H
88#endif // LAUNCHERITEM_H
plugins/Unity/Launcher/ualwrapper.cpp+3
@@ -45,6 +45,9 @@ UalWrapper::AppInfo UalWrapper::getApplicationInfo(const QString &appId)
45
45
46 info.name = QString::fromStdString(ualApp->info()->name());
46 info.name = QString::fromStdString(ualApp->info()->name());
47 info.icon = QString::fromStdString(ualApp->info()->iconPath());
47 info.icon = QString::fromStdString(ualApp->info()->iconPath());
48+ for (const std::string &keyword : ualApp->info()->keywords().value()) {
49+ info.keywords << QString::fromStdString(keyword);
50+ }
48 info.valid = true;
51 info.valid = true;
49 } catch(std::runtime_error &e) {
52 } catch(std::runtime_error &e) {
50 qWarning() << "ubuntu-app-launch threw an exception getting app info for appId:" << appId << ":" << e.what();
53 qWarning() << "ubuntu-app-launch threw an exception getting app info for appId:" << appId << ":" << e.what();
plugins/Unity/Launcher/ualwrapper.h+1
@@ -8,6 +8,7 @@ public:
8 bool valid = false;
8 bool valid = false;
9 QString name;
9 QString name;
10 QString icon;
10 QString icon;
11+ QStringList keywords;
11 };
12 };
12
13
13 UalWrapper(QObject* parent = nullptr);
14 UalWrapper(QObject* parent = nullptr);
plugins/Utils/appdrawerproxymodel.cpp+10−2
@@ -136,8 +136,16 @@ bool AppDrawerProxyModel::filterAcceptsRow(int source_row, const QModelIndex &so
136 }
136 }
137 }
137 }
138 if (!m_filterString.isEmpty()) {
138 if (!m_filterString.isEmpty()) {
139− QString currentLabel = m_source->data(m_source->index(source_row, 0), AppDrawerModelInterface::RoleName).toString().toLower();
139+ QStringList allWords = m_source->data(m_source->index(source_row, 0), AppDrawerModelInterface::RoleKeywords).toStringList();
140+ allWords.prepend(m_source->data(m_source->index(source_row, 0), AppDrawerModelInterface::RoleName).toString());
141+ bool found = false;
142+ Q_FOREACH (const QString currentWord, allWords) {
140− if (!currentLabel.startsWith(m_filterString.toLower())) {
143+ if (currentWord.toLower().startsWith(m_filterString.toLower())) {
144+ found = true;
145+ break;
146+ }
147+ }
148+ if (!found) {
141 return false;
149 return false;
142 }
150 }
143 }
151 }