summaryrefslogtreecommitdiff
path: root/slideshow
diff options
context:
space:
mode:
Diffstat (limited to 'slideshow')
-rw-r--r--slideshow/source/engine/eventmultiplexer.cxx37
1 files changed, 21 insertions, 16 deletions
diff --git a/slideshow/source/engine/eventmultiplexer.cxx b/slideshow/source/engine/eventmultiplexer.cxx
index 07f7ddaa8af7..1ea583da8d9c 100644
--- a/slideshow/source/engine/eventmultiplexer.cxx
+++ b/slideshow/source/engine/eventmultiplexer.cxx
@@ -45,19 +45,23 @@
#include <functional>
#include <memory>
#include <algorithm>
+#include <utility>
#include <vector>
using namespace ::com::sun::star;
-
-namespace std
+namespace
{
// add operator== for weak_ptr, so we can use std::find over lists of them
- template<typename T> static bool operator==( weak_ptr<T> const& rLHS,
- weak_ptr<T> const& rRHS )
- {
- return rLHS.lock().get() == rRHS.lock().get();
- }
+ struct ViewEventHandlerWeakPtrWrapper final {
+ slideshow::internal::ViewEventHandlerWeakPtr ptr;
+
+ ViewEventHandlerWeakPtrWrapper(slideshow::internal::ViewEventHandlerWeakPtr thePtr):
+ ptr(std::move(thePtr)) {}
+
+ bool operator ==(ViewEventHandlerWeakPtrWrapper const & other) const
+ { return ptr.lock().get() == other.ptr.lock().get(); }
+ };
}
namespace slideshow {
@@ -209,8 +213,8 @@ struct EventMultiplexerImpl
PauseEventHandlerSharedPtr,
std::vector<PauseEventHandlerSharedPtr> > ImplPauseHandlers;
typedef ThreadUnsafeListenerContainer<
- ViewEventHandlerWeakPtr,
- std::vector<ViewEventHandlerWeakPtr> > ImplViewHandlers;
+ ViewEventHandlerWeakPtrWrapper,
+ std::vector<ViewEventHandlerWeakPtrWrapper> > ImplViewHandlers;
typedef ThreadUnsafeListenerContainer<
ViewRepaintHandlerSharedPtr,
std::vector<ViewRepaintHandlerSharedPtr> > ImplRepaintHandlers;
@@ -1101,8 +1105,8 @@ void EventMultiplexer::notifyViewAdded( const UnoViewSharedPtr& rView )
mpImpl->mxListener.get() );
mpImpl->maViewHandlers.applyAll(
- [&rView]( const ViewEventHandlerWeakPtr& pHandler )
- { return pHandler.lock()->viewAdded( rView ); } );
+ [&rView]( const ViewEventHandlerWeakPtrWrapper& pHandler )
+ { return pHandler.ptr.lock()->viewAdded( rView ); } );
}
void EventMultiplexer::notifyViewRemoved( const UnoViewSharedPtr& rView )
@@ -1123,15 +1127,15 @@ void EventMultiplexer::notifyViewRemoved( const UnoViewSharedPtr& rView )
mpImpl->mxListener.get() );
mpImpl->maViewHandlers.applyAll(
- [&rView]( const ViewEventHandlerWeakPtr& pHandler )
- { return pHandler.lock()->viewRemoved( rView ); } );
+ [&rView]( const ViewEventHandlerWeakPtrWrapper& pHandler )
+ { return pHandler.ptr.lock()->viewRemoved( rView ); } );
}
void EventMultiplexer::notifyViewChanged( const UnoViewSharedPtr& rView )
{
mpImpl->maViewHandlers.applyAll(
- [&rView]( const ViewEventHandlerWeakPtr& pHandler )
- { return pHandler.lock()->viewChanged( rView ); } );
+ [&rView]( const ViewEventHandlerWeakPtrWrapper& pHandler )
+ { return pHandler.ptr.lock()->viewChanged( rView ); } );
}
void EventMultiplexer::notifyViewChanged( const uno::Reference<presentation::XSlideShowView>& xView )
@@ -1147,7 +1151,8 @@ void EventMultiplexer::notifyViewChanged( const uno::Reference<presentation::XSl
void EventMultiplexer::notifyViewsChanged()
{
mpImpl->maViewHandlers.applyAll(
- std::mem_fn( &ViewEventHandler::viewsChanged ));
+ []( const ViewEventHandlerWeakPtrWrapper& pHandler )
+ { return pHandler.ptr.lock()->viewsChanged(); } );
}
void EventMultiplexer::notifyViewClobbered(