File indexing completed on 2024-05-05 05:38:34

0001 /*
0002     SPDX-FileCopyrightText: 2016 Eike Hein <hein@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005 */
0006 
0007 #include "startuptasksmodel.h"
0008 #include "abstracttasksmodel.h"
0009 
0010 #include <config-X11.h>
0011 
0012 #include "waylandstartuptasksmodel.h"
0013 #if HAVE_X11
0014 #include "xstartuptasksmodel.h"
0015 #endif
0016 
0017 #include <KWindowSystem>
0018 
0019 namespace TaskManager
0020 {
0021 class Q_DECL_HIDDEN StartupTasksModel::Private
0022 {
0023 public:
0024     Private(StartupTasksModel *q);
0025     ~Private();
0026 
0027     static int instanceCount;
0028     static AbstractTasksModel *sourceTasksModel;
0029 
0030     void initSourceTasksModel();
0031 
0032 private:
0033     StartupTasksModel *q;
0034 };
0035 
0036 int StartupTasksModel::Private::instanceCount = 0;
0037 AbstractTasksModel *StartupTasksModel::Private::sourceTasksModel = nullptr;
0038 
0039 StartupTasksModel::Private::Private(StartupTasksModel *q)
0040     : q(q)
0041 {
0042     ++instanceCount;
0043 }
0044 
0045 StartupTasksModel::Private::~Private()
0046 {
0047     --instanceCount;
0048 
0049     if (!instanceCount) {
0050         delete sourceTasksModel;
0051         sourceTasksModel = nullptr;
0052     }
0053 }
0054 
0055 void StartupTasksModel::Private::initSourceTasksModel()
0056 {
0057     if (!sourceTasksModel && KWindowSystem::isPlatformWayland()) {
0058         sourceTasksModel = new WaylandStartupTasksModel();
0059     }
0060 
0061 #if HAVE_X11
0062     if (!sourceTasksModel && KWindowSystem::isPlatformX11()) {
0063         sourceTasksModel = new XStartupTasksModel();
0064     }
0065 #endif
0066 
0067     q->setSourceModel(sourceTasksModel);
0068 }
0069 
0070 StartupTasksModel::StartupTasksModel(QObject *parent)
0071     : QIdentityProxyModel(parent)
0072     , d(new Private(this))
0073 {
0074     d->initSourceTasksModel();
0075 }
0076 
0077 StartupTasksModel::~StartupTasksModel()
0078 {
0079 }
0080 
0081 QHash<int, QByteArray> StartupTasksModel::roleNames() const
0082 {
0083     if (d->sourceTasksModel) {
0084         return d->sourceTasksModel->roleNames();
0085     }
0086 
0087     return QHash<int, QByteArray>();
0088 }
0089 
0090 QModelIndex StartupTasksModel::mapIfaceToSource(const QModelIndex &index) const
0091 {
0092     return mapToSource(index);
0093 }
0094 
0095 }