From: Vadim Zeitlin Date: Tue, 4 May 2004 15:00:36 +0000 (+0000) Subject: check for multiple calls to gtk_glwindow_realized_callback X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/4230303c5415335c70caa0896163175d5e0e7da1?ds=sidebyside check for multiple calls to gtk_glwindow_realized_callback git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@27097 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/gtk/glcanvas.cpp b/src/gtk/glcanvas.cpp index 88018d4bb8..7cd95d0cab 100644 --- a/src/gtk/glcanvas.cpp +++ b/src/gtk/glcanvas.cpp @@ -160,10 +160,16 @@ wxPalette wxGLContext::CreateDefaultPalette() static gint gtk_glwindow_realized_callback( GtkWidget * WXUNUSED(widget), wxGLCanvas *win ) { - wxGLContext *share= win->m_sharedContext; - if (share==NULL && win->m_sharedContextOf) share=win->m_sharedContextOf->GetContext(); + // VZ: apparently in some cases we're called twice -- no idea why, + // but a check doesn't hurt + if ( !win->m_glContext ) + { + wxGLContext *share = win->m_sharedContext; + if ( !share && win->m_sharedContextOf ) + share = win->m_sharedContextOf->GetContext(); - win->m_glContext = new wxGLContext( TRUE, win, wxNullPalette, share ); + win->m_glContext = new wxGLContext( TRUE, win, wxNullPalette, share ); + } return FALSE; } @@ -365,7 +371,7 @@ wxGLCanvas::~wxGLCanvas() XVisualInfo *vi = (XVisualInfo *) m_vi; if (vi && m_canFreeVi) XFree( vi ); - if (m_glContext) delete m_glContext; + delete m_glContext; } void* wxGLCanvas::ChooseGLVisual(int *attribList) diff --git a/src/gtk1/glcanvas.cpp b/src/gtk1/glcanvas.cpp index 88018d4bb8..7cd95d0cab 100644 --- a/src/gtk1/glcanvas.cpp +++ b/src/gtk1/glcanvas.cpp @@ -160,10 +160,16 @@ wxPalette wxGLContext::CreateDefaultPalette() static gint gtk_glwindow_realized_callback( GtkWidget * WXUNUSED(widget), wxGLCanvas *win ) { - wxGLContext *share= win->m_sharedContext; - if (share==NULL && win->m_sharedContextOf) share=win->m_sharedContextOf->GetContext(); + // VZ: apparently in some cases we're called twice -- no idea why, + // but a check doesn't hurt + if ( !win->m_glContext ) + { + wxGLContext *share = win->m_sharedContext; + if ( !share && win->m_sharedContextOf ) + share = win->m_sharedContextOf->GetContext(); - win->m_glContext = new wxGLContext( TRUE, win, wxNullPalette, share ); + win->m_glContext = new wxGLContext( TRUE, win, wxNullPalette, share ); + } return FALSE; } @@ -365,7 +371,7 @@ wxGLCanvas::~wxGLCanvas() XVisualInfo *vi = (XVisualInfo *) m_vi; if (vi && m_canFreeVi) XFree( vi ); - if (m_glContext) delete m_glContext; + delete m_glContext; } void* wxGLCanvas::ChooseGLVisual(int *attribList)