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 <QObject>
10#include <QPointF>
11#include <QRect>
12#include <QRectF>
13#include <QSizeF>
14#include <QString>
15#include <QStringList>
16#include <QVector>
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
77class PHOSPHORCOMPOSITOR_EXPORT ICompositorBridge
78{
79public:
80 ICompositorBridge() = default;
81 virtual ~ICompositorBridge() = default;
82
87
88 // ═══════════════════════════════════════════════════════════════════
89 // Window Lookup
90 // ═══════════════════════════════════════════════════════════════════
91
93 virtual WindowHandle findWindowById(const QString& windowId) const = 0;
94
96 virtual QVector<WindowHandle> findAllWindowsById(const QString& windowId) const = 0;
97
99 virtual QVector<WindowHandle> stackingOrder() const = 0;
100
101 // ═══════════════════════════════════════════════════════════════════
102 // Window Identity
103 // ═══════════════════════════════════════════════════════════════════
104
106 virtual QString windowId(WindowHandle w) const = 0;
107
109 virtual QString windowScreenId(WindowHandle w) const = 0;
110
111 // ═══════════════════════════════════════════════════════════════════
112 // Window Properties
113 // ═══════════════════════════════════════════════════════════════════
114
115 virtual QRectF frameGeometry(WindowHandle w) const = 0;
116 virtual QSizeF minSize(WindowHandle w) const = 0;
117 virtual bool isMinimized(WindowHandle w) const = 0;
118 virtual bool isOnCurrentDesktop(WindowHandle w) const = 0;
119 virtual bool isOnCurrentActivity(WindowHandle w) const = 0;
120 virtual bool hasDecoration(WindowHandle w) const = 0;
121
123 virtual WindowInfo windowInfo(WindowHandle w) const = 0;
124
125 // ═══════════════════════════════════════════════════════════════════
126 // Window Filtering
127 // ═══════════════════════════════════════════════════════════════════
128
130 virtual bool shouldHandleWindow(WindowHandle w) const = 0;
131
133 virtual bool isTileableWindow(WindowHandle w) const = 0;
134
135 // ═══════════════════════════════════════════════════════════════════
136 // Window Actions
137 // ═══════════════════════════════════════════════════════════════════
138
140 virtual void moveResize(WindowHandle w, const QRectF& geometry) = 0;
141
143 virtual void setNoBorder(WindowHandle w, bool noBorder) = 0;
144
146 virtual void setMaximized(WindowHandle w, bool maximized) = 0;
147
149 virtual void activateWindow(WindowHandle w) = 0;
150
152 virtual void raiseWindow(WindowHandle w) = 0;
153
155 virtual void applySnapGeometry(WindowHandle w, const QRectF& geometry, bool skipAnimation = false) = 0;
156
157 // ═══════════════════════════════════════════════════════════════════
158 // D-Bus Integration (convenience wrappers using compositor as parent)
159 // ═══════════════════════════════════════════════════════════════════
160
162 virtual QObject* asQObject() = 0;
163
165 virtual bool isDaemonReady() const = 0;
166
167 // ═══════════════════════════════════════════════════════════════════
168 // Screen Management
169 // ═══════════════════════════════════════════════════════════════════
170
172 virtual void invalidateScreenIdCache() = 0;
173};
174
175} // namespace PhosphorCompositor
Abstract interface bridging compositor-agnostic logic to compositor-specific APIs.
Definition ICompositorBridge.h:78
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
virtual void applySnapGeometry(WindowHandle w, const QRectF &geometry, bool skipAnimation=false)=0
Apply snap geometry with optional animation.
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 PlasmaZones at all?
virtual WindowHandle findWindowById(const QString &windowId) const =0
Find a window by its full window ID ("appId|instanceId")
virtual void activateWindow(WindowHandle w)=0
Give input focus to a window.
ICompositorBridge(ICompositorBridge &&)=delete
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.
Definition AutotileState.h:16
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