]> git.saurik.com Git - wxWidgets.git/blobdiff - src/motif/window.cpp
[ 1216436 ] cleanup 'shadow variable' warnings from gcc in headers.
[wxWidgets.git] / src / motif / window.cpp
index f9610d3223327ee28d612df05423b32a6758d5d3..feda98f8ec996f75d66da878ad9029272f3730aa 100644 (file)
@@ -21,6 +21,9 @@
     #pragma implementation "window.h"
 #endif
 
     #pragma implementation "window.h"
 #endif
 
+// For compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
 #ifdef __VMS
 #define XtDisplay XTDISPLAY
 #define XtWindow XTWINDOW
 #ifdef __VMS
 #define XtDisplay XTDISPLAY
 #define XtWindow XTWINDOW
@@ -51,7 +54,7 @@
 // DoSetSizeIntr and DoMoveWindowIntr
 // PROBLEM:
 // under Motif composite controls (such as wxCalendarCtrl or generic wxSpinCtrl
 // 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)
 // 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)
@@ -169,7 +172,7 @@ bool wxWindow::MapOrUnmap(WXWidget widget, bool domap)
 {
     Widget w = (Widget)widget;
     if ( !w )
 {
     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)
 
     //   Rationale: a lot of common operations (including but not
     // limited to moving, resizing and appending items to a listbox)
@@ -191,7 +194,7 @@ bool wxWindow::MapOrUnmap(WXWidget widget, bool domap)
         // XtUnmapWidget(w);
     }
 
         // XtUnmapWidget(w);
     }
 
-    return TRUE;
+    return true;
 }
 
 // ----------------------------------------------------------------------------
 }
 
 // ----------------------------------------------------------------------------
@@ -201,12 +204,12 @@ bool wxWindow::MapOrUnmap(WXWidget widget, bool domap)
 void wxWindow::Init()
 {
     // Motif-specific
 void wxWindow::Init()
 {
     // Motif-specific
-    m_needsRefresh = TRUE;
+    m_needsRefresh = true;
     m_mainWidget = (WXWidget) 0;
 
     m_mainWidget = (WXWidget) 0;
 
-    m_winCaptured = FALSE;
+    m_winCaptured = false;
 
 
-    m_isShown = TRUE;
+    m_isShown = true;
     
     m_hScrollBar =
     m_vScrollBar =
     
     m_hScrollBar =
     m_vScrollBar =
@@ -235,7 +238,7 @@ bool wxWindow::Create(wxWindow *parent, wxWindowID id,
                       long style,
                       const wxString& name)
 {
                       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);
 
 
     CreateBase(parent, id, pos, size, style, wxDefaultValidator, name);
 
@@ -338,8 +341,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);
     // 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,
 
     XmScrolledWindowSetAreas(
                              (Widget)m_scrolledWindow,
@@ -350,8 +353,8 @@ bool wxWindow::Create(wxWindow *parent, wxWindowID id,
     // sample).
     SetCursor(*wxSTANDARD_CURSOR);
     SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT));
     // 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
 }
 
 // Destructor
@@ -360,7 +363,7 @@ wxWindow::~wxWindow()
     if (g_captureWindow == this)
         g_captureWindow = NULL;
     
     if (g_captureWindow == this)
         g_captureWindow = NULL;
     
-    m_isBeingDeleted = TRUE;
+    m_isBeingDeleted = true;
     
     // Motif-specific actions first
     WXWidget wMain = GetMainWidget();
     
     // Motif-specific actions first
     WXWidget wMain = GetMainWidget();
@@ -490,7 +493,7 @@ void wxWindow::CreateScrollbar(wxOrientation orientation)
         m_hScrollBar = DoCreateScrollBar( m_scrolledWindow, wxHORIZONTAL,
                                           (void (*)())wxScrollBarCallback );
 
         m_hScrollBar = DoCreateScrollBar( m_scrolledWindow, wxHORIZONTAL,
                                           (void (*)())wxScrollBarCallback );
 
-        wxDoChangeBackgroundColour(m_hScrollBar, backgroundColour, TRUE);
+        wxDoChangeBackgroundColour(m_hScrollBar, backgroundColour, true);
 
         XtRealizeWidget( (Widget)m_hScrollBar );
 
 
         XtRealizeWidget( (Widget)m_hScrollBar );
 
@@ -505,7 +508,7 @@ void wxWindow::CreateScrollbar(wxOrientation orientation)
         m_vScrollBar = DoCreateScrollBar( m_scrolledWindow, wxVERTICAL,
                                           (void (*)())wxScrollBarCallback );
 
         m_vScrollBar = DoCreateScrollBar( m_scrolledWindow, wxVERTICAL,
                                           (void (*)())wxScrollBarCallback );
 
-        wxDoChangeBackgroundColour(m_vScrollBar, backgroundColour, TRUE);
+        wxDoChangeBackgroundColour(m_vScrollBar, backgroundColour, true);
 
         XtRealizeWidget((Widget)m_vScrollBar);
 
 
         XtRealizeWidget((Widget)m_vScrollBar);
 
