KWin
Loading...
Searching...
No Matches
virtualdesktopmodel.cpp
Go to the documentation of this file.
1/*
2 SPDX-FileCopyrightText: 2021 Vlad Zahorodnii <vlad.zahorodnii@kde.org>
3
4 SPDX-License-Identifier: GPL-2.0-or-later
5*/
6
8#include "virtualdesktops.h"
9
10namespace KWin
11{
12
14 : QAbstractListModel(parent)
15{
16 VirtualDesktopManager *manager = VirtualDesktopManager::self();
17
19 this, &VirtualDesktopModel::handleVirtualDesktopAdded);
21 this, &VirtualDesktopModel::handleVirtualDesktopRemoved);
22
23 m_virtualDesktops = manager->desktops();
24}
25
26VirtualDesktop *VirtualDesktopModel::create(uint position, const QString &name)
27{
28 return VirtualDesktopManager::self()->createVirtualDesktop(position, name);
29}
30
31void VirtualDesktopModel::remove(uint position)
32{
33 if (position < m_virtualDesktops.count()) {
34 VirtualDesktopManager::self()->removeVirtualDesktop(m_virtualDesktops[position]);
35 }
36}
37
38void VirtualDesktopModel::handleVirtualDesktopAdded(VirtualDesktop *desktop)
39{
40 const int position = desktop->x11DesktopNumber() - 1;
41 beginInsertRows(QModelIndex(), position, position);
42 m_virtualDesktops.insert(position, desktop);
43 endInsertRows();
44}
45
46void VirtualDesktopModel::handleVirtualDesktopRemoved(VirtualDesktop *desktop)
47{
48 const int index = m_virtualDesktops.indexOf(desktop);
49 Q_ASSERT(index != -1);
50
51 beginRemoveRows(QModelIndex(), index, index);
52 m_virtualDesktops.removeAt(index);
53 endRemoveRows();
54}
55
56QHash<int, QByteArray> VirtualDesktopModel::roleNames() const
57{
58 QHash<int, QByteArray> roleNames = QAbstractListModel::roleNames();
59 roleNames.insert(DesktopRole, QByteArrayLiteral("desktop"));
60 return roleNames;
61}
62
63VirtualDesktop *VirtualDesktopModel::desktopFromIndex(const QModelIndex &index) const
64{
65 if (!index.isValid() || index.row() < 0 || index.row() >= m_virtualDesktops.count()) {
66 return nullptr;
67 }
68 return m_virtualDesktops[index.row()];
69}
70
71QVariant VirtualDesktopModel::data(const QModelIndex &index, int role) const
72{
73 VirtualDesktop *desktop = desktopFromIndex(index);
74 if (!desktop) {
75 return QVariant();
76 }
77 switch (role) {
78 case Qt::DisplayRole:
79 case DesktopRole:
80 return QVariant::fromValue(desktop);
81 default:
82 return QVariant();
83 }
84}
85
86int VirtualDesktopModel::rowCount(const QModelIndex &parent) const
87{
88 return parent.isValid() ? 0 : m_virtualDesktops.count();
89}
90
91} // namespace KWin
92
93#include "moc_virtualdesktopmodel.cpp"
Manages the number of available virtual desktops, the layout of those and which virtual desktop is th...
void desktopAdded(KWin::VirtualDesktop *desktop)
QList< VirtualDesktop * > desktops() const
void desktopRemoved(KWin::VirtualDesktop *desktop)
KWin::VirtualDesktop * create(uint position, const QString &name=QString())
int rowCount(const QModelIndex &parent=QModelIndex()) const override
VirtualDesktopModel(QObject *parent=nullptr)
QHash< int, QByteArray > roleNames() const override
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const override