]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/glcanvas.cpp
src/common/wxchar.cpps/wxConvLocal/wxConvLibs/g as otherwise we may fail to convert...
[wxWidgets.git] / src / gtk / glcanvas.cpp
index e5f769403bb06aeb92e94a1bb471cdbc08618aab..1dce4e0df5f1b678f61ecc673b47a14797339230 100644 (file)
@@ -157,11 +157,10 @@ wxPalette wxGLContext::CreateDefaultPalette()
 // "realize" from m_wxwindow
 //-----------------------------------------------------------------------------
 
+extern "C" {
 static gint
 gtk_glwindow_realized_callback( GtkWidget * WXUNUSED(widget), wxGLCanvas *win )
 {
-    // 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;
@@ -173,11 +172,13 @@ gtk_glwindow_realized_callback( GtkWidget * WXUNUSED(widget), wxGLCanvas *win )
 
     return FALSE;
 }
+}
 
 //-----------------------------------------------------------------------------
 // "map" from m_wxwindow
 //-----------------------------------------------------------------------------
 
+extern "C" {
 static gint
 gtk_glwindow_map_callback( GtkWidget * WXUNUSED(widget), wxGLCanvas *win )
 {
@@ -193,11 +194,13 @@ gtk_glwindow_map_callback( GtkWidget * WXUNUSED(widget), wxGLCanvas *win )
 
     return FALSE;
 }
+}
 
 //-----------------------------------------------------------------------------
 // "expose_event" of m_wxwindow
 //-----------------------------------------------------------------------------
 
+extern "C" {
 static void
 gtk_glwindow_expose_callback( GtkWidget *WXUNUSED(widget), GdkEventExpose *gdk_event, wxGLCanvas *win )
 {
@@ -211,12 +214,14 @@ gtk_glwindow_expose_callback( GtkWidget *WXUNUSED(widget), GdkEventExpose *gdk_e
                                   gdk_event->area.width,
                                   gdk_event->area.height );
 }
+}
 
 //-----------------------------------------------------------------------------
 // "draw" of m_wxwindow
 //-----------------------------------------------------------------------------
 
 #ifndef __WXGTK20__
+extern "C" {
 static void
 gtk_glwindow_draw_callback( GtkWidget *WXUNUSED(widget), GdkRectangle *rect, wxGLCanvas *win )
 {
@@ -228,12 +233,14 @@ gtk_glwindow_draw_callback( GtkWidget *WXUNUSED(widget), GdkRectangle *rect, wxG
     win->GetUpdateRegion().Union( rect->x, rect->y,
                                   rect->width, rect->height );
 }
+}
 #endif
 
 //-----------------------------------------------------------------------------
 // "size_allocate" of m_wxwindow
 //-----------------------------------------------------------------------------
 
+extern "C" {
 static void
 gtk_glcanvas_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation* alloc, wxGLCanvas *win )
 {
@@ -247,6 +254,7 @@ gtk_glcanvas_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation* alloc, w
     event.SetEventObject( win );
     win->GetEventHandler()->ProcessEvent( event );
 }
+}
 
 //---------------------------------------------------------------------------
 // wxGlCanvas
@@ -357,6 +365,9 @@ bool wxGLCanvas::Create( wxWindow *parent,
     gtk_widget_pop_visual();
     gtk_widget_pop_colormap();
 
+    // if our parent window is already visible, we had been realized before we
+    // connected to the "realize" signal and hence our m_glContext hasn't been
+    // initialized yet and we have to do it now
     if (GTK_WIDGET_REALIZED(m_wxwindow))
         gtk_glwindow_realized_callback( m_wxwindow, this );