16static const quint32 s_exporterVersion = 1;
17static const quint32 s_importerVersion = 1;
21 , m_handle(QUuid::createUuid().toString(QUuid::WithoutBraces))
24 connect(m_surface, &QObject::destroyed,
this, &XdgExportedSurface::handleSurfaceDestroyed);
37void XdgExportedSurface::handleSurfaceDestroyed()
61 return d->importer->transientFor(surface);
66 return d->exporter->exportSurface(surface);
71 , QtWaylandServer::zxdg_exporter_v2(*display, s_exporterVersion)
77 return m_exportedSurfaces.value(handle);
83 addExported(exported);
89 const QString handle = exported->
handle();
90 connect(exported, &XdgExportedSurface::destroyed,
this, [
this, handle] {
91 m_exportedSurfaces.remove(handle);
93 m_exportedSurfaces[handle] = exported;
98 wl_resource_destroy(resource->handle);
105 wl_resource_post_error(resource->handle, 0,
"Invalid surface");
109 wl_resource *exportedResource = wl_resource_create(resource->client(), &zxdg_exported_v2_interface, resource->version(),
id);
110 if (!exportedResource) {
111 wl_client_post_no_memory(resource->client());
116 addExported(exported);
118 exported->send_handle(exported->
handle());
123 , QtWaylandServer::zxdg_importer_v2(*display, s_importerVersion)
130 auto it = m_parents.constFind(surface);
131 if (it == m_parents.constEnd()) {
134 return (*it)->surface();
139 wl_resource_destroy(resource->handle);
144 wl_resource *importedResource = wl_resource_create(resource->client(), &zxdg_imported_v2_interface, resource->version(),
id);
145 if (!importedResource) {
146 wl_client_post_no_memory(resource->client());
155 imported->send_destroyed();
162 link(imported, child);
165 connect(child, &QObject::destroyed,
this, [
this, child]() {
171 connect(imported, &XdgImportedV2Interface::destroyed,
this, [
this, imported]() {
172 unlink(imported,
nullptr);
179 auto it = m_children.find(parent);
180 if (it != m_children.end()) {
181 m_parents.remove(*it);
182 m_children.erase(it);
185 m_parents[child] = parent;
186 m_children[parent] = child;
196 auto it = m_children.find(parent);
197 if (it != m_children.end()) {
199 m_parents.remove(*it);
200 m_children.erase(it);
206 auto it = m_parents.find(child);
207 if (it != m_parents.end()) {
209 m_children.remove(*it);
218 , QtWaylandServer::zxdg_exported_v2(resource)
224 wl_resource_destroy(resource->handle);
233 : QtWaylandServer::zxdg_imported_v2(resource)
239 wl_resource_destroy(resource->handle);
248 : QtWaylandServer::zxdg_imported_v2(resource)
249 , m_exported(exported)
251 connect(exported, &XdgExportedSurface::destroyed,
this, &XdgImportedV2Interface::handleExportedDestroyed);
278 wl_resource_destroy(resource->handle);
286void XdgImportedV2Interface::handleExportedDestroyed()
294#include "moc_xdgforeign_v2.cpp"
295#include "moc_xdgforeign_v2_p.cpp"
Class holding the Wayland server display loop.
Resource representing a wl_surface.
static SurfaceInterface * get(wl_resource *native)
void zxdg_imported_v2_destroy(Resource *resource) override
void zxdg_imported_v2_destroy_resource(Resource *resource) override
XdgDummyImportedV2Interface(wl_resource *resource)
XdgExportedSurface(SurfaceInterface *surface)
SurfaceInterface * surface() const
XdgExportedV2Interface(SurfaceInterface *surface, wl_resource *resource)
void zxdg_exported_v2_destroy_resource(Resource *resource) override
void zxdg_exported_v2_destroy(Resource *resource) override
void zxdg_exporter_v2_destroy(Resource *resource) override
XdgExportedSurface * exportSurface(SurfaceInterface *surface)
XdgExporterV2Interface(Display *display, XdgForeignV2Interface *foreign)
void zxdg_exporter_v2_export_toplevel(Resource *resource, uint32_t id, wl_resource *surface) override
XdgExportedSurface * exportedSurface(const QString &handle) const
void transientChanged(KWin::SurfaceInterface *child, KWin::SurfaceInterface *parent)
~XdgForeignV2Interface() override
XdgExportedSurface * exportSurface(SurfaceInterface *surface)
SurfaceInterface * transientFor(SurfaceInterface *surface)
XdgForeignV2Interface(Display *display, QObject *parent=nullptr)
XdgForeignV2InterfacePrivate(Display *display, XdgForeignV2Interface *q)
void zxdg_imported_v2_destroy(Resource *resource) override
SurfaceInterface * surface() const
void zxdg_imported_v2_destroy_resource(Resource *resource) override
void zxdg_imported_v2_set_parent_of(Resource *resource, wl_resource *surface) override
void childChanged(KWin::SurfaceInterface *child)
SurfaceInterface * child() const
XdgImportedV2Interface(XdgExportedSurface *exported, wl_resource *resource)
void zxdg_importer_v2_import_toplevel(Resource *resource, uint32_t id, const QString &handle) override
void zxdg_importer_v2_destroy(Resource *resource) override
XdgImporterV2Interface(Display *display, XdgForeignV2Interface *foreign)
void link(XdgImportedV2Interface *parent, SurfaceInterface *child)
void unlink(XdgImportedV2Interface *parent, SurfaceInterface *child)
SurfaceInterface * transientFor(SurfaceInterface *surface)