KWin
Loading...
Searching...
No Matches
windowmodel.h
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
7#pragma once
8
9#include "virtualdesktops.h"
10
11#include <QAbstractListModel>
12#include <QPointer>
13#include <QSortFilterProxyModel>
14
15#include <optional>
16
17namespace KWin
18{
19class Window;
20class Output;
21
22class WindowModel : public QAbstractListModel
23{
24 Q_OBJECT
25
26public:
33
34 explicit WindowModel(QObject *parent = nullptr);
35
36 QHash<int, QByteArray> roleNames() const override;
37 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
38 int rowCount(const QModelIndex &parent = QModelIndex()) const override;
39
40private:
41 void markRoleChanged(Window *window, int role);
42
43 void handleWindowAdded(Window *window);
44 void handleWindowRemoved(Window *window);
45 void setupWindowConnections(Window *window);
46
47 QList<Window *> m_windows;
48};
49
50class WindowFilterModel : public QSortFilterProxyModel
51{
52 Q_OBJECT
54 Q_PROPERTY(QString activity READ activity WRITE setActivity RESET resetActivity NOTIFY activityChanged)
56 Q_PROPERTY(QString filter READ filter WRITE setFilter NOTIFY filterChanged)
57 Q_PROPERTY(QString screenName READ screenName WRITE setScreenName RESET resetScreenName NOTIFY screenNameChanged)
58 Q_PROPERTY(WindowTypes windowType READ windowType WRITE setWindowType RESET resetWindowType NOTIFY windowTypeChanged)
60
61public:
63 Normal = 0x1,
64 Dialog = 0x2,
65 Dock = 0x4,
66 Desktop = 0x8,
69 };
70 Q_DECLARE_FLAGS(WindowTypes, WindowType)
71 Q_FLAG(WindowTypes)
72
73 explicit WindowFilterModel(QObject *parent = nullptr);
74
75 WindowModel *windowModel() const;
77
78 QString activity() const;
79 void setActivity(const QString &activity);
80 void resetActivity();
81
82 VirtualDesktop *desktop() const;
84 void resetDesktop();
85
86 QString filter() const;
87 void setFilter(const QString &filter);
88
89 QString screenName() const;
90 void setScreenName(const QString &screenName);
91 void resetScreenName();
92
93 WindowTypes windowType() const;
94 void setWindowType(WindowTypes windowType);
95 void resetWindowType();
96
97 void setMinimizedWindows(bool show);
98 bool minimizedWindows() const;
99
100protected:
101 bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override;
102
103Q_SIGNALS:
111
112private:
113 WindowTypes windowTypeMask(Window *window) const;
114
115 WindowModel *m_windowModel = nullptr;
116 std::optional<QString> m_activity;
117 QPointer<Output> m_output;
118 QPointer<VirtualDesktop> m_desktop;
119 QString m_filter;
120 std::optional<WindowTypes> m_windowType;
121 bool m_showMinimizedWindows = true;
122};
123
124} // namespace KWin
KWin::VirtualDesktop * desktop
Definition windowmodel.h:55
void setFilter(const QString &filter)
void setDesktop(VirtualDesktop *desktop)
WindowModel * windowModel
Definition windowmodel.h:53
void setMinimizedWindows(bool show)
void setWindowModel(WindowModel *windowModel)
WindowFilterModel(QObject *parent=nullptr)
bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override
void setScreenName(const QString &screenName)
void setActivity(const QString &activity)
void setWindowType(WindowTypes windowType)
WindowModel(QObject *parent=nullptr)
int rowCount(const QModelIndex &parent=QModelIndex()) const override
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const override
QHash< int, QByteArray > roleNames() const override