Phosphor
Qt6 / Wayland library suite for window-management tools
 
Loading...
Searching...
No Matches
WindowRegistry.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#include <QHash>
9#include <QMultiHash>
10#include <QObject>
11#include <QString>
12#include <QStringList>
13#include <optional>
14
15namespace PhosphorEngine {
16
18{
19 QString appId;
20 QString desktopFile;
21 QString title;
22
23 bool operator==(const WindowMetadata& other) const
24 {
25 return appId == other.appId && desktopFile == other.desktopFile && title == other.title;
26 }
27 bool operator!=(const WindowMetadata& other) const
28 {
29 return !(*this == other);
30 }
31};
32
33class PHOSPHORENGINE_EXPORT WindowRegistry : public QObject, public IWindowRegistry
34{
35 Q_OBJECT
36
37public:
38 explicit WindowRegistry(QObject* parent = nullptr);
39 ~WindowRegistry() override;
40
41 void upsert(const QString& instanceId, const WindowMetadata& metadata);
42 void remove(const QString& instanceId);
43
44 std::optional<WindowMetadata> metadata(const QString& instanceId) const;
45 Q_INVOKABLE QString appIdFor(const QString& instanceId) const override;
46 QStringList instancesWithAppId(const QString& appId) const;
47 bool contains(const QString& instanceId) const;
48 QStringList allInstances() const;
49 int size() const;
50 void clear();
51
52 Q_INVOKABLE QString canonicalizeWindowId(const QString& rawWindowId) override;
53 Q_INVOKABLE QString canonicalizeForLookup(const QString& rawWindowId) const override;
54 void releaseCanonical(const QString& anyWindowId);
55
56Q_SIGNALS:
57 void windowAppeared(const QString& instanceId);
58 void metadataChanged(const QString& instanceId, const WindowMetadata& oldMetadata,
59 const WindowMetadata& newMetadata);
60 void windowDisappeared(const QString& instanceId);
61
62private:
63 QHash<QString, WindowMetadata> m_records;
64 QMultiHash<QString, QString> m_appIdIndex;
65 QHash<QString, QString> m_canonicalByInstance;
66
67 void indexInsert(const QString& instanceId, const QString& appId);
68 void indexRemove(const QString& instanceId, const QString& appId);
69};
70
71} // namespace PhosphorEngine
Definition IWindowRegistry.h:12
Definition WindowRegistry.h:34
void windowDisappeared(const QString &instanceId)
WindowRegistry(QObject *parent=nullptr)
void metadataChanged(const QString &instanceId, const WindowMetadata &oldMetadata, const WindowMetadata &newMetadata)
QString appIdFor(const QString &instanceId) const override
std::optional< WindowMetadata > metadata(const QString &instanceId) const
QStringList instancesWithAppId(const QString &appId) const
void remove(const QString &instanceId)
void upsert(const QString &instanceId, const WindowMetadata &metadata)
bool contains(const QString &instanceId) const
QString canonicalizeForLookup(const QString &rawWindowId) const override
void windowAppeared(const QString &instanceId)
void releaseCanonical(const QString &anyWindowId)
QStringList allInstances() const
QString canonicalizeWindowId(const QString &rawWindowId) override
Definition EngineTypes.h:13
Definition WindowRegistry.h:18
bool operator!=(const WindowMetadata &other) const
Definition WindowRegistry.h:27
QString appId
Definition WindowRegistry.h:19
QString title
Definition WindowRegistry.h:21
bool operator==(const WindowMetadata &other) const
Definition WindowRegistry.h:23
QString desktopFile
Definition WindowRegistry.h:20