6#include <phosphorsnapengine_export.h>
37 explicit SnapState(
const QString& screenId, QObject* parent =
nullptr);
53 m_windowRegistry = registry;
75 void assignWindowToZones(
const QString& windowId,
const QStringList& zoneIds,
const QString& screenId,
79 bool wasAssigned =
false;
80 bool lastUsedZoneCleared =
false;
110 return m_windowScreenAssignments;
114 return m_windowDesktopAssignments;
118 if (m_windowScreenAssignments == s) {
121 m_windowScreenAssignments = s;
122 Q_EMIT stateChanged();
126 if (m_windowDesktopAssignments == d) {
129 m_windowDesktopAssignments = d;
130 Q_EMIT stateChanged();
158 return m_preFloatZoneAssignments;
162 return m_preFloatScreenAssignments;
166 if (m_preFloatScreenAssignments == a) {
169 m_preFloatScreenAssignments = a;
170 Q_EMIT stateChanged();
198 void restoreLastUsedZone(
const QString& zoneId,
const QString& screenId,
const QString& zoneClass,
int desktop);
202 return m_lastUsedZoneId;
206 return m_lastUsedScreenId;
210 return m_lastUsedZoneClass;
214 return m_lastUsedDesktop;
218 if (m_lastUsedZoneClass == newClass) {
221 m_lastUsedZoneClass = newClass;
222 Q_EMIT stateChanged();
232 return m_userSnappedClasses;
236 if (m_userSnappedClasses == classes) {
239 m_userSnappedClasses = classes;
240 Q_EMIT stateChanged();
271 return m_windowZoneAssignments;
276 if (m_windowZoneAssignments == zones) {
279 m_windowZoneAssignments = zones;
280 Q_EMIT stateChanged();
284 if (m_floatingWindows == windows) {
287 m_floatingWindows = windows;
288 Q_EMIT stateChanged();
292 if (m_preFloatZoneAssignments == a) {
295 m_preFloatZoneAssignments = a;
296 Q_EMIT stateChanged();
313 QString canonicalizeForLookup(
const QString& rawWindowId)
const;
315 bool removeWindowData(
const QString& windowId);
324 UnassignResult clearZoneAssignment(
const QString& windowId,
bool preserveScreenAndDesktop);
326 QSet<QString> allManagedWindowIds()
const
329 all.reserve(m_windowZoneAssignments.size() + m_floatingWindows.size() + m_autoSnappedWindows.size());
330 for (
auto it = m_windowZoneAssignments.constBegin(); it != m_windowZoneAssignments.constEnd(); ++it) {
331 all.insert(it.key());
333 all.unite(m_floatingWindows);
334 all.unite(m_autoSnappedWindows);
343 QHash<QString, QStringList> m_windowZoneAssignments;
344 QHash<QString, QString> m_windowScreenAssignments;
345 QHash<QString, int> m_windowDesktopAssignments;
346 QSet<QString> m_floatingWindows;
347 QHash<QString, QStringList> m_preFloatZoneAssignments;
348 QHash<QString, QString> m_preFloatScreenAssignments;
350 QString m_lastUsedZoneId;
351 QString m_lastUsedScreenId;
352 QString m_lastUsedZoneClass;
353 int m_lastUsedDesktop = 0;
355 QSet<QString> m_userSnappedClasses;
356 QSet<QString> m_autoSnappedWindows;
Per-screen placement state contract.
Definition IPlacementState.h:26
Definition IWindowRegistry.h:12
Per-screen snap placement state.
Definition SnapState.h:33
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:234
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:208
SnapState(const SnapState &)=delete
UnassignResult unassignWindow(const QString &windowId)
void setFloatingWindows(const QSet< QString > &windows)
Definition SnapState.h:282
QStringList managedWindows() const override
All windows managed by this state (tiled + floating).
void setScreenAssignments(const QHash< QString, QString > &s)
Definition SnapState.h:116
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:230
UnassignResult unsnapForFloat(const QString &windowId)
Save zone assignment before floating for later restore.
void setWindowRegistry(PhosphorEngine::IWindowRegistry *registry)
Attach the daemon's shared window registry so every windowId-keyed accessor can canonicalize the inco...
Definition SnapState.h:51
void clearPreFloatZone(const QString &windowId)
QStringList windowsOnScreenAndDesktop(const QString &screenId, int virtualDesktop) const
Windows with a recorded desktop assignment (snapped, or floated-on-screen via setFloatingOnScreen / u...
QString lastUsedScreenId() const
Definition SnapState.h:204
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:112
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:216
const QHash< QString, QStringList > & preFloatZoneAssignments() const
Definition SnapState.h:156
QStringList snappedWindows() const
QJsonObject toJson() const override
Serialize to JSON for session persistence.
void setPreFloatScreenAssignments(const QHash< QString, QString > &a)
Definition SnapState.h:164
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:200
bool reassignDesktop(const QString &windowId, int virtualDesktop)
Re-stamp a snapped window's virtual-desktop membership to virtualDesktop, keeping its zone and screen...
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:108
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:274
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:160
void windowUnassigned(const QString &windowId)
int lastUsedDesktop() const
Definition SnapState.h:212
const QHash< QString, QStringList > & zoneAssignments() const
Definition SnapState.h:269
void setPreFloatZoneAssignments(const QHash< QString, QStringList > &a)
Definition SnapState.h:290
void setDesktopAssignments(const QHash< QString, int > &d)
Definition SnapState.h:124
bool isAutoSnapped(const QString &windowId) const
Definition WindowTrackingService.h:38
Definition SnapState.h:78