diff --git a/applets/kicker/package/contents/config/main.xml b/applets/kicker/package/contents/config/main.xml --- a/applets/kicker/package/contents/config/main.xml +++ b/applets/kicker/package/contents/config/main.xml @@ -27,6 +27,10 @@ false + + + true + diff --git a/applets/kicker/package/contents/ui/ConfigGeneral.qml b/applets/kicker/package/contents/ui/ConfigGeneral.qml --- a/applets/kicker/package/contents/ui/ConfigGeneral.qml +++ b/applets/kicker/package/contents/ui/ConfigGeneral.qml @@ -37,6 +37,7 @@ property alias cfg_appNameFormat: appNameFormat.currentIndex property alias cfg_limitDepth: limitDepth.checked + property alias cfg_alphaSort: alphaSort.checked property alias cfg_showRecentApps: showRecentApps.checked property alias cfg_showRecentDocs: showRecentDocs.checked @@ -129,6 +130,12 @@ text: i18n("Flatten menu to a single level") } + + CheckBox { + id: alphaSort + + text: i18n("Sort alphabetically") + } } } diff --git a/applets/kicker/package/contents/ui/main.qml b/applets/kicker/package/contents/ui/main.qml --- a/applets/kicker/package/contents/ui/main.qml +++ b/applets/kicker/package/contents/ui/main.qml @@ -78,6 +78,7 @@ appNameFormat: plasmoid.configuration.appNameFormat flat: isDash ? true : plasmoid.configuration.limitDepth + sorted: plasmoid.configuration.alphaSort showSeparators: !isDash appletInterface: plasmoid diff --git a/applets/kicker/plugin/appentry.h b/applets/kicker/plugin/appentry.h --- a/applets/kicker/plugin/appentry.h +++ b/applets/kicker/plugin/appentry.h @@ -76,7 +76,7 @@ { public: AppGroupEntry(AppsModel *parentModel, KServiceGroup::Ptr group, - bool flat, bool separators, int appNameFormat); + bool flat, bool sorted, bool separators, int appNameFormat); QIcon icon() const; QString name() const; diff --git a/applets/kicker/plugin/appentry.cpp b/applets/kicker/plugin/appentry.cpp --- a/applets/kicker/plugin/appentry.cpp +++ b/applets/kicker/plugin/appentry.cpp @@ -292,10 +292,10 @@ } AppGroupEntry::AppGroupEntry(AppsModel *parentModel, KServiceGroup::Ptr group, - bool flat, bool separators, int appNameFormat) : AbstractGroupEntry(parentModel), + bool flat, bool sorted, bool separators, int appNameFormat) : AbstractGroupEntry(parentModel), m_group(group) { - AppsModel* model = new AppsModel(group->entryPath(), flat, separators, parentModel); + AppsModel* model = new AppsModel(group->entryPath(), flat, sorted, separators, parentModel); model->setAppNameFormat(appNameFormat); m_childModel = model; diff --git a/applets/kicker/plugin/appsmodel.h b/applets/kicker/plugin/appsmodel.h --- a/applets/kicker/plugin/appsmodel.h +++ b/applets/kicker/plugin/appsmodel.h @@ -35,12 +35,13 @@ Q_OBJECT Q_PROPERTY(bool flat READ flat WRITE setFlat NOTIFY flatChanged) + Q_PROPERTY(bool sorted READ sorted WRITE setSorted NOTIFY sortedChanged) Q_PROPERTY(bool showSeparators READ showSeparators WRITE setShowSeparators NOTIFY showSeparatorsChanged) Q_PROPERTY(int appNameFormat READ appNameFormat WRITE setAppNameFormat NOTIFY appNameFormatChanged) Q_PROPERTY(QObject* appletInterface READ appletInterface WRITE setAppletInterface NOTIFY appletInterfaceChanged); public: - explicit AppsModel(const QString &entryPath = QString(), bool flat = false, bool separators = true, QObject *parent = 0); + explicit AppsModel(const QString &entryPath = QString(), bool flat = false, bool sorted = true, bool separators = true, QObject *parent = 0); explicit AppsModel(const QList entryList, bool deleteEntriesOnDestruction, QObject *parent = 0); ~AppsModel(); @@ -63,6 +64,9 @@ bool flat() const; void setFlat(bool flat); + bool sorted() const; + void setSorted(bool sorted); + bool showSeparators() const; void setShowSeparators(bool showSeparators); @@ -79,6 +83,7 @@ Q_SIGNALS: void cleared() const; void flatChanged() const; + void sortedChanged() const; void showSeparatorsChanged() const; void appNameFormatChanged() const; void appletInterfaceChanged() const; @@ -109,7 +114,7 @@ bool m_staticEntryList; QTimer *m_changeTimer; bool m_flat; - bool m_sortNeeded; + bool m_sorted; AppEntry::NameFormat m_appNameFormat; QStringList m_hiddenEntries; static MenuEntryEditor *m_menuEntryEditor; diff --git a/applets/kicker/plugin/appsmodel.cpp b/applets/kicker/plugin/appsmodel.cpp --- a/applets/kicker/plugin/appsmodel.cpp +++ b/applets/kicker/plugin/appsmodel.cpp @@ -29,7 +29,7 @@ #include #include -AppsModel::AppsModel(const QString &entryPath, bool flat, bool separators, QObject *parent) +AppsModel::AppsModel(const QString &entryPath, bool flat, bool sorted, bool separators, QObject *parent) : AbstractModel(parent) , m_deleteEntriesOnDestruction(true) , m_separatorCount(0) @@ -40,7 +40,7 @@ , m_staticEntryList(false) , m_changeTimer(0) , m_flat(flat) -, m_sortNeeded(false) +, m_sorted(sorted) , m_appNameFormat(AppEntry::NameOnly) { if (!m_entryPath.isEmpty()) { @@ -59,7 +59,7 @@ , m_staticEntryList(true) , m_changeTimer(0) , m_flat(true) -, m_sortNeeded(false) +, m_sorted(true) , m_appNameFormat(AppEntry::NameOnly) { foreach(AbstractEntry *suggestedEntry, entryList) { @@ -293,6 +293,22 @@ } } +bool AppsModel::sorted() const +{ + return m_sorted; +} + +void AppsModel::setSorted(bool sorted) +{ + if (m_sorted != sorted) { + m_sorted = sorted; + + refresh(); + + emit sortedChanged(); + } +} + bool AppsModel::showSeparators() const { return m_showSeparators; @@ -383,7 +399,6 @@ m_hiddenEntries.clear(); m_separatorCount = 0; - m_sortNeeded = false; if (m_entryPath.isEmpty()) { KServiceGroup::Ptr group = KServiceGroup::root(); @@ -403,7 +418,7 @@ KServiceGroup::Ptr subGroup(static_cast(p.data())); if (!subGroup->noDisplay() && subGroup->childCount() > 0) { - AppGroupEntry *groupEntry = new AppGroupEntry(this, subGroup, m_flat, m_showSeparators, m_appNameFormat); + AppGroupEntry *groupEntry = new AppGroupEntry(this, subGroup, m_flat, m_sorted, m_showSeparators, m_appNameFormat); m_entryList << groupEntry; } } @@ -426,7 +441,7 @@ } } - if (m_sortNeeded) { + if (m_sorted) { sortEntries(); } } @@ -512,11 +527,11 @@ } if (m_flat) { - m_sortNeeded = true; + m_sorted = true; const KServiceGroup::Ptr serviceGroup(static_cast(p.data())); processServiceGroup(serviceGroup); } else { - AppGroupEntry *groupEntry = new AppGroupEntry(this, subGroup, m_flat, m_showSeparators, m_appNameFormat); + AppGroupEntry *groupEntry = new AppGroupEntry(this, subGroup, m_flat, m_sorted, m_showSeparators, m_appNameFormat); m_entryList << groupEntry; } } diff --git a/applets/kickoff/package/contents/config/main.xml b/applets/kickoff/package/contents/config/main.xml --- a/applets/kickoff/package/contents/config/main.xml +++ b/applets/kickoff/package/contents/config/main.xml @@ -43,5 +43,9 @@ bookmark:t,application:t,computer:t,used:t,leave:t + + + true + diff --git a/applets/kickoff/package/contents/ui/FullRepresentation.qml b/applets/kickoff/package/contents/ui/FullRepresentation.qml --- a/applets/kickoff/package/contents/ui/FullRepresentation.qml +++ b/applets/kickoff/package/contents/ui/FullRepresentation.qml @@ -62,6 +62,7 @@ appNameFormat: plasmoid.configuration.showAppsByName ? 0 : 1 flat: false + sorted: plasmoid.configuration.alphaSort showSeparators: false favoritesModel: Kicker.FavoritesModel {