diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2016-12-12 11:00:47 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2016-12-12 09:45:03 +0000 |
commit | 69f6fbb5d0ad87c85e0236a7fece107b69eb8b8b (patch) | |
tree | 9c69a71582e38f39e99300f53cb8251358229912 /sd/source/ui/tools/EventMultiplexer.cxx | |
parent | coverity#1397053 Logically dead code (golden) (diff) | |
download | core-69f6fbb5d0ad87c85e0236a7fece107b69eb8b8b.tar.gz core-69f6fbb5d0ad87c85e0236a7fece107b69eb8b8b.zip |
tdf#104046 - Slides in the slide pane don't update in realtime
This appears to be a consequence of my change
commit 942716fee138b68c2af9411384f402b5692a88b2
convert EID constants to typed_flags
in that change I made a "fix":
@@ -689,20 +687,20 @@ void
EventMultiplexer::Implementation::CallListeners (EventMultiplexerEvent&
rEv
ListenerList::const_iterator iListenerEnd
(aCopyListeners.end());
for (; iListener!=iListenerEnd; ++iListener)
{
- if ((iListener->second && rEvent.meEventId))
+ if (iListener->second & rEvent.meEventId)
iListener->first.Call(rEvent);
}
}
which causes this bug.
I should have noticed that my "fix" indicates that the event filtering
part of this multiplexing code was never working, and since no-one has
ever complained about, lets just remove all of this unnecessary
complexity.
Change-Id: Id71613d4fd5817ee1358705059e4ce63d57573ad
Reviewed-on: https://gerrit.libreoffice.org/31894
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'sd/source/ui/tools/EventMultiplexer.cxx')
-rw-r--r-- | sd/source/ui/tools/EventMultiplexer.cxx | 59 |
1 files changed, 18 insertions, 41 deletions
diff --git a/sd/source/ui/tools/EventMultiplexer.cxx b/sd/source/ui/tools/EventMultiplexer.cxx index fc9f3763f1cc..2f6d03123bdb 100644 --- a/sd/source/ui/tools/EventMultiplexer.cxx +++ b/sd/source/ui/tools/EventMultiplexer.cxx @@ -68,12 +68,10 @@ public: virtual ~Implementation() override; void AddEventListener ( - const Link<EventMultiplexerEvent&,void>& rCallback, - EventMultiplexerEventId aEventTypes); + const Link<EventMultiplexerEvent&,void>& rCallback); void RemoveEventListener ( - const Link<EventMultiplexerEvent&,void>& rCallback, - EventMultiplexerEventId aEventTypes); + const Link<EventMultiplexerEvent&,void>& rCallback); void CallListeners (EventMultiplexerEvent& rEvent); @@ -118,8 +116,7 @@ protected: private: ViewShellBase& mrBase; - typedef ::std::pair<Link<EventMultiplexerEvent&,void>,EventMultiplexerEventId> ListenerDescriptor; - typedef ::std::vector<ListenerDescriptor> ListenerList; + typedef ::std::vector<Link<EventMultiplexerEvent&,void>> ListenerList; ListenerList maListeners; /// Remember whether we are listening to the UNO controller. @@ -170,17 +167,15 @@ EventMultiplexer::~EventMultiplexer() } void EventMultiplexer::AddEventListener ( - const Link<EventMultiplexerEvent&,void>& rCallback, - EventMultiplexerEventId aEventTypes) + const Link<EventMultiplexerEvent&,void>& rCallback) { - mpImpl->AddEventListener (rCallback, aEventTypes); + mpImpl->AddEventListener(rCallback); } void EventMultiplexer::RemoveEventListener ( - const Link<EventMultiplexerEvent&,void>& rCallback, - EventMultiplexerEventId aEventTypes) + const Link<EventMultiplexerEvent&,void>& rCallback) { - mpImpl->RemoveEventListener (rCallback, aEventTypes); + mpImpl->RemoveEventListener(rCallback); } void EventMultiplexer::MultiplexEvent( @@ -300,42 +295,25 @@ void EventMultiplexer::Implementation::ReleaseListeners() } void EventMultiplexer::Implementation::AddEventListener ( - const Link<EventMultiplexerEvent&,void>& rCallback, - EventMultiplexerEventId aEventTypes) + const Link<EventMultiplexerEvent&,void>& rCallback) { - ListenerList::iterator iListener (maListeners.begin()); - ListenerList::const_iterator iEnd (maListeners.end()); - for (;iListener!=iEnd; ++iListener) - if (iListener->first == rCallback) - break; - if (iListener != maListeners.end()) - { - // Listener exists. Update its event type set. - iListener->second |= aEventTypes; - } - else - { - maListeners.push_back (ListenerDescriptor(rCallback,aEventTypes)); - } + for (auto const & i : maListeners) + if (i == rCallback) + return; + maListeners.push_back(rCallback); } void EventMultiplexer::Implementation::RemoveEventListener ( - const Link<EventMultiplexerEvent&,void>& rCallback, - EventMultiplexerEventId aEventTypes) + const Link<EventMultiplexerEvent&,void>& rCallback) { ListenerList::iterator iListener (maListeners.begin()); ListenerList::const_iterator iEnd (maListeners.end()); for (;iListener!=iEnd; ++iListener) - if (iListener->first == rCallback) + if (*iListener == rCallback) + { + maListeners.erase(iListener); break; - if (iListener != maListeners.end()) - { - // Update the event type set. - iListener->second &= ~aEventTypes; - // When no events remain in the set then remove the listener. - if (iListener->second == EventMultiplexerEventId::NONE) - maListeners.erase (iListener); - } + } } void EventMultiplexer::Implementation::ConnectToController() @@ -675,8 +653,7 @@ void EventMultiplexer::Implementation::CallListeners (EventMultiplexerEvent& rEv ListenerList::const_iterator iListenerEnd (aCopyListeners.end()); for (; iListener!=iListenerEnd; ++iListener) { - if (iListener->second & rEvent.meEventId) - iListener->first.Call(rEvent); + iListener->Call(rEvent); } } |