6#include <phosphorsnapengine_export.h>
36 explicit SnapState(
const QString& screenId, QObject* parent =
nullptr);
52 m_windowRegistry = registry;
73 void assignWindowToZones(
const QString& windowId,
const QStringList& zoneIds,
const QString& screenId,
77 bool wasAssigned =
false;
78 bool lastUsedZoneCleared =
false;
120 return m_lastSnappedFocus;
124 return m_lastFloatingFocus;
141 void recordResidence(
const QString& windowId,
const QString& screenId,
int virtualDesktop);
164 return m_windowScreenAssignments;
168 return m_windowDesktopAssignments;
172 if (m_windowScreenAssignments == s) {
175 m_windowScreenAssignments = s;
176 Q_EMIT stateChanged();
206 return m_preFloatZoneAssignments;
210 return m_preFloatScreenAssignments;
214 if (m_preFloatScreenAssignments == a) {
217 m_preFloatScreenAssignments = a;
218 Q_EMIT stateChanged();
266 void restoreLastUsedZone(
const QString& zoneId,
const QString& screenId,
const QString& zoneClass,
int desktop);
270 return m_lastUsedZoneId;
274 return m_lastUsedScreenId;
278 return m_lastUsedZoneClass;
282 return m_lastUsedDesktop;
290 return m_lastUsedSeq;
294 if (m_lastUsedZoneClass == newClass) {
297 m_lastUsedZoneClass = newClass;
298 Q_EMIT stateChanged();
308 return m_userSnappedClasses;
312 if (m_userSnappedClasses == classes) {
315 m_userSnappedClasses = classes;
316 Q_EMIT stateChanged();
341 return m_windowZoneAssignments;
358 QString canonicalizeForLookup(
const QString& rawWindowId)
const;
367 UnassignResult clearZoneAssignment(
const QString& windowId,
bool preserveScreenAndDesktop);
369 QSet<QString> allManagedWindowIds()
const
372 all.reserve(m_windowZoneAssignments.size() + m_floatingWindows.size() + m_autoSnappedWindows.size());
373 for (
auto it = m_windowZoneAssignments.constBegin(); it != m_windowZoneAssignments.constEnd(); ++it) {
374 all.insert(it.key());
376 all.unite(m_floatingWindows);
377 all.unite(m_autoSnappedWindows);
386 QHash<QString, QStringList> m_windowZoneAssignments;
387 QHash<QString, QString> m_windowScreenAssignments;
388 QHash<QString, int> m_windowDesktopAssignments;
389 QSet<QString> m_floatingWindows;
390 QHash<QString, QStringList> m_preFloatZoneAssignments;
391 QHash<QString, QString> m_preFloatScreenAssignments;
393 QString m_lastSnappedFocus;
394 QString m_lastFloatingFocus;
396 QString m_lastUsedZoneId;
397 QString m_lastUsedScreenId;
398 QString m_lastUsedZoneClass;
399 int m_lastUsedDesktop = 0;
401 quint64 m_lastUsedSeq = 0;
403 QSet<QString> m_userSnappedClasses;
404 QSet<QString> m_autoSnappedWindows;
Per-screen placement state contract.
Definition IPlacementState.h:28
Definition IWindowRegistry.h:14
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:310
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 lastSnappedFocus() const
Definition SnapState.h:118
QString lastUsedZoneClass() const
Definition SnapState.h:276
bool clearPreFloatZone(const QString &windowId)
Returns true when an entry was actually removed, so callers can gate their dirty-marking on a real mu...
SnapState(const SnapState &)=delete
UnassignResult unassignWindow(const QString &windowId)
QStringList managedWindows() const override
All windows managed by this state (tiled + floating).
bool removeWindowData(const QString &windowId)
Remove ALL of windowId's per-window data from this store (zone/screen/ desktop assignment,...
void setScreenAssignments(const QHash< QString, QString > &s)
Definition SnapState.h:170
QString screenId() const override
Screen this state object manages.
bool containsWindow(const QString &windowId) const override
Whether the window is in this state's managed set.
bool clearScreenAndDesktop(const QString &windowId)
Drop ONLY the screen/desktop residence entries, leaving the zone assignment, the floating bit and the...
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:306
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:50
void noteFocused(const QString &windowId)
Layer-side focus memory for switch-focus-between-floating-and-tiling.
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:272
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:166
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:292
const QHash< QString, QStringList > & preFloatZoneAssignments() const
Definition SnapState.h:204
QStringList snappedWindows() const
quint64 lastUsedSeq() const
Monotonic stamp bumped every time this store's last-used zone is set to a non-empty value (via update...
Definition SnapState.h:288
void setPreFloatScreenAssignments(const QHash< QString, QString > &a)
Definition SnapState.h:212
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)
void migrateWindowTo(SnapState *target, const QString &windowId, const QString &newScreenId)
Move windowId's per-window placement entries (zone assignment, live screen, desktop,...
QString placementIdForWindow(const QString &windowId) const override
Opaque placement identifier for the window's current slot.
QString lastUsedZoneId() const
Definition SnapState.h:268
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:162
void assignWindowToZone(const QString &windowId, const QString &zoneId, const QString &screenId, int virtualDesktop)
void windowAssigned(const QString &windowId, const QString &zoneId)
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).
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:208
void windowUnassigned(const QString &windowId)
int lastUsedDesktop() const
Definition SnapState.h:280
void recordResidence(const QString &windowId, const QString &screenId, int virtualDesktop)
Record screen + desktop residence WITHOUT a zone assignment and without touching the floating set.
const QHash< QString, QStringList > & zoneAssignments() const
Definition SnapState.h:339
QString lastFloatingFocus() const
Definition SnapState.h:122
bool isAutoSnapped(const QString &windowId) const
Definition SnapStateResolver.h:11
Definition SnapState.h:76