summaryrefslogtreecommitdiff
path: root/vcl/source/window/openglwin.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'vcl/source/window/openglwin.cxx')
-rw-r--r--vcl/source/window/openglwin.cxx14
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()