@@ -561,7 +564,7 @@ void wxWindow::SetFocus()
 }
 
 // Get the window with the focus
 }
 
 // Get the window with the focus
-wxWindow *wxWindowBase::FindFocus()
+wxWindow *wxWindowBase::DoFindFocus()
 {
     // TODO Problems:
     // (1) Can there be multiple focussed widgets in an application?
 {
     // TODO Problems:
     // (1) Can there be multiple focussed widgets in an application?
@@ -592,7 +595,7 @@ wxWindow *wxWindowBase::FindFocus()
 bool wxWindow::Enable(bool enable)
 {
     if ( !wxWindowBase::Enable(enable) )
 bool wxWindow::Enable(bool enable)
 {
     if ( !wxWindowBase::Enable(enable) )
-        return FALSE;
+        return false;
 
     Widget wMain = (Widget)GetMainWidget();
     if ( wMain )
 
     Widget wMain = (Widget)GetMainWidget();
     if ( wMain )
@@ -601,13 +604,13 @@ bool wxWindow::Enable(bool enable)
         XmUpdateDisplay(wMain);
     }
 
         XmUpdateDisplay(wMain);
     }
 
-    return TRUE;
+    return true;
 }
 
 bool wxWindow::Show(bool show)
 {
     if ( !wxWindowBase::Show(show) )
 }
 
 bool wxWindow::Show(bool show)
 {
     if ( !wxWindowBase::Show(show) )
-        return FALSE;
+        return false;
 
     if (m_borderWidget || m_scrolledWindow)
     {
 
     if (m_borderWidget || m_scrolledWindow)
     {
@@ -620,7 +623,7 @@ bool wxWindow::Show(bool show)
             MapOrUnmap(GetMainWidget(), show);
     }
 
             MapOrUnmap(GetMainWidget(), show);
     }
 
-    return TRUE;
+    return true;
 }
 
 // Raise the window to the top of the Z order
 }
 
 // Raise the window to the top of the Z order
@@ -660,9 +663,9 @@ void wxWindow::DoCaptureMouse()
 
     Widget wMain = (Widget)GetMainWidget();
     if ( wMain )
 
     Widget wMain = (Widget)GetMainWidget();
     if ( wMain )
-        XtAddGrab(wMain, TRUE, FALSE);
+        XtAddGrab(wMain, True, False);
 
 
-    m_winCaptured = TRUE;
+    m_winCaptured = true;
 }
 
 void wxWindow::DoReleaseMouse()
 }
 
 void wxWindow::DoReleaseMouse()
@@ -675,7 +678,7 @@ void wxWindow::DoReleaseMouse()
     if ( wMain )
         XtRemoveGrab(wMain);
 
     if ( wMain )
         XtRemoveGrab(wMain);
 
-    m_winCaptured = FALSE;
+    m_winCaptured = false;
 }
 
 bool wxWindow::SetFont(const wxFont& font)
 }
 
 bool wxWindow::SetFont(const wxFont& font)
@@ -683,12 +686,12 @@ bool wxWindow::SetFont(const wxFont& font)
     if ( !wxWindowBase::SetFont(font) )
     {
         // nothing to do
     if ( !wxWindowBase::SetFont(font) )
     {
         // nothing to do
-        return FALSE;
+        return false;
     }
 
     ChangeFont();
 
     }
 
     ChangeFont();
 
-    return TRUE;
+    return true;
 }
 
 bool wxWindow::SetCursor(const wxCursor& cursor)
 }
 
 bool wxWindow::SetCursor(const wxCursor& cursor)
@@ -696,7 +699,7 @@ bool wxWindow::SetCursor(const wxCursor& cursor)
     if ( !wxWindowBase::SetCursor(cursor) )
     {
         // no change
     if ( !wxWindowBase::SetCursor(cursor) )
     {
         // no change
-        return FALSE;
+        return false;
     }
 
     //    wxASSERT_MSG( m_cursor.Ok(),
     }
 
     //    wxASSERT_MSG( m_cursor.Ok(),
@@ -714,7 +717,7 @@ bool wxWindow::SetCursor(const wxCursor& cursor)
     Window win = XtWindow(w);
     XDefineCursor((Display*) dpy, win, (Cursor) x_cursor);
 
     Window win = XtWindow(w);
     XDefineCursor((Display*) dpy, win, (Cursor) x_cursor);
 
-    return TRUE;
+    return true;
 }
 
 // Coordinates relative to the window
 }
 
 // Coordinates relative to the window
