+void DolphinFacetsWidget::updateTagsSelector()
+{
+ const bool hasListedTags = !m_tagsSelector->menu()->isEmpty();
+ const bool hasSelectedTags = !m_searchTags.isEmpty();
+
+ if (hasSelectedTags) {
+ const QString tagsText = m_searchTags.join(i18nc("String list separator", ", "));
+ m_tagsSelector->setText(i18ncp("@action:button %2 is a list of tags",
+ "Tag: %2", "Tags: %2",m_searchTags.count(), tagsText));
+ } else {
+ m_tagsSelector->setText(i18nc("@action:button", "Add Tags"));
+ }
+
+ m_tagsSelector->setEnabled(isEnabled() && (hasListedTags || hasSelectedTags));
+}
+
+void DolphinFacetsWidget::updateTagsMenu()
+{
+ updateTagsMenuItems({}, {});
+ m_tagsLister.openUrl(QUrl(QStringLiteral("tags:/")), KCoreDirLister::OpenUrlFlag::Reload);
+}
+
+void DolphinFacetsWidget::updateTagsMenuItems(const QUrl&, const KFileItemList& items)
+{
+ m_tagsSelector->menu()->clear();
+
+ QStringList allTags = QStringList(m_searchTags);
+ for (const KFileItem &item: items) {
+ allTags.append(item.name());
+ }
+ allTags.sort(Qt::CaseInsensitive);
+ allTags.removeDuplicates();
+
+ for (const QString& tagName : qAsConst(allTags)) {
+ QAction* action = m_tagsSelector->menu()->addAction(QIcon::fromTheme(QStringLiteral("tag")), tagName);
+ action->setCheckable(true);
+ action->setChecked(m_searchTags.contains(tagName));
+
+ connect(action, &QAction::triggered, this, [this, tagName](bool isChecked) {
+ if (isChecked) {
+ addSearchTag(tagName);
+ } else {
+ removeSearchTag(tagName);
+ }
+ emit facetChanged();
+
+ m_tagsSelector->menu()->show();
+ });
+ }
+
+ updateTagsSelector();
+}