selection_handler,
                                 NULL );
       break;
-*/
     case wxDF_TEXT:
       gtk_selection_add_handler( m_clipboardWidget, 
                                  g_clipboardAtom, 
                                 selection_handler,
                                 NULL );
       break;
+*/
     default:
       break;
   }
 
   gprivate->height = (attributes->height > 1) ? (attributes->height) : (1);
   gprivate->window_type = attributes->window_type;
   gprivate->extension_events = FALSE;
+  
+#ifndef NEW_GTK_DND_CODE
   gprivate->dnd_drag_data_type = None;
   gprivate->dnd_drag_data_typesavail =
     gprivate->dnd_drop_data_typesavail = NULL;
     gprivate->dnd_drop_data_numtypesavail =
     gprivate->dnd_drag_data_numtypesavail = 0;
   gprivate->dnd_drag_eventmask = gprivate->dnd_drag_savedeventmask = 0;
+#endif
 
   gprivate->filters = NULL;
   gprivate->children = NULL;
 
 #include "wx/utils.h"
 #include <wx/intl.h>
 
+//-------------------------------------------------------------------------
+// conditional compilation
+//-------------------------------------------------------------------------
+
+#if (GTK_MINOR_VERSION == 1)
+#if (GTK_MICRO_VERSION >= 5)
+#define NEW_GTK_SCROLL_CODE
+#endif
+#endif
+
 //-----------------------------------------------------------------------------
 // data
 //-----------------------------------------------------------------------------
 
     gtk_list_set_selection_mode( GTK_LIST(m_list), mode );
 
+#ifdef NEW_GTK_SCROLL_CODE
+    gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW(m_widget), GTK_WIDGET(m_list) );
+#else
     gtk_container_add( GTK_CONTAINER(m_widget), GTK_WIDGET(m_list) );
+#endif
+
     gtk_widget_show( GTK_WIDGET(m_list) );
 
     wxSize newSize = size;
 
     ConnectWidget( list_item );
 
+#ifndef NEW_GTK_DND_CODE
     if (m_dropTarget) m_dropTarget->RegisterWidget( list_item );
+#endif
 }
 
 void wxListBox::Append( const wxString &item )
 {
     wxCHECK_RET( m_list != NULL, "invalid listbox" );
   
+#ifndef NEW_GTK_DND_CODE
     if (m_dropTarget)
     {
         GList *child = m_list->children;
         while (child)
         {
-#ifdef NEW_GTK_DND_CODE
-            GtkBin *item = GTK_BIN( child->data );
-           m_dropTarget->UnregisterWidget( item->child );
-#else
            m_dropTarget->UnregisterWidget( GTK_WIDGET( child->data ) );
-#endif
             child = child->next;
         }
     }
-
-#ifndef NEW_GTK_DND_CODE
-    if (m_dropTarget) m_dropTarget->UnregisterWidget( m_list );
 #endif
-
-    if (m_dropTarget) delete m_dropTarget;
-    m_dropTarget = dropTarget;
+    
+    wxWindow::SetDropTarget( dropTarget );
 
 #ifndef NEW_GTK_DND_CODE
-    if (m_dropTarget) m_dropTarget->RegisterWidget( dnd_widget );
-#endif
-
     if (m_dropTarget)
     {
         GList *child = m_list->children;
         while (child)
         {
-#ifdef NEW_GTK_DND_CODE
-            GtkBin *item = GTK_BIN( child->data );
-           m_dropTarget->RegisterWidget( item->child );
-#else
            m_dropTarget->RegisterWidget( GTK_WIDGET( child->data ) );
-#endif
             child = child->next;
         }
     }
+#endif
 }
 
 GtkWidget *wxListBox::GetConnectWidget()
 
 #include "wx/gtk/win_gtk.h"
 #include <gtk/gtkfeatures.h>
 
+/*-------------------------------------------------------------------------
+// conditional compilation
+//------------------------------------------------------------------------- */
+
+#if (GTK_MINOR_VERSION == 1)
+#if (GTK_MICRO_VERSION >= 5)
+#define NEW_GTK_CONSTRUCT_CODE
+#endif
+#endif
+
 #ifdef __cplusplus
 extern "C" {
 #endif /* __cplusplus */
 static void gtk_myfixed_class_init    (GtkMyFixedClass    *klass);
 static void gtk_myfixed_init          (GtkMyFixed         *myfixed);
 static void gtk_myfixed_map           (GtkWidget        *widget);
+#ifndef NEW_GTK_CONSTRUCT_CODE
 static void gtk_myfixed_unmap         (GtkWidget        *widget);
+#endif
 static void gtk_myfixed_realize       (GtkWidget        *widget);
 static void gtk_myfixed_size_request  (GtkWidget        *widget,
                                     GtkRequisition   *requisition);
 #endif
                                     GtkCallback      callback,
                                     gpointer         callback_data);