@@ -754,7 +757,9 @@ int wxWindow::GetScrollPos(int orient) const
 int wxWindow::GetScrollRange(int orient) const
 {
     Widget scrollBar = (Widget)GetScrollbar((wxOrientation)orient);
 int wxWindow::GetScrollRange(int orient) const
 {
     Widget scrollBar = (Widget)GetScrollbar((wxOrientation)orient);
-    wxCHECK_MSG( scrollBar, 0, "no such scrollbar" );
+    // CE scintilla windows don't always have these scrollbars 
+    // and it tends to pile up a whole bunch of asserts
+    //wxCHECK_MSG( scrollBar, 0, "no such scrollbar" );
 
     int range = 0;
     if (scrollBar) 
 
     int range = 0;
     if (scrollBar) 
@@ -765,10 +770,11 @@ int wxWindow::GetScrollRange(int orient) const
 int wxWindow::GetScrollThumb(int orient) const
 {
     Widget scrollBar = (Widget)GetScrollbar((wxOrientation)orient);
 int wxWindow::GetScrollThumb(int orient) const
 {
     Widget scrollBar = (Widget)GetScrollbar((wxOrientation)orient);
-    wxCHECK_MSG( scrollBar, 0, "no such scrollbar" );
+    //wxCHECK_MSG( scrollBar, 0, "no such scrollbar" );
 
 
-    int thumb;
-    XtVaGetValues(scrollBar, XmNsliderSize, &thumb, NULL);
+    int thumb = 0;
+    if (scrollBar)
+        XtVaGetValues(scrollBar, XmNsliderSize, &thumb, NULL);
     return thumb;
 }
 
     return thumb;
 }
 
@@ -893,7 +899,7 @@ void wxWindow::ScrollWindow(int dx, int dy, const wxRect *rect)
     XCopyArea(display, window, window, (GC) dc.GetGC(),
               x1, y1, w1, h1, x2, y2);
 
     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?
 
     wxBrush brush(GetBackgroundColour(), wxSOLID);
     dc.SetBrush(brush); // FIXME: needed?
 
@@ -1069,6 +1075,12 @@ void wxWindow::DoSetToolTip(wxToolTip * WXUNUSED(tooltip))
 
 bool wxWindow::DoPopupMenu(wxMenu *menu, int x, int y)
 {
 
 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
     Widget widget = (Widget) GetMainWidget();
 
     /* The menuId field seems to be usused, so we'll use it to
@@ -1079,11 +1091,11 @@ bool wxWindow::DoPopupMenu(wxMenu *menu, int x, int y)
     */
 
     if (menu->GetParent() && (menu->GetId() != -1))
     */
 
     if (menu->GetParent() && (menu->GetId() != -1))
-        return FALSE;
+        return false;
 
     if (menu->GetMainWidget())
     {
 
     if (menu->GetMainWidget())
     {
-        menu->DestroyMenu(TRUE);
+        menu->DestroyMenu(true);
     }
 
     menu->SetId(1); /* Mark as popped-up */
     }
 
     menu->SetId(1); /* Mark as popped-up */
@@ -1146,7 +1158,7 @@ bool wxWindow::DoPopupMenu(wxMenu *menu, int x, int y)
         wxDoEventLoopIteration( evtLoop );
     }
 
         wxDoEventLoopIteration( evtLoop );
     }
 
-    return TRUE;
+    return true;
 }
 
 #endif
 }
 
 #endif
@@ -1157,7 +1169,7 @@ bool wxWindow::DoPopupMenu(wxMenu *menu, int x, int y)
 
 bool wxWindow::PreResize()
 {
 
 bool wxWindow::PreResize()
 {
-    return TRUE;
+    return true;
 }
 
 // Get total size
 }
 
 // Get total size
