diff --git a/src/protocols/CursorShape.cpp b/src/protocols/CursorShape.cpp index fb26d7a2..44f6a84f 100644 --- a/src/protocols/CursorShape.cpp +++ b/src/protocols/CursorShape.cpp @@ -48,11 +48,11 @@ CCursorShapeProtocol::CCursorShapeProtocol(const wl_interface* iface, const int& } void CCursorShapeProtocol::onManagerResourceDestroy(wl_resource* res) { - std::erase_if(m_vManagers, [&](const auto& other) { return other->resource() == res; }); + std::erase_if(m_vManagers, [res](const auto& other) { return other->resource() == res; }); } void CCursorShapeProtocol::onDeviceResourceDestroy(wl_resource* res) { - m_mDevices.erase(res); + std::erase_if(m_vDevices, [res](const auto& other) { return other->resource() == res; }); } void CCursorShapeProtocol::bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id) { @@ -73,14 +73,8 @@ void CCursorShapeProtocol::onGetTabletToolV2(CWpCursorShapeManagerV1* pMgr, uint } void CCursorShapeProtocol::createCursorShapeDevice(CWpCursorShapeManagerV1* pMgr, uint32_t id, wl_resource* resource) { - if (m_mDevices.contains(resource)) { - LOGM(ERR, "CursorShape device already exists for {:x}", (uintptr_t)resource); - wl_resource_post_error(resource, 0, "Device already exists"); - return; - } - const auto CLIENT = wl_resource_get_client(pMgr->resource()); - const auto RESOURCE = m_mDevices.emplace(resource, std::make_shared(CLIENT, wl_resource_get_version(pMgr->resource()), id)).first->second.get(); + const auto RESOURCE = m_vDevices.emplace_back(std::make_shared(CLIENT, wl_resource_get_version(pMgr->resource()), id)); RESOURCE->setOnDestroy([this](CWpCursorShapeDeviceV1* p) { this->onDeviceResourceDestroy(p->resource()); }); RESOURCE->setDestroy([this](CWpCursorShapeDeviceV1* p) { this->onDeviceResourceDestroy(p->resource()); }); diff --git a/src/protocols/CursorShape.hpp b/src/protocols/CursorShape.hpp index 9a527f85..9fcca28d 100644 --- a/src/protocols/CursorShape.hpp +++ b/src/protocols/CursorShape.hpp @@ -33,8 +33,8 @@ class CCursorShapeProtocol : public IWaylandProtocol { void createCursorShapeDevice(CWpCursorShapeManagerV1* pMgr, uint32_t id, wl_resource* resource); // - std::unordered_map> m_mDevices; - std::vector> m_vManagers; + std::vector> m_vDevices; + std::vector> m_vManagers; }; namespace PROTO {