diff --git a/src/sessionmodel.h b/src/sessionmodel.h --- a/src/sessionmodel.h +++ b/src/sessionmodel.h @@ -29,6 +29,12 @@ class SessionModel : public QAbstractListModel { Q_OBJECT Q_DISABLE_COPY(SessionModel) + + enum SessionType { + SessionTypeX, + SessionTypeWayland + }; + public: enum SessionRole { NameRole = Qt::DisplayRole, @@ -40,6 +46,8 @@ SessionModel(QObject *parent = 0); ~SessionModel(); + void loadDir(const QString &path, SessionType type); + QHash roleNames() const override; int rowCount(const QModelIndex &parent = QModelIndex()) const override; diff --git a/src/sessionmodel.cpp b/src/sessionmodel.cpp --- a/src/sessionmodel.cpp +++ b/src/sessionmodel.cpp @@ -26,6 +26,9 @@ #include +#include + + class Session { public: QString file; @@ -43,8 +46,17 @@ }; SessionModel::SessionModel(QObject *parent) : QAbstractListModel(parent), d(new SessionModelPrivate()) { - // read session files - QDir dir("/usr/share/xsessions"); + loadDir("/usr/share/xsessions", SessionTypeX); + loadDir("/usr/share/wayland-sessions", SessionTypeWayland); +} + +SessionModel::~SessionModel() { + delete d; +} + +void SessionModel::loadDir(const QString &path, SessionType type) +{ + QDir dir(path); dir.setNameFilters(QStringList() << "*.desktop"); dir.setFilter(QDir::Files); // read session @@ -56,8 +68,13 @@ QTextStream in(&inputFile); while (!in.atEnd()) { QString line = in.readLine(); - if (line.startsWith("Name=")) + if (line.startsWith("Name=")) { si->name = line.mid(5); + if (type == SessionTypeWayland) { + //we want to exactly match the SDDM prompt which is formatted in this way + si->name += ' ' + i18nc("suffix listed in autologin combo box", "(wayland)"); + } + } if (line.startsWith("Exec=")) si->exec = line.mid(5); if (line.startsWith("Comment=")) @@ -70,10 +87,6 @@ } } -SessionModel::~SessionModel() { - delete d; -} - QHash SessionModel::roleNames() const { // set role names QHash roleNames;