+#ifdef NEW_GTK_CONSTRUCT_CODE
+static GtkType gtk_myfixed_child_type (GtkContainer     *container);
+#endif
 
 
 static GtkContainerClass *parent_class = NULL;
        sizeof (GtkMyFixedClass),
        (GtkClassInitFunc) gtk_myfixed_class_init,
        (GtkObjectInitFunc) gtk_myfixed_init,
-       (GtkArgSetFunc) NULL,
+#ifndef NEW_GTK_CONSTRUCT_CODE 
+        (GtkArgSetFunc) NULL,
         (GtkArgGetFunc) NULL,
+#else
+       /* reserved_1 */ NULL,
+        /* reserved_2 */ NULL,
+        (GtkClassInitFunc) NULL,
+#endif
       };
 
       myfixed_type = gtk_type_unique (gtk_container_get_type (), &myfixed_info);
   widget_class = (GtkWidgetClass*) klass;
   container_class = (GtkContainerClass*) klass;
   
+#ifndef NEW_GTK_CONSTRUCT_CODE
   parent_class = gtk_type_class (gtk_container_get_type ());
+#else
+  parent_class = gtk_type_class (GTK_TYPE_CONTAINER);
+#endif
 
   widget_class->map = gtk_myfixed_map;
+#ifndef NEW_GTK_CONSTRUCT_CODE
   widget_class->unmap = gtk_myfixed_unmap;
+#endif
   widget_class->realize = gtk_myfixed_realize;
   widget_class->size_request = gtk_myfixed_size_request;
   widget_class->size_allocate = gtk_myfixed_size_allocate;
 #else
   container_class->foreach = gtk_myfixed_foreach;
 #endif
+
+#ifdef NEW_GTK_CONSTRUCT_CODE
+  container_class->child_type = gtk_myfixed_child_type;
+#endif
+}
+
+#ifdef NEW_GTK_CONSTRUCT_CODE
+static GtkType
+gtk_myfixed_child_type (GtkContainer     *container)
+{
+  return GTK_TYPE_WIDGET;
 }
+#endif
 
 static void
 gtk_myfixed_init (GtkMyFixed *myfixed)
 {
   GTK_WIDGET_UNSET_FLAGS (myfixed, GTK_NO_WINDOW);
+  
+#ifndef NEW_GTK_CONSTRUCT_CODE
   GTK_WIDGET_SET_FLAGS (myfixed, GTK_BASIC);
+#endif
 
   myfixed->children = NULL;
 }
     }
 }
 
+#ifndef NEW_GTK_CONSTRUCT_CODE
 static void
 gtk_myfixed_unmap (GtkWidget *widget)
 {
 
   GTK_WIDGET_UNSET_FLAGS (widget, GTK_MAPPED);
 }
+#endif
 
 static void
 gtk_myfixed_realize (GtkWidget *widget)
 
 
 */
 
+//-------------------------------------------------------------------------
+// conditional compilation
+//-------------------------------------------------------------------------
+
+#if (GTK_MINOR_VERSION == 1)
+#if (GTK_MICRO_VERSION >= 5)
+#define NEW_GTK_SCROLL_CODE
+#endif
+#endif
+
 //-----------------------------------------------------------------------------
 // data
 //-----------------------------------------------------------------------------
     PreCreation( parent, id, pos, size, style, name );
 
     m_widget = gtk_scrolled_window_new( (GtkAdjustment *) NULL, (GtkAdjustment *) NULL );
+    GTK_WIDGET_UNSET_FLAGS( m_widget, GTK_CAN_FOCUS );
 
     GtkScrolledWindow *s_window = GTK_SCROLLED_WINDOW(m_widget);
 
     gtk_signal_connect(GTK_OBJECT(m_vAdjust), "changed",
           (GtkSignalFunc) gtk_window_vscroll_change_callback, (gpointer) this );
 
+    m_wxwindow = gtk_myfixed_new();
+
+#ifdef NEW_GTK_SCROLL_CODE
+    gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW(m_widget), m_wxwindow );
+    GtkViewport *viewport = GTK_VIEWPORT(s_window->child);
+#else
+    gtk_container_add( GTK_CONTAINER(m_widget), m_wxwindow );
     GtkViewport *viewport = GTK_VIEWPORT(s_window->viewport);
