Phosphor
Qt6 / Wayland library suite for window-management tools
 
Loading...
Searching...
No Matches
IWindowTrackingService.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
8#include <phosphorengine_export.h>
9
10#include <QHash>
11#include <QList>
12#include <QRect>
13#include <QSet>
14#include <QString>
15#include <QStringList>
16#include <QUuid>
17#include <QVector>
18
19#include <optional>
20
21class QObject;
22
23namespace PhosphorZones {
24class Layout;
25}
26
27namespace PhosphorScreens {
28class ScreenManager;
29}
30
31namespace PhosphorEngine {
32
33class PHOSPHORENGINE_EXPORT IWindowTrackingService
34{
35public:
36 virtual ~IWindowTrackingService() = default;
37
38 virtual QObject* asQObject() = 0;
39
40 // ═══════════════════════════════════════════════════════════════════════════
41 // Screen manager access
42 // Tech debt: returns concrete ScreenManager* — should be an IScreenManager
43 // interface once one exists. Acceptable as a stepping stone; the
44 // IScreenManager extraction is tracked separately.
45 // ═══════════════════════════════════════════════════════════════════════════
46
48
49 // ═══════════════════════════════════════════════════════════════════════════
50 // Zone assignment management
51 // ═══════════════════════════════════════════════════════════════════════════
52
53 virtual void assignWindowToZone(const QString& windowId, const QString& zoneId, const QString& screenId,
54 int virtualDesktop) = 0;
55 virtual void assignWindowToZones(const QString& windowId, const QStringList& zoneIds, const QString& screenId,
56 int virtualDesktop) = 0;
57 virtual void unassignWindow(const QString& windowId) = 0;
58
59 virtual const QHash<QString, QStringList>& zoneAssignments() const = 0;
60
67 virtual QStringList recordedSnapZones(const QString& windowId) const = 0;
68
69 virtual const QHash<QString, QString>& screenAssignments() const = 0;
70 virtual QString zoneForWindow(const QString& windowId) const = 0;
71 virtual QStringList zonesForWindow(const QString& windowId) const = 0;
75 virtual QString screenForWindow(const QString& windowId) const = 0;
77 virtual QString screenForWindow(const QString& windowId, const QString& defaultScreen) const = 0;
78 virtual QStringList windowsInZone(const QString& zoneId) const = 0;
79 virtual bool isWindowSnapped(const QString& windowId) const = 0;
80 virtual QString findEmptyZone(const QString& screenId = QString()) const = 0;
81
82 // ═══════════════════════════════════════════════════════════════════════════
83 // Auto-snap
84 // ═══════════════════════════════════════════════════════════════════════════
85
86 virtual void recordSnapIntent(const QString& windowId, bool wasUserInitiated) = 0;
87
88 // ═══════════════════════════════════════════════════════════════════════════
89 // Floating state
90 // ═══════════════════════════════════════════════════════════════════════════
91
92 virtual bool isWindowFloating(const QString& windowId) const = 0;
93 virtual void setWindowFloating(const QString& windowId, bool floating) = 0;
94 virtual void unsnapForFloat(const QString& windowId) = 0;
95 virtual bool clearFloatingForSnap(const QString& windowId) = 0;
96
97 // ═══════════════════════════════════════════════════════════════════════════
98 // Sticky state
99 // ═══════════════════════════════════════════════════════════════════════════
100
101 virtual bool isWindowSticky(const QString& windowId) const = 0;
102
103 // ═══════════════════════════════════════════════════════════════════════════
104 // Pre-float zone/screen restore
105 // ═══════════════════════════════════════════════════════════════════════════
106
107 virtual QStringList preFloatZones(const QString& windowId) const = 0;
108 virtual QString preFloatScreen(const QString& windowId) const = 0;
109
110 // ═══════════════════════════════════════════════════════════════════════════
111 // Auto-snap / pending restore
112 // ═══════════════════════════════════════════════════════════════════════════
113
114 virtual bool clearAutoSnapped(const QString& windowId) = 0;
115 virtual bool consumePendingAssignment(const QString& windowId) = 0;
116 virtual const QHash<QString, QList<PendingRestore>>& pendingRestoreQueues() const = 0;
117
118 // ═══════════════════════════════════════════════════════════════════════════
119 // Last-used zone tracking
120 // ═══════════════════════════════════════════════════════════════════════════
121
122 virtual void updateLastUsedZone(const QString& zoneId, const QString& screenId, const QString& windowClass,
123 int virtualDesktop) = 0;
124
125 // ═══════════════════════════════════════════════════════════════════════════
126 // App identity
127 // ═══════════════════════════════════════════════════════════════════════════
128
129 virtual QString currentAppIdFor(const QString& anyWindowId) const = 0;
130
131 // ═══════════════════════════════════════════════════════════════════════════
132 // Geometry resolution
133 // ═══════════════════════════════════════════════════════════════════════════
134
135 virtual std::optional<QRect> validatedUnmanagedGeometry(const QString& windowId, const QString& screenId,
136 bool exactOnly = false) const = 0;
137
144 virtual void recordFreeGeometry(const QString& windowId, const QString& screenId, const QRect& geometry,
145 bool overwrite) = 0;
146
150 virtual void clearFreeGeometry(const QString& windowId) = 0;
151 virtual QRect zoneGeometry(const QString& zoneId, const QString& screenId = QString()) const = 0;
152 virtual QRect resolveZoneGeometry(const QStringList& zoneIds, const QString& screenId) const = 0;
153 virtual QString resolveEffectiveScreenId(const QString& screenId) const = 0;
154
158 // Tech debt: takes concrete Layout* — should take an opaque layout identifier
159 // once the layout interface is extracted. Acceptable for this extraction phase.
160 virtual QString findEmptyZoneInLayout(PhosphorZones::Layout* layout, const QString& screenId,
161 int desktopFilter = 0) const = 0;
162 virtual QSet<QUuid> buildOccupiedZoneSet(const QString& screenFilter = QString(), int desktopFilter = 0) const = 0;
163
164 // ═══════════════════════════════════════════════════════════════════════════
165 // Resnap buffer
166 // ═══════════════════════════════════════════════════════════════════════════
167
168 virtual QVector<ResnapEntry> takeResnapBuffer() = 0;
169};
170
171} // namespace PhosphorEngine
Definition IWindowTrackingService.h:34
virtual QStringList windowsInZone(const QString &zoneId) const =0
virtual QStringList preFloatZones(const QString &windowId) const =0
virtual QString resolveEffectiveScreenId(const QString &screenId) const =0
virtual bool clearFloatingForSnap(const QString &windowId)=0
virtual void recordFreeGeometry(const QString &windowId, const QString &screenId, const QRect &geometry, bool overwrite)=0
Record a window's SHARED free/float geometry (the single float-back store — the placement record's fr...
virtual QStringList recordedSnapZones(const QString &windowId) const =0
A window's recorded snap zone(s), preferring the LIVE assignment but falling back to the DURABLE plac...
virtual void updateLastUsedZone(const QString &zoneId, const QString &screenId, const QString &windowClass, int virtualDesktop)=0
virtual QString screenForWindow(const QString &windowId) const =0
The screen a window is assigned to (empty when none), canonicalizing the id — the point accessor call...
virtual void assignWindowToZones(const QString &windowId, const QStringList &zoneIds, const QString &screenId, int virtualDesktop)=0
virtual QString screenForWindow(const QString &windowId, const QString &defaultScreen) const =0
Same, returning defaultScreen when the window has no assignment.
virtual QSet< QUuid > buildOccupiedZoneSet(const QString &screenFilter=QString(), int desktopFilter=0) const =0
virtual QRect zoneGeometry(const QString &zoneId, const QString &screenId=QString()) const =0
virtual WindowPlacementStore & placementStore()=0
The unified, engine-agnostic placement store.
virtual void setWindowFloating(const QString &windowId, bool floating)=0
virtual QString findEmptyZone(const QString &screenId=QString()) const =0
virtual QString zoneForWindow(const QString &windowId) const =0
virtual QRect resolveZoneGeometry(const QStringList &zoneIds, const QString &screenId) const =0
virtual QString currentAppIdFor(const QString &anyWindowId) const =0
virtual bool isWindowFloating(const QString &windowId) const =0
virtual void assignWindowToZone(const QString &windowId, const QString &zoneId, const QString &screenId, int virtualDesktop)=0
virtual const QHash< QString, QList< PendingRestore > > & pendingRestoreQueues() const =0
virtual QVector< ResnapEntry > takeResnapBuffer()=0
virtual bool isWindowSnapped(const QString &windowId) const =0
virtual bool isWindowSticky(const QString &windowId) const =0
virtual QStringList zonesForWindow(const QString &windowId) const =0
virtual void clearFreeGeometry(const QString &windowId)=0
Clear a window's shared free/float geometry (all screens) from the record, leaving its engine slots i...
virtual void unassignWindow(const QString &windowId)=0
virtual bool consumePendingAssignment(const QString &windowId)=0
virtual const QHash< QString, QStringList > & zoneAssignments() const =0
virtual void unsnapForFloat(const QString &windowId)=0
virtual bool clearAutoSnapped(const QString &windowId)=0
virtual QString findEmptyZoneInLayout(PhosphorZones::Layout *layout, const QString &screenId, int desktopFilter=0) const =0
virtual const QHash< QString, QString > & screenAssignments() const =0
virtual PhosphorScreens::ScreenManager * screenManager() const =0
virtual void recordSnapIntent(const QString &windowId, bool wasUserInitiated)=0
virtual QString preFloatScreen(const QString &windowId) const =0
virtual std::optional< QRect > validatedUnmanagedGeometry(const QString &windowId, const QString &screenId, bool exactOnly=false) const =0
The single source of truth for window restore state in the unified model.
Definition WindowPlacementStore.h:34
Centralized screen-topology service.
Definition Manager.h:75
Represents a collection of zones that form a layout.
Definition Layout.h:40
Definition EngineTypes.h:13
Definition IWindowTrackingService.h:27
Definition IWindowTrackingService.h:23