diff options
Diffstat (limited to 'chart2/source/controller/main/ChartWindow.cxx')
-rw-r--r-- | chart2/source/controller/main/ChartWindow.cxx | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/chart2/source/controller/main/ChartWindow.cxx b/chart2/source/controller/main/ChartWindow.cxx index c46bab4e0b48..cd50dd3fb598 100644 --- a/chart2/source/controller/main/ChartWindow.cxx +++ b/chart2/source/controller/main/ChartWindow.cxx @@ -49,7 +49,7 @@ ChartWindow::ChartWindow( ChartController* pController, vcl::Window* pParent, Wi : Window(pParent, nStyle) , m_pWindowController( pController ) , m_bInPaint(false) - , m_pOpenGLWindow(new OpenGLWindow(this)) + , m_pOpenGLWindow(VclPtr<OpenGLWindow>::Create(this)) { this->SetHelpId( HID_SCH_WIN_DOCUMENT ); this->SetMapMode( MapMode(MAP_100TH_MM) ); @@ -64,7 +64,7 @@ ChartWindow::ChartWindow( ChartController* pController, vcl::Window* pParent, Wi { m_pOpenGLWindow->Show(); uno::Reference< chart2::X3DChartWindowProvider > x3DWindowProvider(pController->getModel(), uno::UNO_QUERY_THROW); - sal_uInt64 nWindowPtr = reinterpret_cast<sal_uInt64>(m_pOpenGLWindow); + sal_uInt64 nWindowPtr = reinterpret_cast<sal_uInt64>(m_pOpenGLWindow.get()); x3DWindowProvider->setWindow(nWindowPtr); x3DWindowProvider->update(); } @@ -72,13 +72,19 @@ ChartWindow::ChartWindow( ChartController* pController, vcl::Window* pParent, Wi ChartWindow::~ChartWindow() { + disposeOnce(); +} + +void ChartWindow::dispose() +{ if (m_pWindowController && m_pWindowController->getModel().is()) { uno::Reference< chart2::X3DChartWindowProvider > x3DWindowProvider(m_pWindowController->getModel(), uno::UNO_QUERY_THROW); x3DWindowProvider->setWindow(0); x3DWindowProvider->update(); } - delete m_pOpenGLWindow; + m_pOpenGLWindow.disposeAndClear(); + vcl::Window::dispose(); } void ChartWindow::clear() |