X-Git-Url: https://vaikene.ee/gitweb/gitweb.cgi?a=blobdiff_plain;f=src%2Flibs%2FCommon%2Feventqueue.cpp;h=795224c8fbc42022801da892670789897e54b59f;hb=77854ea7bd165f8d9afd2cba1490335a67001ab7;hp=bbf30ed8ae2f12d1ff213ea6845f3517c8781a91;hpb=5815060246f84e8efdf3143b4e8c7d00778168cf;p=evaf diff --git a/src/libs/Common/eventqueue.cpp b/src/libs/Common/eventqueue.cpp index bbf30ed..795224c 100644 --- a/src/libs/Common/eventqueue.cpp +++ b/src/libs/Common/eventqueue.cpp @@ -45,6 +45,7 @@ EventQueue::EventQueue() : iEventQueue() , mNextEventId(1) { + iRegistry::instance()->registerInterface("iEventQueue", this); } EventQueue::~EventQueue() @@ -67,20 +68,20 @@ bool EventQueue::event(QEvent * e) } // Send the event to all the subscribers - QHash > >::const_iterator subscribersIt = mSubscribers.constFind(id); + QHash > >::const_iterator subscribersIt = mSubscribers.constFind(id); if (subscribersIt != mSubscribers.constEnd()) { - QList > subscribers = *subscribersIt; + QVector > subscribers = *subscribersIt; int sz = subscribers.size(); for (int i = 0; i < sz; ++i) { // Get the subscriber object and make sure that it is still alive - QPointer obj = subscribers.at(i); + QWeakPointer obj = subscribers.at(i); if (obj.isNull()) { continue; } // Notify the subscriber - bool rval = QCoreApplication::sendEvent(obj, e); + bool rval = QCoreApplication::sendEvent(obj.data(), e); if (rval) { // The event was consumed and should be sent to any other subscribers @@ -146,7 +147,15 @@ void EventQueue::unsubscribeEvent(uint id, QObject * obj) if (mEvents.constFind(id) == mEvents.constEnd()) return; - mSubscribers[id].removeAll(obj); + // Remove from the list of subscribers + QVector >::iterator it = mSubscribers[id].begin(); + QVector >::iterator e = mSubscribers[id].end(); + while (it != e) { + if (!it->isNull() && it->data() == obj) + it = mSubscribers[id].erase(it); + else + ++it; + } } void EventQueue::broadcastEvent(Event * event)