Test that xdg_toplevel_v6s are destroyed before xdg_surface_v6s
Adds an assert so tst_WaylandClientXdgShellV6::createDestroyWindow verifies deletion order. Task-number: QTBUG-65568 Change-Id: I0b4dd350f811495a9c7a78811915647fb713a43a Reviewed-by: Pier Luigi Fiorini <pierluigi.fiorini@liri.io>
This commit is contained in:
parent
397d3f75ab
commit
8de7183ae1
@ -33,24 +33,41 @@
|
|||||||
|
|
||||||
namespace Impl {
|
namespace Impl {
|
||||||
|
|
||||||
|
class XdgSurfaceV6;
|
||||||
|
|
||||||
class XdgToplevelV6 : public QtWaylandServer::zxdg_toplevel_v6
|
class XdgToplevelV6 : public QtWaylandServer::zxdg_toplevel_v6
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
XdgToplevelV6(wl_client *client, uint32_t id, int version)
|
XdgToplevelV6(XdgSurfaceV6 *xdgSurface, wl_client *client, uint32_t id, int version)
|
||||||
: QtWaylandServer::zxdg_toplevel_v6(client, id, version)
|
: QtWaylandServer::zxdg_toplevel_v6(client, id, version)
|
||||||
|
, m_xdgSurface(xdgSurface)
|
||||||
{}
|
{}
|
||||||
void zxdg_toplevel_v6_destroy_resource(Resource *resource) override { delete this; }
|
void zxdg_toplevel_v6_destroy_resource(Resource *) override { delete this; }
|
||||||
|
void zxdg_toplevel_v6_destroy(Resource *resource) override;
|
||||||
|
XdgSurfaceV6 *m_xdgSurface = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
class XdgSurfaceV6 : public QtWaylandServer::zxdg_surface_v6
|
class XdgSurfaceV6 : public QtWaylandServer::zxdg_surface_v6
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
XdgSurfaceV6(wl_client *client, uint32_t id, int version, Surface *surface);
|
XdgSurfaceV6(wl_client *client, uint32_t id, int version, Surface *surface);
|
||||||
void zxdg_surface_v6_destroy_resource(Resource *resource) override { delete this; }
|
void zxdg_surface_v6_destroy_resource(Resource *) override { delete this; }
|
||||||
void zxdg_surface_v6_get_toplevel(Resource *resource, uint32_t id) override;
|
void zxdg_surface_v6_get_toplevel(Resource *resource, uint32_t id) override;
|
||||||
|
void zxdg_surface_v6_destroy(Resource *resource) override
|
||||||
|
{
|
||||||
|
Q_ASSERT(!m_toplevel);
|
||||||
|
wl_resource_destroy(resource->handle);
|
||||||
|
}
|
||||||
Surface *m_surface = nullptr;
|
Surface *m_surface = nullptr;
|
||||||
|
XdgToplevelV6 *m_toplevel = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void XdgToplevelV6::zxdg_toplevel_v6_destroy(QtWaylandServer::zxdg_toplevel_v6::Resource *resource)
|
||||||
|
{
|
||||||
|
m_xdgSurface->m_toplevel = nullptr;
|
||||||
|
wl_resource_destroy(resource->handle);
|
||||||
|
}
|
||||||
|
|
||||||
XdgSurfaceV6::XdgSurfaceV6(wl_client *client, uint32_t id, int version, Surface *surface)
|
XdgSurfaceV6::XdgSurfaceV6(wl_client *client, uint32_t id, int version, Surface *surface)
|
||||||
: QtWaylandServer::zxdg_surface_v6(client, id, version)
|
: QtWaylandServer::zxdg_surface_v6(client, id, version)
|
||||||
, m_surface(surface)
|
, m_surface(surface)
|
||||||
@ -60,7 +77,7 @@ XdgSurfaceV6::XdgSurfaceV6(wl_client *client, uint32_t id, int version, Surface
|
|||||||
void XdgSurfaceV6::zxdg_surface_v6_get_toplevel(QtWaylandServer::zxdg_surface_v6::Resource *resource, uint32_t id)
|
void XdgSurfaceV6::zxdg_surface_v6_get_toplevel(QtWaylandServer::zxdg_surface_v6::Resource *resource, uint32_t id)
|
||||||
{
|
{
|
||||||
int version = wl_resource_get_version(resource->handle);
|
int version = wl_resource_get_version(resource->handle);
|
||||||
new XdgToplevelV6(resource->client(), id, version);
|
m_toplevel = new XdgToplevelV6(this, resource->client(), id, version);
|
||||||
m_surface->map();
|
m_surface->map();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user