@@ -1238,7 +1250,7 @@ void wxWindow::DoGetClientSize(int *x, int *y) const
 
 void wxWindow::DoSetSize(int x, int y, int width, int height, int sizeFlags)
 {
 
 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,
 }
 
 void wxWindow::DoSetSizeIntr(int x, int y, int width, int height,
@@ -1360,13 +1372,6 @@ void wxWindow::DoSetClientSize(int width, int height)
         XtVaSetValues(widget, XmNheight, height, NULL);
 }
 
         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)
 {
 void wxWindow::DoMoveWindowIntr(int xx, int yy, int w, int h,
                                 int flags)
 {
@@ -1530,7 +1535,7 @@ void wxWindow::AddUpdateRect(int x, int y, int w, int h)
 
 void wxWindow::Refresh(bool eraseBack, const wxRect *rect)
 {
 
 void wxWindow::Refresh(bool eraseBack, const wxRect *rect)
 {
-    m_needsRefresh = TRUE;
+    m_needsRefresh = true;
     Display *display = XtDisplay((Widget) GetMainWidget());
     Window thisWindow = XtWindow((Widget) GetMainWidget());
 
     Display *display = XtDisplay((Widget) GetMainWidget());
     Window thisWindow = XtWindow((Widget) GetMainWidget());
 
@@ -1590,7 +1595,7 @@ void wxWindow::DoPaint()
       // otherwise we don't know how many pixels have been scrolled. We might
       // solve this in the future by defining virtual wxWindow functions to get
       // the scroll position in pixels. Or, each kind of scrolled window has to
       // otherwise we don't know how many pixels have been scrolled. We might
       // solve this in the future by defining virtual wxWindow functions to get
       // the scroll position in pixels. Or, each kind of scrolled window has to
-      // implement backing stores itself, using generic wxWindows code.
+      // implement backing stores itself, using generic wxWidgets code.
       wxScrolledWindow* scrolledWindow = wxDynamicCast(this, wxScrolledWindow);
       if ( scrolledWindow )
       {
       wxScrolledWindow* scrolledWindow = wxDynamicCast(this, wxScrolledWindow);
       if ( scrolledWindow )
       {
@@ -1642,7 +1647,7 @@ void wxWindow::DoPaint()
         event.SetEventObject(this);
         GetEventHandler()->ProcessEvent(event);
 
         event.SetEventObject(this);
         GetEventHandler()->ProcessEvent(event);
 
-        m_needsRefresh = FALSE;
+        m_needsRefresh = false;
     }
 }
 
     }
 }
 
@@ -1661,7 +1666,7 @@ void wxWindow::OnSysColourChanged(wxSysColourChangedEvent& event)
         if ( win->GetParent() )
         {
             wxSysColourChangedEvent event2;
         if ( win->GetParent() )
         {
             wxSysColourChangedEvent event2;
-            event.m_eventObject = win;
+            event.SetEventObject(win);
             win->GetEventHandler()->ProcessEvent(event2);
         }
 
             win->GetEventHandler()->ProcessEvent(event2);
         }
 
@@ -1685,7 +1690,7 @@ bool wxWindow::ProcessAccelerator(wxKeyEvent& event)
 {
 #if wxUSE_ACCEL
     if (!m_acceleratorTable.Ok())
 {
 #if wxUSE_ACCEL
     if (!m_acceleratorTable.Ok())
-        return FALSE;
+        return false;
 
     int count = m_acceleratorTable.GetCount();
     wxAcceleratorEntry* entries = m_acceleratorTable.GetEntries();
 
     int count = m_acceleratorTable.GetCount();
     wxAcceleratorEntry* entries = m_acceleratorTable.GetEntries();
@@ -1705,7 +1710,7 @@ bool wxWindow::ProcessAccelerator(wxKeyEvent& event)
                 parent = parent->GetParent();
 
             if (!parent)
                 parent = parent->GetParent();
 
             if (!parent)
-                return FALSE;
+                return false;
 
             wxFrame* frame = wxDynamicCast(parent, wxFrame);
             if ( frame )
 
             wxFrame* frame = wxDynamicCast(parent, wxFrame);
             if ( frame )
@@ -1720,7 +1725,7 @@ bool wxWindow::ProcessAccelerator(wxKeyEvent& event)
                         wxCommandEvent commandEvent(wxEVT_COMMAND_MENU_SELECTED, entry->GetCommand());
                         commandEvent.SetEventObject(frame);
 
                         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);
                     }
                         // the calling code will skip the event handling.
                         return frame->GetEventHandler()->ProcessEvent(commandEvent);
                     }
@@ -1733,7 +1738,7 @@ bool wxWindow::ProcessAccelerator(wxKeyEvent& event)
 
             // No such child
             if (!child)
 
             // No such child
             if (!child)
-                return FALSE;
+                return false;
 
             // Now we process those kinds of windows that we can.
             // For now, only buttons.
 
             // Now we process those kinds of windows that we can.
             // For now, only buttons.
@@ -1744,13 +1749,13 @@ bool wxWindow::ProcessAccelerator(wxKeyEvent& event)
                 return child->GetEventHandler()->ProcessEvent(commandEvent);
             }
 
                 return child->GetEventHandler()->ProcessEvent(commandEvent);
             }
 
-            return FALSE;
+            return false;
         } // matches event
     }// for
 #endif
 
     // We didn't match the key event against an accelerator.
         } // matches event
     }// for
 #endif
 
     // We didn't match the key event against an accelerator.
-    return FALSE;
+    return false;
 }
 
 // ============================================================================
 }
 
 // ============================================================================
@@ -1758,7 +1763,7 @@ bool wxWindow::ProcessAccelerator(wxKeyEvent& event)
 // ============================================================================
 
 // ----------------------------------------------------------------------------
 // ============================================================================
 
 // ----------------------------------------------------------------------------
-// function which maintain the global hash table mapping Widgets to wxWindows
+// function which maintain the global hash table mapping Widgets to wxWidgets
 // ----------------------------------------------------------------------------
 
 bool wxAddWindowToTable(Widget w, wxWindow *win)
 // ----------------------------------------------------------------------------
 
 bool wxAddWindowToTable(Widget w, wxWindow *win)
