Phosphor
Qt6 / Wayland library suite for window-management tools
 
Loading...
Searching...
No Matches
ICompositorBridge.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
6#include <phosphorcompositor_export.h>
7
8#include <QIcon>
9#include <QRectF>
10#include <QSizeF>
11#include <QString>
12#include <QVector>
13
14// QObject is only named as a pointer return type (asQObject) — forward
15// declare per the project's header rule rather than pulling in <QObject>.
16class QObject;
17
18namespace PhosphorCompositor {
19
31using WindowHandle = void*;
32
41{
43 QString windowId;
44 QString appId;
45 QString windowClass;
46 QString screenId;
47 QString caption;
48 QIcon icon;
50 QSizeF minSize;
51 bool isMinimized = false;
52 bool isFullScreen = false;
53 bool isOnCurrentDesktop = true;
55 bool hasDecoration = false;
56 bool isNormalWindow = true;
57 bool keepAbove = false;
58 qint64 pid = 0;
59};
60
87class PHOSPHORCOMPOSITOR_EXPORT ICompositorBridge
88{
89public:
90 ICompositorBridge() = default;
91 virtual ~ICompositorBridge() = default;
92
97
98 // ═══════════════════════════════════════════════════════════════════
99 // Window Lookup
100 // ═══════════════════════════════════════════════════════════════════
101
103 virtual WindowHandle findWindowById(const QString& windowId) const = 0;
104
106 virtual QVector<WindowHandle> findAllWindowsById(const QString& windowId) const = 0;
107
109 virtual QVector<WindowHandle> stackingOrder() const = 0;
110
111 // ═══════════════════════════════════════════════════════════════════
112 // Window Identity
113 // ═══════════════════════════════════════════════════════════════════
114
116 virtual QString windowId(WindowHandle w) const = 0;
117
119 virtual QString windowScreenId(WindowHandle w) const = 0;
120
121 // ═══════════════════════════════════════════════════════════════════
122 // Window Properties
123 // ═══════════════════════════════════════════════════════════════════
124
125 virtual QRectF frameGeometry(WindowHandle w) const = 0;
126 virtual QSizeF minSize(WindowHandle w) const = 0;
127 virtual bool isMinimized(WindowHandle w) const = 0;
128 virtual bool isOnCurrentDesktop(WindowHandle w) const = 0;
129 virtual bool isOnCurrentActivity(WindowHandle w) const = 0;
130 virtual bool hasDecoration(WindowHandle w) const = 0;
131
138 virtual bool userCanSetNoBorder(WindowHandle w) const = 0;
139
142 virtual bool isNoBorder(WindowHandle w) const = 0;
143
148 virtual QRectF moveResizeGeometry(WindowHandle w) const = 0;
149
151 virtual WindowInfo windowInfo(WindowHandle w) const = 0;
152
153 // ═══════════════════════════════════════════════════════════════════
154 // Window Filtering
155 // ═══════════════════════════════════════════════════════════════════
156
158 virtual bool shouldHandleWindow(WindowHandle w) const = 0;
159
161 virtual bool isTileableWindow(WindowHandle w) const = 0;
162
163 // ═══════════════════════════════════════════════════════════════════
164 // Window Actions
165 // ═══════════════════════════════════════════════════════════════════
166
168 virtual void moveResize(WindowHandle w, const QRectF& geometry) = 0;
169
171 virtual void setNoBorder(WindowHandle w, bool noBorder) = 0;
172
174 virtual void setMaximized(WindowHandle w, bool maximized) = 0;
175
177 virtual void activateWindow(WindowHandle w) = 0;
178
180 virtual void raiseWindow(WindowHandle w) = 0;
181
184 virtual void applyWindowGeometry(WindowHandle w, const QRectF& geometry, bool skipAnimation = false) = 0;
185
186 // ═══════════════════════════════════════════════════════════════════
187 // D-Bus Integration (convenience wrappers using compositor as parent)
188 // ═══════════════════════════════════════════════════════════════════
189
191 virtual QObject* asQObject() = 0;
192
194 virtual bool isDaemonReady() const = 0;
195
196 // ═══════════════════════════════════════════════════════════════════
197 // Screen Management
198 // ═══════════════════════════════════════════════════════════════════
199
201 virtual void invalidateScreenIdCache() = 0;
202};
203
204} // namespace PhosphorCompositor
Abstract interface bridging compositor-agnostic logic to compositor-specific APIs.
Definition ICompositorBridge.h:88
virtual bool isDaemonReady() const =0
Check if the daemon D-Bus service is registered and ready.
virtual bool isOnCurrentActivity(WindowHandle w) const =0
virtual void moveResize(WindowHandle w, const QRectF &geometry)=0
Move/resize a window to the given geometry.
virtual QString windowScreenId(WindowHandle w) const =0
Get the screen ID where a window is located.
virtual WindowInfo windowInfo(WindowHandle w) const =0
Fill a WindowInfo snapshot (for bulk operations)
virtual void setMaximized(WindowHandle w, bool maximized)=0
Maximize or restore a window.
ICompositorBridge & operator=(ICompositorBridge &&)=delete
ICompositorBridge(const ICompositorBridge &)=delete
ICompositorBridge & operator=(const ICompositorBridge &)=delete
virtual QSizeF minSize(WindowHandle w) const =0
virtual bool hasDecoration(WindowHandle w) const =0
virtual bool isOnCurrentDesktop(WindowHandle w) const =0
virtual bool shouldHandleWindow(WindowHandle w) const =0
Should this window be managed by Phosphor at all?
virtual WindowHandle findWindowById(const QString &windowId) const =0
Find a window by its full window ID ("appId|instanceId")
virtual QRectF moveResizeGeometry(WindowHandle w) const =0
Geometry the compositor is currently moving the window toward.
virtual void activateWindow(WindowHandle w)=0
Give input focus to a window.
virtual bool userCanSetNoBorder(WindowHandle w) const =0
May this window's server-side decoration be toggled off? True for SSD windows even while they are CUR...
ICompositorBridge(ICompositorBridge &&)=delete
virtual void applyWindowGeometry(WindowHandle w, const QRectF &geometry, bool skipAnimation=false)=0
Move a window to a target geometry, running the configured placement transition (snap / tile / move) ...
virtual bool isMinimized(WindowHandle w) const =0
virtual QVector< WindowHandle > stackingOrder() const =0
Get all managed windows in stacking order (bottom to top)
virtual QRectF frameGeometry(WindowHandle w) const =0
virtual QString windowId(WindowHandle w) const =0
Get the full window ID for a window ("appId|instanceId")
virtual QVector< WindowHandle > findAllWindowsById(const QString &windowId) const =0
Find all windows matching a window ID (exact + appId fallback for disambiguation)
virtual void raiseWindow(WindowHandle w)=0
Raise a window in the stacking order.
virtual bool isTileableWindow(WindowHandle w) const =0
Is this window eligible for autotile (stricter than shouldHandle)?
virtual void invalidateScreenIdCache()=0
Invalidate cached screen IDs (call on screen add/remove/reconfigure)
virtual void setNoBorder(WindowHandle w, bool noBorder)=0
Set/remove server-side decoration (title bar)
virtual QObject * asQObject()=0
Get the QObject parent for D-Bus watcher ownership.
virtual bool isNoBorder(WindowHandle w) const =0
Is the server-side decoration currently suppressed? (KWin: Window::noBorder)
Definition AutotileState.h:17
void * WindowHandle
Opaque handle to a compositor window.
Definition ICompositorBridge.h:31
Compositor-agnostic window property snapshot.
Definition ICompositorBridge.h:41
bool isOnCurrentDesktop
Definition ICompositorBridge.h:53
QString caption
Definition ICompositorBridge.h:47
WindowHandle handle
Definition ICompositorBridge.h:42
bool isOnCurrentActivity
Definition ICompositorBridge.h:54
QSizeF minSize
Definition ICompositorBridge.h:50
QString screenId
Definition ICompositorBridge.h:46
QString appId
Definition ICompositorBridge.h:44
QIcon icon
Definition ICompositorBridge.h:48
bool isFullScreen
Definition ICompositorBridge.h:52
bool isNormalWindow
Definition ICompositorBridge.h:56
QString windowId
Definition ICompositorBridge.h:43
bool keepAbove
Definition ICompositorBridge.h:57
qint64 pid
Definition ICompositorBridge.h:58
bool isMinimized
Definition ICompositorBridge.h:51
QString windowClass
WM_CLASS / app_id as reported by compositor (may differ from appId for XWayland)
Definition ICompositorBridge.h:45
bool hasDecoration
Definition ICompositorBridge.h:55
QRectF frameGeometry
Definition ICompositorBridge.h:49