]> git.saurik.com Git - wxWidgets.git/blobdiff - src/motif/window.cpp
fixed warnings about truncating 64 bit integers
[wxWidgets.git] / src / motif / window.cpp
index 34b1e65c388430aaf7395095c3f0ad888a8ee5dc..57aa52ecd546d686e22906619d820006578dfb85 100644 (file)
@@ -6,7 +6,7 @@
 // Created:     17/09/98
 // RCS-ID:      $Id$
 // Copyright:   (c) Julian Smart
-// Licence:     wxWidgets licence
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 // ============================================================================
 // headers
 // ----------------------------------------------------------------------------
 
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-    #pragma implementation "window.h"
-#endif
-
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
@@ -54,7 +50,7 @@
 // DoSetSizeIntr and DoMoveWindowIntr
 // PROBLEM:
 // under Motif composite controls (such as wxCalendarCtrl or generic wxSpinCtrl
-// did nott work and/or segfaulted because
+// did not work and/or segfaulted because
 // 1) wxWindow::Create calls SetSize,
 //    which results in a call to DoSetSize much earlier than in the other ports
 // 2) if wxWindow::Create is called (wxControl::Create calls it)
 
 #include <string.h>
 
-// ----------------------------------------------------------------------------
-// constants
-// ----------------------------------------------------------------------------
-
-static const int SCROLL_MARGIN = 4;
-
 // ----------------------------------------------------------------------------
 // global variables for this module
 // ----------------------------------------------------------------------------
@@ -172,7 +162,7 @@ bool wxWindow::MapOrUnmap(WXWidget widget, bool domap)
 {
     Widget w = (Widget)widget;
     if ( !w )
-        return FALSE;
+        return false;
 
     //   Rationale: a lot of common operations (including but not
     // limited to moving, resizing and appending items to a listbox)
@@ -194,7 +184,7 @@ bool wxWindow::MapOrUnmap(WXWidget widget, bool domap)
         // XtUnmapWidget(w);
     }
 
-    return TRUE;
+    return true;
 }
 
 // ----------------------------------------------------------------------------
