on xenial help sign in
add support for searching apps by keywords
commit5a150f6ad189db464f4564d6c5690e22ba37fb50 authorMichael Zanetti <michael.zanetti@canonical.com> dateWed 16 Nov 2016, 19:52 (10 years ago) parente842fec
8 files changed+50−3
plugins/Greeter/Unity/Launcher/launcheritem.cpp+13 plugins/Greeter/Unity/Launcher/launcheritem.h+3 plugins/Unity/Launcher/appdrawermodel.cpp+3−1 plugins/Unity/Launcher/launcheritem.cpp+13 plugins/Unity/Launcher/launcheritem.h+4 plugins/Unity/Launcher/ualwrapper.cpp+3 plugins/Unity/Launcher/ualwrapper.h+1 plugins/Utils/appdrawerproxymodel.cpp+10−2
plugins/Greeter/Unity/Launcher/launcheritem.cpp+13
@@ -76,6 +76,19 @@ void LauncherItem::setIcon(const QString &icon)
7676 }
7777}
7878
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+
7992bool LauncherItem::pinned() const
8093{
8194 return m_pinned;
plugins/Greeter/Unity/Launcher/launcheritem.h+3
@@ -34,6 +34,7 @@ public:
3434 QString appId() const override;
3535 QString name() const override;
3636 QString icon() const override;
37+ QStringList keywords() const override;
3738 bool pinned() const override;
3839 bool running() const override;
3940 bool recent() const override;
@@ -49,6 +50,7 @@ public:
4950private:
5051 void setName(const QString &name);
5152 void setIcon(const QString &icon);
53+ void setKeywords(const QStringList &keywords);
5254 void setPinned(bool pinned);
5355 void setRunning(bool running);
5456 void setRecent(bool recent);
@@ -63,6 +65,7 @@ private:
6365 QString m_appId;
6466 QString m_name;
6567 QString m_icon;
68+ QStringList m_keywords;
6669 bool m_pinned;
6770 bool m_running;
6871 bool m_recent;
plugins/Unity/Launcher/appdrawermodel.cpp+3−1
@@ -14,7 +14,7 @@ AppDrawerModel::AppDrawerModel(QObject *parent):
1414 continue;
1515 }
1616 m_list.append(new LauncherItem(appId, info.name, info.icon, this));
17− qDebug() << "added" << appId;
17+ m_list.last()->setKeywords(info.keywords);
1818 }
1919 qsrand(QDateTime::currentMSecsSinceEpoch() / 100);
2020}
@@ -34,6 +34,8 @@ QVariant AppDrawerModel::data(const QModelIndex &index, int role) const
3434 return m_list.at(index.row())->name();
3535 case RoleIcon:
3636 return m_list.at(index.row())->icon();
37+ case RoleKeywords:
38+ return m_list.at(index.row())->keywords();
3739 case RoleUsage:
3840 // FIXME: u-a-l needs to provide API for usage stats.
3941 return qrand();
plugins/Unity/Launcher/launcheritem.cpp+13
@@ -89,6 +89,19 @@ void LauncherItem::setIcon(const QString &icon)
8989 }
9090}
9191
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+
92105bool LauncherItem::pinned() const
93106{
94107 return m_pinned;
plugins/Unity/Launcher/launcheritem.h+4
@@ -37,6 +37,7 @@ public:
3737 QString appId() const override;
3838 QString name() const override;
3939 QString icon() const override;
40+ QStringList keywords() const override;
4041 bool pinned() const override;
4142 bool running() const override;
4243 bool recent() const override;
@@ -52,6 +53,7 @@ public:
5253private:
5354 void setName(const QString &name);
5455 void setIcon(const QString &icon);
56+ void setKeywords(const QStringList &keywords);
5557 void setPinned(bool pinned);
5658 void setRunning(bool running);
5759 void setRecent(bool recent);
@@ -66,6 +68,7 @@ private:
6668 QString m_appId;
6769 QString m_name;
6870 QString m_icon;
71+ QStringList m_keywords;
6972 bool m_pinned;
7073 bool m_running;
7174 bool m_recent;
@@ -79,6 +82,7 @@ private:
7982 QuickListEntry m_quitAction;
8083
8184 friend class LauncherModel;
85+ friend class AppDrawerModel;
8286};
8387
8488#endif // LAUNCHERITEM_H
plugins/Unity/Launcher/ualwrapper.cpp+3
@@ -45,6 +45,9 @@ UalWrapper::AppInfo UalWrapper::getApplicationInfo(const QString &appId)
4545
4646 info.name = QString::fromStdString(ualApp->info()->name());
4747 info.icon = QString::fromStdString(ualApp->info()->iconPath());
48+ for (const std::string &keyword : ualApp->info()->keywords().value()) {
49+ info.keywords << QString::fromStdString(keyword);
50+ }
4851 info.valid = true;
4952 } catch(std::runtime_error &e) {
5053 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:
88 bool valid = false;
99 QString name;
1010 QString icon;
11+ QStringList keywords;
1112 };
1213
1314 UalWrapper(QObject* parent = nullptr);
plugins/Utils/appdrawerproxymodel.cpp+10−2
@@ -136,8 +136,16 @@ bool AppDrawerProxyModel::filterAcceptsRow(int source_row, const QModelIndex &so
136136 }
137137 }
138138 if (!m_filterString.isEmpty()) {
139− QString currentLabel = m_source->data(m_source->index(source_row, 0), AppDrawerModelInterface::RoleName).toString().toLower();
140− if (!currentLabel.startsWith(m_filterString.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) {
143+ if (currentWord.toLower().startsWith(m_filterString.toLower())) {
144+ found = true;
145+ break;
146+ }
147+ }
148+ if (!found) {
141149 return false;
142150 }
143151 }