diff options
Diffstat (limited to 'vcl/source/window/openglwin.cxx')
-rw-r--r-- | vcl/source/window/openglwin.cxx | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/vcl/source/window/openglwin.cxx b/vcl/source/window/openglwin.cxx index 741940f45e2d..21af6cc53598 100644 --- a/vcl/source/window/openglwin.cxx +++ b/vcl/source/window/openglwin.cxx @@ -16,22 +16,22 @@ class OpenGLWindowImpl { public: OpenGLWindowImpl(vcl::Window* pWindow); + ~OpenGLWindowImpl() { mxChildWindow.disposeAndClear(); } OpenGLContext& getContext() { return maContext;} private: OpenGLContext maContext; - std::unique_ptr<SystemChildWindow> mxChildWindow; + VclPtr<SystemChildWindow> mxChildWindow; }; OpenGLWindowImpl::OpenGLWindowImpl(vcl::Window* pWindow) { SystemWindowData aData = OpenGLContext::generateWinData(pWindow, false); - mxChildWindow.reset(new SystemChildWindow(pWindow, 0, &aData)); + mxChildWindow.reset(VclPtr<SystemChildWindow>::Create(pWindow, 0, &aData)); mxChildWindow->Show(); maContext.init(mxChildWindow.get()); pWindow->SetMouseTransparent(false); } - OpenGLWindow::OpenGLWindow(vcl::Window* pParent): Window(pParent, 0), mxImpl(new OpenGLWindowImpl(this)), @@ -41,8 +41,16 @@ OpenGLWindow::OpenGLWindow(vcl::Window* pParent): OpenGLWindow::~OpenGLWindow() { + disposeOnce(); +} + +void OpenGLWindow::dispose() +{ if(mpRenderer) mpRenderer->contextDestroyed(); + mpRenderer = NULL; + mxImpl.reset(); + Window::dispose(); } OpenGLContext& OpenGLWindow::getContext() |