cp $(SAMPDIR)/minimal/*.xpm $(DISTDIR)/samples/minimal
        cp $(SAMPDIR)/minimal/*.mms $(DISTDIR)/samples/minimal
 
+       mkdir $(DISTDIR)/samples/mobile
+       cp $(SAMPDIR)/mobile/Makefile.in $(DISTDIR)/samples/mobile
+       mkdir $(DISTDIR)/samples/mobile/wxedit
+       cp $(SAMPDIR)/mobile/wxedit/Makefile.in $(DISTDIR)/samples/mobile/wxedit
+       cp $(SAMPDIR)/mobile/wxedit/*.cpp $(DISTDIR)/samples/mobile/wxedit
+       cp $(SAMPDIR)/mobile/wxedit/*.h $(DISTDIR)/samples/mobile/wxedit
+    
        mkdir $(DISTDIR)/samples/dialup
        cp $(SAMPDIR)/dialup/Makefile.in $(DISTDIR)/samples/dialup
        cp $(SAMPDIR)/dialup/makefile.unx $(DISTDIR)/samples/dialup
 
 
 *** wxWindows 2.3.3 ***
 
+Beta support for GTK 2.0.
+
+Added wxArtProvider for changing default icons and more.
+
+Corrected wxScrolledWindow in some rare cases.
+
+Added wxIconBundle for mini- and normal icons.
+
+Made wxWindow::SetFocus() work before a wxDialog
+is created. Until now always the first item
+was focussed.
+
+Corrected wxComboBox's semantics of pressing <Enter>.
+
+Corrected SeekI() return values and other related functions
+in wxFilterStream and wxBufferedStream.
+
 Implemented new ref-counting for GDI classes.
 
 New implemenation of wxCondition.
 
 Added ICO, CUR and ANI image handler.
 
-wxFrame::SetMenuBar() corrected.
+wxFrame::SetMenuBar() corrected (for NULL etc.)
 
 wxButton honours wxBU_EXACTFIT.
 
 
 wxWindows no longer supports GTK 1.0 (as did some early
 snapshots) so that you will need GTK 1.2 when using it.
 GTK 1.2.6 or above is recommended although some programs 
-will work with GTK 1.2.3 onwards.
+will work with GTK 1.2.3 onwards. There is now beta support
+for GTK 2.0.
 
-More information is available from my homepage at:
-
-  http://wesley.informatik.uni-freiburg.de/~wxxt
-  
-and about the wxWindows project as a whole (and the MSW
+More info about the wxWindows project (and the Windows
 and Motif ports in particular) can be found at Julian's 
 homepage at:
 
 
     bool m_isInAssert;
 #endif // __WXDEBUG__
 
+    bool CallInternalIdle( wxWindow* win );
+    
     DECLARE_DYNAMIC_CLASS(wxApp)
     DECLARE_EVENT_TABLE()
 };
 
     // OnInternalIdle
     virtual void OnInternalIdle();
 
+    // Internal represention of Update()
+    void GtkUpdate();
+    
     // For delayed background 
     void GtkSetBackgroundColour( const wxColour &colour );
     void GtkSetForegroundColour( const wxColour &colour );
 
     bool m_isInAssert;
 #endif // __WXDEBUG__
 
+    bool CallInternalIdle( wxWindow* win );
+    
     DECLARE_DYNAMIC_CLASS(wxApp)
     DECLARE_EVENT_TABLE()
 };
 
     // OnInternalIdle
     virtual void OnInternalIdle();
 
+    // Internal represention of Update()
+    void GtkUpdate();
+    
     // For delayed background 
     void GtkSetBackgroundColour( const wxColour &colour );
     void GtkSetForegroundColour( const wxColour &colour );
 
         wxWindow* win = node->GetData();
         if (SendIdleEvents(win))
             needMore = TRUE;
+            
         node = node->GetNext();
     }
 
+    node = wxTopLevelWindows.GetFirst();
+    while (node)
+    {
+        wxWindow* win = node->GetData();
+        CallInternalIdle( win );
+        
+        node = node->GetNext();
+    }
     return needMore;
 }
 
+bool wxApp::CallInternalIdle( wxWindow* win )
+{
+    win->OnInternalIdle();
+
+    wxNode* node = win->GetChildren().First();
+    while (node)
+    {
+        wxWindow* win = (wxWindow*) node->Data();
+        CallInternalIdle( win );
+
+        node = node->Next();
+    }
+    
+    return TRUE;
+}
+
 bool wxApp::SendIdleEvents( wxWindow* win )
 {
     bool needMore = FALSE;
         node = node->Next();
     }
     
-    win->OnInternalIdle();
-
     return needMore;
 }
 
 
     }
 #endif
 
-#ifndef __WXUNIVERSAL__
-    GtkPizza *pizza = GTK_PIZZA (widget);
-
-    if (win->GetThemeEnabled())
-    {
-        wxWindow *parent = win->GetParent();
-        while (parent && !parent->IsTopLevel())
-            parent = parent->GetParent();
-        if (!parent)
-            parent = win;
-
-        gtk_paint_flat_box (parent->m_widget->style,
-                            pizza->bin_window,
-                            GTK_STATE_NORMAL,
-                            GTK_SHADOW_NONE,
-                            &gdk_event->area,
-                            parent->m_widget,
-                            (char *)"base",
-                            0, 0, -1, -1);
-    }
-#endif
-
     win->GetUpdateRegion().Union( gdk_event->area.x,
                                   gdk_event->area.y,
                                   gdk_event->area.width,
                                   gdk_event->area.height );
 
     // Actual redrawing takes place in idle time.
-    win->Update();
+    win->GtkUpdate();
 
 #ifdef __WXGTK20__
 
 
     // Actual redrawing takes place in idle time.
 
-    win->Update();
+    win->GtkUpdate();
 
 #ifndef __WXUNIVERSAL__
     // Redraw child widgets
 void wxWindowGTK::OnInternalIdle()
 {
     // Update invalidated regions.
-    Update();
+    GtkUpdate();
 
     // Synthetize activate events.
     if ( g_sendActivateEvent != -1 )
 }
 
 void wxWindowGTK::Update()
+{
+    GtkUpdate();
+}
+
+void wxWindowGTK::GtkUpdate()
 {
 #ifdef __WXGTK20__
     if (m_wxwindow && GTK_PIZZA(m_wxwindow)->bin_window)
             }
             gdk_gc_set_foreground( g_eraseGC, m_backgroundColour.GetColor() );
 
+            // widget to draw on
+            GtkPizza *pizza = GTK_PIZZA (m_wxwindow);
+            
+            // find ancestor from which to steal background
+            wxWindow *parent = GetParent();
+            while (parent && !parent->IsTopLevel())
+                parent = parent->GetParent();
+            if (!parent)
+                parent = this;
+    
             wxRegionIterator upd( m_clearRegion );
             while (upd)
             {
-                gdk_draw_rectangle( GTK_PIZZA(m_wxwindow)->bin_window, g_eraseGC, 1,
-                                       upd.GetX(), upd.GetY(), upd.GetWidth(), upd.GetHeight() );
+                if (GetThemeEnabled())
+                { 
+                    GdkRectangle rect;
+                    rect.x = upd.GetX();
+                    rect.y = upd.GetY();
+                    rect.width = upd.GetWidth();
+                    rect.height = upd.GetHeight();
+                    
+                    gtk_paint_flat_box( parent->m_widget->style,
+                        pizza->bin_window,
+                        GTK_STATE_NORMAL,
+                        GTK_SHADOW_NONE,
+                        &rect,
+                        parent->m_widget,
+                        (char *)"base",
+                        0, 0, -1, -1 );
+                }
+                else
+                {
+                    gdk_draw_rectangle( pizza->bin_window, g_eraseGC, 1,
+                                        upd.GetX(), upd.GetY(), upd.GetWidth(), upd.GetHeight() );
+                }
                 upd ++;
             }
         }
         m_clearRegion.Union( 0,0,size.x,size.y );
         
         // Better do this in idle?
-        Update();
+        GtkUpdate();
     }
 }
 
 
         wxWindow* win = node->GetData();
         if (SendIdleEvents(win))
             needMore = TRUE;
+            
         node = node->GetNext();
     }
 
+    node = wxTopLevelWindows.GetFirst();
+    while (node)
+    {
+        wxWindow* win = node->GetData();
+        CallInternalIdle( win );
+        
+        node = node->GetNext();
+    }
     return needMore;
 }
 
+bool wxApp::CallInternalIdle( wxWindow* win )
+{
+    win->OnInternalIdle();
+
+    wxNode* node = win->GetChildren().First();
+    while (node)
+    {
+        wxWindow* win = (wxWindow*) node->Data();
+        CallInternalIdle( win );
+
+        node = node->Next();
+    }
+    
+    return TRUE;
+}
+
 bool wxApp::SendIdleEvents( wxWindow* win )
 {
     bool needMore = FALSE;
         node = node->Next();
     }
     
-    win->OnInternalIdle();
-
     return needMore;
 }
 
 
     }
 #endif
 
-#ifndef __WXUNIVERSAL__
-    GtkPizza *pizza = GTK_PIZZA (widget);
-
-    if (win->GetThemeEnabled())
-    {
-        wxWindow *parent = win->GetParent();
-        while (parent && !parent->IsTopLevel())
-            parent = parent->GetParent();
-        if (!parent)
-            parent = win;
-
-        gtk_paint_flat_box (parent->m_widget->style,
-                            pizza->bin_window,
-                            GTK_STATE_NORMAL,
-                            GTK_SHADOW_NONE,
-                            &gdk_event->area,
-                            parent->m_widget,
-                            (char *)"base",
-                            0, 0, -1, -1);
-    }
-#endif
-
     win->GetUpdateRegion().Union( gdk_event->area.x,
                                   gdk_event->area.y,
                                   gdk_event->area.width,
                                   gdk_event->area.height );
 
     // Actual redrawing takes place in idle time.
-    win->Update();
+    win->GtkUpdate();
 
 #ifdef __WXGTK20__
 
 
     // Actual redrawing takes place in idle time.
 
-    win->Update();
+    win->GtkUpdate();
 
 #ifndef __WXUNIVERSAL__
     // Redraw child widgets
 void wxWindowGTK::OnInternalIdle()
 {
     // Update invalidated regions.
-    Update();
+    GtkUpdate();
 
     // Synthetize activate events.
     if ( g_sendActivateEvent != -1 )
 }
 
 void wxWindowGTK::Update()
+{
+    GtkUpdate();
+}
+
+void wxWindowGTK::GtkUpdate()
 {
 #ifdef __WXGTK20__
     if (m_wxwindow && GTK_PIZZA(m_wxwindow)->bin_window)
             }
             gdk_gc_set_foreground( g_eraseGC, m_backgroundColour.GetColor() );
 
+            // widget to draw on
+            GtkPizza *pizza = GTK_PIZZA (m_wxwindow);
+            
+            // find ancestor from which to steal background
+            wxWindow *parent = GetParent();
+            while (parent && !parent->IsTopLevel())
+                parent = parent->GetParent();
+            if (!parent)
+                parent = this;
+    
             wxRegionIterator upd( m_clearRegion );
             while (upd)
             {
-                gdk_draw_rectangle( GTK_PIZZA(m_wxwindow)->bin_window, g_eraseGC, 1,
-                                       upd.GetX(), upd.GetY(), upd.GetWidth(), upd.GetHeight() );
+                if (GetThemeEnabled())
+                { 
+                    GdkRectangle rect;
+                    rect.x = upd.GetX();
+                    rect.y = upd.GetY();
+                    rect.width = upd.GetWidth();
+                    rect.height = upd.GetHeight();
+                    
+                    gtk_paint_flat_box( parent->m_widget->style,
+                        pizza->bin_window,
+                        GTK_STATE_NORMAL,
+                        GTK_SHADOW_NONE,
+                        &rect,
+                        parent->m_widget,
+                        (char *)"base",
+                        0, 0, -1, -1 );
+                }
+                else
+                {
+                    gdk_draw_rectangle( pizza->bin_window, g_eraseGC, 1,
+                                        upd.GetX(), upd.GetY(), upd.GetWidth(), upd.GetHeight() );
+                }
                 upd ++;
             }
         }
         m_clearRegion.Union( 0,0,size.x,size.y );
         
         // Better do this in idle?
-        Update();
+        GtkUpdate();
     }
 }