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 {