@@ -204,12 +194,12 @@ bool wxWindow::MapOrUnmap(WXWidget widget, bool domap)
 void wxWindow::Init()
 {
     // Motif-specific
-    m_needsRefresh = TRUE;
+    m_needsRefresh = true;
     m_mainWidget = (WXWidget) 0;
 
-    m_winCaptured = FALSE;
+    m_winCaptured = false;
 
-    m_isShown = TRUE;
+    m_isShown = true;
     
     m_hScrollBar =
     m_vScrollBar =
@@ -238,7 +228,7 @@ bool wxWindow::Create(wxWindow *parent, wxWindowID id,
                       long style,
                       const wxString& name)
 {
-    wxCHECK_MSG( parent, FALSE, "can't create wxWindow without parent" );
+    wxCHECK_MSG( parent, false, "can't create wxWindow without parent" );
 
     CreateBase(parent, id, pos, size, style, wxDefaultValidator, name);
 
@@ -253,7 +243,7 @@ bool wxWindow::Create(wxWindow *parent, wxWindowID id,
     //// drawing area, since otherwise the translations are different.
 
     // New translations for getting mouse motion feedback
-    static const String translations =
+    static const String translations = wxMOTIF_STR(
 "<Btn1Motion>: wxCanvasMotionEvent() DrawingAreaInput() ManagerGadgetButtonMotion()\n\
 <Btn2Motion>: wxCanvasMotionEvent() DrawingAreaInput() ManagerGadgetButtonMotion()\n\
 <Btn3Motion>: wxCanvasMotionEvent() DrawingAreaInput() ManagerGadgetButtonMotion()\n\
@@ -267,10 +257,10 @@ bool wxWindow::Create(wxWindow *parent, wxWindowID id,
 <Motion>: wxCanvasMotionEvent() DrawingAreaInput()\n\
 <EnterWindow>: wxCanvasMotionEvent() DrawingAreaInput()\n\
 <LeaveWindow>: wxCanvasMotionEvent() DrawingAreaInput()\n\
-<Key>: DrawingAreaInput()";
+<Key>: DrawingAreaInput()");
 
     XtActionsRec actions[1];
-    actions[0].string = "wxCanvasMotionEvent";
+    actions[0].string = wxMOTIF_STR("wxCanvasMotionEvent");
     actions[0].proc = (XtActionProc) wxCanvasMotionEvent;
     XtAppAddActions ((XtAppContext) wxTheApp->GetAppContext(), actions, 1);
 
@@ -341,8 +331,8 @@ bool wxWindow::Create(wxWindow *parent, wxWindowID id,
     // Scrolled widget needs to have its colour changed or we get a little blue
     // square where the scrollbars abutt
     wxColour backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE);
-    wxDoChangeBackgroundColour(m_scrolledWindow, backgroundColour, TRUE);
-    wxDoChangeBackgroundColour(m_drawingArea, backgroundColour, TRUE);
+    wxDoChangeBackgroundColour(m_scrolledWindow, backgroundColour, true);
+    wxDoChangeBackgroundColour(m_drawingArea, backgroundColour, true);
 
     XmScrolledWindowSetAreas(
                              (Widget)m_scrolledWindow,
@@ -353,8 +343,8 @@ bool wxWindow::Create(wxWindow *parent, wxWindowID id,
     // sample).
     SetCursor(*wxSTANDARD_CURSOR);
     SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT));
-    DoSetSizeIntr(pos.x, pos.y, size.x,size.y, wxSIZE_AUTO, TRUE);
-    return TRUE;
+    DoSetSizeIntr(pos.x, pos.y, size.x,size.y, wxSIZE_AUTO, true);
+    return true;
 }
 
 // Destructor
@@ -363,8 +353,8 @@ wxWindow::~wxWindow()
     if (g_captureWindow == this)
         g_captureWindow = NULL;
     
-    m_isBeingDeleted = TRUE;
-    
+    m_isBeingDeleted = true;
+
     // Motif-specific actions first
     WXWidget wMain = GetMainWidget();
     if ( wMain )
@@ -493,7 +483,7 @@ void wxWindow::CreateScrollbar(wxOrientation orientation)
         m_hScrollBar = DoCreateScrollBar( m_scrolledWindow, wxHORIZONTAL,
                                           (void (*)())wxScrollBarCallback );
 
-        wxDoChangeBackgroundColour(m_hScrollBar, backgroundColour, TRUE);
+        wxDoChangeBackgroundColour(m_hScrollBar, backgroundColour, true);
 
         XtRealizeWidget( (Widget)m_hScrollBar );
 
@@ -508,7 +498,7 @@ void wxWindow::CreateScrollbar(wxOrientation orientation)
         m_vScrollBar = DoCreateScrollBar( m_scrolledWindow, wxVERTICAL,
                                           (void (*)())wxScrollBarCallback );
 
-        wxDoChangeBackgroundColour(m_vScrollBar, backgroundColour, TRUE);
+        wxDoChangeBackgroundColour(m_vScrollBar, backgroundColour, true);
 
         XtRealizeWidget((Widget)m_vScrollBar);
 
@@ -564,7 +554,7 @@ void wxWindow::SetFocus()
 }
 
 // Get the window with the focus
-wxWindow *wxWindowBase::FindFocus()
+wxWindow *wxWindowBase::DoFindFocus()
 {
     // TODO Problems:
     // (1) Can there be multiple focussed widgets in an application?
@@ -595,7 +585,7 @@ wxWindow *wxWindowBase::FindFocus()
 bool wxWindow::Enable(bool enable)
 {
     if ( !wxWindowBase::Enable(enable) )
-        return FALSE;
+        return false;
 
     Widget wMain = (Widget)GetMainWidget();
     if ( wMain )
@@ -604,13 +594,13 @@ bool wxWindow::Enable(bool enable)
         XmUpdateDisplay(wMain);
     }
 
-    return TRUE;
+    return true;
 }
 
 bool wxWindow::Show(bool show)
 {
     if ( !wxWindowBase::Show(show) )
-        return FALSE;
+        return false;
 
     if (m_borderWidget || m_scrolledWindow)
     {
@@ -623,7 +613,7 @@ bool wxWindow::Show(bool show)
             MapOrUnmap(GetMainWidget(), show);
     }
 
-    return TRUE;
+    return true;
 }
 
 // Raise the window to the top of the Z order
@@ -663,9 +653,9 @@ void wxWindow::DoCaptureMouse()
 
     Widget wMain = (Widget)GetMainWidget();
     if ( wMain )
-        XtAddGrab(wMain, TRUE, FALSE);
+        XtAddGrab(wMain, True, False);
 
-    m_winCaptured = TRUE;
+    m_winCaptured = true;
 }
 
 void wxWindow::DoReleaseMouse()
@@ -678,7 +668,7 @@ void wxWindow::DoReleaseMouse()
     if ( wMain )
         XtRemoveGrab(wMain);
 
-    m_winCaptured = FALSE;
+    m_winCaptured = false;
 }
 
 bool wxWindow::SetFont(const wxFont& font)
