]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/window.cpp
some fixes after global _T() => T() change
[wxWidgets.git] / src / gtk1 / window.cpp
index 5b0eb48f98d048b9737a53170aa069944fe507bf..7fc92ca687eae289f64fb7da34ac35b770b35f98 100644 (file)
@@ -155,7 +155,7 @@ static gint gtk_debug_focus_in_callback( GtkWidget *WXUNUSED(widget),
         wxLog::AddTraceMask("focus");
         s_done = TRUE;
     }
-    wxLogTrace(_T("FOCUS NOW AT: %s"), name);
+    wxLogTrace(T("FOCUS NOW AT: %s"), name);
 */
 
     return FALSE;
@@ -164,7 +164,7 @@ static gint gtk_debug_focus_in_callback( GtkWidget *WXUNUSED(widget),
 void debug_focus_in( GtkWidget* widget, const wxChar* name, const wxChar *window )
 {
     wxString tmp = name;
-    tmp += _T(" FROM ");
+    tmp += T(" FROM ");
     tmp += window;
 
     wxChar *s = new wxChar[tmp.Length()+1];
@@ -632,6 +632,17 @@ static void draw_frame( GtkWidget *widget, wxWindow *win )
                          win->m_width-dw, win->m_height-dh );
         return;
     }
+    
+    if (win->HasFlag(wxSIMPLE_BORDER))
+    {
+        GdkGC *gc = gdk_gc_new( widget->window );
+        gdk_gc_set_foreground( gc, &widget->style->black );
+        gdk_draw_rectangle( widget->window, gc, FALSE, 
+                         dx, dy,
+                         win->m_width-dw-1, win->m_height-dh-1 );
+        gdk_gc_unref( gc );
+        return;
+    }
 }
 
 //-----------------------------------------------------------------------------
@@ -675,10 +686,6 @@ static void gtk_window_expose_callback( GtkWidget *WXUNUSED(widget), GdkEventExp
     if (gdk_event->count > 0)
         return;
 
-    wxPaintEvent event( win->GetId() );
-    event.SetEventObject( win );
-    win->GetEventHandler()->ProcessEvent( event );
-
 /*
     wxPrintf( "OnExpose from " );
     if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
@@ -689,6 +696,10 @@ static void gtk_window_expose_callback( GtkWidget *WXUNUSED(widget), GdkEventExp
                                 (int)gdk_event->area.height );
 */
 
+    wxPaintEvent event( win->GetId() );
+    event.SetEventObject( win );
+    win->GetEventHandler()->ProcessEvent( event );
+
     win->GetUpdateRegion().Clear();
 }
 