+#endif
 
     if (m_windowStyle & wxRAISED_BORDER)
     {
         gtk_viewport_set_shadow_type( viewport, GTK_SHADOW_NONE );
     }
 
-    m_wxwindow = gtk_myfixed_new();
-
-    GTK_WIDGET_UNSET_FLAGS( m_widget, GTK_CAN_FOCUS );
-
     if (m_windowStyle & wxTAB_TRAVERSAL == wxTAB_TRAVERSAL)
         GTK_WIDGET_UNSET_FLAGS( m_wxwindow, GTK_CAN_FOCUS );
     else
         GTK_WIDGET_SET_FLAGS( m_wxwindow, GTK_CAN_FOCUS );
 
-    gtk_container_add( GTK_CONTAINER(m_widget), m_wxwindow );
-
     // shut the viewport up
     gtk_viewport_set_hadjustment( viewport, (GtkAdjustment*) gtk_adjustment_new( 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) );
     gtk_viewport_set_vadjustment( viewport, (GtkAdjustment*) gtk_adjustment_new( 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) );
       GtkScrolledWindow *scroll_window = GTK_SCROLLED_WINDOW(m_widget);
       GtkScrolledWindowClass *scroll_class = GTK_SCROLLED_WINDOW_CLASS( GTK_OBJECT(m_widget)->klass );
 
+#ifdef NEW_GTK_SCROLL_CODE
+      GtkWidget *viewport = scroll_window->child;
+#else      
       GtkWidget *viewport = scroll_window->viewport;
+#endif
+
       GtkStyleClass *viewport_class = viewport->style->klass;
 
       GtkWidget *hscrollbar = scroll_window->hscrollbar;
       GtkScrolledWindow *scroll_window = GTK_SCROLLED_WINDOW(m_widget);
       GtkScrolledWindowClass *scroll_class = GTK_SCROLLED_WINDOW_CLASS( GTK_OBJECT(m_widget)->klass );
 
+#ifdef NEW_GTK_SCROLL_CODE
+      GtkWidget *viewport = scroll_window->child;
+#else      
       GtkWidget *viewport = scroll_window->viewport;
+#endif
+
       GtkStyleClass *viewport_class = viewport->style->klass;
 
       GtkWidget *hscrollbar = scroll_window->hscrollbar;
 
                                 selection_handler,
                                 NULL );
       break;
-*/
     case wxDF_TEXT:
       gtk_selection_add_handler( m_clipboardWidget, 
                                  g_clipboardAtom, 
                                 selection_handler,
                                 NULL );
       break;
+*/
     default:
       break;
   }
 
   gprivate->height = (attributes->height > 1) ? (attributes->height) : (1);
   gprivate->window_type = attributes->window_type;
   gprivate->extension_events = FALSE;
+  
+#ifndef NEW_GTK_DND_CODE
   gprivate->dnd_drag_data_type = None;
   gprivate->dnd_drag_data_typesavail =
     gprivate->dnd_drop_data_typesavail = NULL;
     gprivate->dnd_drop_data_numtypesavail =
     gprivate->dnd_drag_data_numtypesavail = 0;
   gprivate->dnd_drag_eventmask = gprivate->dnd_drag_savedeventmask = 0;
+#endif
 
   gprivate->filters = NULL;
   gprivate->children = NULL;
 
 #include "wx/utils.h"
 #include <wx/intl.h>
 
+//-------------------------------------------------------------------------
+// conditional compilation
+//-------------------------------------------------------------------------
+
+#if (GTK_MINOR_VERSION == 1)
+#if (GTK_MICRO_VERSION >= 5)
+#define NEW_GTK_SCROLL_CODE
+#endif
+#endif
+
 //-----------------------------------------------------------------------------
 // data
 //-----------------------------------------------------------------------------
 
     gtk_list_set_selection_mode( GTK_LIST(m_list), mode );
 
+#ifdef NEW_GTK_SCROLL_CODE
+    gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW(m_widget), GTK_WIDGET(m_list) );
+#else
     gtk_container_add( GTK_CONTAINER(m_widget), GTK_WIDGET(m_list) );
+#endif
+
     gtk_widget_show( GTK_WIDGET(m_list) );
 
     wxSize newSize = size;
 
     ConnectWidget( list_item );
 
+#ifndef NEW_GTK_DND_CODE
     if (m_dropTarget) m_dropTarget->RegisterWidget( list_item );
