7fc2ff3002
<!-- Please provide as much information as possible about what your PR aims to do. PRs with no description will most likely be closed until more information is provided. If you're planing on changing fundamental behaviour or add big new features, please open a GitHub Issue first before starting to work on it. If it's not something big and you still want to contact us about it, feel free to do so ! --> ### Problem description <!-- Describe the bug that you fixed/feature request that you implemented, or link to an existing issue describing it --> Fixed possible bug of `EventManager::unsubscribe` `std::map` only allows unique key, but the same token can subscribe to multiple events.1a2a926b77/lib/libimhex/include/hex/api/event.hpp (L104-L107)
If the previous token has already subscribed to an event, then when subscribing again, `getTokenStore().insert` will not do anything (Because its type is `std::map`)1a2a926b77/lib/libimhex/include/hex/api/event.hpp (L122-L134)
At this point in `unsubscribe`, the `iter` may not be able to find the correct event and erase it ### Implementation description <!-- Explain what you did to correct the problem --> Change `tokenStore` to `std::multimap` instead of `std::map`, which cannot unsubscribe multiple events correctly ### Screenshots <!-- If your change is visual, take a screenshot showing it. Ideally, make before/after sceenshots --> ### Additional things <!-- Anything else you would like to say -->
18 lines
397 B
C++
18 lines
397 B
C++
#include <hex/api/event.hpp>
|
|
|
|
namespace hex {
|
|
|
|
std::multimap<void *, EventManager::EventList::iterator>& EventManager::getTokenStore() {
|
|
static std::multimap<void *, EventManager::EventList::iterator> tokenStore;
|
|
|
|
return tokenStore;
|
|
}
|
|
|
|
EventManager::EventList& EventManager::getEvents() {
|
|
static EventManager::EventList events;
|
|
|
|
return events;
|
|
}
|
|
|
|
|
|
} |