10#include "virtualdesktops.h"
18 : QAbstractListModel(parent)
24 for (
Window *window : std::as_const(m_windows)) {
25 setupWindowConnections(window);
29void WindowModel::markRoleChanged(
Window *window,
int role)
31 const QModelIndex row = index(m_windows.indexOf(window), 0);
32 Q_EMIT dataChanged(row, row, {role});
35void WindowModel::setupWindowConnections(
Window *window)
48void WindowModel::handleWindowAdded(
Window *window)
50 beginInsertRows(QModelIndex(), m_windows.count(), m_windows.count());
51 m_windows.append(window);
54 setupWindowConnections(window);
57void WindowModel::handleWindowRemoved(
Window *window)
59 const int index = m_windows.indexOf(window);
60 Q_ASSERT(index != -1);
62 beginRemoveRows(QModelIndex(), index, index);
63 m_windows.removeAt(index);
70 {Qt::DisplayRole, QByteArrayLiteral(
"display")},
80 if (!index.isValid() || index.row() < 0 || index.row() >= m_windows.count()) {
84 Window *window = m_windows[index.row()];
88 return QVariant::fromValue(window);
90 return QVariant::fromValue(window->
output());
92 return QVariant::fromValue(window->
desktops());
102 return parent.isValid() ? 0 : m_windows.count();
106 : QSortFilterProxyModel(parent)
112 return m_windowModel;
121 setSourceModel(m_windowModel);
127 return m_activity.value_or(QString());
141 if (m_activity.has_value()) {
184 return m_output ? m_output->name() : QString();
189 Output *output = kwinApp()->outputBackend()->findOutput(screen);
190 if (m_output != output) {
208 return m_windowType.value_or(WindowTypes());
222 if (m_windowType.has_value()) {
223 m_windowType.reset();
231 if (m_showMinimizedWindows == show) {
235 m_showMinimizedWindows = show;
242 return m_showMinimizedWindows;
247 if (!m_windowModel) {
250 const QModelIndex index = m_windowModel->index(sourceRow, 0, sourceParent);
251 if (!index.isValid()) {
254 const QVariant data = index.
data();
255 if (!data.isValid()) {
260 Window *window = qvariant_cast<Window *>(data);
265 if (m_activity.has_value()) {
283 if (m_windowType.has_value()) {
284 if (!(windowTypeMask(window) & *m_windowType)) {
289 if (!m_filter.isEmpty()) {
290 if (window->
caption().contains(m_filter, Qt::CaseInsensitive)) {
293 if (window->
windowRole().contains(m_filter, Qt::CaseInsensitive)) {
296 if (window->
resourceName().contains(m_filter, Qt::CaseInsensitive)) {
299 if (window->
resourceClass().contains(m_filter, Qt::CaseInsensitive)) {
305 if (!m_showMinimizedWindows) {
311WindowFilterModel::WindowTypes WindowFilterModel::windowTypeMask(
Window *window)
const
318 }
else if (window->
isDock()) {
332#include "moc_windowmodel.cpp"
KWin::VirtualDesktop * desktop
void setFilter(const QString &filter)
void setDesktop(VirtualDesktop *desktop)
void windowModelChanged()
WindowModel * windowModel
void setMinimizedWindows(bool show)
void minimizedWindowsChanged()
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)
bool isOnActivity(const QString &activity) const
bool isNotification() const
bool isNormalWindow() const
bool isCriticalNotification() const
QList< KWin::VirtualDesktop * > desktops
bool isOnDesktop(VirtualDesktop *desktop) const
bool isOnOutput(Output *output) const
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
void windowRemoved(KWin::Window *)
void windowAdded(KWin::Window *)
const QList< Window * > windows() const