@@ -686,12 +676,12 @@ bool wxWindow::SetFont(const wxFont& font)
     if ( !wxWindowBase::SetFont(font) )
     {
         // nothing to do
-        return FALSE;
+        return false;
     }
 
     ChangeFont();
 
-    return TRUE;
+    return true;
 }
 
 bool wxWindow::SetCursor(const wxCursor& cursor)
@@ -699,7 +689,7 @@ bool wxWindow::SetCursor(const wxCursor& cursor)
     if ( !wxWindowBase::SetCursor(cursor) )
     {
         // no change
-        return FALSE;
+        return false;
     }
 
     //    wxASSERT_MSG( m_cursor.Ok(),
@@ -717,7 +707,7 @@ bool wxWindow::SetCursor(const wxCursor& cursor)
     Window win = XtWindow(w);
     XDefineCursor((Display*) dpy, win, (Cursor) x_cursor);
 
-    return TRUE;
+    return true;
 }
 
 // Coordinates relative to the window
@@ -899,7 +889,7 @@ void wxWindow::ScrollWindow(int dx, int dy, const wxRect *rect)
     XCopyArea(display, window, window, (GC) dc.GetGC(),
               x1, y1, w1, h1, x2, y2);
 
-    dc.SetAutoSetting(TRUE);
+    dc.SetAutoSetting(true);
     wxBrush brush(GetBackgroundColour(), wxSOLID);
     dc.SetBrush(brush); // FIXME: needed?
 
@@ -1075,6 +1065,12 @@ void wxWindow::DoSetToolTip(wxToolTip * WXUNUSED(tooltip))
 
 bool wxWindow::DoPopupMenu(wxMenu *menu, int x, int y)
 {
+    if ( x == -1 && y == -1 )
+    {
+        wxPoint mouse = ScreenToClient(wxGetMousePosition());
+        x = mouse.x; y = mouse.y;
+    }
+
     Widget widget = (Widget) GetMainWidget();
 
     /* The menuId field seems to be usused, so we'll use it to
@@ -1085,11 +1081,11 @@ bool wxWindow::DoPopupMenu(wxMenu *menu, int x, int y)
     */
 
     if (menu->GetParent() && (menu->GetId() != -1))
-        return FALSE;
+        return false;
 
     if (menu->GetMainWidget())
     {
-        menu->DestroyMenu(TRUE);
+        menu->DestroyMenu(true);
     }
 
     menu->SetId(1); /* Mark as popped-up */
@@ -1152,7 +1148,7 @@ bool wxWindow::DoPopupMenu(wxMenu *menu, int x, int y)
         wxDoEventLoopIteration( evtLoop );
     }
 