+#endif
 }
 
 void wxListBox::Append( const wxString &item )
 {
     wxCHECK_RET( m_list != NULL, "invalid listbox" );
   
+#ifndef NEW_GTK_DND_CODE
     if (m_dropTarget)
     {
         GList *child = m_list->children;
         while (child)
         {
-#ifdef NEW_GTK_DND_CODE
-            GtkBin *item = GTK_BIN( child->data );
-           m_dropTarget->UnregisterWidget( item->child );
-#else
            m_dropTarget->UnregisterWidget( GTK_WIDGET( child->data ) );
-#endif
             child = child->next;
         }
     }
-
-#ifndef NEW_GTK_DND_CODE
-    if (m_dropTarget) m_dropTarget->UnregisterWidget( m_list );
 #endif
-
-    if (m_dropTarget) delete m_dropTarget;
-    m_dropTarget = dropTarget;
+    
+    wxWindow::SetDropTarget( dropTarget );
 
 #ifndef NEW_GTK_DND_CODE
-    if (m_dropTarget) m_dropTarget->RegisterWidget( dnd_widget );
-#endif
-
     if (m_dropTarget)
     {
         GList *child = m_list->children;
         while (child)
         {
-#ifdef NEW_GTK_DND_CODE
-            GtkBin *item = GTK_BIN( child->data );
-           m_dropTarget->RegisterWidget( item->child );
-#else
            m_dropTarget->RegisterWidget( GTK_WIDGET( child->data ) );
-#endif
             child = child->next;
         }
     }
+#endif
 }
 
 GtkWidget *wxListBox::GetConnectWidget()
 
 #include "wx/gtk/win_gtk.h"
 #include <gtk/gtkfeatures.h>
 
+/*-------------------------------------------------------------------------
+// conditional compilation
+//------------------------------------------------------------------------- */
+
+#if (GTK_MINOR_VERSION == 1)
+#if (GTK_MICRO_VERSION >= 5)
+#define NEW_GTK_CONSTRUCT_CODE
+#endif
+#endif
+
 #ifdef __cplusplus
 extern "C" {
 #endif /* __cplusplus */
 static void gtk_myfixed_class_init    (GtkMyFixedClass    *klass);
 static void gtk_myfixed_init          (GtkMyFixed         *myfixed);
 static void gtk_myfixed_map           (GtkWidget        *widget);
+#ifndef NEW_GTK_CONSTRUCT_CODE
 static void gtk_myfixed_unmap         (GtkWidget        *widget);
+#endif
 static void gtk_myfixed_realize       (GtkWidget        *widget);
 static void gtk_myfixed_size_request  (GtkWidget        *widget,
                                     GtkRequisition   *requisition);
 #endif
                                     GtkCallback      callback,
                                     gpointer         callback_data);
+#ifdef NEW_GTK_CONSTRUCT_CODE
+static GtkType gtk_myfixed_child_type (GtkContainer     *container);
+#endif
 
 
 static GtkContainerClass *parent_class = NULL;
        sizeof (GtkMyFixedClass),
        (GtkClassInitFunc) gtk_myfixed_class_init,
        (GtkObjectInitFunc) gtk_myfixed_init,
-       (GtkArgSetFunc) NULL,
+#ifndef NEW_GTK_CONSTRUCT_CODE 
+        (GtkArgSetFunc) NULL,
         (GtkArgGetFunc) NULL,
+#else
+       /* reserved_1 */ NULL,
+        /* reserved_2 */ NULL,
+        (GtkClassInitFunc) NULL,
+#endif
       };
 
       myfixed_type = gtk_type_unique (gtk_container_get_type (), &myfixed_info);
   widget_class = (GtkWidgetClass*) klass;
   container_class = (GtkContainerClass*) klass;
   
+#ifndef NEW_GTK_CONSTRUCT_CODE
   parent_class = gtk_type_class (gtk_container_get_type ());
+#else
+  parent_class = gtk_type_class (GTK_TYPE_CONTAINER);
+#endif
 
   widget_class->map = gtk_myfixed_map;
+#ifndef NEW_GTK_CONSTRUCT_CODE
   widget_class->unmap = gtk_myfixed_unmap;
+#endif
   widget_class->realize = gtk_myfixed_realize;
   widget_class->size_request = gtk_myfixed_size_request;
   widget_class->size_allocate = gtk_myfixed_size_allocate;
 #else
   container_class->foreach = gtk_myfixed_foreach;
 #endif
+
+#ifdef NEW_GTK_CONSTRUCT_CODE
+  container_class->child_type = gtk_myfixed_child_type;
+#endif
+}
+
+#ifdef NEW_GTK_CONSTRUCT_CODE
+static GtkType
+gtk_myfixed_child_type (GtkContainer     *container)
+{
+  return GTK_TYPE_WIDGET;
 }
