diff --git a/include/osgViewer/View b/include/osgViewer/View index d618127d7..8a0d1a152 100644 --- a/include/osgViewer/View +++ b/include/osgViewer/View @@ -113,10 +113,13 @@ class OSGVIEWER_EXPORT View : public osg::View, public osgGA::GUIActionAdapter typedef std::list< osg::ref_ptr > EventHandlers; - + /** Add an EventHandler that adds handling of events to the View.*/ void addEventHandler(osgGA::GUIEventHandler* eventHandler); + /** Remove an EventHandler from View.*/ + void removeEventHandler(osgGA::GUIEventHandler* eventHandler); + /** Get the View's list of EventHandlers.*/ EventHandlers& getEventHandlers() { return _eventHandlers; } diff --git a/src/osgViewer/View.cpp b/src/osgViewer/View.cpp index 786cebbc4..382e12d71 100644 --- a/src/osgViewer/View.cpp +++ b/src/osgViewer/View.cpp @@ -357,7 +357,20 @@ void View::home() void View::addEventHandler(osgGA::GUIEventHandler* eventHandler) { - _eventHandlers.push_back(eventHandler); + EventHandlers::iterator itr = std::find(_eventHandlers.begin(), _eventHandlers.end(), eventHandler); + if (itr == _eventHandlers.end()) + { + _eventHandlers.push_back(eventHandler); + } +} + +void View::removeEventHandler(osgGA::GUIEventHandler* eventHandler) +{ + EventHandlers::iterator itr = std::find(_eventHandlers.begin(), _eventHandlers.end(), eventHandler); + if (itr != _eventHandlers.end()) + { + _eventHandlers.erase(itr); + } } void View::setCoordinateSystemNodePath(const osg::NodePath& nodePath)