-    return TRUE;
+    return true;
 }
 
 #endif
@@ -1163,7 +1159,7 @@ bool wxWindow::DoPopupMenu(wxMenu *menu, int x, int y)
 
 bool wxWindow::PreResize()
 {
-    return TRUE;
+    return true;
 }
 
 // Get total size
@@ -1244,7 +1240,7 @@ void wxWindow::DoGetClientSize(int *x, int *y) const
 
 void wxWindow::DoSetSize(int x, int y, int width, int height, int sizeFlags)
 {
-    DoSetSizeIntr(x, y, width, height, sizeFlags, FALSE);
+    DoSetSizeIntr(x, y, width, height, sizeFlags, false);
 }
 
 void wxWindow::DoSetSizeIntr(int x, int y, int width, int height,
@@ -1366,13 +1362,6 @@ void wxWindow::DoSetClientSize(int width, int height)
         XtVaSetValues(widget, XmNheight, height, NULL);
 }
 
-// For implementation purposes - sometimes decorations make the client area
-// smaller
-wxPoint wxWindow::GetClientAreaOrigin() const
-{
-    return wxPoint(0, 0);
-}
-
 void wxWindow::DoMoveWindowIntr(int xx, int yy, int w, int h,
                                 int flags)
 {
@@ -1437,6 +1426,8 @@ void wxWindow::DoMoveWindowIntr(int xx, int yy, int w, int h,
     }
     else
     {
+        if( xx < 0 ) xx = 0;
+        if( yy < 0 ) yy = 0;
         if( w < 1 ) w = 1;
         if( h < 1 ) h = 1;
 
@@ -1463,29 +1454,24 @@ int wxWindow::GetCharHeight() const
 {
     wxCHECK_MSG( m_font.Ok(), 0, "valid window font needed" );
 
-    WXFontStructPtr pFontStruct = m_font.GetFontStruct(1.0, GetXDisplay());
-
-    int direction, ascent, descent;
-    XCharStruct overall;
-    XTextExtents ((XFontStruct*) pFontStruct, "x", 1, &direction, &ascent,
-        &descent, &overall);
+    int height;
+    
+    wxGetTextExtent (GetXDisplay(), m_font, 1.0,
+                     "x", NULL, &height, NULL, NULL);
 
-    //  return (overall.ascent + overall.descent);
-    return (ascent + descent);
+    return height;
 }
 
 int wxWindow::GetCharWidth() const
 {
     wxCHECK_MSG( m_font.Ok(), 0, "valid window font needed" );
 
-    WXFontStructPtr pFontStruct = m_font.GetFontStruct(1.0, GetXDisplay());
-
-    int direction, ascent, descent;
-    XCharStruct overall;
-    XTextExtents ((XFontStruct*) pFontStruct, "x", 1, &direction, &ascent,
-        &descent, &overall);
+    int width;
+    
+    wxGetTextExtent (GetXDisplay(), m_font, 1.0,
+                     "x", &width, NULL, NULL, NULL);
 
-    return overall.width;
+    return width;
 }
 
 void wxWindow::GetTextExtent(const wxString& string,
@@ -1493,36 +1479,14 @@ void wxWindow::GetTextExtent(const wxString& string,
                              int *descent, int *externalLeading,
                              const wxFont *theFont) const
 {
-    wxFont *fontToUse = (wxFont *)theFont;
-    if (!fontToUse)
-        fontToUse = (wxFont *) & m_font;
+    const wxFont *fontToUse = theFont ? theFont : &m_font;
 
     wxCHECK_RET( fontToUse->Ok(), "valid window font needed" );
-    
-    WXFontStructPtr pFontStruct = fontToUse->GetFontStruct(1.0, GetXDisplay());
-
-    int direction, ascent, descent2;
-    XCharStruct overall;
-    int slen = string.Len();
-
-#if 0
-    if (use16)
-        XTextExtents16((XFontStruct*) pFontStruct, (XChar2b *) (char*) (const char*) string, slen, &direction,
-        &ascent, &descent2, &overall);
-#endif
 
-    XTextExtents((XFontStruct*) pFontStruct, string, slen,
-                 &direction, &ascent, &descent2, &overall);
-
-    if ( x )
-        *x = (overall.width);
-    if ( y )
-        *y = (ascent + descent2);
-    if (descent)
-        *descent = descent2;
     if (externalLeading)
         *externalLeading = 0;
-
+    wxGetTextExtent (GetXDisplay(), *fontToUse, 1.0,
+                     string, x, y, NULL, descent);
 }
 
 // ----------------------------------------------------------------------------
@@ -1536,7 +1500,7 @@ void wxWindow::AddUpdateRect(int x, int y, int w, int h)
 
 void wxWindow::Refresh(bool eraseBack, const wxRect *rect)
 {
-    m_needsRefresh = TRUE;
+    m_needsRefresh = true;
     Display *display = XtDisplay((Widget) GetMainWidget());
     Window thisWindow = XtWindow((Widget) GetMainWidget());
 
@@ -1648,7 +1612,7 @@ void wxWindow::DoPaint()
         event.SetEventObject(this);
         GetEventHandler()->ProcessEvent(event);
 
-        m_needsRefresh = FALSE;
+        m_needsRefresh = false;
     }
 }
 
@@ -1667,7 +1631,7 @@ void wxWindow::OnSysColourChanged(wxSysColourChangedEvent& event)
         if ( win->GetParent() )
         {
             wxSysColourChangedEvent event2;
-            event.m_eventObject = win;
+            event.SetEventObject(win);
             win->GetEventHandler()->ProcessEvent(event2);
         }
 
@@ -1691,7 +1655,7 @@ bool wxWindow::ProcessAccelerator(wxKeyEvent& event)
 {
 #if wxUSE_ACCEL
     if (!m_acceleratorTable.Ok())
-        return FALSE;
+        return false;
 
     int count = m_acceleratorTable.GetCount();
     wxAcceleratorEntry* entries = m_acceleratorTable.GetEntries();
@@ -1711,7 +1675,7 @@ bool wxWindow::ProcessAccelerator(wxKeyEvent& event)
                 parent = parent->GetParent();
 
             if (!parent)
-                return FALSE;
+                return false;
 
             wxFrame* frame = wxDynamicCast(parent, wxFrame);
             if ( frame )
@@ -1726,7 +1690,7 @@ bool wxWindow::ProcessAccelerator(wxKeyEvent& event)
                         wxCommandEvent commandEvent(wxEVT_COMMAND_MENU_SELECTED, entry->GetCommand());
                         commandEvent.SetEventObject(frame);
 
-                        // If ProcessEvent returns TRUE (it was handled), then
+                        // If ProcessEvent returns true (it was handled), then
                         // the calling code will skip the event handling.
                         return frame->GetEventHandler()->ProcessEvent(commandEvent);
                     }
@@ -1739,7 +1703,7 @@ bool wxWindow::ProcessAccelerator(wxKeyEvent& event)
 
             // No such child
             if (!child)
-                return FALSE;
+                return false;
 
             // Now we process those kinds of windows that we can.
             // For now, only buttons.
@@ -1750,13 +1714,13 @@ bool wxWindow::ProcessAccelerator(wxKeyEvent& event)
                 return child->GetEventHandler()->ProcessEvent(commandEvent);
             }
 
-            return FALSE;
+            return false;
         } // matches event
     }// for
 #endif
 
     // We didn't match the key event against an accelerator.
