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

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 "windowtasksmodel.h"
0008 
0009 #include <config-X11.h>
0010 
0011 #include "waylandtasksmodel.h"
0012 #if HAVE_X11
0013 #include "xwindowtasksmodel.h"
0014 #endif
0015 
0016 #include <KWindowSystem>
0017 
0018 namespace TaskManager
0019 {
0020 class Q_DECL_HIDDEN WindowTasksModel::Private
0021 {
0022 public:
0023     Private(WindowTasksModel *q);
0024     ~Private();
0025 
0026     static int instanceCount;
0027     static AbstractTasksModel *sourceTasksModel;
0028 
0029     void initSourceTasksModel();
0030 
0031 private:
0032     WindowTasksModel *q;
0033 };
0034 
0035 int WindowTasksModel::Private::instanceCount = 0;
0036 AbstractTasksModel *WindowTasksModel::Private::sourceTasksModel = nullptr;
0037 
0038 WindowTasksModel::Private::Private(WindowTasksModel *q)
0039     : q(q)
0040 {
0041     ++instanceCount;
0042 }
0043 
0044 WindowTasksModel::Private::~Private()
0045 {
0046     --instanceCount;
0047 
0048     if (!instanceCount) {
0049         delete sourceTasksModel;
0050         sourceTasksModel = nullptr;
0051     }
0052 }
0053 
0054 void WindowTasksModel::Private::initSourceTasksModel()
0055 {
0056     if (!sourceTasksModel && KWindowSystem::isPlatformWayland()) {
0057         sourceTasksModel = new WaylandTasksModel();
0058     }
0059 
0060 #if HAVE_X11
0061     if (!sourceTasksModel && KWindowSystem::isPlatformX11()) {
0062         sourceTasksModel = new XWindowTasksModel();
0063     }
0064 #endif
0065 
0066     q->setSourceModel(sourceTasksModel);
0067 }
0068 
0069 WindowTasksModel::WindowTasksModel(QObject *parent)
0070     : QIdentityProxyModel(parent)
0071     , d(new Private(this))
0072 {
0073     d->initSourceTasksModel();
0074 }
0075 
0076 WindowTasksModel::~WindowTasksModel()
0077 {
0078 }
0079 
0080 QHash<int, QByteArray> WindowTasksModel::roleNames() const
0081 {
0082     if (d->sourceTasksModel) {
0083         return d->sourceTasksModel->roleNames();
0084     }
0085 
0086     return QHash<int, QByteArray>();
0087 }
0088 
0089 QModelIndex WindowTasksModel::mapIfaceToSource(const QModelIndex &index) const
0090 {
0091     return mapToSource(index);
0092 }
0093 
0094 }