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:
Johan Klokkhammer Helsing 2018-01-05 12:31:15 +01:00 committed by Johan Helsing
parent 397d3f75ab
commit 8de7183ae1

View File

@ -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();
} }