@@ -696,7 +707,7 @@ static void gtk_window_expose_callback( GtkWidget *WXUNUSED(widget), GdkEventExp
 // "draw" of m_wxwindow
 //-----------------------------------------------------------------------------
 
-static void gtk_window_draw_callback( GtkWidget *WXUNUSED(widget), GdkRectangle *rect, wxWindow *win )
+static void gtk_window_draw_callback( GtkWidget *widget, GdkRectangle *rect, wxWindow *win )
 {
     if (g_isIdle)
         wxapp_install_idle_handler();
@@ -704,12 +715,13 @@ static void gtk_window_draw_callback( GtkWidget *WXUNUSED(widget), GdkRectangle
     if (!win->m_hasVMT)
         return;
 
+    GtkMyFixed *myfixed = GTK_MYFIXED (widget);
+    if (!myfixed->children) 
+        return; /* mini optimisation */
+        
     win->GetUpdateRegion().Union( rect->x, rect->y,
                                   rect->width, rect->height );
 
-    wxPaintEvent event( win->GetId() );
-    event.SetEventObject( win );
-
 /*
     wxPrintf( "OnDraw from " );
     if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
@@ -719,7 +731,9 @@ static void gtk_window_draw_callback( GtkWidget *WXUNUSED(widget), GdkRectangle
                                 (int)rect->width,
                                 (int)rect->height );
 */
-
+                               
+    wxPaintEvent event( win->GetId() );
+    event.SetEventObject( win );
     win->GetEventHandler()->ProcessEvent( event );
 
     win->GetUpdateRegion().Clear();
@@ -963,10 +977,10 @@ static gint gtk_window_button_press_callback( GtkWidget *widget, GdkEventButton
         wxapp_install_idle_handler();
 
 /*
-    wxPrintf( _T("1) OnButtonPress from ") );
+    wxPrintf( T("1) OnButtonPress from ") );
     if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
         wxPrintf( win->GetClassInfo()->GetClassName() );
-    wxPrintf( _T(".\n") );
+    wxPrintf( T(".\n") );
 */
     if (!win->m_hasVMT) return FALSE;
     if (g_blockEventsOnDrag) return TRUE;
@@ -981,20 +995,20 @@ static gint gtk_window_button_press_callback( GtkWidget *widget, GdkEventButton
             gtk_widget_grab_focus (win->m_wxwindow);
 
 /*
-            wxPrintf( _T("GrabFocus from ") );
+            wxPrintf( T("GrabFocus from ") );
             if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
                 wxPrintf( win->GetClassInfo()->GetClassName() );
-            wxPrintf( _T(".\n") );
+            wxPrintf( T(".\n") );
 */
 
         }
     }
 
 /*
-    wxPrintf( _T("2) OnButtonPress from ") );
+    wxPrintf( T("2) OnButtonPress from ") );
     if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
         wxPrintf( win->GetClassInfo()->GetClassName() );
-    wxPrintf( _T(".\n") );
+    wxPrintf( T(".\n") );
 */
 
     wxEventType event_type = wxEVT_LEFT_DOWN;
@@ -1227,18 +1241,17 @@ static gint gtk_window_motion_notify_callback( GtkWidget *widget, GdkEventMotion
     if (!win->m_hasVMT) return FALSE;
     if (g_blockEventsOnDrag) return FALSE;
     if (g_blockEventsOnScroll) return FALSE;
-
+    
     if (!win->IsOwnGtkWindow( gdk_event->window )) return FALSE;
 
     if (gdk_event->is_hint)
     {
-       int x = 0;
-       int y = 0;
-       GdkModifierType state;
-       gdk_window_get_pointer(gdk_event->window, &x, &y, &state);
-       gdk_event->x = x;
-       gdk_event->y = y;
-       gdk_event->state = state;
+        int x = 0;
+        int y = 0;
+        GdkModifierType state;
+        gdk_window_get_pointer(gdk_event->window, &x, &y, &state);
+        gdk_event->x = x;
+        gdk_event->y = y;
     }
 
 /*
@@ -1509,7 +1522,7 @@ static gint gtk_window_leave_callback( GtkWidget *widget, GdkEventCrossing *gdk_
 // "value_changed" from m_vAdjust
 //-----------------------------------------------------------------------------
 
-static void gtk_window_vscroll_callback( GtkWidget *WXUNUSED(widget), wxWindow *win )
+static void gtk_window_vscroll_callback( GtkAdjustment *adjust, wxWindow *win )
 {
     if (g_isIdle)
         wxapp_install_idle_handler();
@@ -1517,32 +1530,22 @@ static void gtk_window_vscroll_callback( GtkWidget *WXUNUSED(widget), wxWindow *
     if (g_blockEventsOnDrag) return;
 
     if (!win->m_hasVMT) return;
-
-    float diff = win->m_vAdjust->value - win->m_oldVerticalPos;
+    
+    float diff = adjust->value - win->m_oldVerticalPos;
     if (fabs(diff) < 0.2) return;
-    win->m_oldVerticalPos = win->m_vAdjust->value;
-
-    wxEventType command = wxEVT_NULL;
-
-    float line_step = win->m_vAdjust->step_increment;
-    float page_step = win->m_vAdjust->page_increment;
-
-    if (win->IsScrolling())
-    {
-        command = wxEVT_SCROLLWIN_THUMBTRACK;
-    }
-    else
-    {
-        if (fabs(win->m_vAdjust->value-win->m_vAdjust->lower) < 0.2) command = wxEVT_SCROLLWIN_BOTTOM;
-        else if (fabs(win->m_vAdjust->value-win->m_vAdjust->upper) < 0.2) command = wxEVT_SCROLLWIN_TOP;
-        else if (fabs(diff-line_step) < 0.2) command = wxEVT_SCROLLWIN_LINEDOWN;
-        else if (fabs(diff+line_step) < 0.2) command = wxEVT_SCROLLWIN_LINEUP;
-        else if (fabs(diff-page_step) < 0.2) command = wxEVT_SCROLLWIN_PAGEDOWN;
-        else if (fabs(diff+page_step) < 0.2) command = wxEVT_SCROLLWIN_PAGEUP;
-        else command = wxEVT_SCROLLWIN_THUMBTRACK;
-    }
+    
+    win->m_oldVerticalPos = adjust->value;
 
-    int value = (int)(win->m_vAdjust->value+0.5);
+    GtkScrolledWindow *scrolledWindow = GTK_SCROLLED_WINDOW(win->m_widget);
+    GtkRange *range = GTK_RANGE( scrolledWindow->vscrollbar );
+    
+    wxEventType command = wxEVT_SCROLLWIN_THUMBTRACK;
+    if      (range->scroll_type == GTK_SCROLL_STEP_BACKWARD) command = wxEVT_SCROLLWIN_LINEUP;
+    else if (range->scroll_type == GTK_SCROLL_STEP_FORWARD)  command = wxEVT_SCROLLWIN_LINEDOWN;
+    else if (range->scroll_type == GTK_SCROLL_PAGE_BACKWARD) command = wxEVT_SCROLLWIN_PAGEUP;
+    else if (range->scroll_type == GTK_SCROLL_PAGE_FORWARD)  command = wxEVT_SCROLLWIN_PAGEDOWN;
+    
+    int value = (int)(adjust->value+0.5);
 
     wxScrollWinEvent event( command, value, wxVERTICAL );
     event.SetEventObject( win );
@@ -1553,7 +1556,7 @@ static void gtk_window_vscroll_callback( GtkWidget *WXUNUSED(widget), wxWindow *
 // "value_changed" from m_hAdjust
 //-----------------------------------------------------------------------------
 
-static void gtk_window_hscroll_callback( GtkWidget *WXUNUSED(widget), wxWindow *win )
+static void gtk_window_hscroll_callback( GtkAdjustment *adjust, wxWindow *win )
 {
     if (g_isIdle)
         wxapp_install_idle_handler();
@@ -1561,31 +1564,21 @@ static void gtk_window_hscroll_callback( GtkWidget *WXUNUSED(widget), wxWindow *
     if (g_blockEventsOnDrag) return;
     if (!win->m_hasVMT) return;
 
-    float diff = win->m_hAdjust->value - win->m_oldHorizontalPos;
+    float diff = adjust->value - win->m_oldHorizontalPos;
     if (fabs(diff) < 0.2) return;
-    win->m_oldHorizontalPos = win->m_hAdjust->value;
-
-    wxEventType command = wxEVT_NULL;
-
-    float line_step = win->m_hAdjust->step_increment;
-    float page_step = win->m_hAdjust->page_increment;
-
-    if (win->IsScrolling())
-    {
-        command = wxEVT_SCROLLWIN_THUMBTRACK;
-    }
-    else
-    {
-        if (fabs(win->m_hAdjust->value-win->m_hAdjust->lower) < 0.2) command = wxEVT_SCROLLWIN_BOTTOM;
-        else if (fabs(win->m_hAdjust->value-win->m_hAdjust->upper) < 0.2) command = wxEVT_SCROLLWIN_TOP;
-        else if (fabs(diff-line_step) < 0.2) command = wxEVT_SCROLLWIN_LINEDOWN;
-        else if (fabs(diff+line_step) < 0.2) command = wxEVT_SCROLLWIN_LINEUP;
-        else if (fabs(diff-page_step) < 0.2) command = wxEVT_SCROLLWIN_PAGEDOWN;
-        else if (fabs(diff+page_step) < 0.2) command = wxEVT_SCROLLWIN_PAGEUP;
-        else command = wxEVT_SCROLLWIN_THUMBTRACK;
-    }
+    
+    win->m_oldHorizontalPos = adjust->value;
 
-    int value = (int)(win->m_hAdjust->value+0.5);
+    GtkScrolledWindow *scrolledWindow = GTK_SCROLLED_WINDOW(win->m_widget);
+    GtkRange *range = GTK_RANGE( scrolledWindow->hscrollbar );
+    
+    wxEventType command = wxEVT_SCROLLWIN_THUMBTRACK;
+    if      (range->scroll_type == GTK_SCROLL_STEP_BACKWARD) command = wxEVT_SCROLLWIN_LINEUP;
+    else if (range->scroll_type == GTK_SCROLL_STEP_FORWARD)  command = wxEVT_SCROLLWIN_LINEDOWN;
+    else if (range->scroll_type == GTK_SCROLL_PAGE_BACKWARD) command = wxEVT_SCROLLWIN_PAGEUP;
+    else if (range->scroll_type == GTK_SCROLL_PAGE_FORWARD)  command = wxEVT_SCROLLWIN_PAGEDOWN;
+    
+    int value = (int)(adjust->value+0.5);
 
     wxScrollWinEvent event( command, value, wxHORIZONTAL );
     event.SetEventObject( win );
@@ -1644,7 +1637,7 @@ static gint gtk_scrollbar_button_press_callback( GtkRange *WXUNUSED(widget),
         wxapp_install_idle_handler();
 
 //  don't test here as we can release the mouse while being over
-//  a different window then the slider
+//  a different window than the slider
 //
 //    if (gdk_event->window != widget->slider) return FALSE;
 
@@ -1657,23 +1650,16 @@ static gint gtk_scrollbar_button_press_callback( GtkRange *WXUNUSED(widget),
 // "button_release_event" from scrollbar
 //-----------------------------------------------------------------------------
 
-static gint gtk_scrollbar_button_release_callback( GtkRange *widget,
+static gint gtk_scrollbar_button_release_callback( GtkRange *WXUNUSED(widget),
                                                    GdkEventButton *WXUNUSED(gdk_event),
                                                    wxWindow *win )
 {
 
 //  don't test here as we can release the mouse while being over
-//  a different window then the slider
+//  a different window than the slider
 //
 //    if (gdk_event->window != widget->slider) return FALSE;
 
-    GtkScrolledWindow *scrolledWindow = GTK_SCROLLED_WINDOW(win->m_widget);
-
-    if (widget == GTK_RANGE(scrolledWindow->vscrollbar))
-        gtk_signal_emit_by_name( GTK_OBJECT(win->m_hAdjust), "value_changed" );
-    else
-        gtk_signal_emit_by_name( GTK_OBJECT(win->m_vAdjust), "value_changed" );
-
     win->SetScrolling( FALSE );
 
     return FALSE;
@@ -1693,7 +1679,7 @@ wxWindow *wxWindowBase::FindFocus()
 // "realize" from m_widget
 //-----------------------------------------------------------------------------
 
-/* we cannot set colours, fonts and cursors before the widget has
+/* we cannot set colours and fonts before the widget has
    been realized, so we do this directly after realization */
 
 static gint
@@ -1711,8 +1697,6 @@ gtk_window_realized_callback( GtkWidget * WXUNUSED(widget), wxWindow *win )
     if (win->m_delayedForegroundColour)
         win->SetForegroundColour( win->GetForegroundColour() );
 
-    win->SetCursor( win->GetCursor() );
-
     wxWindowCreateEvent event( win );
     event.SetEventObject( win );
     win->GetEventHandler()->ProcessEvent( event );
@@ -1800,6 +1784,8 @@ void wxWindow::Init()
     m_isStaticBox = FALSE;
     m_isRadioButton = FALSE;
     m_acceptsFocus = FALSE;
+    
+    m_cursor = *wxSTANDARD_CURSOR;
 }
 
 wxWindow::wxWindow()
@@ -1823,7 +1809,7 @@ bool wxWindow::Create( wxWindow *parent, wxWindowID id,
     if (!PreCreation( parent, pos, size ) ||
         !CreateBase( parent, id, pos, size, style, wxDefaultValidator, name ))
     {
-        wxFAIL_MSG( _T("wxWindow creation failed") );
+        wxFAIL_MSG( T("wxWindow creation failed") );
        return FALSE;
     }
 
@@ -1833,14 +1819,14 @@ bool wxWindow::Create( wxWindow *parent, wxWindowID id,
     GTK_WIDGET_UNSET_FLAGS( m_widget, GTK_CAN_FOCUS );
 
 #ifdef __WXDEBUG__
-    debug_focus_in( m_widget, _T("wxWindow::m_widget"), name );
+    debug_focus_in( m_widget, T("wxWindow::m_widget"), name );
 #endif
 
     GtkScrolledWindow *scrolledWindow = GTK_SCROLLED_WINDOW(m_widget);
 
 #ifdef __WXDEBUG__
-    debug_focus_in( scrolledWindow->hscrollbar, _T("wxWindow::hsrcollbar"), name );
-    debug_focus_in( scrolledWindow->vscrollbar, _T("wxWindow::vsrcollbar"), name );
+    debug_focus_in( scrolledWindow->hscrollbar, T("wxWindow::hsrcollbar"), name );
+    debug_focus_in( scrolledWindow->vscrollbar, T("wxWindow::vsrcollbar"), name );
 #endif
 
     GtkScrolledWindowClass *scroll_class = GTK_SCROLLED_WINDOW_CLASS( GTK_OBJECT(m_widget)->klass );
@@ -1854,7 +1840,7 @@ bool wxWindow::Create( wxWindow *parent, wxWindowID id,
     m_wxwindow = gtk_myfixed_new();
 
 #ifdef __WXDEBUG__
-    debug_focus_in( m_wxwindow, _T("wxWindow::m_wxwindow"), name );
+    debug_focus_in( m_wxwindow, T("wxWindow::m_wxwindow"), name );
 #endif
 
     gtk_container_add( GTK_CONTAINER(m_widget), m_wxwindow );
@@ -1864,15 +1850,19 @@ bool wxWindow::Create( wxWindow *parent, wxWindowID id,
 
     if (HasFlag(wxRAISED_BORDER))
     {
-        gtk_myfixed_set_shadow_type( myfixed, GTK_SHADOW_OUT );
+        gtk_myfixed_set_shadow_type( myfixed, GTK_MYSHADOW_OUT );
     }
     else if (HasFlag(wxSUNKEN_BORDER))
     {
-        gtk_myfixed_set_shadow_type( myfixed, GTK_SHADOW_IN );
+        gtk_myfixed_set_shadow_type( myfixed, GTK_MYSHADOW_IN );
+    }
+    else if (HasFlag(wxSIMPLE_BORDER))
+    {
+        gtk_myfixed_set_shadow_type( myfixed, GTK_MYSHADOW_THIN );
     }
     else
     {
-        gtk_myfixed_set_shadow_type( myfixed, GTK_SHADOW_NONE );
+        gtk_myfixed_set_shadow_type( myfixed, GTK_MYSHADOW_NONE );
     }
 #else // GTK_MINOR_VERSION == 0
     GtkViewport *viewport = GTK_VIEWPORT(scrolledWindow->viewport);
@@ -2008,7 +1998,7 @@ wxWindow::~wxWindow()
 
 bool wxWindow::PreCreation( wxWindow *parent, const wxPoint &pos,  const wxSize &size )
 {
-    wxCHECK_MSG( !m_needParent || parent, FALSE, _T("Need complete parent.") );
+    wxCHECK_MSG( !m_needParent || parent, FALSE, T("Need complete parent.") );
 
     /* this turns -1 into 20 so that a minimal window is
        visible even although -1,-1 has been given as the
@@ -2040,7 +2030,7 @@ bool wxWindow::PreCreation( wxWindow *parent, const wxPoint &pos,  const wxSize
 
 void wxWindow::PostCreation()
 {
-    wxASSERT_MSG( (m_widget != NULL), _T("invalid window") );
+    wxASSERT_MSG( (m_widget != NULL), T("invalid window") );
 
     if (m_wxwindow)
     {
@@ -2048,11 +2038,11 @@ void wxWindow::PostCreation()
         gtk_signal_connect( GTK_OBJECT(m_wxwindow), "expose_event",
           GTK_SIGNAL_FUNC(gtk_window_expose_callback), (gpointer)this );
 
-        gtk_signal_connect( GTK_OBJECT(m_wxwindow), "draw",
+       gtk_signal_connect( GTK_OBJECT(m_wxwindow), "draw",
           GTK_SIGNAL_FUNC(gtk_window_draw_callback), (gpointer)this );
-
+         
 #if (GTK_MINOR_VERSION > 0)
-        /* these are called when the "sunken" or "raised" borders are drawn */
+        /* these are called when the "sunken", "raised" or "simple" borders are drawn */
         gtk_signal_connect( GTK_OBJECT(m_widget), "expose_event",
           GTK_SIGNAL_FUNC(gtk_window_own_expose_callback), (gpointer)this );
 
@@ -2105,7 +2095,7 @@ void wxWindow::ConnectWidget( GtkWidget *widget )
 
 bool wxWindow::Destroy()
 {
-    wxASSERT_MSG( (m_widget != NULL), _T("invalid window") );
+    wxASSERT_MSG( (m_widget != NULL), T("invalid window") );
 
     m_hasVMT = FALSE;
 
@@ -2114,8 +2104,8 @@ bool wxWindow::Destroy()
 
 void wxWindow::DoSetSize( int x, int y, int width, int height, int sizeFlags )
 {
-    wxASSERT_MSG( (m_widget != NULL), _T("invalid window") );
-    wxASSERT_MSG( (m_parent != NULL), _T("wxWindow::SetSize requires parent.\n") );
+    wxASSERT_MSG( (m_widget != NULL), T("invalid window") );
+    wxASSERT_MSG( (m_parent != NULL), T("wxWindow::SetSize requires parent.\n") );
 
     if (m_resizing) return; /* I don't like recursions */
     m_resizing = TRUE;
@@ -2213,10 +2203,13 @@ void wxWindow::OnInternalIdle()
     wxCursor cursor = m_cursor;
     if (g_globalCursor.Ok()) cursor = g_globalCursor;
 
-    if (cursor.Ok() && m_currentGdkCursor != cursor)
+    if (cursor.Ok())
     {
-        m_currentGdkCursor = cursor;
-       
+        /* I now set the cursor the anew in every OnInternalIdle call
+          as setting the cursor in a parent window also effects the
+          windows above so that checking for the current cursor is
+          not possible. */
+          
         if (m_wxwindow)
         {
             GdkWindow *window = m_wxwindow->window;
@@ -2227,14 +2220,17 @@ void wxWindow::OnInternalIdle()
                 cursor = *wxSTANDARD_CURSOR;
 
             window = m_widget->window;
-            if (window)
+            if ((window) && !(GTK_WIDGET_NO_WINDOW(m_widget)))
                 gdk_window_set_cursor( window, cursor.GetCursor() );
+
         }
         else
         {
+
             GdkWindow *window = m_widget->window;
-            if (window)
+            if ((window) && !(GTK_WIDGET_NO_WINDOW(m_widget)))
                gdk_window_set_cursor( window, cursor.GetCursor() );
+
         }
     }
 
@@ -2243,7 +2239,7 @@ void wxWindow::OnInternalIdle()
 
 void wxWindow::DoGetSize( int *width, int *height ) const
 {
-    wxCHECK_RET( (m_widget != NULL), _T("invalid window") );
+    wxCHECK_RET( (m_widget != NULL), T("invalid window") );
 
     if (width) (*width) = m_width;
     if (height) (*height) = m_height;
@@ -2251,7 +2247,7 @@ void wxWindow::DoGetSize( int *width, int *height ) const
 
 void wxWindow::DoSetClientSize( int width, int height )
 {
-    wxCHECK_RET( (m_widget != NULL), _T("invalid window") );
+    wxCHECK_RET( (m_widget != NULL), T("invalid window") );
 
     if (!m_wxwindow)
     {
@@ -2282,10 +2278,16 @@ void wxWindow::DoSetClientSize( int width, int height )
 #else
         if (HasFlag(wxRAISED_BORDER) || HasFlag(wxSUNKEN_BORDER))
         {
-            /* when using GTK 1.2 we set the border size to 2 */
+            /* when using GTK 1.2 we set the shadow border size to 2 */
             dw += 2 * 2;
             dh += 2 * 2;
         }
+        if (HasFlag(wxSIMPLE_BORDER))
+        {
+            /* when using GTK 1.2 we set the simple border size to 1 */
+            dw += 1 * 2;
+            dh += 1 * 2;
+        }
 #endif
 
         if (HasScrolling())
@@ -2319,7 +2321,7 @@ void wxWindow::DoSetClientSize( int width, int height )
 
 void wxWindow::DoGetClientSize( int *width, int *height ) const
 {
-    wxCHECK_RET( (m_widget != NULL), _T("invalid window") );
+    wxCHECK_RET( (m_widget != NULL), T("invalid window") );
 
     if (!m_wxwindow)
     {
@@ -2351,10 +2353,16 @@ void wxWindow::DoGetClientSize( int *width, int *height ) const
 #else
         if (HasFlag(wxRAISED_BORDER) || HasFlag(wxSUNKEN_BORDER))
         {
-            /* when using GTK 1.2 we set the border size to 2 */
+            /* when using GTK 1.2 we set the shadow border size to 2 */
             dw += 2 * 2;
             dh += 2 * 2;
         }
+        if (HasFlag(wxSIMPLE_BORDER))
+        {
+            /* when using GTK 1.2 we set the simple border size to 1 */
+            dw += 1 * 2;
+            dh += 1 * 2;
+        }
 #endif
         if (HasScrolling())
         {
@@ -2388,7 +2396,7 @@ void wxWindow::DoGetClientSize( int *width, int *height ) const
 
 void wxWindow::DoGetPosition( int *x, int *y ) const
 {
-    wxCHECK_RET( (m_widget != NULL), _T("invalid window") );
+    wxCHECK_RET( (m_widget != NULL), T("invalid window") );
 
     if (x) (*x) = m_x;
     if (y) (*y) = m_y;
@@ -2396,7 +2404,7 @@ void wxWindow::DoGetPosition( int *x, int *y ) const
 
 void wxWindow::DoClientToScreen( int *x, int *y ) const
 {
-    wxCHECK_RET( (m_widget != NULL), _T("invalid window") );
+    wxCHECK_RET( (m_widget != NULL), T("invalid window") );
 
     if (!m_widget->window) return;
 
@@ -2425,7 +2433,7 @@ void wxWindow::DoClientToScreen( int *x, int *y ) const
 
 void wxWindow::DoScreenToClient( int *x, int *y ) const
 {
-    wxCHECK_RET( (m_widget != NULL), _T("invalid window") );
+    wxCHECK_RET( (m_widget != NULL), T("invalid window") );
 
     if (!m_widget->window) return;
 
@@ -2454,7 +2462,7 @@ void wxWindow::DoScreenToClient( int *x, int *y ) const
 
 bool wxWindow::Show( bool show )
 {
-    wxCHECK_MSG( (m_widget != NULL), FALSE, _T("invalid window") );
+    wxCHECK_MSG( (m_widget != NULL), FALSE, T("invalid window") );
 
     if (!wxWindowBase::Show(show))
     {
@@ -2472,7 +2480,7 @@ bool wxWindow::Show( bool show )
 
 bool wxWindow::Enable( bool enable )
 {
-    wxCHECK_MSG( (m_widget != NULL), FALSE, _T("invalid window") );
+    wxCHECK_MSG( (m_widget != NULL), FALSE, T("invalid window") );
 
     if (!wxWindowBase::Enable(enable))
     {
@@ -2489,9 +2497,9 @@ bool wxWindow::Enable( bool enable )
 
 int wxWindow::GetCharHeight() const
 {
-    wxCHECK_MSG( (m_widget != NULL), 12, _T("invalid window") );
+    wxCHECK_MSG( (m_widget != NULL), 12, T("invalid window") );
 
-    wxCHECK_MSG( m_font.Ok(), 12, _T("invalid font") );
+    wxCHECK_MSG( m_font.Ok(), 12, T("invalid font") );
 
     GdkFont *font = m_font.GetInternalFont( 1.0 );
 
@@ -2500,9 +2508,9 @@ int wxWindow::GetCharHeight() const
 
 int wxWindow::GetCharWidth() const
 {
-    wxCHECK_MSG( (m_widget != NULL), 8, _T("invalid window") );
+    wxCHECK_MSG( (m_widget != NULL), 8, T("invalid window") );
 
-    wxCHECK_MSG( m_font.Ok(), 8, _T("invalid font") );
+    wxCHECK_MSG( m_font.Ok(), 8, T("invalid font") );
 
     GdkFont *font = m_font.GetInternalFont( 1.0 );
 
@@ -2519,7 +2527,7 @@ void wxWindow::GetTextExtent( const wxString& string,
     wxFont fontToUse = m_font;
     if (theFont) fontToUse = *theFont;
 
-    wxCHECK_RET( fontToUse.Ok(), _T("invalid font") );
+    wxCHECK_RET( fontToUse.Ok(), T("invalid font") );
 
     GdkFont *font = fontToUse.GetInternalFont( 1.0 );
     if (x) (*x) = gdk_string_width( font, string.mbc_str() );
@@ -2530,7 +2538,7 @@ void wxWindow::GetTextExtent( const wxString& string,
 
 void wxWindow::SetFocus()
 {
-    wxCHECK_RET( (m_widget != NULL), _T("invalid window") );
+    wxCHECK_RET( (m_widget != NULL), T("invalid window") );
 
     GtkWidget *connect_widget = GetConnectWidget();
     if (connect_widget)
@@ -2554,36 +2562,49 @@ bool wxWindow::AcceptsFocus() const
     return m_acceptsFocus && wxWindowBase::AcceptsFocus();
 }
 
-bool wxWindow::Reparent( wxWindow *newParent )
+bool wxWindow::Reparent( wxWindowBase *newParentBase )
 {
-    wxCHECK_MSG( (m_widget != NULL), FALSE, _T("invalid window") );
+    wxCHECK_MSG( (m_widget != NULL), FALSE, T("invalid window") );
 
-    wxWindow *oldParent = m_parent;
+    wxWindow *oldParent = m_parent,
+             *newParent = (wxWindow *)newParentBase;
+
+    wxASSERT( GTK_IS_WIDGET(m_widget) );
 
     if ( !wxWindowBase::Reparent(newParent) )
         return FALSE;
 
+    wxASSERT( GTK_IS_WIDGET(m_widget) );
+
+    /* prevent GTK from deleting the widget arbitrarily */
+    gtk_widget_ref( m_widget );
+
     if (oldParent)
     {
         gtk_container_remove( GTK_CONTAINER(oldParent->m_wxwindow), m_widget );
     }
 
+    wxASSERT( GTK_IS_WIDGET(m_widget) );
+
     if (newParent)
     {
         /* insert GTK representation */
         (*(newParent->m_insertCallback))(newParent, this);
     }
 
+    /* reverse: prevent GTK from deleting the widget arbitrarily */
+    gtk_widget_unref( m_widget );
+    
     return TRUE;
 }
 
 void wxWindow::DoAddChild(wxWindow *child)
 {
-    wxASSERT_MSG( (m_widget != NULL), _T("invalid window") );
+    wxASSERT_MSG( (m_widget != NULL), T("invalid window") );
 
-    wxASSERT_MSG( (child != NULL), _T("invalid child window") );
+    wxASSERT_MSG( (child != NULL), T("invalid child window") );
 
-    wxASSERT_MSG( (m_insertCallback != NULL), _T("invalid child insertion function") );
+    wxASSERT_MSG( (m_insertCallback != NULL), T("invalid child insertion function") );
 
     /* add to list */
     AddChild( child );
@@ -2594,7 +2615,7 @@ void wxWindow::DoAddChild(wxWindow *child)
 
 void wxWindow::Raise()
 {
-    wxCHECK_RET( (m_widget != NULL), _T("invalid window") );
+    wxCHECK_RET( (m_widget != NULL), T("invalid window") );
 
     if (!m_widget->window) return;
 
@@ -2603,7 +2624,7 @@ void wxWindow::Raise()
 
 void wxWindow::Lower()
 {
-    wxCHECK_RET( (m_widget != NULL), _T("invalid window") );
+    wxCHECK_RET( (m_widget != NULL), T("invalid window") );
 
     if (!m_widget->window) return;
 
@@ -2612,36 +2633,14 @@ void wxWindow::Lower()
 
 bool wxWindow::SetCursor( const wxCursor &cursor )
 {
-    wxCHECK_MSG( (m_widget != NULL), FALSE, _T("invalid window") );
-
-    if (!wxWindowBase::SetCursor(cursor))
-    {
-        // don't leave if the GTK widget has just
-        // been realized
-        if (!m_delayedCursor) return FALSE;
-    }
-
-    GtkWidget *connect_widget = GetConnectWidget();
-    if (!connect_widget->window)
-    {
-        // indicate that a new style has been set
-        // but it couldn't get applied as the
-        // widget hasn't been realized yet.
-        m_delayedCursor = TRUE;
-
-        // pretend we have done something
-        return TRUE;
-    }
+    wxCHECK_MSG( (m_widget != NULL), FALSE, T("invalid window") );
 
-//    gdk_window_set_cursor( connect_widget->window, GetCursor().GetCursor() );
-
-    // cursor was set
-    return TRUE;
+    return wxWindowBase::SetCursor( cursor );
 }
 
 void wxWindow::WarpPointer( int x, int y )
 {
-    wxCHECK_RET( (m_widget != NULL), _T("invalid window") );
+    wxCHECK_RET( (m_widget != NULL), T("invalid window") );
 
     GtkWidget *connect_widget = GetConnectWidget();
     if (connect_widget->window)
@@ -2654,7 +2653,7 @@ void wxWindow::WarpPointer( int x, int y )
 
 void wxWindow::Refresh( bool eraseBackground, const wxRect *rect )
 {
-    wxCHECK_RET( (m_widget != NULL), _T("invalid window") );
+    wxCHECK_RET( (m_widget != NULL), T("invalid window") );
 
     if (!m_widget->window) return;
 
@@ -2675,28 +2674,53 @@ void wxWindow::Refresh( bool eraseBackground, const wxRect *rect )
     if (!rect)
     {
         if (m_wxwindow)
-            gtk_widget_draw( m_wxwindow, (GdkRectangle*) NULL );
+       {
+           /* call the callback directly for preventing GTK from
+              clearing the background */
+           int w = 0;
+           int h = 0;
+           GetClientSize( &w, &h );
+           
+            GetUpdateRegion().Union( 0, 0, w, h );
+            wxPaintEvent event( GetId() );
+            event.SetEventObject( this );
+            GetEventHandler()->ProcessEvent( event );
+            GetUpdateRegion().Clear();
+       }
         else
+       {
             gtk_widget_draw( m_widget, (GdkRectangle*) NULL );
+       }
     }
     else
     {
-        GdkRectangle gdk_rect;
-        gdk_rect.x = rect->x;
-        gdk_rect.y = rect->y;
-        gdk_rect.width = rect->width;
-        gdk_rect.height = rect->height;
 
         if (m_wxwindow)
-            gtk_widget_draw( m_wxwindow, &gdk_rect );
+       {
+           /* call the callback directly for preventing GTK from
+              clearing the background */
+            GetUpdateRegion().Union( rect->x, rect->y, rect->width, rect->height );
+            wxPaintEvent event( GetId() );
+            event.SetEventObject( this );
+            GetEventHandler()->ProcessEvent( event );
+            GetUpdateRegion().Clear();
+       }
         else
+       {
+            GdkRectangle gdk_rect;
+            gdk_rect.x = rect->x;
+            gdk_rect.y = rect->y;
+            gdk_rect.width = rect->width;
+            gdk_rect.height = rect->height;
+           
             gtk_widget_draw( m_widget, &gdk_rect );
+       }
     }
 }
 
 void wxWindow::Clear()
 {
-    wxCHECK_RET( m_widget != NULL, _T("invalid window") );
+    wxCHECK_RET( m_widget != NULL, T("invalid window") );
 
     if (!m_widget->window) return;
 
@@ -2723,7 +2747,7 @@ void wxWindow::ApplyToolTip( GtkTooltips *tips, const wxChar *tip )
 
 bool wxWindow::SetBackgroundColour( const wxColour &colour )
 {
-    wxCHECK_MSG( m_widget != NULL, FALSE, _T("invalid window") );
+    wxCHECK_MSG( m_widget != NULL, FALSE, T("invalid window") );
 
     if (!wxWindowBase::SetBackgroundColour(colour))
     {
@@ -2770,7 +2794,7 @@ bool wxWindow::SetBackgroundColour( const wxColour &colour )
 
 bool wxWindow::SetForegroundColour( const wxColour &colour )
 {
-    wxCHECK_MSG( m_widget != NULL, FALSE, _T("invalid window") );
+    wxCHECK_MSG( m_widget != NULL, FALSE, T("invalid window") );
 
     if (!wxWindowBase::SetForegroundColour(colour))
     {
@@ -2886,9 +2910,9 @@ static void pop_pos_callback( GtkMenu * WXUNUSED(menu),
 
 bool wxWindow::DoPopupMenu( wxMenu *menu, int x, int y )
 {
-    wxCHECK_MSG( m_widget != NULL, FALSE, _T("invalid window") );
+    wxCHECK_MSG( m_widget != NULL, FALSE, T("invalid window") );
 
-    wxCHECK_MSG( menu != NULL, FALSE, _T("invalid popup-menu") );
+    wxCHECK_MSG( menu != NULL, FALSE, T("invalid popup-menu") );
 
     SetInvokingWindow( menu, this );
 
@@ -2925,7 +2949,7 @@ bool wxWindow::DoPopupMenu( wxMenu *menu, int x, int y )
 
 void wxWindow::SetDropTarget( wxDropTarget *dropTarget )
 {
-    wxCHECK_RET( m_widget != NULL, _T("invalid window") );
+    wxCHECK_RET( m_widget != NULL, T("invalid window") );
 
     GtkWidget *dnd_widget = GetConnectWidget();
 
@@ -2955,7 +2979,7 @@ bool wxWindow::IsOwnGtkWindow( GdkWindow *window )
 
 bool wxWindow::SetFont( const wxFont &font )
 {
-    wxCHECK_MSG( m_widget != NULL, FALSE, _T(        "invalid window") );
+    wxCHECK_MSG( m_widget != NULL, FALSE, T("invalid window") );
 
     if (!wxWindowBase::SetFont(font))
     {
@@ -2993,9 +3017,9 @@ bool wxWindow::SetFont( const wxFont &font )
 
 void wxWindow::CaptureMouse()
 {
-    wxCHECK_RET( m_widget != NULL, _T("invalid window") );
+    wxCHECK_RET( m_widget != NULL, T("invalid window") );
 
-    wxCHECK_RET( g_captureWindow == NULL, _T("CaptureMouse called twice") );
+    wxCHECK_RET( g_captureWindow == NULL, T("CaptureMouse called twice") );
 
     GtkWidget *connect_widget = GetConnectWidget();
     if (!connect_widget->window) return;
@@ -3004,6 +3028,7 @@ void wxWindow::CaptureMouse()
                       (GdkEventMask)
                          (GDK_BUTTON_PRESS_MASK |
                           GDK_BUTTON_RELEASE_MASK |
+                          GDK_POINTER_MOTION_HINT_MASK | 
                           GDK_POINTER_MOTION_MASK),
                       (GdkWindow *) NULL,
                       m_cursor.GetCursor(),
@@ -3013,9 +3038,9 @@ void wxWindow::CaptureMouse()
 
 void wxWindow::ReleaseMouse()
 {
-    wxCHECK_RET( m_widget != NULL, _T("invalid window") );
+    wxCHECK_RET( m_widget != NULL, T("invalid window") );
 
-    wxCHECK_RET( g_captureWindow, _T("ReleaseMouse called twice") );
+    wxCHECK_RET( g_captureWindow, T("ReleaseMouse called twice") );
 
     GtkWidget *connect_widget = GetConnectWidget();
     if (!connect_widget->window) return;
@@ -3032,9 +3057,9 @@ bool wxWindow::IsRetained() const
 void wxWindow::SetScrollbar( int orient, int pos, int thumbVisible,
       int range, bool refresh )
 {
-    wxCHECK_RET( m_widget != NULL, _T("invalid window") );
+    wxCHECK_RET( m_widget != NULL, T("invalid window") );
 
-    wxCHECK_RET( m_wxwindow != NULL, _T("window needs client area for scrolling") );
+    wxCHECK_RET( m_wxwindow != NULL, T("window needs client area for scrolling") );
 
     m_hasScrolling = TRUE;
 
@@ -3095,9 +3120,9 @@ void wxWindow::SetScrollbar( int orient, int pos, int thumbVisible,
 
 void wxWindow::SetScrollPos( int orient, int pos, bool WXUNUSED(refresh) )
 {
-    wxCHECK_RET( m_widget != NULL, _T("invalid window") );
+    wxCHECK_RET( m_widget != NULL, T("invalid window") );
 
-    wxCHECK_RET( m_wxwindow != NULL, _T("window needs client area for scrolling") );
+    wxCHECK_RET( m_wxwindow != NULL, T("window needs client area for scrolling") );
 
     if (orient == wxHORIZONTAL)
     {
@@ -3120,8 +3145,10 @@ void wxWindow::SetScrollPos( int orient, int pos, bool WXUNUSED(refresh) )
         m_vAdjust->value = fpos;
     }
 
-    if (!m_isScrolling)  /* prevent recursion */
+/*
+    if (!m_isScrolling)
     {
+*/
         if (m_wxwindow->window)
         {
             if (orient == wxHORIZONTAL)
@@ -3129,14 +3156,16 @@ void wxWindow::SetScrollPos( int orient, int pos, bool WXUNUSED(refresh) )
             else
                 gtk_signal_emit_by_name( GTK_OBJECT(m_vAdjust), "value_changed" );
         }
+/*
     }
+*/
 }
 
 int wxWindow::GetScrollThumb( int orient ) const
 {
-    wxCHECK_MSG( m_widget != NULL, 0, _T("invalid window") );
+    wxCHECK_MSG( m_widget != NULL, 0, T("invalid window") );
 
-    wxCHECK_MSG( m_wxwindow != NULL, 0, _T("window needs client area for scrolling") );
+    wxCHECK_MSG( m_wxwindow != NULL, 0, T("window needs client area for scrolling") );
 
     if (orient == wxHORIZONTAL)
         return (int)(m_hAdjust->page_size+0.5);
@@ -3146,9 +3175,9 @@ int wxWindow::GetScrollThumb( int orient ) const
 
 int wxWindow::GetScrollPos( int orient ) const
 {
-    wxCHECK_MSG( m_widget != NULL, 0, _T("invalid window") );
+    wxCHECK_MSG( m_widget != NULL, 0, T("invalid window") );
 
-    wxCHECK_MSG( m_wxwindow != NULL, 0, _T("window needs client area for scrolling") );
+    wxCHECK_MSG( m_wxwindow != NULL, 0, T("window needs client area for scrolling") );
 
     if (orient == wxHORIZONTAL)
         return (int)(m_hAdjust->value+0.5);
@@ -3158,9 +3187,9 @@ int wxWindow::GetScrollPos( int orient ) const
 
 int wxWindow::GetScrollRange( int orient ) const
 {
-    wxCHECK_MSG( m_widget != NULL, 0, _T("invalid window") );
+    wxCHECK_MSG( m_widget != NULL, 0, T("invalid window") );
 
-    wxCHECK_MSG( m_wxwindow != NULL, 0, _T("window needs client area for scrolling") );
+    wxCHECK_MSG( m_wxwindow != NULL, 0, T("window needs client area for scrolling") );
 
     if (orient == wxHORIZONTAL)
         return (int)(m_hAdjust->upper+0.5);
@@ -3170,9 +3199,9 @@ int wxWindow::GetScrollRange( int orient ) const
 
 void wxWindow::ScrollWindow( int dx, int dy, const wxRect* WXUNUSED(rect) )
 {
-    wxCHECK_RET( m_widget != NULL, _T("invalid window") );
+    wxCHECK_RET( m_widget != NULL, T("invalid window") );
 
-    wxCHECK_RET( m_wxwindow != NULL, _T("window needs client area for scrolling") );
+    wxCHECK_RET( m_wxwindow != NULL, T("window needs client area for scrolling") );
 
     if (!m_scrollGC)
     {