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
7#include <phosphorengine_export.h>
8
9#include <QHash>
10#include <QList>
11#include <QRect>
12#include <QSet>
13#include <QString>
14#include <QStringList>
15#include <QUuid>
16#include <QVector>
17
18#include <optional>
19
20class QObject;
21
22namespace PhosphorZones {
23class Layout;
24}
25
27class ScreenManager;
28}
29
30namespace PhosphorEngine {
31
32class PHOSPHORENGINE_EXPORT IWindowTrackingService
33{
34public:
35 virtual ~IWindowTrackingService() = default;
36
37 virtual QObject* asQObject() = 0;
38
39 // ═══════════════════════════════════════════════════════════════════════════
40 // Screen manager access
41 // Tech debt: returns concrete ScreenManager* — should be an IScreenManager
42 // interface once one exists. Acceptable for now as a stepping stone.
43 // ═══════════════════════════════════════════════════════════════════════════
44
46
47 // ═══════════════════════════════════════════════════════════════════════════
48 // Zone assignment management
49 // ═══════════════════════════════════════════════════════════════════════════
50
51 virtual void assignWindowToZone(const QString& windowId, const QString& zoneId, const QString& screenId,
52 int virtualDesktop) = 0;
53 virtual void assignWindowToZones(const QString& windowId, const QStringList& zoneIds, const QString& screenId,
54 int virtualDesktop) = 0;
55 virtual void unassignWindow(const QString& windowId) = 0;
56
57 virtual const QHash<QString, QStringList>& zoneAssignments() const = 0;
58 virtual const QHash<QString, QString>& screenAssignments() const = 0;
59 virtual QString zoneForWindow(const QString& windowId) const = 0;
60 virtual QStringList zonesForWindow(const QString& windowId) const = 0;
61 virtual QStringList windowsInZone(const QString& zoneId) const = 0;
62 virtual bool isWindowSnapped(const QString& windowId) const = 0;
63 virtual QString findEmptyZone(const QString& screenId = QString()) const = 0;
64
65 // ═══════════════════════════════════════════════════════════════════════════
66 // Auto-snap
67 // ═══════════════════════════════════════════════════════════════════════════
68
69 virtual void recordSnapIntent(const QString& windowId, bool wasUserInitiated) = 0;
70
71 // ═══════════════════════════════════════════════════════════════════════════
72 // Floating state
73 // ═══════════════════════════════════════════════════════════════════════════
74
75 virtual bool isWindowFloating(const QString& windowId) const = 0;
76 virtual void setWindowFloating(const QString& windowId, bool floating) = 0;
77 virtual void unsnapForFloat(const QString& windowId) = 0;
78 virtual bool clearFloatingForSnap(const QString& windowId) = 0;
79
80 // ═══════════════════════════════════════════════════════════════════════════
81 // Sticky state
82 // ═══════════════════════════════════════════════════════════════════════════
83
84 virtual bool isWindowSticky(const QString& windowId) const = 0;
85
86 // ═══════════════════════════════════════════════════════════════════════════
87 // Pre-float zone/screen restore
88 // ═══════════════════════════════════════════════════════════════════════════
89
90 virtual QStringList preFloatZones(const QString& windowId) const = 0;
91 virtual QString preFloatScreen(const QString& windowId) const = 0;
92
93 // ═══════════════════════════════════════════════════════════════════════════
94 // Auto-snap / pending restore
95 // ═══════════════════════════════════════════════════════════════════════════
96
97 virtual bool clearAutoSnapped(const QString& windowId) = 0;
98 virtual bool consumePendingAssignment(const QString& windowId) = 0;
99 virtual const QHash<QString, QList<PendingRestore>>& pendingRestoreQueues() const = 0;
100
101 // ═══════════════════════════════════════════════════════════════════════════
102 // Last-used zone tracking
103 // ═══════════════════════════════════════════════════════════════════════════
104
105 virtual void updateLastUsedZone(const QString& zoneId, const QString& screenId, const QString& windowClass,
106 int virtualDesktop) = 0;
107
108 // ═══════════════════════════════════════════════════════════════════════════
109 // App identity
110 // ═══════════════════════════════════════════════════════════════════════════
111
112 virtual QString currentAppIdFor(const QString& anyWindowId) const = 0;
113
114 // ═══════════════════════════════════════════════════════════════════════════
115 // Geometry resolution
116 // ═══════════════════════════════════════════════════════════════════════════
117
118 virtual std::optional<QRect> validatedUnmanagedGeometry(const QString& windowId, const QString& screenId,
119 bool exactOnly = false) const = 0;
120 virtual QRect zoneGeometry(const QString& zoneId, const QString& screenId = QString()) const = 0;
121 virtual QRect resolveZoneGeometry(const QStringList& zoneIds, const QString& screenId) const = 0;
122 virtual QString resolveEffectiveScreenId(const QString& screenId) const = 0;
123 // Tech debt: takes concrete Layout* — should take an opaque layout identifier
124 // once the layout interface is extracted. Acceptable for this extraction phase.
125 virtual QString findEmptyZoneInLayout(PhosphorZones::Layout* layout, const QString& screenId,
126 int desktopFilter = 0) const = 0;
127 virtual QSet<QUuid> buildOccupiedZoneSet(const QString& screenFilter = QString(), int desktopFilter = 0) const = 0;
128
129 // ═══════════════════════════════════════════════════════════════════════════
130 // Resnap buffer
131 // ═══════════════════════════════════════════════════════════════════════════
132
133 virtual QVector<ResnapEntry> takeResnapBuffer() = 0;
134};
135
136} // namespace PhosphorEngine
Definition IWindowTrackingService.h:33
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 Phosphor::Screens::ScreenManager * screenManager() const =0
virtual void updateLastUsedZone(const QString &zoneId, const QString &screenId, const QString &windowClass, int virtualDesktop)=0
virtual void assignWindowToZones(const QString &windowId, const QStringList &zoneIds, const QString &screenId, int virtualDesktop)=0
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 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 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 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
Represents a collection of zones that form a layout.
Definition Layout.h:74
Centralized screen-topology service.
Definition Manager.h:75
Definition EngineTypes.h:13
Definition IWindowTrackingService.h:22
Definition IWindowTrackingService.h:26