diff --git a/discover/qml/ApplicationsListPage.qml b/discover/qml/ApplicationsListPage.qml --- a/discover/qml/ApplicationsListPage.qml +++ b/discover/qml/ApplicationsListPage.qml @@ -78,43 +78,53 @@ contextualActions: [ Kirigami.Action { - visible: !appsModel.sortByRelevancy text: i18n("Sort: %1", sortGroup.checkedAction.text) + Kirigami.Action { + ActionGroup.group: sortGroup + text: i18n("Relevancy") + checkable: true + checked: appsModel.sortByRelevancy + visible: appsModel.sortByRelevancy + } Action { ActionGroup.group: sortGroup text: i18n("Name") onTriggered: { + appsModel.sortByRelevancy = false DiscoverSettings[page.sortProperty] = ResourcesProxyModel.NameRole } checkable: true - checked: appsModel.sortRole === ResourcesProxyModel.NameRole + checked: !appsModel.sortByRelevancy && appsModel.sortRole === ResourcesProxyModel.NameRole } Action { ActionGroup.group: sortGroup text: i18n("Rating") onTriggered: { + appsModel.sortByRelevancy = false DiscoverSettings[page.sortProperty] = ResourcesProxyModel.SortableRatingRole } checkable: true - checked: appsModel.sortRole === ResourcesProxyModel.SortableRatingRole + checked: !appsModel.sortByRelevancy && appsModel.sortRole === ResourcesProxyModel.SortableRatingRole } Action { ActionGroup.group: sortGroup text: i18n("Size") onTriggered: { + appsModel.sortByRelevancy = false DiscoverSettings[page.sortProperty] = ResourcesProxyModel.SizeRole } checkable: true - checked: appsModel.sortRole === ResourcesProxyModel.SizeRole + checked: !appsModel.sortByRelevancy && appsModel.sortRole === ResourcesProxyModel.SizeRole } Action { ActionGroup.group: sortGroup text: i18n("Release Date") onTriggered: { + appsModel.sortByRelevancy = false DiscoverSettings[page.sortProperty] = ResourcesProxyModel.ReleaseDateRole } checkable: true - checked: appsModel.sortRole === ResourcesProxyModel.ReleaseDateRole + checked: !appsModel.sortByRelevancy && appsModel.sortRole === ResourcesProxyModel.ReleaseDateRole } } ] diff --git a/libdiscover/resources/ResourcesProxyModel.h b/libdiscover/resources/ResourcesProxyModel.h --- a/libdiscover/resources/ResourcesProxyModel.h +++ b/libdiscover/resources/ResourcesProxyModel.h @@ -53,7 +53,7 @@ Q_PROPERTY(QVariantList subcategories READ subcategories NOTIFY subcategoriesChanged) Q_PROPERTY(bool isBusy READ isBusy NOTIFY busyChanged) Q_PROPERTY(int count READ rowCount NOTIFY countChanged) - Q_PROPERTY(bool sortByRelevancy READ sortByRelevancy NOTIFY sortByRelevancyChanged) + Q_PROPERTY(bool sortByRelevancy READ sortByRelevancy WRITE setSortByRelevancy NOTIFY sortByRelevancyChanged) public: explicit ResourcesProxyModel(QObject* parent = nullptr); enum Roles { @@ -133,6 +133,8 @@ void classBegin() override {} void componentComplete() override; + void setSortByRelevancy(bool sortByRelevancy); + private Q_SLOTS: void refreshBackend(AbstractResourcesBackend* backend, const QVector& properties); void refreshResource(AbstractResource* resource, const QVector& properties); diff --git a/libdiscover/resources/ResourcesProxyModel.cpp b/libdiscover/resources/ResourcesProxyModel.cpp --- a/libdiscover/resources/ResourcesProxyModel.cpp +++ b/libdiscover/resources/ResourcesProxyModel.cpp @@ -116,8 +116,7 @@ if (diff) { m_filters.search = searchText; if (m_sortByRelevancy == searchText.isEmpty()) { - m_sortByRelevancy = !searchText.isEmpty(); - Q_EMIT sortByRelevancyChanged(m_sortByRelevancy); + setSortByRelevancy(!searchText.isEmpty()); } invalidateFilter(); Q_EMIT searchChanged(m_filters.search); @@ -599,3 +598,11 @@ { return m_sortByRelevancy; } + +void ResourcesProxyModel::setSortByRelevancy(bool sortByRelevancy) +{ + if (m_sortByRelevancy != sortByRelevancy) { + m_sortByRelevancy = sortByRelevancy; + Q_EMIT sortByRelevancyChanged(sortByRelevancy); + } +}