]> git.saurik.com Git - wxWidgets.git/commitdiff
Big fix for GTK 1.1.5
authorRobert Roebling <robert@roebling.de>
Tue, 24 Nov 1998 15:34:41 +0000 (15:34 +0000)
committerRobert Roebling <robert@roebling.de>
Tue, 24 Nov 1998 15:34:41 +0000 (15:34 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1031 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/gtk/clipbrd.cpp
src/gtk/dcscreen.cpp
src/gtk/listbox.cpp
src/gtk/win_gtk.c
src/gtk/window.cpp
src/gtk1/clipbrd.cpp
src/gtk1/dcscreen.cpp
src/gtk1/listbox.cpp
src/gtk1/win_gtk.c
src/gtk1/window.cpp

index 2b77826901c98d2409e730fd0ccf332f11c4c758..10b56ff272ebbd410a14fb61f62d2b9bc97949f3 100644 (file)
@@ -155,7 +155,6 @@ void wxClipboard::SetData( wxDataObject *data )
                                 selection_handler,
                                 NULL );
       break;
-*/
     case wxDF_TEXT:
       gtk_selection_add_handler( m_clipboardWidget, 
                                  g_clipboardAtom, 
@@ -163,6 +162,7 @@ void wxClipboard::SetData( wxDataObject *data )
                                 selection_handler,
                                 NULL );
       break;
+*/
     default:
       break;
   }
index f0bc7c02de93879bb914486fdf96ebfd83185be8..bd5f0c22e03803caa45ca5393ee42297f786230e 100644 (file)
@@ -122,6 +122,8 @@ gdk_window_transparent_new ( GdkWindow     *parent,
   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;
@@ -130,6 +132,7 @@ gdk_window_transparent_new ( GdkWindow     *parent,
     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;
index 198a207afa9c28ef604fa49280f534ee80390d62..2793afeb92834d7d244ba69768ebeba5a623436f 100644 (file)
 #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
 //-----------------------------------------------------------------------------
@@ -91,7 +101,12 @@ bool wxListBox::Create( wxWindow *parent, wxWindowID id,
 
     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;
@@ -163,7 +178,9 @@ void wxListBox::AppendCommon( const wxString &item )
 
     ConnectWidget( list_item );
 
+#ifndef NEW_GTK_DND_CODE
     if (m_dropTarget) m_dropTarget->RegisterWidget( list_item );
+#endif
 }
 
 void wxListBox::Append( const wxString &item )
@@ -481,46 +498,31 @@ void wxListBox::SetDropTarget( wxDropTarget *dropTarget )
 {
     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()
index dc58604aa939c033dc5e5cba40c0f6a20d87c852..028a92ed339e87af6646a1c0232a1763e70915f0 100644 (file)
 #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 */
@@ -17,7 +27,9 @@ extern "C" {
 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);
@@ -39,6 +51,9 @@ static void gtk_myfixed_foreach       (GtkContainer     *container,
 #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;
@@ -58,8 +73,14 @@ gtk_myfixed_get_type ()
        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);
@@ -79,10 +100,16 @@ gtk_myfixed_class_init (GtkMyFixedClass *klass)
   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;
@@ -96,13 +123,28 @@ gtk_myfixed_class_init (GtkMyFixedClass *klass)
 #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;
 }
@@ -209,6 +251,7 @@ gtk_myfixed_map (GtkWidget *widget)
     }
 }
 
+#ifndef NEW_GTK_CONSTRUCT_CODE
 static void
 gtk_myfixed_unmap (GtkWidget *widget)
 {
@@ -217,6 +260,7 @@ gtk_myfixed_unmap (GtkWidget *widget)
 
   GTK_WIDGET_UNSET_FLAGS (widget, GTK_MAPPED);
 }
+#endif
 
 static void
 gtk_myfixed_realize (GtkWidget *widget)
index 95aa2af173630ab7c5c609deea4e4c25ff71242b..aadf569ac2b85055e5a7b76725476a39968c58c5 100644 (file)
 
 */
 
+//-------------------------------------------------------------------------
+// conditional compilation
+//-------------------------------------------------------------------------
+
+#if (GTK_MINOR_VERSION == 1)
+#if (GTK_MICRO_VERSION >= 5)
+#define NEW_GTK_SCROLL_CODE
+#endif
+#endif
+
 //-----------------------------------------------------------------------------
 // data
 //-----------------------------------------------------------------------------
@@ -956,6 +966,7 @@ bool wxWindow::Create( wxWindow *parent, wxWindowID id,
     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);
 
