From 998cfec137afe0ece522110c74b6d001b9919b76 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Wed, 11 Mar 2009 14:18:30 +0000 Subject: [PATCH] Added View::removeEventHandler(..) method and added check into addEventHandler() to prevent handlers being added twice. --- include/osgViewer/View | 5 ++++- src/osgViewer/View.cpp | 15 ++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) 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)