]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/window.cpp
fix MSVC warnings about possibly uninitialized variables; some reindentation
[wxWidgets.git] / src / gtk1 / window.cpp
index 71bf6d41d789a857fdf20f1312ac8dd7ffc53d80..ba93c71dd9f0d0461046363fb95d2f91f1d3bd47 100644 (file)
@@ -207,19 +207,19 @@ static GdkGC *g_eraseGC = NULL;
 
 // mouse capture state: the window which has it and if the mouse is currently
 // inside it
-static wxWindowGTK  *g_captureWindow = (wxWindowGTK*) NULL;
+static wxWindowGTK  *g_captureWindow = NULL;
 static bool g_captureWindowHasMouse = false;
 
-wxWindowGTK  *g_focusWindow = (wxWindowGTK*) NULL;
+wxWindowGTK  *g_focusWindow = NULL;
 
 // the last window which had the focus - this is normally never NULL (except
 // if we never had focus at all) as even when g_focusWindow is NULL it still
 // keeps its previous value
-wxWindowGTK *g_focusWindowLast = (wxWindowGTK*) NULL;
+wxWindowGTK *g_focusWindowLast = NULL;
 
 // If a window get the focus set but has not been realized
 // yet, defer setting the focus to idle time.
-wxWindowGTK *g_delayedFocus = (wxWindowGTK*) NULL;
+wxWindowGTK *g_delayedFocus = NULL;
 
 // hack: we need something to pass to gtk_menu_popup, so we store the time of
 // the last click here (extern: used from gtk/menu.cpp)
@@ -227,7 +227,7 @@ guint32 wxGtkTimeLastClick = 0;
 
 // global variables because GTK+ DnD want to have the
 // mouse event that caused it
-GdkEvent *g_lastMouseEvent = (GdkEvent*) NULL;
+GdkEvent *g_lastMouseEvent = NULL;
 int g_lastButtonNumber = 0;
 
 extern bool g_mainThreadLocked;
@@ -294,7 +294,7 @@ wxWindow *wxFindFocusedChild(wxWindowGTK *win)
 {
     wxWindow *winFocus = wxWindowGTK::FindFocus();
     if ( !winFocus )
-        return (wxWindow *)NULL;
+        return NULL;
 
     if ( winFocus == win )
         return (wxWindow *)win;
@@ -308,7 +308,7 @@ wxWindow *wxFindFocusedChild(wxWindowGTK *win)
             return child;
     }
 
-    return (wxWindow *)NULL;
+    return NULL;
 }
 
 static void draw_frame( GtkWidget *widget, wxWindowGTK *win )
@@ -371,7 +371,7 @@ static void draw_frame( GtkWidget *widget, wxWindowGTK *win )
         return;
     }
 