@@ -992,7 +1003,15 @@ bool wxWindow::Create( wxWindow *parent, wxWindowID id,
     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)
     {
@@ -1007,17 +1026,11 @@ bool wxWindow::Create( wxWindow *parent, wxWindowID id,
         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) );
@@ -1403,7 +1416,12 @@ void wxWindow::SetClientSize( int width, int height )
       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;
@@ -1463,7 +1481,12 @@ void wxWindow::GetClientSize( int *width, int *height ) const
       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;
index 2b77826901c98d2409e730fd0ccf332f11c4c758..10b56ff272ebbd410a14fb61f62d2b9bc97949f3 100644 (file)
@@ -155,7 +155,6 @@ void wxClipboard::SetData( wxDataObject *data )
                                 selection_handler,
                                 NULL );
       break;
-*/
     case wxDF_TEXT:
       gtk_selection_add_handler( m_clipboardWidget, 
                                  g_clipboardAtom, 
@@ -163,6 +162,7 @@ void wxClipboard::SetData( wxDataObject *data )
                                 selection_handler,
                                 NULL );
       break;
+*/
     default:
       break;
   }
index f0bc7c02de93879bb914486fdf96ebfd83185be8..bd5f0c22e03803caa45ca5393ee42297f786230e 100644 (file)
@@ -122,6 +122,8 @@ gdk_window_transparent_new ( GdkWindow     *parent,
   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;
@@ -130,6 +132,7 @@ gdk_window_transparent_new ( GdkWindow     *parent,
     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;
index 198a207afa9c28ef604fa49280f534ee80390d62..2793afeb92834d7d244ba69768ebeba5a623436f 100644 (file)
 #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
 //-----------------------------------------------------------------------------
@@ -91,7 +101,12 @@ bool wxListBox::Create( wxWindow *parent, wxWindowID id,
 
     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;
@@ -163,7 +178,9 @@ void wxListBox::AppendCommon( const wxString &item )
 
     ConnectWidget( list_item );
 
+#ifndef NEW_GTK_DND_CODE
     if (m_dropTarget) m_dropTarget->RegisterWidget( list_item );
+#endif
 }
 
 void wxListBox::Append( const wxString &item )
@@ -481,46 +498,31 @@ void wxListBox::SetDropTarget( wxDropTarget *dropTarget )
 {
     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()
index dc58604aa939c033dc5e5cba40c0f6a20d87c852..028a92ed339e87af6646a1c0232a1763e70915f0 100644 (file)
 #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 */
@@ -17,7 +27,9 @@ extern "C" {
 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);
@@ -39,6 +51,9 @@ static void gtk_myfixed_foreach       (GtkContainer     *container,
 #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;
@@ -58,8 +73,14 @@ gtk_myfixed_get_type ()
        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);
@@ -79,10 +100,16 @@ gtk_myfixed_class_init (GtkMyFixedClass *klass)
   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;
@@ -96,13 +123,28 @@ gtk_myfixed_class_init (GtkMyFixedClass *klass)
 #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;
 }
@@ -209,6 +251,7 @@ gtk_myfixed_map (GtkWidget *widget)
     }
 }
 
+#ifndef NEW_GTK_CONSTRUCT_CODE
 static void
 gtk_myfixed_unmap (GtkWidget *widget)
 {
@@ -217,6 +260,7 @@ gtk_myfixed_unmap (GtkWidget *widget)
 
   GTK_WIDGET_UNSET_FLAGS (widget, GTK_MAPPED);
 }
+#endif
 
 static void
 gtk_myfixed_realize (GtkWidget *widget)
index 95aa2af173630ab7c5c609deea4e4c25ff71242b..aadf569ac2b85055e5a7b76725476a39968c58c5 100644 (file)
 
 */
 
+//-------------------------------------------------------------------------
+// conditional compilation
+//-------------------------------------------------------------------------
+
+#if (GTK_MINOR_VERSION == 1)
+#if (GTK_MICRO_VERSION >= 5)
+#define NEW_GTK_SCROLL_CODE
+#endif
+#endif
+
 //-----------------------------------------------------------------------------
 // data
 //-----------------------------------------------------------------------------
@@ -956,6 +966,7 @@ bool wxWindow::Create( wxWindow *parent, wxWindowID id,
     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);
 
@@ -992,7 +1003,15 @@ bool wxWindow::Create( wxWindow *parent, wxWindowID id,
     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)
     {
@@ -1007,17 +1026,11 @@ bool wxWindow::Create( wxWindow *parent, wxWindowID id,
         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) );
@@ -1403,7 +1416,12 @@ void wxWindow::SetClientSize( int width, int height )
       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;
@@ -1463,7 +1481,12 @@ void wxWindow::GetClientSize( int *width, int *height ) const
       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;