Phosphor
Qt6 / Wayland library suite for window-management tools
 
Loading...
Searching...
No Matches
ZoneCache.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2026 fuddlesworth
2// SPDX-License-Identifier: LGPL-2.1-or-later
3
4#pragma once
5
7
8#include <QHash>
9#include <QString>
10
11namespace PhosphorCompositor {
12
34{
35public:
37 QString zoneForWindow(const QString& windowId) const
38 {
39 return m_byInstance.value(::PhosphorIdentity::WindowId::extractInstanceId(windowId));
40 }
41
43 bool isSnapped(const QString& windowId) const
44 {
45 return !zoneForWindow(windowId).isEmpty();
46 }
47
52 bool setZone(const QString& windowId, const QString& zoneId)
53 {
54 const QString instanceId = ::PhosphorIdentity::WindowId::extractInstanceId(windowId);
55 // A composite with an empty instanceId ("appId|") is malformed: keying it
56 // would alias every empty-instance window onto one wildcard slot. Ignore.
57 if (instanceId.isEmpty()) {
58 return false;
59 }
60 if (zoneId.isEmpty()) {
61 return m_byInstance.remove(instanceId) > 0;
62 }
63 const auto it = m_byInstance.constFind(instanceId);
64 if (it != m_byInstance.constEnd() && it.value() == zoneId) {
65 return false;
66 }
67 m_byInstance.insert(instanceId, zoneId);
68 return true;
69 }
70
72 bool remove(const QString& windowId)
73 {
74 return m_byInstance.remove(::PhosphorIdentity::WindowId::extractInstanceId(windowId)) > 0;
75 }
76
77 void clear()
78 {
79 m_byInstance.clear();
80 }
81
82 int size() const
83 {
84 return m_byInstance.size();
85 }
86
87private:
88 QHash<QString, QString> m_byInstance;
89};
90
91} // namespace PhosphorCompositor
Compositor-agnostic snap-zone state cache.
Definition ZoneCache.h:34
bool setZone(const QString &windowId, const QString &zoneId)
Record windowId's zone.
Definition ZoneCache.h:52
QString zoneForWindow(const QString &windowId) const
The snap-zone UUID windowId occupies, or empty if it occupies none.
Definition ZoneCache.h:37
bool remove(const QString &windowId)
Remove windowId's entry. Returns true iff an entry was actually removed.
Definition ZoneCache.h:72
bool isSnapped(const QString &windowId) const
True iff windowId is snapped into a zone (has a non-empty entry).
Definition ZoneCache.h:43
void clear()
Definition ZoneCache.h:77
int size() const
Definition ZoneCache.h:82
Definition DaemonClient.h:22
QString extractInstanceId(const QString &windowId)
Extract the stable KWin instance identifier (UUID) from a full window ID.
Definition WindowId.h:75