6#include <phosphorsnapengine_export.h>
36 explicit SnapState(
const QString& screenId, QObject* parent =
nullptr);
61 void assignWindowToZones(
const QString& windowId,
const QStringList& zoneIds,
const QString& screenId,
65 bool wasAssigned =
false;
66 bool lastUsedZoneCleared =
false;
81 return m_windowScreenAssignments;
85 return m_windowDesktopAssignments;
89 if (m_windowScreenAssignments == s) {
92 m_windowScreenAssignments = s;
93 Q_EMIT stateChanged();
97 if (m_windowDesktopAssignments == d) {
100 m_windowDesktopAssignments = d;
101 Q_EMIT stateChanged();
129 return m_preFloatZoneAssignments;
133 return m_preFloatScreenAssignments;
137 if (m_preFloatScreenAssignments == a) {
140 m_preFloatScreenAssignments = a;
141 Q_EMIT stateChanged();
169 void restoreLastUsedZone(
const QString& zoneId,
const QString& screenId,
const QString& zoneClass,
int desktop);
173 return m_lastUsedZoneId;
177 return m_lastUsedScreenId;
181 return m_lastUsedZoneClass;
185 return m_lastUsedDesktop;
189 if (m_lastUsedZoneClass == newClass) {
192 m_lastUsedZoneClass = newClass;
193 Q_EMIT stateChanged();
203 return m_userSnappedClasses;
207 if (m_userSnappedClasses == classes) {
210 m_userSnappedClasses = classes;
211 Q_EMIT stateChanged();
242 return m_windowZoneAssignments;
247 if (m_windowZoneAssignments == zones) {
250 m_windowZoneAssignments = zones;
251 Q_EMIT stateChanged();
255 if (m_floatingWindows == windows) {
258 m_floatingWindows = windows;
259 Q_EMIT stateChanged();
263 if (m_preFloatZoneAssignments == a) {
266 m_preFloatZoneAssignments = a;
267 Q_EMIT stateChanged();
277 bool removeWindowData(
const QString& windowId);
286 UnassignResult clearZoneAssignment(
const QString& windowId,
bool preserveScreenAndDesktop);
288 QSet<QString> allManagedWindowIds()
const
291 all.reserve(m_windowZoneAssignments.size() + m_floatingWindows.size() + m_autoSnappedWindows.size());
292 for (
auto it = m_windowZoneAssignments.constBegin(); it != m_windowZoneAssignments.constEnd(); ++it) {
293 all.insert(it.key());
295 all.unite(m_floatingWindows);
296 all.unite(m_autoSnappedWindows);
302 QHash<QString, QStringList> m_windowZoneAssignments;
303 QHash<QString, QString> m_windowScreenAssignments;
304 QHash<QString, int> m_windowDesktopAssignments;
305 QSet<QString> m_floatingWindows;
306 QHash<QString, QStringList> m_preFloatZoneAssignments;
307 QHash<QString, QString> m_preFloatScreenAssignments;
309 QString m_lastUsedZoneId;
310 QString m_lastUsedScreenId;
311 QString m_lastUsedZoneClass;
312 int m_lastUsedDesktop = 0;
314 QSet<QString> m_userSnappedClasses;
315 QSet<QString> m_autoSnappedWindows;
Per-screen placement state contract.
Definition IPlacementState.h:26
Per-screen snap placement state.
Definition SnapState.h:32
void setFloatingOnScreen(const QString &windowId, const QString &screenId, int virtualDesktop)
Mark a window floating AND record its screen+desktop without a zone.
void setUserSnappedClasses(const QSet< QString > &classes)
Definition SnapState.h:205
SnapState(const QString &screenId, QObject *parent=nullptr)
void windowClosed(const QString &windowId)
QString preFloatScreen(const QString &windowId) const
bool isFloating(const QString &windowId) const override
Whether the window is floating (excluded from placement).
void markAsAutoSnapped(const QString &windowId)
void assignWindowToZones(const QString &windowId, const QStringList &zoneIds, const QString &screenId, int virtualDesktop)
QStringList zonesForWindow(const QString &windowId) const
QString lastUsedZoneClass() const
Definition SnapState.h:179
SnapState(const SnapState &)=delete
UnassignResult unassignWindow(const QString &windowId)
void setFloatingWindows(const QSet< QString > &windows)
Definition SnapState.h:253
QStringList managedWindows() const override
All windows managed by this state (tiled + floating).
void setScreenAssignments(const QHash< QString, QString > &s)
Definition SnapState.h:87
QString screenId() const override
Screen this state object manages.
QStringList rotateAssignments(bool clockwise)
Rotate zone assignments: each window moves to the next/previous zone in zone-number order.
bool containsWindow(const QString &windowId) const override
Whether the window is in this state's managed set.
QString preFloatZone(const QString &windowId) const
void restoreLastUsedZone(const QString &zoneId, const QString &screenId, const QString &zoneClass, int desktop)
Restore last-used zone fields from persistence without emitting stateChanged.
const QSet< QString > & userSnappedClasses() const
Definition SnapState.h:201
UnassignResult unsnapForFloat(const QString &windowId)
Save zone assignment before floating for later restore.
void clearPreFloatZone(const QString &windowId)
QString lastUsedScreenId() const
Definition SnapState.h:175
QSet< QString > buildOccupiedZoneSet(const QString &screenFilter={}, int desktopFilter=0) const
Build the set of zone IDs currently occupied by snapped windows.
void addPreFloatZone(const QString &windowId, const QStringList &zoneIds)
const QHash< QString, int > & desktopAssignments() const
Definition SnapState.h:83
int pruneStaleAssignments(const QSet< QString > &aliveWindowIds)
Remove zone/screen/desktop assignments for windows not in the alive set.
void retagLastUsedZoneClass(const QString &newClass)
Definition SnapState.h:187
const QHash< QString, QStringList > & preFloatZoneAssignments() const
Definition SnapState.h:127
QStringList snappedWindows() const
QJsonObject toJson() const override
Serialize to JSON for session persistence.
void setPreFloatScreenAssignments(const QHash< QString, QString > &a)
Definition SnapState.h:135
bool isWindowSnapped(const QString &windowId) const
QStringList windowsInZone(const QString &zoneId) const
QStringList preFloatZones(const QString &windowId) const
void addPreFloatScreen(const QString &windowId, const QString &screenId)
QString placementIdForWindow(const QString &windowId) const override
Opaque placement identifier for the window's current slot.
QString lastUsedZoneId() const
Definition SnapState.h:171
void recordSnapIntent(const QString &windowClass, bool wasUserInitiated)
void updateLastUsedZone(const QString &zoneId, const QString &screenId, const QString &windowClass, int virtualDesktop)
Update last-used zone and emit stateChanged.
QString zoneForWindow(const QString &windowId) const
const QHash< QString, QString > & screenAssignments() const
Definition SnapState.h:79
void assignWindowToZone(const QString &windowId, const QString &zoneId, const QString &screenId, int virtualDesktop)
void windowAssigned(const QString &windowId, const QString &zoneId)
void setZoneAssignments(const QHash< QString, QStringList > &zones)
Definition SnapState.h:245
bool clearAutoSnapped(const QString &windowId)
SnapState & operator=(const SnapState &)=delete
int desktopForWindow(const QString &windowId) const
QStringList floatingWindows() const override
All currently-floating windows.
int windowCount() const override
Total number of managed windows (tiled + floating).
static SnapState * fromJson(const QJsonObject &json, QObject *parent=nullptr)
void setFloating(const QString &windowId, bool floating)
void floatingChanged(const QString &windowId, bool floating)
QString screenForWindow(const QString &windowId) const
const QHash< QString, QString > & preFloatScreenAssignments() const
Definition SnapState.h:131
void windowUnassigned(const QString &windowId)
int lastUsedDesktop() const
Definition SnapState.h:183
const QHash< QString, QStringList > & zoneAssignments() const
Definition SnapState.h:240
void setPreFloatZoneAssignments(const QHash< QString, QStringList > &a)
Definition SnapState.h:261
void setDesktopAssignments(const QHash< QString, int > &d)
Definition SnapState.h:95
bool isAutoSnapped(const QString &windowId) const
Definition WindowTrackingService.h:37
Definition SnapState.h:64