kwin/src/wayland/xdgforeign_v2_interface_p.h
2020-07-28 11:23:24 +00:00

115 lines
3.2 KiB
C++

/*
SPDX-FileCopyrightText: 2017 Marco Martin <notmart@gmail.com>
SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
*/
#ifndef KWAYLAND_SERVER_XDGFOREIGNV2_INTERFACE_P_H
#define KWAYLAND_SERVER_XDGFOREIGNV2_INTERFACE_P_H
#include "xdgforeign_v2_interface.h"
#include "surface_interface_p.h"
#include <qwayland-server-xdg-foreign-unstable-v2.h>
namespace KWaylandServer
{
class Display;
class SurfaceInterface;
class XdgExportedV2Interface;
class XdgImportedV2Interface;
class XdgExporterV2InterfacePrivate;
class XdgImporterV2InterfacePrivate;
class XdgExportedV2Interface;
class XdgImportedV2InterfacePrivate;
class XdgForeignV2InterfacePrivate : public QObject
{
Q_OBJECT
public:
XdgForeignV2InterfacePrivate(Display *display, XdgForeignV2Interface *q);
XdgForeignV2Interface *q;
XdgExporterV2Interface *exporter;
XdgImporterV2Interface *importer;
};
class XdgExporterV2Interface : public QObject
{
Q_OBJECT
public:
explicit XdgExporterV2Interface(Display *display, XdgForeignV2Interface *parent = nullptr);
~XdgExporterV2Interface() override;
XdgExportedV2Interface *exportedSurface(const QString &handle);
Q_SIGNALS:
void surfaceExported(const QString &handle, XdgExportedV2Interface *exported);
void surfaceUnexported(const QString &handle);
private:
QScopedPointer<XdgExporterV2InterfacePrivate> d;
};
class XdgImporterV2Interface : public QObject
{
Q_OBJECT
public:
explicit XdgImporterV2Interface(Display *display, XdgForeignV2Interface *parent = nullptr);
~XdgImporterV2Interface() override;
XdgImportedV2Interface *importedSurface(const QString &handle);
SurfaceInterface *transientFor(SurfaceInterface *surface);
Q_SIGNALS:
void surfaceImported(const QString &handle, XdgImportedV2Interface *imported);
void surfaceUnimported(const QString &handle);
void transientChanged(KWaylandServer::SurfaceInterface *child, KWaylandServer::SurfaceInterface *parent);
private:
QScopedPointer<XdgImporterV2InterfacePrivate> d;
};
class XdgExportedV2Interface : public QObject, QtWaylandServer::zxdg_exported_v2
{
public:
explicit XdgExportedV2Interface(SurfaceInterface *surface, wl_resource *resource );
~XdgExportedV2Interface() override;
SurfaceInterface *parentResource();
private:
SurfaceInterface *surface;
protected:
void zxdg_exported_v2_destroy(Resource *resource) override;
void zxdg_exported_v2_destroy_resource(Resource *resource) override;
};
class XdgImportedV2Interface : public QObject, QtWaylandServer::zxdg_imported_v2
{
Q_OBJECT
public:
explicit XdgImportedV2Interface(SurfaceInterface *surface, wl_resource *resource);
~XdgImportedV2Interface() override;
SurfaceInterface *child() const;
SurfaceInterface *parentResource();
Q_SIGNALS:
void childChanged(KWaylandServer::SurfaceInterface *child);
private:
SurfaceInterface *surface;
QPointer<SurfaceInterface> parentOf;
protected:
void zxdg_imported_v2_set_parent_of(Resource *resource, wl_resource *surface) override;
void zxdg_imported_v2_destroy(Resource *resource) override;
void zxdg_imported_v2_destroy_resource(Resource *resource) override;
};
}
#endif