+//-----------------------------------------------------------------------------
+// GTK callbacks
+//-----------------------------------------------------------------------------
+
+// page change callback
+static void gtk_notebook_page_change_callback(GtkNotebook *WXUNUSED(widget),
+                                              GtkNotebookPage *WXUNUSED(page),
+                                              gint nPage,
+                                              gpointer data)
+{
+  wxNotebook *notebook = (wxNotebook *)data;
+
+  int nOld = notebook->GetSelection();
+
+  // TODO: emulate PAGE_CHANGING event
+  wxNotebookEvent event(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED,
+                        notebook->GetId(),
+                        nPage,
+                        nOld);
+  event.SetEventObject(notebook);
+  notebook->ProcessEvent(event);
+}
+
+static void gtk_page_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation* alloc, wxWindow *win )
+{ 
+  if ((win->m_x == alloc->x) &&
+      (win->m_y == alloc->y) &&
+      (win->m_width == alloc->width) &&
+      (win->m_height == alloc->height))
+  {
+    return;
+  };
+  
+/*
+  printf( "OnResize from " );
+  if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
+    printf( win->GetClassInfo()->GetClassName() );
+  printf( " .\n" );
+    
+  printf( "  Old: X: %d  Y: %d ", win->m_x, win->m_y );
+  printf( "  W: %d  H: %d ", win->m_width, win->m_height );
+  printf( " .\n" );
+    
+  printf( "  New: X: %d  Y: %d ", alloc->x, alloc->y );
+  printf( "  W: %d  H: %d ", alloc->width, alloc->height );
+  printf( " .\n" );
+*/
+  
+  win->SetSize( alloc->x, alloc->y, alloc->width, alloc->height );
+  
+/*
+  printf( "  Res: X: %d  Y: %d ", win->m_x, win->m_y );
+  printf( "  W: %d  H: %d ", win->m_width, win->m_height );
+  printf( " .\n" );
+*/    
+};
+