diff --git a/Code/Visualization/otbGlWidget.cxx b/Code/Visualization/otbGlWidget.cxx index b9d16352b796407f171eb2f27f3df7ca260466d7..4afae9e56043c8afc123d7727c241f6cdf897c82 100644 --- a/Code/Visualization/otbGlWidget.cxx +++ b/Code/Visualization/otbGlWidget.cxx @@ -37,7 +37,10 @@ GlWidget } GlWidget::~GlWidget() -{} +{ + // Clear registered controller + m_Controller = NULL; +} void GlWidget::PrintSelf(std::ostream& os, itk::Indent indent) const { @@ -123,15 +126,17 @@ void GlWidget::resize(int x, int y, int w, int h) int GlWidget::handle(int event) { - // If there is a controller - if(m_Controller.IsNotNull()) - { - return m_Controller->HandleWidgetEvent(m_Identifier,event); - } - else + // Call superclass implementation + int resp = Fl_Widget::handle(event); + + // Check if there is a controller + // Avoid processing hide events, since it causes segfault (the + // destructor of the Fl class generates hide events). + if(m_Controller.IsNotNull() && event != FL_HIDE) { - return 0; + resp = m_Controller->HandleWidgetEvent(m_Identifier,event); } + return resp; } GlWidget::PointType GlWidget::GetMousePosition()