-    return FALSE;
+    return false;
 }
 
 // ============================================================================
@@ -1769,20 +1733,20 @@ bool wxWindow::ProcessAccelerator(wxKeyEvent& event)
 
 bool wxAddWindowToTable(Widget w, wxWindow *win)
 {
-    wxWindow *oldItem = NULL;
-    if ((oldItem = (wxWindow *)wxWidgetHashTable->Get ((long) w)))
+    const long key = (long)w;
+    if ( wxWidgetHashTable->Get(key))
     {
         wxLogDebug("Widget table clash: new widget is %ld, %s",
-                   (long)w, win->GetClassInfo()->GetClassName());
-        return FALSE;
+                   key, win->GetClassInfo()->GetClassName());
+        return false;
     }
 
-    wxWidgetHashTable->Put((long) w, win);
+    wxWidgetHashTable->Put(key, win);
 
     wxLogTrace("widget", "Widget 0x%p <-> window %p (%s)",
-               (WXWidget)w, win, win->GetClassInfo()->GetClassName());
+               w, win, win->GetClassInfo()->GetClassName());
 
-    return TRUE;
+    return true;
 }
 
 wxWindow *wxGetWindowFromTable(Widget w)
@@ -1825,7 +1789,7 @@ bool wxWindow::AttachWidget (wxWindow* WXUNUSED(parent), WXWidget mainWidget,
     if (formWidget)
     {
         if (!wxAddWindowToTable((Widget) formWidget, this))
-            return FALSE;
+            return false;
 
         XtTranslations ptr;
         XtOverrideTranslations ((Widget) formWidget,
@@ -1837,9 +1801,9 @@ bool wxWindow::AttachWidget (wxWindow* WXUNUSED(parent), WXWidget mainWidget,
         x = 0;
     if (y == -1)
         y = 0;
-    SetSize (x, y, width, height);
+    DoSetSize (x, y, width, height, wxSIZE_USE_EXISTING);
 
-    return TRUE;
+    return true;
 }
 
 // Remove event handler, remove from hash table
@@ -1853,7 +1817,7 @@ bool wxWindow::DetachWidget(WXWidget widget)
                           (XtPointer)this);
 
     wxDeleteWindowFromTable((Widget) widget);
-    return TRUE;
+    return true;
 }
 
 // ----------------------------------------------------------------------------
@@ -2106,9 +2070,9 @@ static void wxPanelItemEventHandler(Widget    wid,
     }
 
     // TODO: probably the key to allowing default behaviour to happen. Say we
-    // set a m_doDefault flag to FALSE at the start of this function. Then in
+    // set a m_doDefault flag to false at the start of this function. Then in
     // e.g. wxWindow::OnMouseEvent we can call Default() which sets this flag to
-    // TRUE, indicating that default processing can happen. Thus, behaviour can
+    // true, indicating that default processing can happen. Thus, behaviour can
     // appear to be overridden just by adding an event handler and not calling
     // wxWindow::OnWhatever. ALSO, maybe we can use this instead of the current
     // way of handling drawing area events, to simplify things.
@@ -2120,7 +2084,7 @@ static void wxScrollBarCallback(Widget scrollbar,
                                 XmScrollBarCallbackStruct *cbs)
 {
     wxWindow *win = wxGetWindowFromTable(scrollbar);
-    wxOrientation orientation = (wxOrientation)(int)clientData;
+    wxOrientation orientation = (wxOrientation)wxPtrToUInt(clientData);
 
     wxEventType eventType = wxEVT_NULL;
     switch (cbs->reason)
@@ -2183,24 +2147,18 @@ static void wxScrollBarCallback(Widget scrollbar,
 // For repainting arbitrary windows
 void wxUniversalRepaintProc(Widget w, XtPointer WXUNUSED(c_data), XEvent *event, char *)
 {
-    Window window;
-    Display *display;
-
     wxWindow* win = wxGetWindowFromTable(w);
     if (!win)
         return;
 
-    switch(event -> type)
+    switch ( event->type )
     {
-    case Expose:
+        case Expose:
         {
-            window = (Window) win -> GetXWindow();
-            display = (Display *) win -> GetXDisplay();
-
             win->AddUpdateRect(event->xexpose.x, event->xexpose.y,
                                event->xexpose.width, event->xexpose.height);
 
-            if (event -> xexpose.count == 0)
+            if ( event->xexpose.count == 0 )
             {
                 win->DoPaint();
             }
@@ -2318,11 +2276,11 @@ bool wxTranslateMouseEvent(wxMouseEvent& wxevent, wxWindow *win,
                     eventType = wxEVT_RIGHT_UP;
                 }
                 else
-                    return FALSE;
+                    return false;
             }
             else
             {
-                return FALSE;
+                return false;
             }
 
             wxevent.SetEventType(eventType);
@@ -2365,10 +2323,10 @@ bool wxTranslateMouseEvent(wxMouseEvent& wxevent, wxWindow *win,
             wxevent.SetId(win->GetId());
             wxevent.SetEventObject(win);
 
-            return TRUE;
+            return true;
         }
     }
-    return FALSE;
+    return false;
 }
 
 bool wxTranslateKeyEvent(wxKeyEvent& wxevent, wxWindow *win,
@@ -2390,13 +2348,13 @@ bool wxTranslateKeyEvent(wxKeyEvent& wxevent, wxWindow *win,
                 id = toupper(id);
 
             if (xevent->xkey.state & ShiftMask)
-                wxevent.m_shiftDown = TRUE;
+                wxevent.m_shiftDown = true;
             if (xevent->xkey.state & ControlMask)
-                wxevent.m_controlDown = TRUE;
+                wxevent.m_controlDown = true;
             if (xevent->xkey.state & Mod3Mask)
-                wxevent.m_altDown = TRUE;
+                wxevent.m_altDown = true;
             if (xevent->xkey.state & Mod1Mask)
-                wxevent.m_metaDown = TRUE;
+                wxevent.m_metaDown = true;
             wxevent.SetEventObject(win);
             wxevent.m_keyCode = id;
             wxevent.SetTimestamp(xevent->xkey.time);
@@ -2405,15 +2363,15 @@ bool wxTranslateKeyEvent(wxKeyEvent& wxevent, wxWindow *win,
             wxevent.m_y = xevent->xbutton.y;
 
             if (id > -1)
-                return TRUE;
+                return true;
             else
-                return FALSE;
+                return false;
             break;
         }
     default:
         break;
     }
-    return FALSE;
+    return false;
 }
 
 // ----------------------------------------------------------------------------
@@ -2487,6 +2445,8 @@ void wxWindow::ChangeBackgroundColour()
     WXWidget mainWidget = GetMainWidget();
     if ( mainWidget )
         wxDoChangeBackgroundColour(mainWidget, m_backgroundColour);
+    if ( m_scrolledWindow && mainWidget != m_scrolledWindow )
+        wxDoChangeForegroundColour(m_scrolledWindow, m_backgroundColour);
 }
 
 void wxWindow::ChangeForegroundColour()
@@ -2501,21 +2461,21 @@ void wxWindow::ChangeForegroundColour()
 bool wxWindow::SetBackgroundColour(const wxColour& col)
 {
     if ( !wxWindowBase::SetBackgroundColour(col) )
-        return FALSE;
+        return false;
 
     ChangeBackgroundColour();
 
-    return TRUE;
+    return true;
 }
 
 bool wxWindow::SetForegroundColour(const wxColour& col)
 {
     if ( !wxWindowBase::SetForegroundColour(col) )
-        return FALSE;
+        return false;
 
     ChangeForegroundColour();
 
-    return TRUE;
+    return true;
 }
 
 void wxWindow::ChangeFont(bool keepOriginalSize)
@@ -2561,7 +2521,8 @@ wxWindow *wxWindowBase::GetCapture()
 // position.
 wxWindow* wxFindWindowAtPointer(wxPoint& pt)
 {
-    return wxFindWindowAtPoint(wxGetMousePosition());
+    pt = wxGetMousePosition();
+    return wxFindWindowAtPoint(pt);
 }
 
 // Get the current mouse position.