+#endif
 
 static void
 gtk_myfixed_init (GtkMyFixed *myfixed)
 {
   GTK_WIDGET_UNSET_FLAGS (myfixed, GTK_NO_WINDOW);
+  
+#ifndef NEW_GTK_CONSTRUCT_CODE
   GTK_WIDGET_SET_FLAGS (myfixed, GTK_BASIC);
+#endif
 
   myfixed->children = NULL;
 }
     }
 }
 
+#ifndef NEW_GTK_CONSTRUCT_CODE
 static void
 gtk_myfixed_unmap (GtkWidget *widget)
 {
 
   GTK_WIDGET_UNSET_FLAGS (widget, GTK_MAPPED);
 }
+#endif
 
 static void
 gtk_myfixed_realize (GtkWidget *widget)
 
 
 */
 
+//-------------------------------------------------------------------------
+// conditional compilation
+//-------------------------------------------------------------------------
+
+#if (GTK_MINOR_VERSION == 1)
+#if (GTK_MICRO_VERSION >= 5)
+#define NEW_GTK_SCROLL_CODE
+#endif
+#endif
+
 //-----------------------------------------------------------------------------
 // data
 //-----------------------------------------------------------------------------
     PreCreation( parent, id, pos, size, style, name );
 
     m_widget = gtk_scrolled_window_new( (GtkAdjustment *) NULL, (GtkAdjustment *) NULL );
+    GTK_WIDGET_UNSET_FLAGS( m_widget, GTK_CAN_FOCUS );
 
     GtkScrolledWindow *s_window = GTK_SCROLLED_WINDOW(m_widget);
 
     gtk_signal_connect(GTK_OBJECT(m_vAdjust), "changed",
           (GtkSignalFunc) gtk_window_vscroll_change_callback, (gpointer) this );
 
+    m_wxwindow = gtk_myfixed_new();
+
+#ifdef NEW_GTK_SCROLL_CODE
+    gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW(m_widget), m_wxwindow );
+    GtkViewport *viewport = GTK_VIEWPORT(s_window->child);
+#else
+    gtk_container_add( GTK_CONTAINER(m_widget), m_wxwindow );
     GtkViewport *viewport = GTK_VIEWPORT(s_window->viewport);
+#endif
 
     if (m_windowStyle & wxRAISED_BORDER)
     {
         gtk_viewport_set_shadow_type( viewport, GTK_SHADOW_NONE );
     }
 
-    m_wxwindow = gtk_myfixed_new();
-
-    GTK_WIDGET_UNSET_FLAGS( m_widget, GTK_CAN_FOCUS );
-
     if (m_windowStyle & wxTAB_TRAVERSAL == wxTAB_TRAVERSAL)
         GTK_WIDGET_UNSET_FLAGS( m_wxwindow, GTK_CAN_FOCUS );
     else
         GTK_WIDGET_SET_FLAGS( m_wxwindow, GTK_CAN_FOCUS );
 
-    gtk_container_add( GTK_CONTAINER(m_widget), m_wxwindow );
-
     // shut the viewport up
     gtk_viewport_set_hadjustment( viewport, (GtkAdjustment*) gtk_adjustment_new( 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) );
     gtk_viewport_set_vadjustment( viewport, (GtkAdjustment*) gtk_adjustment_new( 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) );
       GtkScrolledWindow *scroll_window = GTK_SCROLLED_WINDOW(m_widget);
       GtkScrolledWindowClass *scroll_class = GTK_SCROLLED_WINDOW_CLASS( GTK_OBJECT(m_widget)->klass );
 
+#ifdef NEW_GTK_SCROLL_CODE
+      GtkWidget *viewport = scroll_window->child;
+#else      
       GtkWidget *viewport = scroll_window->viewport;
+#endif
+
       GtkStyleClass *viewport_class = viewport->style->klass;
 
       GtkWidget *hscrollbar = scroll_window->hscrollbar;
       GtkScrolledWindow *scroll_window = GTK_SCROLLED_WINDOW(m_widget);
       GtkScrolledWindowClass *scroll_class = GTK_SCROLLED_WINDOW_CLASS( GTK_OBJECT(m_widget)->klass );
 
+#ifdef NEW_GTK_SCROLL_CODE
+      GtkWidget *viewport = scroll_window->child;
+#else      
       GtkWidget *viewport = scroll_window->viewport;
+#endif
+
       GtkStyleClass *viewport_class = viewport->style->klass;
 
       GtkWidget *hscrollbar = scroll_window->hscrollbar;