14#include <KLocalizedString>
27 : QAbstractItemModel(parent)
37 if (!
index.isValid()) {
41 if (m_clientList.isEmpty()) {
45 int clientIndex =
index.row();
46 if (clientIndex >= m_clientList.count()) {
49 Window *client = m_clientList[clientIndex];
57 return i18nc(
"Special entry in alt+tab list for minimizing all windows",
63 return QVariant::fromValue<void *>(client);
75 return QIcon::fromTheme(QStringLiteral(
"user-desktop"));
77 return client->
icon();
86 for (
Window *window : std::as_const(m_clientList)) {
87 if (window->caption().size() > caption.size()) {
88 caption = window->caption();
104 return m_clientList.count();
109 return QModelIndex();
114 if (row < 0 || column != 0 ||
parent.isValid()) {
115 return QModelIndex();
118 if (
index >= m_clientList.count() && !m_clientList.isEmpty()) {
119 return QModelIndex();
121 return createIndex(row, 0);
130 {
WIdRole, QByteArrayLiteral(
"windowId")},
132 {
IconRole, QByteArrayLiteral(
"icon")},
138 const int index = m_clientList.indexOf(client);
140 return QModelIndex();
144 return createIndex(row, column);
147void ClientModel::createFocusChainClientList(
Window *start)
160 m_mutableClientList += add;
163 }
while (c && c != stop);
166void ClientModel::createStackingOrderClientList(
Window *start)
170 auto c = stacking.first();
177 m_mutableClientList.removeAll(add);
178 m_mutableClientList.prepend(add);
180 m_mutableClientList += add;
183 if (
index >= stacking.size() - 1) {
186 c = stacking[++
index];
199 if (partialReset && !m_mutableClientList.isEmpty()) {
200 Window *firstClient = m_mutableClientList.constFirst();
206 m_mutableClientList.clear();
210 createFocusChainClientList(start);
214 createStackingOrderClientList(start);
221 std::stable_partition(m_mutableClientList.begin(), m_mutableClientList.end(), [](
const auto &client) {
222 return !client->isMinimized();
226 if (!m_mutableClientList.isEmpty()
231 m_mutableClientList.append(desktopClient);
235 if (m_clientList == m_mutableClientList) {
240 m_clientList = m_mutableClientList;
246 QModelIndex ind =
index(i, 0);
247 if (!ind.isValid()) {
250 Window *client = m_mutableClientList.at(i);
258 QModelIndex ind =
index(i, 0);
259 if (!ind.isValid()) {
269#include "moc_clientmodel.cpp"
QHash< int, QByteArray > roleNames() const override
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const override
@ CloseableRole
Window can be closed.
@ CaptionRole
The caption of Window.
@ DesktopNameRole
The name of the desktop the Window is on.
@ MinimizedRole
Window is minimized.
@ WIdRole
The window ID of Window.
QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const override
QModelIndex parent(const QModelIndex &child) const override
ClientModel(QObject *parent=nullptr)
int rowCount(const QModelIndex &parent=QModelIndex()) const override
void createClientList(bool partialReset=false)
Q_INVOKABLE QString longestCaption() const
int columnCount(const QModelIndex &parent=QModelIndex()) const override
ClientApplicationsMode clientApplicationsMode() const
@ AllWindowsCurrentApplication
Only Windows for the current application are included.
@ GroupByMinimized
Windows are grouped by whether they are minimized or not.
ClientSwitchingMode clientSwitchingMode() const
@ StackingOrderSwitching
Sort by current stacking order.
@ FocusChainSwitching
Sort by recently used. Most recently used Window is the first.
ShowDesktopMode showDesktopMode() const
@ ShowDesktopClient
A Window representing the desktop is included.
OrderMinimizedMode orderMinimizedMode() const
virtual Window * desktopClient() const =0
virtual Window * nextClientFocusChain(Window *client) const =0
virtual bool isInFocusChain(Window *client) const =0
virtual Window * firstClientFocusChain() const =0
virtual Window * clientToAddToList(Window *client) const =0
virtual QString desktopName(Window *client) const =0
virtual QList< Window * > stackingOrder() const =0
const TabBoxConfig & config() const
virtual Window * activeClient() const =0
void setCurrentIndex(const QModelIndex &index)
virtual void activateAndClose()=0
virtual void closeWindow()=0
virtual bool isCloseable() const =0