2 * Copyright (C) 2010-2011 David Edmundson.
3 * Author: David Edmundson <kde@davidedmundson.co.uk>
5 * This library is free software; you can redistribute it and/or modify it under
6 * the terms of the GNU Lesser General Public License as published by the Free
7 * Software Foundation; either version 3 of the License, or (at your option) any
8 * later version. See http://www.gnu.org/copyleft/lgpl.html the full text of the
12 #include "QLightDM/SessionsModel"
14 #include <QtCore/QList>
15 #include <QtCore/QDir>
16 #include <QtCore/QVariant>
17 #include <QtCore/QSettings>
19 using namespace QLightDM;
23 class SessionsModelPrivate
26 QList<SessionItem> items;
32 //FIXME can I make these consts, if I set them in a lovely constructor?
38 SessionsModel::SessionsModel(QObject *parent) :
39 QAbstractListModel(parent),
40 d(new SessionsModelPrivate())
45 SessionsModel::~SessionsModel()
49 int SessionsModel::rowCount(const QModelIndex &parent) const
51 if (parent == QModelIndex()) { //if top level
52 return d->items.size();
54 return 0; // no child elements.
58 QVariant SessionsModel::data(const QModelIndex &index, int role) const
60 if (! index.isValid()) {
64 int row = index.row();
67 case SessionsModel::IdRole:
68 return d->items[row].id;
70 return d->items[row].name;
72 return d->items[row].comment;
78 void SessionsModel::buildList()
82 //FIXME don't hardcode this!
83 QDir sessionDir("/usr/share/xsessions");
84 sessionDir.setNameFilters(QStringList() << "*.desktop");
86 QList<SessionItem> items;
88 foreach(QString sessionFileName, sessionDir.entryList()) {
89 QSettings sessionData(sessionDir.filePath(sessionFileName), QSettings::IniFormat);
90 sessionData.beginGroup("Desktop Entry");
91 sessionFileName.chop(8);// chop(8) removes '.desktop'
94 item.id = sessionFileName;
95 item.name = sessionData.value("Name").toString();
96 item.comment = sessionData.value("Comment").toString();
100 beginInsertRows(QModelIndex(), 0, items.size());
101 d->items.append(items);