@@ -1768,7 +1773,7 @@ bool wxAddWindowToTable(Widget w, wxWindow *win)
     {
         wxLogDebug("Widget table clash: new widget is %ld, %s",
                    (long)w, win->GetClassInfo()->GetClassName());
     {
         wxLogDebug("Widget table clash: new widget is %ld, %s",
                    (long)w, win->GetClassInfo()->GetClassName());
-        return FALSE;
+        return false;
     }
 
     wxWidgetHashTable->Put((long) w, win);
     }
 
     wxWidgetHashTable->Put((long) w, win);
@@ -1776,7 +1781,7 @@ bool wxAddWindowToTable(Widget w, wxWindow *win)
     wxLogTrace("widget", "Widget 0x%p <-> window %p (%s)",
                (WXWidget)w, win, win->GetClassInfo()->GetClassName());
 
     wxLogTrace("widget", "Widget 0x%p <-> window %p (%s)",
                (WXWidget)w, win, win->GetClassInfo()->GetClassName());
 
-    return TRUE;
+    return true;
 }
 
 wxWindow *wxGetWindowFromTable(Widget w)
 }
 
 wxWindow *wxGetWindowFromTable(Widget w)
@@ -1819,7 +1824,7 @@ bool wxWindow::AttachWidget (wxWindow* WXUNUSED(parent), WXWidget mainWidget,
     if (formWidget)
     {
         if (!wxAddWindowToTable((Widget) formWidget, this))
     if (formWidget)
     {
         if (!wxAddWindowToTable((Widget) formWidget, this))
-            return FALSE;
+            return false;
 
         XtTranslations ptr;
         XtOverrideTranslations ((Widget) formWidget,
 
         XtTranslations ptr;
         XtOverrideTranslations ((Widget) formWidget,
@@ -1847,7 +1852,7 @@ bool wxWindow::DetachWidget(WXWidget widget)
                           (XtPointer)this);
 
     wxDeleteWindowFromTable((Widget) widget);
                           (XtPointer)this);
 
     wxDeleteWindowFromTable((Widget) widget);
-    return TRUE;
+    return true;
 }
 
 // ----------------------------------------------------------------------------
 }
 
 // ----------------------------------------------------------------------------
@@ -1995,7 +2000,7 @@ static void wxCanvasInputEvent(Widget drawingArea,
                                XmDrawingAreaCallbackStruct * cbs)
 {
     wxWindow *canvas = wxGetWindowFromTable(drawingArea);
                                XmDrawingAreaCallbackStruct * cbs)
 {
     wxWindow *canvas = wxGetWindowFromTable(drawingArea);
-    XEvent local_event;
+    XEvent* xevent = cbs->event;
 
     if (canvas==NULL)
         return;
 
     if (canvas==NULL)
         return;
@@ -2003,9 +2008,7 @@ static void wxCanvasInputEvent(Widget drawingArea,
     if (cbs->reason != XmCR_INPUT)
         return;
 
     if (cbs->reason != XmCR_INPUT)
         return;
 
-    local_event = *(cbs->event);    // We must keep a copy!
-
-    switch (local_event.xany.type)
+    switch (xevent->xany.type)
     {
     case EnterNotify:
     case LeaveNotify:
     {
     case EnterNotify:
     case LeaveNotify:
@@ -2013,165 +2016,17 @@ static void wxCanvasInputEvent(Widget drawingArea,
     case ButtonRelease:
     case MotionNotify:
         {
     case ButtonRelease:
     case MotionNotify:
         {
-            // FIXME: most of this mouse event code is more or less
-            // duplicated in wxTranslateMouseEvent
-            //
-            wxEventType eventType = wxEVT_NULL;
-
-            if (local_event.xany.type == EnterNotify)
+            wxMouseEvent wxevent(0);
+            if (wxTranslateMouseEvent(wxevent, canvas, drawingArea, xevent))
             {
             {
-                //if (local_event.xcrossing.mode!=NotifyNormal)
-                //  return ; // Ignore grab events
-                eventType = wxEVT_ENTER_WINDOW;
-                //            canvas->GetEventHandler()->OnSetFocus();
+                canvas->GetEventHandler()->ProcessEvent(wxevent);
             }
             }
-            else if (local_event.xany.type == LeaveNotify)
-            {
-                //if (local_event.xcrossingr.mode!=NotifyNormal)
-                //  return ; // Ignore grab events
-                eventType = wxEVT_LEAVE_WINDOW;
-                //            canvas->GetEventHandler()->OnKillFocus();
-            }
-            else if (local_event.xany.type == MotionNotify)
-            {
-                eventType = wxEVT_MOTION;
-            }
-
-            else if (local_event.xany.type == ButtonPress)
-            {
-                if (local_event.xbutton.button == Button1)
-                {
-                    eventType = wxEVT_LEFT_DOWN;
-                }
-                else if (local_event.xbutton.button == Button2)
-                {
-                    eventType = wxEVT_MIDDLE_DOWN;
-                }
-                else if (local_event.xbutton.button == Button3)
-                {
-                    eventType = wxEVT_RIGHT_DOWN;
-                }
-            }
-            else if (local_event.xany.type == ButtonRelease)
-            {
-                if (local_event.xbutton.button == Button1)
-                {
-                    eventType = wxEVT_LEFT_UP;
-                }
-                else if (local_event.xbutton.button == Button2)
-                {
-                    eventType = wxEVT_MIDDLE_UP;
-                }
-                else if (local_event.xbutton.button == Button3)
-                {
-                    eventType = wxEVT_RIGHT_UP;
-                }
-            }
-
-            wxMouseEvent wxevent (eventType);
-
-            wxevent.m_leftDown = ((eventType == wxEVT_LEFT_DOWN)
-                || (event_left_is_down (&local_event)
-                && (eventType != wxEVT_LEFT_UP)));
-            wxevent.m_middleDown = ((eventType == wxEVT_MIDDLE_DOWN)
-                || (event_middle_is_down (&local_event)
-                && (eventType != wxEVT_MIDDLE_UP)));
-            wxevent.m_rightDown = ((eventType == wxEVT_RIGHT_DOWN)
-                || (event_right_is_down (&local_event)
-                && (eventType != wxEVT_RIGHT_UP)));
-
-            wxevent.m_shiftDown = local_event.xbutton.state & ShiftMask;
-            wxevent.m_controlDown = local_event.xbutton.state & ControlMask;
-            wxevent.m_altDown = local_event.xbutton.state & Mod3Mask;
-            wxevent.m_metaDown = local_event.xbutton.state & Mod1Mask;
-            wxevent.SetTimestamp(local_event.xbutton.time);
-
-           if ( eventType == wxEVT_MOTION )
-           {
-                if (local_event.xmotion.is_hint == NotifyHint)
-                {
-                    Window root, child;
-                    Display *dpy = XtDisplay (drawingArea);
-
-                    XQueryPointer (dpy, XtWindow (drawingArea),
-                        &root, &child,
-                        &local_event.xmotion.x_root,
-                        &local_event.xmotion.y_root,
-                        &local_event.xmotion.x,
-                        &local_event.xmotion.y,
-                        &local_event.xmotion.state);
-                }
-                else
-                {
-                }
-           }
-
-            // Now check if we need to translate this event into a double click
-            if (TRUE) // canvas->doubleClickAllowed)
-            {
-                if (wxevent.ButtonDown())
-                {
-                    long dclickTime = XtGetMultiClickTime((Display*) wxGetDisplay());
-
-                    // get button and time-stamp
-                    int button = 0;
-                    if (wxevent.LeftDown())
-                        button = 1;
-                    else if (wxevent.MiddleDown())
-                        button = 2;
-                    else if (wxevent.RightDown())
-                        button = 3;
-                    long ts = wxevent.GetTimestamp();
-
-                    // check, if single or double click
-                    int buttonLast = canvas->GetLastClickedButton();
-                    long lastTS = canvas->GetLastClickTime();
-                    if ( buttonLast && buttonLast == button && (ts - lastTS) < dclickTime )
-                    {
-                        // I have a dclick
-                        canvas->SetLastClick(0, ts);
-
-                        wxEventType typeDouble;
-                        if ( eventType == wxEVT_LEFT_DOWN )
-                            typeDouble = wxEVT_LEFT_DCLICK;
-                        else if ( eventType == wxEVT_MIDDLE_DOWN )
-                            typeDouble = wxEVT_MIDDLE_DCLICK;
-                        else if ( eventType == wxEVT_RIGHT_DOWN )
-                            typeDouble = wxEVT_RIGHT_DCLICK;
-                        else
-                            typeDouble = wxEVT_NULL;
-
-                        if ( typeDouble != wxEVT_NULL )
-                        {
-                            wxevent.SetEventType(typeDouble);
-                        }
-                    }
-                    else
-                    {
-                        // not fast enough or different button
-                        canvas->SetLastClick(button, ts);
-                    }
-                }
-            }
-
-            wxevent.SetId(canvas->GetId());
-            wxevent.SetEventObject(canvas);
-            wxevent.m_x = local_event.xbutton.x;
-            wxevent.m_y = local_event.xbutton.y;
-            canvas->GetEventHandler()->ProcessEvent (wxevent);
-#if 0
-            if (eventType == wxEVT_ENTER_WINDOW ||
-                    eventType == wxEVT_LEAVE_WINDOW ||
-                    eventType == wxEVT_MOTION
-               )
-                return;
-#endif // 0
             break;
             break;
-      }
+        }
     case KeyPress:
         {
             wxKeyEvent event (wxEVT_CHAR);
     case KeyPress:
         {
             wxKeyEvent event (wxEVT_CHAR);
-            if (wxTranslateKeyEvent (event, canvas, (Widget) 0, &local_event))
+            if (wxTranslateKeyEvent (event, canvas, (Widget) 0, xevent))
             {
                 // Implement wxFrame::OnCharHook by checking ancestor.
                 wxWindow *parent = canvas;
             {
                 // Implement wxFrame::OnCharHook by checking ancestor.
                 wxWindow *parent = canvas;
@@ -2201,7 +2056,7 @@ static void wxCanvasInputEvent(Widget drawingArea,
     case KeyRelease:
         {
             wxKeyEvent event (wxEVT_KEY_UP);
     case KeyRelease:
         {
             wxKeyEvent event (wxEVT_KEY_UP);
-            if (wxTranslateKeyEvent (event, canvas, (Widget) 0, &local_event))
+            if (wxTranslateKeyEvent (event, canvas, (Widget) 0, xevent))
             {
                 canvas->GetEventHandler()->ProcessEvent (event);
             }
             {
                 canvas->GetEventHandler()->ProcessEvent (event);
             }
@@ -2209,7 +2064,7 @@ static void wxCanvasInputEvent(Widget drawingArea,
         }
     case FocusIn:
         {
         }
     case FocusIn:
         {
-            if (local_event.xfocus.detail != NotifyPointer)
+            if (xevent->xfocus.detail != NotifyPointer)
             {
                 wxFocusEvent event(wxEVT_SET_FOCUS, canvas->GetId());
                 event.SetEventObject(canvas);
             {
                 wxFocusEvent event(wxEVT_SET_FOCUS, canvas->GetId());
                 event.SetEventObject(canvas);
@@ -2219,7 +2074,7 @@ static void wxCanvasInputEvent(Widget drawingArea,
         }
     case FocusOut:
         {
         }
     case FocusOut:
         {
-            if (local_event.xfocus.detail != NotifyPointer)
+            if (xevent->xfocus.detail != NotifyPointer)
             {
                 wxFocusEvent event(wxEVT_KILL_FOCUS, canvas->GetId());
                 event.SetEventObject(canvas);
             {
                 wxFocusEvent event(wxEVT_KILL_FOCUS, canvas->GetId());
                 event.SetEventObject(canvas);
@@ -2250,9 +2105,9 @@ static void wxPanelItemEventHandler(Widget    wid,
     }
 
     // TODO: probably the key to allowing default behaviour to happen. Say we
     }
 
     // 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
     // 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.
     // 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.
@@ -2359,7 +2214,7 @@ void wxUniversalRepaintProc(Widget w, XtPointer WXUNUSED(c_data), XEvent *event,
 // ----------------------------------------------------------------------------
 
 bool wxTranslateMouseEvent(wxMouseEvent& wxevent, wxWindow *win,
 // ----------------------------------------------------------------------------
 
 bool wxTranslateMouseEvent(wxMouseEvent& wxevent, wxWindow *win,
-                           Widget widget, XEvent *xevent)
+                           Widget widget, const XEvent *xevent)
 {
     switch (xevent->xany.type)
     {
 {
     switch (xevent->xany.type)
     {
@@ -2374,6 +2229,8 @@ bool wxTranslateMouseEvent(wxMouseEvent& wxevent, wxWindow *win,
         case ButtonRelease:
         case MotionNotify:
         {
         case ButtonRelease:
         case MotionNotify:
         {
+            int eventx = xevent->xbutton.x, eventy = xevent->xbutton.y;
+
             wxEventType eventType = wxEVT_NULL;
 
             if (xevent->xany.type == LeaveNotify)
             wxEventType eventType = wxEVT_NULL;
 
             if (xevent->xany.type == LeaveNotify)
@@ -2387,6 +2244,18 @@ bool wxTranslateMouseEvent(wxMouseEvent& wxevent, wxWindow *win,
             else if (xevent->xany.type == MotionNotify)
             {
                 eventType = wxEVT_MOTION;
             else if (xevent->xany.type == MotionNotify)
             {
                 eventType = wxEVT_MOTION;
+
+                if (xevent->xmotion.is_hint == NotifyHint)
+                {
+                    Window root, child;
+                    int x_root, y_root;
+                    unsigned int state;
+                    Display *dpy = XtDisplay (widget);
+
+                    XQueryPointer (dpy, XtWindow (widget),
+                        &root, &child,
+                        &x_root, &y_root, &eventx, &eventy, &state);
+                }
             }
             else if (xevent->xany.type == ButtonPress)
             {
             }
             else if (xevent->xany.type == ButtonPress)
             {
@@ -2448,11 +2317,11 @@ bool wxTranslateMouseEvent(wxMouseEvent& wxevent, wxWindow *win,
                     eventType = wxEVT_RIGHT_UP;
                 }
                 else
                     eventType = wxEVT_RIGHT_UP;
                 }
                 else
-                    return FALSE;
+                    return false;
             }
             else
             {
             }
             else
             {
-                return FALSE;
+                return false;
             }
 
             wxevent.SetEventType(eventType);
             }
 
             wxevent.SetEventType(eventType);
@@ -2463,7 +2332,7 @@ bool wxTranslateMouseEvent(wxMouseEvent& wxevent, wxWindow *win,
             int x2, y2;
             win->GetPosition(&x2, &y2);
 
             int x2, y2;
             win->GetPosition(&x2, &y2);
 
-            // The button x/y must be translated to wxWindows
+            // The button x/y must be translated to wxWidgets
             // window space - the widget might be a label or button,
             // within a form.
             int dx = 0;
             // window space - the widget might be a label or button,
             // within a form.
             int dx = 0;
@@ -2474,8 +2343,8 @@ bool wxTranslateMouseEvent(wxMouseEvent& wxevent, wxWindow *win,
                 dy = y1;
             }
 
                 dy = y1;
             }
 
-            wxevent.m_x = xevent->xbutton.x + dx;
-            wxevent.m_y = xevent->xbutton.y + dy;
+            wxevent.m_x = eventx + dx;
+            wxevent.m_y = eventy + dy;
 
             wxevent.m_leftDown = ((eventType == wxEVT_LEFT_DOWN)
                 || (event_left_is_down (xevent)
 
             wxevent.m_leftDown = ((eventType == wxEVT_LEFT_DOWN)
                 || (event_left_is_down (xevent)
@@ -2495,14 +2364,14 @@ bool wxTranslateMouseEvent(wxMouseEvent& wxevent, wxWindow *win,
             wxevent.SetId(win->GetId());
             wxevent.SetEventObject(win);
 
             wxevent.SetId(win->GetId());
             wxevent.SetEventObject(win);
 
-            return TRUE;
+            return true;
         }
     }
         }
     }
-    return FALSE;
+    return false;
 }
 
 bool wxTranslateKeyEvent(wxKeyEvent& wxevent, wxWindow *win,
 }
 
 bool wxTranslateKeyEvent(wxKeyEvent& wxevent, wxWindow *win,
-                         Widget WXUNUSED(widget), XEvent *xevent)
+                         Widget WXUNUSED(widget), const XEvent *xevent)
 {
     switch (xevent->xany.type)
     {
 {
     switch (xevent->xany.type)
     {
@@ -2520,13 +2389,13 @@ bool wxTranslateKeyEvent(wxKeyEvent& wxevent, wxWindow *win,
                 id = toupper(id);
 
             if (xevent->xkey.state & ShiftMask)
                 id = toupper(id);
 
             if (xevent->xkey.state & ShiftMask)
-                wxevent.m_shiftDown = TRUE;
+                wxevent.m_shiftDown = true;
             if (xevent->xkey.state & ControlMask)
             if (xevent->xkey.state & ControlMask)
-                wxevent.m_controlDown = TRUE;
+                wxevent.m_controlDown = true;
             if (xevent->xkey.state & Mod3Mask)
             if (xevent->xkey.state & Mod3Mask)
-                wxevent.m_altDown = TRUE;
+                wxevent.m_altDown = true;
             if (xevent->xkey.state & Mod1Mask)
             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);
             wxevent.SetEventObject(win);
             wxevent.m_keyCode = id;
             wxevent.SetTimestamp(xevent->xkey.time);
@@ -2535,15 +2404,15 @@ bool wxTranslateKeyEvent(wxKeyEvent& wxevent, wxWindow *win,
             wxevent.m_y = xevent->xbutton.y;
 
             if (id > -1)
             wxevent.m_y = xevent->xbutton.y;
 
             if (id > -1)
-                return TRUE;
+                return true;
             else
             else
-                return FALSE;
+                return false;
             break;
         }
     default:
         break;
     }
             break;
         }
     default:
         break;
     }
-    return FALSE;
+    return false;
 }
 
 // ----------------------------------------------------------------------------
 }
 
 // ----------------------------------------------------------------------------
@@ -2631,21 +2500,21 @@ void wxWindow::ChangeForegroundColour()
 bool wxWindow::SetBackgroundColour(const wxColour& col)
 {
     if ( !wxWindowBase::SetBackgroundColour(col) )
 bool wxWindow::SetBackgroundColour(const wxColour& col)
 {
     if ( !wxWindowBase::SetBackgroundColour(col) )
-        return FALSE;
+        return false;
 
     ChangeBackgroundColour();
 
 
     ChangeBackgroundColour();
 
-    return TRUE;
+    return true;
 }
 
 bool wxWindow::SetForegroundColour(const wxColour& col)
 {
     if ( !wxWindowBase::SetForegroundColour(col) )
 }
 
 bool wxWindow::SetForegroundColour(const wxColour& col)
 {
     if ( !wxWindowBase::SetForegroundColour(col) )
-        return FALSE;
+        return false;
 
     ChangeForegroundColour();
 
 
     ChangeForegroundColour();
 
-    return TRUE;
+    return true;
 }
 
 void wxWindow::ChangeFont(bool keepOriginalSize)
 }
 
 void wxWindow::ChangeFont(bool keepOriginalSize)