-    if (win->HasFlag(wxSUNKEN_BORDER))
+    if (win->HasFlag(wxSUNKEN_BORDER) || win->HasFlag(wxBORDER_THEME))
     {
         gtk_draw_shadow( widget->style,
                          widget->window,
@@ -428,7 +428,7 @@ static void gtk_window_own_draw_callback( GtkWidget *widget, GdkRectangle *WXUNU
 
 // make it extern because wxStaticText needs to disconnect this one
 extern "C" {
-void wxgtk_window_size_request_callback(GtkWidget *widget,
+void wxgtk_window_size_request_callback(GtkWidget *WXUNUSED(widget),
                                         GtkRequisition *requisition,
                                         wxWindow *win)
 {
@@ -446,7 +446,7 @@ void wxgtk_window_size_request_callback(GtkWidget *widget,
 
 extern "C" {
 static
-void wxgtk_combo_size_request_callback(GtkWidget *widget,
+void wxgtk_combo_size_request_callback(GtkWidget *WXUNUSED(widget),
                                        GtkRequisition *requisition,
                                        wxComboBox *win)
 {
@@ -478,7 +478,7 @@ void wxgtk_combo_size_request_callback(GtkWidget *widget,
 //-----------------------------------------------------------------------------
 
 extern "C" {
-static int gtk_window_expose_callback( GtkWidget *widget,
+static int gtk_window_expose_callback( GtkWidget *WXUNUSED(widget),
                                        GdkEventExpose *gdk_event,
                                        wxWindow *win )
 {
@@ -611,7 +611,7 @@ static void gtk_window_draw_callback( GtkWidget *widget,
         GdkRectangle child_area;
         if (gtk_widget_intersect (child->widget, rect, &child_area))
         {
-            gtk_widget_draw (child->widget, &child_area /* (GdkRectangle*) NULL*/ );
+            gtk_widget_draw (child->widget, &child_area /* NULL*/ );
         }
     }
 #endif
@@ -1066,7 +1066,7 @@ static gint gtk_window_key_press_callback( GtkWidget *widget,
     if ( wxTranslateGTKKeyEventToWx(event, win, gdk_event) )
     {
         // Emit KEY_DOWN event
-        ret = win->GetEventHandler()->ProcessEvent( event );
+        ret = win->HandleWindowEvent( event );
     }
     else
     {
@@ -1122,12 +1122,12 @@ static gint gtk_window_key_press_callback( GtkWidget *widget,
             if (parent)
             {
                 event.SetEventType( wxEVT_CHAR_HOOK );
-                ret = parent->GetEventHandler()->ProcessEvent( event );
+                ret = parent->HandleWindowEvent( event );
             }
             if (!ret)
             {
                 event.SetEventType(wxEVT_CHAR);
-                win->GetEventHandler()->ProcessEvent( event );
+                win->HandleWindowEvent( event );
             }
         }
         return true;
@@ -1146,7 +1146,7 @@ static gint gtk_window_key_press_callback( GtkWidget *widget,
             if (command != -1)
             {
                 wxCommandEvent command_event( wxEVT_COMMAND_MENU_SELECTED, command );
-                ret = ancestor->GetEventHandler()->ProcessEvent( command_event );
+                ret = ancestor->HandleWindowEvent( command_event );
                 break;
             }
             if (ancestor->IsTopLevel())
@@ -1191,13 +1191,13 @@ static gint gtk_window_key_press_callback( GtkWidget *widget,
             if (parent)
             {
                 event.SetEventType( wxEVT_CHAR_HOOK );
-                ret = parent->GetEventHandler()->ProcessEvent( event );
+                ret = parent->HandleWindowEvent( event );
             }
 
             if (!ret)
             {
                 event.SetEventType(wxEVT_CHAR);
-                ret = win->GetEventHandler()->ProcessEvent( event );
+                ret = win->HandleWindowEvent( event );
             }
         }
     }
@@ -1227,7 +1227,7 @@ static gint gtk_window_key_press_callback( GtkWidget *widget,
         // CTRL-TAB changes the (parent) window, i.e. switch notebook page
         new_event.SetWindowChange( (gdk_event->state & GDK_CONTROL_MASK) );
         new_event.SetCurrentFocus( win );
-        ret = win->GetParent()->GetEventHandler()->ProcessEvent( new_event );
+        ret = win->GetParent()->HandleWindowEvent( new_event );
     }
 
     // generate wxID_CANCEL if <esc> has been pressed (typically in dialogs)
@@ -1263,7 +1263,7 @@ static gint gtk_window_key_press_callback( GtkWidget *widget,
         {
             wxCommandEvent eventClick(wxEVT_COMMAND_BUTTON_CLICKED, wxID_CANCEL);
             eventClick.SetEventObject(btnCancel);
-            ret = btnCancel->GetEventHandler()->ProcessEvent(eventClick);
+            ret = btnCancel->HandleWindowEvent(eventClick);
         }
     }
 
@@ -1304,7 +1304,7 @@ static gint gtk_window_key_release_callback( GtkWidget *widget,
         return FALSE;
     }
 
-    if ( !win->GetEventHandler()->ProcessEvent( event ) )
+    if ( !win->HandleWindowEvent( event ) )
         return FALSE;
 
     gtk_signal_emit_stop_by_name( GTK_OBJECT(widget), "key_release_event" );
@@ -1433,7 +1433,7 @@ wxWindowGTK *FindWindowForMouseEvent(wxWindowGTK *win, wxCoord& x, wxCoord& y)
         }
         else
         {
-            if ((child->m_wxwindow == (GtkWidget*) NULL) &&
+            if ((child->m_wxwindow == NULL) &&
                 (child->m_x <= xx) &&
                 (child->m_y <= yy) &&
                 (child->m_x+child->m_width  >= xx) &&
@@ -1616,7 +1616,7 @@ static gint gtk_window_button_press_callback( GtkWidget *widget,
         }
     }
 
-    if (win->GetEventHandler()->ProcessEvent( event ))
+    if (win->HandleWindowEvent( event ))
     {
         gtk_signal_emit_stop_by_name( GTK_OBJECT(widget), "button_press_event" );
         g_lastMouseEvent = NULL;
@@ -1638,7 +1638,7 @@ static gint gtk_window_button_press_callback( GtkWidget *widget,
             win->GetId(),
             win->ClientToScreen(event.GetPosition()));
         evtCtx.SetEventObject(win);
-        return win->GetEventHandler()->ProcessEvent(evtCtx);
+        return win->HandleWindowEvent(evtCtx);
     }
 
     return FALSE;
@@ -1701,7 +1701,7 @@ static gint gtk_window_button_release_callback( GtkWidget *widget,
     if ( !g_captureWindow )
         win = FindWindowForMouseEvent(win, event.m_x, event.m_y);
 
-    if (win->GetEventHandler()->ProcessEvent( event ))
+    if (win->HandleWindowEvent( event ))
     {
         gtk_signal_emit_stop_by_name( GTK_OBJECT(widget), "button_release_event" );
         return TRUE;
@@ -1771,7 +1771,7 @@ static gint gtk_window_motion_notify_callback( GtkWidget *widget,
                                                         : wxEVT_LEAVE_WINDOW);
             InitMouseEvent(win, eventM, gdk_event);
             eventM.SetEventObject(win);
-            win->GetEventHandler()->ProcessEvent(eventM);
+            win->HandleWindowEvent(eventM);
         }
     }
     else // no capture
@@ -1779,7 +1779,7 @@ static gint gtk_window_motion_notify_callback( GtkWidget *widget,
         win = FindWindowForMouseEvent(win, event.m_x, event.m_y);
     }
 
-    bool ret = win->GetEventHandler()->ProcessEvent( event );
+    bool ret = win->HandleWindowEvent( event );
     g_lastMouseEvent = NULL;
 
     if ( ret )
@@ -1802,12 +1802,12 @@ static bool DoSendFocusEvents(wxWindow *win)
     // Notify the parent keeping track of focus for the kbd navigation
     // purposes that we got it.
     wxChildFocusEvent eventChildFocus(win);
-    (void)win->GetEventHandler()->ProcessEvent(eventChildFocus);
+    (void)win->HandleWindowEvent(eventChildFocus);
 
     wxFocusEvent eventFocus(wxEVT_SET_FOCUS, win->GetId());
     eventFocus.SetEventObject(win);
 
-    return win->GetEventHandler()->ProcessEvent(eventFocus);
+    return win->HandleWindowEvent(eventFocus);
 }
 
 extern "C" {
@@ -1862,7 +1862,9 @@ static gint gtk_window_focus_in_callback( GtkWidget *widget,
 //-----------------------------------------------------------------------------
 
 extern "C" {
-static gint gtk_window_focus_out_callback( GtkWidget *widget, GdkEventFocus *gdk_event, wxWindowGTK *win )
+static gint gtk_window_focus_out_callback( GtkWidget *WXUNUSED(widget),
+                                           GdkEventFocus *WXUNUSED(gdk_event),
+                                           wxWindowGTK *win )
 {
     DEBUG_MAIN_THREAD
 
@@ -1877,7 +1879,7 @@ static gint gtk_window_focus_out_callback( GtkWidget *widget, GdkEventFocus *gdk
     if ( winFocus )
         win = winFocus;
 
-    g_focusWindow = (wxWindowGTK *)NULL;
+    g_focusWindow = NULL;
 
 #ifdef HAVE_XIM
     if (win->m_ic)
@@ -1906,7 +1908,7 @@ static gint gtk_window_focus_out_callback( GtkWidget *widget, GdkEventFocus *gdk
         // process it too as otherwise bad things happen, especially in GTK2
         // where the text control simply aborts the program if it doesn't get
         // the matching focus out event
-        (void)win->GetEventHandler()->ProcessEvent( event );
+        (void)win->HandleWindowEvent( event );
     }
 
     return FALSE;
@@ -1948,7 +1950,7 @@ gint gtk_window_enter_callback( GtkWidget *widget,
     event.m_x = x + pt.x;
     event.m_y = y + pt.y;
 
-    if (win->GetEventHandler()->ProcessEvent( event ))
+    if (win->HandleWindowEvent( event ))
     {
        gtk_signal_emit_stop_by_name( GTK_OBJECT(widget), "enter_notify_event" );
        return TRUE;
@@ -2000,7 +2002,7 @@ static gint gtk_window_leave_callback( GtkWidget *widget, GdkEventCrossing *gdk_
     event.m_x = x + pt.x;
     event.m_y = y + pt.y;
 
-    if (win->GetEventHandler()->ProcessEvent( event ))
+    if (win->HandleWindowEvent( event ))
     {
         gtk_signal_emit_stop_by_name( GTK_OBJECT(widget), "leave_notify_event" );
         return TRUE;
@@ -2040,7 +2042,7 @@ static void gtk_window_vscroll_callback( GtkAdjustment *adjust,
 
     wxScrollWinEvent event( command, value, wxVERTICAL );
     event.SetEventObject( win );
-    win->GetEventHandler()->ProcessEvent( event );
+    win->HandleWindowEvent( event );
 }
 }
 
@@ -2073,7 +2075,7 @@ static void gtk_window_hscroll_callback( GtkAdjustment *adjust,
 
     wxScrollWinEvent event( command, value, wxHORIZONTAL );
     event.SetEventObject( win );
-    win->GetEventHandler()->ProcessEvent( event );
+    win->HandleWindowEvent( event );
 }
 }
 
@@ -2139,7 +2141,7 @@ static gint gtk_scrollbar_button_release_callback( GtkRange *widget,
 
         wxScrollWinEvent event( command, value, dir );
         event.SetEventObject( win );
-        win->GetEventHandler()->ProcessEvent( event );
+        win->HandleWindowEvent( event );
     }
 
     win->m_isScrolling = false;
@@ -2168,7 +2170,7 @@ wxWindow *wxWindowBase::DoFindFocus()
 
 extern "C" {
 static gint
-gtk_window_realized_callback( GtkWidget *m_widget, wxWindow *win )
+gtk_window_realized_callback( GtkWidget *WXUNUSED(widget), wxWindow *win )
 {
     DEBUG_MAIN_THREAD
 
@@ -2177,7 +2179,7 @@ gtk_window_realized_callback( GtkWidget *m_widget, wxWindow *win )
 
     wxWindowCreateEvent event( win );
     event.SetEventObject( win );
-    win->GetEventHandler()->ProcessEvent( event );
+    win->HandleWindowEvent( event );
 
     return FALSE;
 }
@@ -2211,7 +2213,7 @@ void gtk_window_size_callback( GtkWidget *WXUNUSED(widget),
     {
         wxSizeEvent event( win->GetSize(), win->GetId() );
         event.SetEventObject( win );
-        win->GetEventHandler()->ProcessEvent( event );
+        win->HandleWindowEvent( event );
     }
 }
 }
@@ -2228,7 +2230,7 @@ void gtk_window_size_callback( GtkWidget *WXUNUSED(widget),
 extern "C" {
 static
 void gtk_wxwindow_size_callback( GtkWidget* WXUNUSED_UNLESS_XIM(widget),
-                                 GtkAllocation* WXUNUSED_UNLESS_XIM(alloc),
+                                 GtkAllocation* WXUNUSED(alloc),
                                  wxWindowGTK* WXUNUSED_UNLESS_XIM(win) )
 {
     if (g_isIdle)
@@ -2422,9 +2424,9 @@ wxMouseState wxGetMouseState()
 void wxWindowGTK::Init()
 {
     // GTK specific
-    m_widget = (GtkWidget *) NULL;
-    m_wxwindow = (GtkWidget *) NULL;
-    m_focusWidget = (GtkWidget *) NULL;
+    m_widget = NULL;
+    m_wxwindow = NULL;
+    m_focusWidget = NULL;
 
     // position/size
     m_x = 0;
@@ -2435,7 +2437,6 @@ void wxWindowGTK::Init()
     m_sizeSet = false;
     m_hasVMT = false;
     m_needParent = true;
-    m_isBeingDeleted = false;
 
     m_noExpose = false;
     m_nativeSizeEvent = false;
@@ -2443,8 +2444,8 @@ void wxWindowGTK::Init()
     m_hasScrolling = false;
     m_isScrolling = false;
 
-    m_hAdjust = (GtkAdjustment*) NULL;
-    m_vAdjust = (GtkAdjustment*) NULL;
+    m_hAdjust = NULL;
+    m_vAdjust = NULL;
     m_oldHorizontalPos =
     m_oldVerticalPos = 0.0;
     m_oldClientWidth =
@@ -2464,8 +2465,8 @@ void wxWindowGTK::Init()
     m_cursor = *wxSTANDARD_CURSOR;
 
 #ifdef HAVE_XIM
-    m_ic = (GdkIC*) NULL;
-    m_icattr = (GdkICAttr*) NULL;
+    m_ic = NULL;
+    m_icattr = NULL;
 #endif
 }
 
@@ -2493,6 +2494,11 @@ bool wxWindowGTK::Create( wxWindow *parent,
                           long style,
                           const wxString &name  )
 {
+    // Get default border
+    wxBorder border = GetBorder(style);
+    style &= ~wxBORDER_MASK;
+    style |= border;
+
     if (!PreCreation( parent, pos, size ) ||
         !CreateBase( parent, id, pos, size, style, wxDefaultValidator, name ))
     {
@@ -2502,7 +2508,7 @@ bool wxWindowGTK::Create( wxWindow *parent,
 
     m_insertCallback = wxInsertChildInWindow;
 
-    m_widget = gtk_scrolled_window_new( (GtkAdjustment *) NULL, (GtkAdjustment *) NULL );
+    m_widget = gtk_scrolled_window_new( NULL, NULL );
     GTK_WIDGET_UNSET_FLAGS( m_widget, GTK_CAN_FOCUS );
 
     GtkScrolledWindow *scrolledWindow = GTK_SCROLLED_WINDOW(m_widget);
@@ -2524,7 +2530,7 @@ bool wxWindowGTK::Create( wxWindow *parent,
     {
         gtk_pizza_set_shadow_type( pizza, GTK_MYSHADOW_OUT );
     }
-    else if (HasFlag(wxSUNKEN_BORDER))
+    else if (HasFlag(wxSUNKEN_BORDER) || HasFlag(wxBORDER_THEME))
     {
         gtk_pizza_set_shadow_type( pizza, GTK_MYSHADOW_IN );
     }
@@ -2606,7 +2612,6 @@ wxWindowGTK::~wxWindowGTK()
     if ( g_delayedFocus == this )
         g_delayedFocus = NULL;
 
-    m_isBeingDeleted = true;
     m_hasVMT = false;
 
     // destroy children before destroying this window itself
@@ -2635,13 +2640,13 @@ wxWindowGTK::~wxWindowGTK()
     if (m_wxwindow)
     {
         gtk_widget_destroy( m_wxwindow );
-        m_wxwindow = (GtkWidget*) NULL;
+        m_wxwindow = NULL;
     }
 
     if (m_widget)
     {
         gtk_widget_destroy( m_widget );
-        m_widget = (GtkWidget*) NULL;
+        m_widget = NULL;
     }
 }
 
@@ -2910,7 +2915,7 @@ void wxWindowGTK::DoSetSize( int x, int y, int width, int height, int sizeFlags
     {
         wxSizeEvent event( wxSize(m_width,m_height), GetId() );
         event.SetEventObject( this );
-        GetEventHandler()->ProcessEvent( event );
+        HandleWindowEvent( event );
     }
 
     m_resizing = false;
@@ -2961,7 +2966,7 @@ void wxWindowGTK::OnInternalIdle()
         }
     }
 
-    if (wxUpdateUIEvent::CanUpdate(this) && IsShown())
+    if (wxUpdateUIEvent::CanUpdate(this) && IsShownOnScreen())
         UpdateWindowUI(wxUPDATE_UI_FROMIDLE);
 }
 
@@ -2987,7 +2992,7 @@ void wxWindowGTK::DoSetClientSize( int width, int height )
         int dh = 0;
 
 #ifndef __WXUNIVERSAL__
-        if (HasFlag(wxRAISED_BORDER) || HasFlag(wxSUNKEN_BORDER))
+        if (HasFlag(wxRAISED_BORDER) || HasFlag(wxSUNKEN_BORDER) || HasFlag(wxBORDER_THEME))
         {
             /* when using GTK 1.2 we set the shadow border size to 2 */
             dw += 2 * 2;
@@ -3051,7 +3056,7 @@ void wxWindowGTK::DoGetClientSize( int *width, int *height ) const
         int dh = 0;
 
 #ifndef __WXUNIVERSAL__
-        if (HasFlag(wxRAISED_BORDER) || HasFlag(wxSUNKEN_BORDER))
+        if (HasFlag(wxRAISED_BORDER) || HasFlag(wxSUNKEN_BORDER) || HasFlag(wxBORDER_THEME))
         {
             /* when using GTK 1.2 we set the shadow border size to 2 */
             dw += 2 * 2;
@@ -3131,7 +3136,7 @@ void wxWindowGTK::DoClientToScreen( int *x, int *y ) const
 
     if (!m_widget->window) return;
 
-    GdkWindow *source = (GdkWindow *) NULL;
+    GdkWindow *source = NULL;
     if (m_wxwindow)
         source = GTK_PIZZA(m_wxwindow)->bin_window;
     else
@@ -3160,7 +3165,7 @@ void wxWindowGTK::DoScreenToClient( int *x, int *y ) const
 
     if (!m_widget->window) return;
 
-    GdkWindow *source = (GdkWindow *) NULL;
+    GdkWindow *source = NULL;
     if (m_wxwindow)
         source = GTK_PIZZA(m_wxwindow)->bin_window;
     else
@@ -3201,7 +3206,7 @@ bool wxWindowGTK::Show( bool show )
     wxShowEvent eventShow(GetId(), show);
     eventShow.SetEventObject(this);
 
-    GetEventHandler()->ProcessEvent(eventShow);
+    HandleWindowEvent(eventShow);
 
     return true;
 }
@@ -3424,7 +3429,7 @@ void wxWindowGTK::WarpPointer( int x, int y )
     // We provide this function ourselves as it is
     // missing in GDK (top of this file).
 
-    GdkWindow *window = (GdkWindow*) NULL;
+    GdkWindow *window = NULL;
     if (m_wxwindow)
         window = GTK_PIZZA(m_wxwindow)->bin_window;
     else
@@ -3498,7 +3503,7 @@ void wxWindowGTK::Refresh( bool eraseBackground, const wxRect *rect )
         }
         else
         {
-            gtk_widget_draw( m_widget, (GdkRectangle*) NULL );
+            gtk_widget_draw( m_widget, NULL );
         }
     }
 }
@@ -3576,20 +3581,16 @@ void wxWindowGTK::GtkSendPaintEvents()
             }
         }
     }
-    else
-
-    // if (!m_clearRegion.IsEmpty())   // Always send an erase event under GTK 1.2
+    else // Always send an erase event under GTK 1.2
     {
         wxWindowDC dc( (wxWindow*)this );
-        if (m_clearRegion.IsEmpty())
-            dc.SetClippingRegion( m_updateRegion );
-        else
-            dc.SetClippingRegion( m_clearRegion );
+        dc.SetDeviceClippingRegion( m_clearRegion.IsEmpty() ? m_updateRegion
+                                                            : m_clearRegion );
 
         wxEraseEvent erase_event( GetId(), &dc );
         erase_event.SetEventObject( this );
 
-        if (!GetEventHandler()->ProcessEvent(erase_event) && GetBackgroundStyle() != wxBG_STYLE_CUSTOM)
+        if (!HandleWindowEvent(erase_event) && GetBackgroundStyle() != wxBG_STYLE_CUSTOM)
         {
             if (!g_eraseGC)
             {
@@ -3611,11 +3612,11 @@ void wxWindowGTK::GtkSendPaintEvents()
 
     wxNcPaintEvent nc_paint_event( GetId() );
     nc_paint_event.SetEventObject( this );
-    GetEventHandler()->ProcessEvent( nc_paint_event );
+    HandleWindowEvent( nc_paint_event );
 
     wxPaintEvent paint_event( GetId() );
     paint_event.SetEventObject( this );
-    GetEventHandler()->ProcessEvent( paint_event );
+    HandleWindowEvent( paint_event );
 
     m_clipPaintRegion = false;
 
@@ -3692,7 +3693,7 @@ void wxWindowGTK::DoSetToolTip( wxToolTip *tip )
 void wxWindowGTK::ApplyToolTip( GtkTooltips *tips, const wxChar *tip )
 {
     wxString tmp( tip );
-    gtk_tooltips_set_tip( tips, GetConnectWidget(), wxGTK_CONV(tmp), (gchar*) NULL );
+    gtk_tooltips_set_tip( tips, GetConnectWidget(), wxGTK_CONV(tmp), NULL );
 }
 #endif // wxUSE_TOOLTIPS
 
@@ -3826,7 +3827,7 @@ bool wxWindowGTK::SetBackgroundStyle(wxBackgroundStyle style)
 
     if (style == wxBG_STYLE_CUSTOM)
     {
-        GdkWindow *window = (GdkWindow*) NULL;
+        GdkWindow *window = NULL;
         if (m_wxwindow)
             window = GTK_PIZZA(m_wxwindow)->bin_window;
         else
@@ -3910,7 +3911,7 @@ void wxWindowGTK::DoCaptureMouse()
 {
     wxCHECK_RET( m_widget != NULL, wxT("invalid window") );
 
-    GdkWindow *window = (GdkWindow*) NULL;
+    GdkWindow *window = NULL;
     if (m_wxwindow)
         window = GTK_PIZZA(m_wxwindow)->bin_window;
     else
@@ -3928,7 +3929,7 @@ void wxWindowGTK::DoCaptureMouse()
                           GDK_BUTTON_RELEASE_MASK |
                           GDK_POINTER_MOTION_HINT_MASK |
                           GDK_POINTER_MOTION_MASK),
-                      (GdkWindow *) NULL,
+                      NULL,
                       cursor->GetCursor(),
                       (guint32)GDK_CURRENT_TIME );
     g_captureWindow = this;
@@ -3941,9 +3942,9 @@ void wxWindowGTK::DoReleaseMouse()
 
     wxCHECK_RET( g_captureWindow, wxT("can't release mouse - not captured") );
 
-    g_captureWindow = (wxWindowGTK*) NULL;
+    g_captureWindow = NULL;
 
-    GdkWindow *window = (GdkWindow*) NULL;
+    GdkWindow *window = NULL;
     if (m_wxwindow)
         window = GTK_PIZZA(m_wxwindow)->bin_window;
     else
@@ -4222,3 +4223,11 @@ void wxWinModule::OnExit()
     if (g_eraseGC)
         gdk_gc_unref( g_eraseGC );
 }
+
+GdkWindow* wxWindowGTK::GTKGetDrawingWindow() const
+{
+    GdkWindow* window = NULL;
+    if (m_wxwindow)
+        window = GTK_PIZZA(m_wxwindow)->bin_window;
+    return window;
+}