Phosphor
Qt6 / Wayland library suite for window-management tools
 
Loading...
Searching...
No Matches
DaemonClient.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>
12
13#include <QObject>
14#include <QRect>
15#include <QString>
16#include <QStringList>
17
18class QDBusServiceWatcher;
19
20namespace PhosphorCompositor {
21
22class PHOSPHORCOMPOSITOR_EXPORT DaemonClient : public QObject
23{
24 Q_OBJECT
25
26public:
27 explicit DaemonClient(QObject* parent = nullptr);
28 ~DaemonClient() override;
29
30 bool isDaemonReady() const
31 {
32 return m_daemonReady;
33 }
34
37 {
38 m_dragHandler = handler;
39 }
42 {
43 m_geometryHandler = handler;
44 }
47 {
48 m_lifecycleHandler = handler;
49 }
50
51 // Registration
52 void registerBridge(const QString& compositorId, int apiVersion, const QStringList& capabilities);
53
54 // Window lifecycle notifications (plugin → daemon)
55 void notifyWindowOpened(const QString& windowId, const QString& screenId, int minWidth = 0, int minHeight = 0);
57 void notifyWindowClosed(const QString& windowId);
58 void notifyWindowActivated(const QString& windowId, const QString& screenId);
59
60 // Drag operations (plugin → daemon)
61 void dragStarted(const QString& windowId, const QString& screenId, const QRect& geometry);
62 void dragMoved(const QString& windowId, int cursorX, int cursorY);
63 void dragStopped(const QString& windowId, const QString& screenId, const QString& zoneId);
64
65 // Screen notifications (plugin → daemon)
66 void notifyCursorScreenChanged(const QString& screenId);
67 void notifyPrimaryScreen(const QString& screenName);
68
69 // Queries (plugin → daemon, async results via signals)
73 void queryVirtualScreens(const QString& screenId);
74 void querySetting(const QString& key);
75 void pruneStaleWindows(const QStringList& liveWindowIds);
76
77 // Daemon availability probe (async — emits daemonReady if responsive)
78 void probeDaemonAvailable(int timeoutMs = 3000);
79
80Q_SIGNALS:
83 void bridgeRegistered(const QString& sessionId, int peerApiVersion);
84 void bridgeRejected(const QString& reason);
85
86 void floatingWindowsReceived(const QStringList& windowIds);
87 void snappedWindowsReceived(const QStringList& windowIds);
88 void pendingRestoreGeometriesReceived(const QString& json);
89 void virtualScreensReceived(const QString& screenId, const PhosphorProtocol::WindowGeometryList& geometries);
90
91 void settingReceived(const QString& key, const QVariant& value);
93 void virtualScreensChanged(const QString& screenId);
94
95 void snapAssistReady(const QString& windowId, const QString& screenId,
100
101private Q_SLOTS:
102 void onDaemonReadySignal();
103 void onServiceRegistered();
104 void onServiceUnregistered();
105 void handleApplyGeometry(const QString& windowId, int x, int y, int w, int h, const QString& zoneId,
106 const QString& screenId, bool sizeOnly);
107 void handleApplyGeometriesBatch(const PhosphorProtocol::WindowGeometryList& geometries, const QString& action);
108 void handleRaiseWindows(const QStringList& windowIds);
109 void handleActivateWindow(const QString& windowId);
110 void handleDragPolicyChanged(const QString& windowId, int newPolicy);
111 void handleWindowFloatingChanged(const QString& windowId, bool isFloating, const QString& screenId);
112 void handleRestoreSizeDuringDrag(const QString& windowId, int width, int height);
113 void handleMoveWindowToZone(const QString& windowId, const QString& screenId, int x, int y, int w, int h);
114 void handleSnapAllWindows(const QString& screenId);
115 void handleSnapAssistReady(const QString& windowId, const QString& screenId,
117
118private:
119 void connectDaemonSignals();
120 void disconnectDaemonSignals();
121
122 QDBusServiceWatcher* m_serviceWatcher = nullptr;
123 IDragHandler* m_dragHandler = nullptr;
124 IGeometryHandler* m_geometryHandler = nullptr;
125 ILifecycleHandler* m_lifecycleHandler = nullptr;
126
127 bool m_daemonReady = false;
128 bool m_registrationInFlight = false;
129 QString m_sessionId;
130};
131
132} // namespace PhosphorCompositor
Definition DaemonClient.h:23
void probeDaemonAvailable(int timeoutMs=3000)
void dragMoved(const QString &windowId, int cursorX, int cursorY)
DaemonClient(QObject *parent=nullptr)
void setDragHandler(IDragHandler *handler)
Definition DaemonClient.h:36
void dragStarted(const QString &windowId, const QString &screenId, const QRect &geometry)
void registerBridge(const QString &compositorId, int apiVersion, const QStringList &capabilities)
void pruneStaleWindows(const QStringList &liveWindowIds)
void notifyCursorScreenChanged(const QString &screenId)
void notifyWindowActivated(const QString &windowId, const QString &screenId)
void queryVirtualScreens(const QString &screenId)
void dragStopped(const QString &windowId, const QString &screenId, const QString &zoneId)
void bridgeRegistered(const QString &sessionId, int peerApiVersion)
void snappedWindowsReceived(const QStringList &windowIds)
void floatingWindowsReceived(const QStringList &windowIds)
void setGeometryHandler(IGeometryHandler *handler)
Definition DaemonClient.h:41
void virtualScreensChanged(const QString &screenId)
void settingReceived(const QString &key, const QVariant &value)
void notifyWindowOpened(const QString &windowId, const QString &screenId, int minWidth=0, int minHeight=0)
void snapAssistReady(const QString &windowId, const QString &screenId, const PhosphorProtocol::EmptyZoneList &zones)
void pendingRestoreGeometriesReceived(const QString &json)
void notifyPrimaryScreen(const QString &screenName)
void notifyWindowClosed(const QString &windowId)
void querySetting(const QString &key)
void bridgeRejected(const QString &reason)
void virtualScreensReceived(const QString &screenId, const PhosphorProtocol::WindowGeometryList &geometries)
void notifyWindowOpenedBatch(const PhosphorProtocol::WindowOpenedList &windows)
bool isDaemonReady() const
Definition DaemonClient.h:30
void setLifecycleHandler(ILifecycleHandler *handler)
Definition DaemonClient.h:46
Definition IDragHandler.h:13
Definition IGeometryHandler.h:30
Definition ILifecycleHandler.h:12
Definition AutotileState.h:16
QList< WindowGeometryEntry > WindowGeometryList
Definition WindowTypes.h:51
QList< WindowOpenedEntry > WindowOpenedList
Definition WindowTypes.h:73
QList< EmptyZoneEntry > EmptyZoneList
Definition ZoneTypes.h:58