\input sashwin.tex
 \input screendc.tex
 \input scrolbar.tex
+\input scrlwevt.tex
 \input scrolevt.tex
 \input scrolwin.tex
 \input sngchdlg.tex
 
 
 \membersection{wxWindow::OnScroll}\label{wxwindowonscroll}
 
-\func{void}{OnScroll}{\param{wxScrollEvent\& }{event}}
+\func{void}{OnScroll}{\param{wxScrollWinEvent\& }{event}}
 
-Called when a scroll event is received from one of the window's built-in scrollbars.
+Called when a scroll window event is received from one of the window's built-in scrollbars.
 
 \wxheading{Parameters}
 
 
 \wxheading{See also}
 
-\helpref{wxScrollEvent}{wxscrollevent},\rtfsp
+\helpref{wxScrollWinEvent}{wxscrollwinevent},\rtfsp
 \helpref{Event handling overview}{eventhandlingoverview}
 
 \membersection{wxWindow::OnSetFocus}\label{wxwindowonsetfocus}
 
     bool               *m_accept;
     wxString           *m_res;
     wxListMainWindow   *m_owner;
+    wxString            m_startValue;
 
   public:
     wxListTextCtrl(void) {};
     void DeselectLine( wxListLineData *line );
     void DeleteLine( wxListLineData *line );
     
-    wxTextCtrl *EditLabel( long item );
-    void Edit( long item ) { (void)EditLabel(item); }         // deprecated
+    void EditLabel( long item );
+    void Edit( long item ) { EditLabel(item); }         // deprecated
     void OnRenameTimer();
     void OnRenameAccept();
     
 
   private:
     bool               *m_accept;
     wxString           *m_res;
-    wxTreeCtrl        *m_owner;
+    wxTreeCtrl         *m_owner;
+    wxString            m_startValue;
 
   public:
     wxTreeTextCtrl(void) {};
 
 #include "wx/object.h"
 #include "wx/string.h"
 #include "wx/gdicmn.h"
+#include "wx/frame.h"
 
 #if wxUSE_HELP
 
 
     m_res = res;
     m_accept = accept;
     m_owner = owner;
+    (*m_accept) = FALSE;
+    (*m_res) = "";
+    m_startValue = value;
 }
 
 void wxListTextCtrl::OnChar( wxKeyEvent &event )
     {
         (*m_accept) = TRUE;
         (*m_res) = GetValue();
-        m_owner->OnRenameAccept();
-        if (!wxPendingDelete.Member(this)) wxPendingDelete.Append(this);
+       m_owner->SetFocus();
         return;
     }
     if (event.m_keyCode == WXK_ESCAPE)
     {
         (*m_accept) = FALSE;
         (*m_res) = "";
-        if (!wxPendingDelete.Member(this)) wxPendingDelete.Append(this);
+       m_owner->SetFocus();
         return;
     }
     event.Skip();
 
 void wxListTextCtrl::OnKillFocus( wxFocusEvent &WXUNUSED(event) )
 {
-    (*m_accept) = FALSE;
-    (*m_res) = "";
-    if (!wxPendingDelete.Member(this)) wxPendingDelete.Append(this);
-    return;
+    if (wxPendingDelete.Member(this)) return;
+
+    wxPendingDelete.Append(this);
+    
+    if ((*m_accept) && ((*m_res) != m_startValue))
+        m_owner->OnRenameAccept();
 }
 
 //-----------------------------------------------------------------------------
 
 /* *** */
 
-wxTextCtrl *wxListMainWindow::EditLabel( long item )
+void wxListMainWindow::EditLabel( long item )
 {
     wxNode *node = m_lines.Nth( item );
     wxCHECK_MSG( node, (wxTextCtrl *)NULL, _T("wrong index in wxListCtrl::Edit()") );
     GetParent()->GetEventHandler()->ProcessEvent( le );
     
     if (!le.IsAllowed())
-        return (wxTextCtrl *)NULL;
+        return;
     
     wxString s;
     m_currentEdit->GetText( 0, s );
     wxListTextCtrl *text = new wxListTextCtrl(
       this, -1, &m_renameAccept, &m_renameRes, this, s, wxPoint(x-4,y-4), wxSize(w+11,h+8) );
     text->SetFocus();
-
-    return text;
 }
 
 void wxListMainWindow::OnRenameTimer()
     
     if (!le.IsAllowed()) return;
     
-    /* DO CHANGE LABEL */
+    wxListItem info;
+    info.m_mask = wxLIST_MASK_TEXT;
+    info.m_itemId = le.m_itemIndex;
+    info.m_text = m_renameRes;
+    SetItem( info );
 }
 
 void wxListMainWindow::OnMouse( wxMouseEvent &event )
 
     m_res = res;
     m_accept = accept;
     m_owner = owner;
+    (*m_accept) = FALSE;
+    (*m_res) = "";
+    m_startValue = value;
 }
 
 void wxTreeTextCtrl::OnChar( wxKeyEvent &event )
     {
         (*m_accept) = TRUE;
         (*m_res) = GetValue();
-        m_owner->OnRenameAccept();
-        if (!wxPendingDelete.Member(this)) wxPendingDelete.Append(this);
+       m_owner->SetFocus();
         return;
     }
     if (event.m_keyCode == WXK_ESCAPE)
     {
         (*m_accept) = FALSE;
         (*m_res) = "";
-        if (!wxPendingDelete.Member(this)) wxPendingDelete.Append(this);
+       m_owner->SetFocus();
         return;
     }
     event.Skip();
 
 void wxTreeTextCtrl::OnKillFocus( wxFocusEvent &WXUNUSED(event) )
 {
-    (*m_accept) = FALSE;
-    (*m_res) = "";
-    if (!wxPendingDelete.Member(this)) wxPendingDelete.Append(this);
+    if (wxPendingDelete.Member(this)) return;
+
+    wxPendingDelete.Append(this);
+    
+    if ((*m_accept) && ((*m_res) != m_startValue))
+        m_owner->OnRenameAccept();
 }
 
 #define PIXELS_PER_UNIT 10
     int y = m_currentEdit->GetY();
     int w = m_currentEdit->GetWidth();
     int h = m_currentEdit->GetHeight();
+    
+    int image_h = 0;
+    int image_w = 0;
+    if ((m_currentEdit->IsExpanded()) && (m_currentEdit->GetSelectedImage() != -1))
+    {
+        m_imageListNormal->GetSize( m_currentEdit->GetSelectedImage(), image_w, image_h );
+        image_w += 4;
+    }
+    else if (m_currentEdit->GetImage() != -1)
+    {
+        m_imageListNormal->GetSize( m_currentEdit->GetImage(), image_w, image_h );
+        image_w += 4;
+    }
+    x += image_w;
+    w -= image_w + 4; // I don't know why +4 is needed
 
     wxClientDC dc(this);
     PrepareDC( dc );
     
     if (!le.IsAllowed()) return;
     
-    /* DO CHANGE LABEL */
+    SetItemText( m_currentEdit, m_renameRes );
 }
     
 void wxTreeCtrl::OnMouse( wxMouseEvent &event )
 
 {
 }
 
+void GSocket_Done()
+{
+}
+
 /* Constructors / Destructors */
 
 GSocket *GSocket_new()