X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/66f8b9ace213e02e184460e0c1a212cacea27edd..8d36b2167df7e86ecfc58d148eaf6abe0a5b7971:/src/motif/window.cpp diff --git a/src/motif/window.cpp b/src/motif/window.cpp index 17b3de81b2..feda98f8ec 100644 --- a/src/motif/window.cpp +++ b/src/motif/window.cpp @@ -17,10 +17,13 @@ // headers // ---------------------------------------------------------------------------- -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #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 @@ -51,7 +54,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) @@ -145,7 +148,6 @@ static int str16len(const char *s) BEGIN_EVENT_TABLE(wxWindow, wxWindowBase) EVT_SYS_COLOUR_CHANGED(wxWindow::OnSysColourChanged) - EVT_IDLE(wxWindow::OnIdle) END_EVENT_TABLE() // ============================================================================ @@ -170,12 +172,7 @@ bool wxWindow::MapOrUnmap(WXWidget widget, bool domap) { Widget w = (Widget)widget; if ( !w ) - return FALSE; - - if ( domap ) - XtMapWidget(w); - else - XtUnmapWidget(w); + return false; // Rationale: a lot of common operations (including but not // limited to moving, resizing and appending items to a listbox) @@ -184,7 +181,20 @@ bool wxWindow::MapOrUnmap(WXWidget widget, bool domap) // or that most controls are shown every time they are moved or resized! XtSetMappedWhenManaged( w, domap ); - return TRUE; + // if the widget is not unmanaged, it still intercepts + // mouse events, even if it is not mapped (and hence invisible) + if ( domap ) + { + XtManageChild(w); + // XtMapWidget(w); + } + else + { + XtUnmanageChild(w); + // XtUnmapWidget(w); + } + + return true; } // ---------------------------------------------------------------------------- @@ -193,21 +203,13 @@ bool wxWindow::MapOrUnmap(WXWidget widget, bool domap) void wxWindow::Init() { - // generic initializations first - InitBase(); - // Motif-specific - m_needsRefresh = TRUE; + m_needsRefresh = true; m_mainWidget = (WXWidget) 0; - m_button1Pressed = - m_button2Pressed = - m_button3Pressed = FALSE; - - m_winCaptured = FALSE; + m_winCaptured = false; - m_isShown = TRUE; - m_isBeingDeleted = FALSE; + m_isShown = true; m_hScrollBar = m_vScrollBar = @@ -215,9 +217,6 @@ void wxWindow::Init() m_scrolledWindow = m_drawingArea = (WXWidget) 0; - m_hScroll = - m_vScroll = FALSE; - m_scrollPosX = m_scrollPosY = 0; @@ -230,7 +229,6 @@ void wxWindow::Init() m_lastTS = 0; m_lastButton = 0; - m_canAddEventHandler = FALSE; } // real construction (Init() must have been called before!) @@ -240,7 +238,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); @@ -277,36 +275,7 @@ bool wxWindow::Create(wxWindow *parent, wxWindowID id, XtAppAddActions ((XtAppContext) wxTheApp->GetAppContext(), actions, 1); Widget parentWidget = (Widget) parent->GetClientWidget(); - - if (style & wxSIMPLE_BORDER) - { - m_borderWidget = (WXWidget)XtVaCreateManagedWidget - ( - "canvasBorder", - xmFrameWidgetClass, parentWidget, - XmNshadowType, XmSHADOW_IN, - XmNshadowThickness, 1, - NULL - ); - } else if (style & wxSUNKEN_BORDER) - { - m_borderWidget = (WXWidget)XtVaCreateManagedWidget - ( - "canvasBorder", - xmFrameWidgetClass, parentWidget, - XmNshadowType, XmSHADOW_IN, - NULL - ); - } else if (style & wxRAISED_BORDER) - { - m_borderWidget = (WXWidget)XtVaCreateManagedWidget - ( - "canvasBorder", - xmFrameWidgetClass, parentWidget, - XmNshadowType, XmSHADOW_OUT, - NULL - ); - } + m_borderWidget = wxCreateBorderWidget( (WXWidget)parentWidget, style ); m_scrolledWindow = (WXWidget)XtVaCreateManagedWidget ( @@ -360,12 +329,6 @@ bool wxWindow::Create(wxWindow *parent, wxWindowID id, XtAddCallback ((Widget) m_drawingArea, XmNexposeCallback, (XtCallbackProc) wxCanvasRepaintProc, (XtPointer) this); XtAddCallback ((Widget) m_drawingArea, XmNinputCallback, (XtCallbackProc) wxCanvasInputEvent, (XtPointer) this); - // TODO? -#if 0 - display = XtDisplay (scrolledWindow); - xwindow = XtWindow (drawingArea); -#endif // 0 - XtAddEventHandler( (Widget)m_drawingArea, PointerMotionHintMask | EnterWindowMask | @@ -378,27 +341,20 @@ 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); - DoChangeBackgroundColour(m_scrolledWindow, backgroundColour, TRUE); - DoChangeBackgroundColour(m_drawingArea, backgroundColour, TRUE); + wxDoChangeBackgroundColour(m_scrolledWindow, backgroundColour, true); + wxDoChangeBackgroundColour(m_drawingArea, backgroundColour, true); XmScrolledWindowSetAreas( (Widget)m_scrolledWindow, (Widget) 0, (Widget) 0, (Widget) m_drawingArea); -#if 0 - if (m_hScrollBar) - XtRealizeWidget ((Widget) m_hScrollBar); - if (m_vScrollBar) - XtRealizeWidget ((Widget) m_vScrollBar); -#endif // 0 - // Without this, the cursor may not be restored properly (e.g. in splitter // 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 @@ -407,7 +363,7 @@ wxWindow::~wxWindow() if (g_captureWindow == this) g_captureWindow = NULL; - m_isBeingDeleted = TRUE; + m_isBeingDeleted = true; // Motif-specific actions first WXWidget wMain = GetMainWidget(); @@ -417,11 +373,6 @@ wxWindow::~wxWindow() DetachWidget(wMain); } - ClearUpdateRects(); - - if ( m_parent ) - m_parent->RemoveChild( this ); - // If m_drawingArea, we're a fully-fledged window with drawing area, // scrollbars etc. (what wxCanvas used to be) if ( m_drawingArea ) @@ -498,126 +449,107 @@ wxWindow::~wxWindow() // scrollbar management // ---------------------------------------------------------------------------- +WXWidget wxWindow::DoCreateScrollBar(WXWidget parent, + wxOrientation orientation, + void (*callback)()) +{ + int orient = ( orientation & wxHORIZONTAL ) ? XmHORIZONTAL : XmVERTICAL; + Widget sb = + XtVaCreateManagedWidget( "scrollBarWidget", + xmScrollBarWidgetClass, (Widget)parent, + XmNorientation, orient, + XmNincrement, 1, + XmNvalue, 0, + NULL ); + + XtPointer o = (XtPointer)orientation; + XtCallbackProc cb = (XtCallbackProc)callback; + + XtAddCallback( sb, XmNvalueChangedCallback, cb, o ); + XtAddCallback( sb, XmNdragCallback, cb, o ); + XtAddCallback( sb, XmNincrementCallback, cb, o ); + XtAddCallback( sb, XmNdecrementCallback, cb, o ); + XtAddCallback( sb, XmNpageIncrementCallback, cb, o ); + XtAddCallback( sb, XmNpageDecrementCallback, cb, o ); + XtAddCallback( sb, XmNtoTopCallback, cb, o ); + XtAddCallback( sb, XmNtoBottomCallback, cb, o ); + + return (WXWidget)sb; +} + // Helper function void wxWindow::CreateScrollbar(wxOrientation orientation) { wxCHECK_RET( m_drawingArea, "this window can't have scrollbars" ); - XtVaSetValues((Widget) m_scrolledWindow, XmNresizePolicy, XmRESIZE_NONE, NULL); + XtVaSetValues( (Widget) m_scrolledWindow, + XmNresizePolicy, XmRESIZE_NONE, + NULL ); + wxColour backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE); // Add scrollbars if required if (orientation == wxHORIZONTAL) { - Widget hScrollBar = XtVaCreateManagedWidget ("hsb", - xmScrollBarWidgetClass, (Widget) m_scrolledWindow, - XmNorientation, XmHORIZONTAL, - NULL); - XtAddCallback (hScrollBar, XmNvalueChangedCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmHORIZONTAL); - XtAddCallback (hScrollBar, XmNdragCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmHORIZONTAL); - XtAddCallback (hScrollBar, XmNincrementCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmHORIZONTAL); - XtAddCallback (hScrollBar, XmNdecrementCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmHORIZONTAL); - XtAddCallback (hScrollBar, XmNpageIncrementCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmHORIZONTAL); - XtAddCallback (hScrollBar, XmNpageDecrementCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmHORIZONTAL); - XtAddCallback (hScrollBar, XmNtoTopCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmHORIZONTAL); - XtAddCallback (hScrollBar, XmNtoBottomCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmHORIZONTAL); - - XtVaSetValues (hScrollBar, - XmNincrement, 1, - XmNvalue, 0, - NULL); - - m_hScrollBar = (WXWidget) hScrollBar; + m_hScrollBar = DoCreateScrollBar( m_scrolledWindow, wxHORIZONTAL, + (void (*)())wxScrollBarCallback ); - wxColour backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE); - DoChangeBackgroundColour(m_hScrollBar, backgroundColour, TRUE); + wxDoChangeBackgroundColour(m_hScrollBar, backgroundColour, true); - XtRealizeWidget(hScrollBar); + XtRealizeWidget( (Widget)m_hScrollBar ); XtVaSetValues((Widget) m_scrolledWindow, XmNhorizontalScrollBar, (Widget) m_hScrollBar, NULL); - m_hScroll = TRUE; - - wxAddWindowToTable( hScrollBar, this ); + wxAddWindowToTable( (Widget)m_hScrollBar, this ); } - - if (orientation == wxVERTICAL) + else if (orientation == wxVERTICAL) { - Widget vScrollBar = XtVaCreateManagedWidget ("vsb", - xmScrollBarWidgetClass, (Widget) m_scrolledWindow, - XmNorientation, XmVERTICAL, - NULL); - XtAddCallback (vScrollBar, XmNvalueChangedCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmVERTICAL); - XtAddCallback (vScrollBar, XmNdragCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmVERTICAL); - XtAddCallback (vScrollBar, XmNincrementCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmVERTICAL); - XtAddCallback (vScrollBar, XmNdecrementCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmVERTICAL); - XtAddCallback (vScrollBar, XmNpageIncrementCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmVERTICAL); - XtAddCallback (vScrollBar, XmNpageDecrementCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmVERTICAL); - XtAddCallback (vScrollBar, XmNtoTopCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmVERTICAL); - XtAddCallback (vScrollBar, XmNtoBottomCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmVERTICAL); - - XtVaSetValues (vScrollBar, - XmNincrement, 1, - XmNvalue, 0, - NULL); + m_vScrollBar = DoCreateScrollBar( m_scrolledWindow, wxVERTICAL, + (void (*)())wxScrollBarCallback ); - m_vScrollBar = (WXWidget) vScrollBar; - wxColour backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE); - DoChangeBackgroundColour(m_vScrollBar, backgroundColour, TRUE); + wxDoChangeBackgroundColour(m_vScrollBar, backgroundColour, true); - XtRealizeWidget(vScrollBar); + XtRealizeWidget((Widget)m_vScrollBar); XtVaSetValues((Widget) m_scrolledWindow, XmNverticalScrollBar, (Widget) m_vScrollBar, NULL); - m_vScroll = TRUE; - - wxAddWindowToTable( vScrollBar, this ); + wxAddWindowToTable( (Widget)m_vScrollBar, this ); } - XtVaSetValues((Widget) m_scrolledWindow, XmNresizePolicy, XmRESIZE_ANY, NULL); + XtVaSetValues( (Widget) m_scrolledWindow, + XmNresizePolicy, XmRESIZE_ANY, + NULL ); } void wxWindow::DestroyScrollbar(wxOrientation orientation) { wxCHECK_RET( m_drawingArea, "this window can't have scrollbars" ); - XtVaSetValues((Widget) m_scrolledWindow, XmNresizePolicy, XmRESIZE_NONE, NULL); - // Add scrollbars if required - if (orientation == wxHORIZONTAL) - { - if (m_hScrollBar) - { - wxDeleteWindowFromTable((Widget)m_hScrollBar); - XtDestroyWidget((Widget) m_hScrollBar); - } - m_hScrollBar = (WXWidget) 0; - m_hScroll = FALSE; + XtVaSetValues((Widget) m_scrolledWindow, + XmNresizePolicy, XmRESIZE_NONE, + NULL); + String stringSB = orientation == wxHORIZONTAL ? + XmNhorizontalScrollBar : XmNverticalScrollBar; + WXWidget* widgetSB = orientation == wxHORIZONTAL ? + &m_hScrollBar : &m_vScrollBar; - XtVaSetValues((Widget) m_scrolledWindow, - XmNhorizontalScrollBar, (Widget) 0, - NULL); - - } - - if (orientation == wxVERTICAL) + if( *widgetSB ) { - if (m_vScrollBar) - { - wxDeleteWindowFromTable((Widget)m_vScrollBar); - XtDestroyWidget((Widget) m_vScrollBar); - } - m_vScrollBar = (WXWidget) 0; - m_vScroll = FALSE; + wxDeleteWindowFromTable( (Widget)*widgetSB ); + XtDestroyWidget( (Widget)*widgetSB ); + *widgetSB = (WXWidget)NULL; + } - XtVaSetValues((Widget) m_scrolledWindow, - XmNverticalScrollBar, (Widget) 0, - NULL); + XtVaSetValues( (Widget)m_scrolledWindow, + stringSB, (Widget) 0, + NULL ); - } - XtVaSetValues((Widget) m_scrolledWindow, XmNresizePolicy, XmRESIZE_ANY, NULL); + XtVaSetValues((Widget) m_scrolledWindow, + XmNresizePolicy, XmRESIZE_ANY, + NULL); } // --------------------------------------------------------------------------- @@ -632,7 +564,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? @@ -641,7 +573,7 @@ wxWindow *wxWindowBase::FindFocus() // (2) The widget with the focus may not be in the widget table // depending on which widgets I put in the table wxWindow *winFocus = (wxWindow *)NULL; - for ( wxWindowList::Node *node = wxTopLevelWindows.GetFirst(); + for ( wxWindowList::compatibility_iterator node = wxTopLevelWindows.GetFirst(); node; node = node->GetNext() ) { @@ -663,7 +595,7 @@ wxWindow *wxWindowBase::FindFocus() bool wxWindow::Enable(bool enable) { if ( !wxWindowBase::Enable(enable) ) - return FALSE; + return false; Widget wMain = (Widget)GetMainWidget(); if ( wMain ) @@ -672,18 +604,18 @@ 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) { - MapOrUnmap(m_drawingArea, show); MapOrUnmap(m_borderWidget ? m_borderWidget : m_scrolledWindow, show); + // MapOrUnmap(m_drawingArea, show); } else { @@ -691,7 +623,7 @@ bool wxWindow::Show(bool show) MapOrUnmap(GetMainWidget(), show); } - return TRUE; + return true; } // Raise the window to the top of the Z order @@ -731,9 +663,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() @@ -746,7 +678,7 @@ void wxWindow::DoReleaseMouse() if ( wMain ) XtRemoveGrab(wMain); - m_winCaptured = FALSE; + m_winCaptured = false; } bool wxWindow::SetFont(const wxFont& font) @@ -754,12 +686,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) @@ -767,7 +699,7 @@ bool wxWindow::SetCursor(const wxCursor& cursor) if ( !wxWindowBase::SetCursor(cursor) ) { // no change - return FALSE; + return false; } // wxASSERT_MSG( m_cursor.Ok(), @@ -785,7 +717,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 @@ -825,7 +757,9 @@ int wxWindow::GetScrollPos(int orient) const 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) @@ -836,10 +770,11 @@ int wxWindow::GetScrollRange(int orient) const 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; } @@ -964,11 +899,11 @@ 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? - wxWindowList::Node *cnode = m_children.GetFirst(); + wxWindowList::compatibility_iterator cnode = m_children.GetFirst(); while (cnode) { wxWindow *child = cnode->GetData(); @@ -1064,7 +999,7 @@ void wxWindow::ScrollWindow(int dx, int dy, const wxRect *rect) // Now send expose events - wxList::Node* node = updateRects.GetFirst(); + wxList::compatibility_iterator node = updateRects.GetFirst(); while (node) { wxRect* rect = (wxRect*) node->GetData(); @@ -1140,6 +1075,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 @@ -1150,11 +1091,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 */ @@ -1217,7 +1158,7 @@ bool wxWindow::DoPopupMenu(wxMenu *menu, int x, int y) wxDoEventLoopIteration( evtLoop ); } - return TRUE; + return true; } #endif @@ -1228,7 +1169,7 @@ bool wxWindow::DoPopupMenu(wxMenu *menu, int x, int y) bool wxWindow::PreResize() { - return TRUE; + return true; } // Get total size @@ -1309,7 +1250,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, @@ -1431,13 +1372,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) { @@ -1475,6 +1409,7 @@ void wxWindow::DoMoveWindowIntr(int xx, int yy, int w, int h, w -= 2 * (thick + margin); } + if( w < 1 ) w = 1; XtVaSetValues ((Widget) m_scrolledWindow, XmNwidth, w, NULL); } @@ -1491,6 +1426,7 @@ void wxWindow::DoMoveWindowIntr(int xx, int yy, int w, int h, h -= 2 * (thick + margin); } + if( h < 1 ) h = 1; XtVaSetValues ((Widget) m_scrolledWindow, XmNheight, h, NULL); } @@ -1592,9 +1528,14 @@ void wxWindow::GetTextExtent(const wxString& string, // painting // ---------------------------------------------------------------------------- +void wxWindow::AddUpdateRect(int x, int y, int w, int h) +{ + m_updateRegion.Union( x, y, w, 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()); @@ -1636,27 +1577,6 @@ void wxWindow::Refresh(bool eraseBack, const wxRect *rect) XSendEvent(display, thisWindow, False, ExposureMask, (XEvent *)&dummyEvent); } -void wxWindow::Clear() -{ - wxClientDC dc(this); - wxBrush brush(GetBackgroundColour(), wxSOLID); - dc.SetBackground(brush); - dc.Clear(); -} - -void wxWindow::ClearUpdateRects() -{ - wxRectList::Node* node = m_updateRects.GetFirst(); - while (node) - { - wxRect* rect = node->GetData(); - delete rect; - node = node->GetNext(); - } - - m_updateRects.Clear(); -} - void wxWindow::DoPaint() { //TODO : make a temporary gc so we can do the XCopyArea below @@ -1675,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 - // implement backing stores itself, using generic wxWindows code. + // implement backing stores itself, using generic wxWidgets code. wxScrolledWindow* scrolledWindow = wxDynamicCast(this, wxScrolledWindow); if ( scrolledWindow ) { @@ -1727,7 +1647,7 @@ void wxWindow::DoPaint() event.SetEventObject(this); GetEventHandler()->ProcessEvent(event); - m_needsRefresh = FALSE; + m_needsRefresh = false; } } @@ -1738,7 +1658,7 @@ void wxWindow::DoPaint() // Responds to colour changes: passes event on to children. void wxWindow::OnSysColourChanged(wxSysColourChangedEvent& event) { - wxWindowList::Node *node = GetChildren().GetFirst(); + wxWindowList::compatibility_iterator node = GetChildren().GetFirst(); while ( node ) { // Only propagate to non-top-level windows @@ -1746,7 +1666,7 @@ void wxWindow::OnSysColourChanged(wxSysColourChangedEvent& event) if ( win->GetParent() ) { wxSysColourChangedEvent event2; - event.m_eventObject = win; + event.SetEventObject(win); win->GetEventHandler()->ProcessEvent(event2); } @@ -1754,11 +1674,12 @@ void wxWindow::OnSysColourChanged(wxSysColourChangedEvent& event) } } -void wxWindow::OnIdle(wxIdleEvent& WXUNUSED(event)) +void wxWindow::OnInternalIdle() { // This calls the UI-update mechanism (querying windows for // menu/toolbar/control state information) - UpdateWindowUI(); + if (wxUpdateUIEvent::CanUpdate(this)) + UpdateWindowUI(wxUPDATE_UI_FROMIDLE); } // ---------------------------------------------------------------------------- @@ -1769,7 +1690,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(); @@ -1789,7 +1710,7 @@ bool wxWindow::ProcessAccelerator(wxKeyEvent& event) parent = parent->GetParent(); if (!parent) - return FALSE; + return false; wxFrame* frame = wxDynamicCast(parent, wxFrame); if ( frame ) @@ -1804,7 +1725,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); } @@ -1817,7 +1738,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. @@ -1828,13 +1749,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; } // ============================================================================ @@ -1842,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) @@ -1852,7 +1773,7 @@ bool wxAddWindowToTable(Widget w, wxWindow *win) { wxLogDebug("Widget table clash: new widget is %ld, %s", (long)w, win->GetClassInfo()->GetClassName()); - return FALSE; + return false; } wxWidgetHashTable->Put((long) w, win); @@ -1860,7 +1781,7 @@ bool wxAddWindowToTable(Widget w, wxWindow *win) wxLogTrace("widget", "Widget 0x%p <-> window %p (%s)", (WXWidget)w, win, win->GetClassInfo()->GetClassName()); - return TRUE; + return true; } wxWindow *wxGetWindowFromTable(Widget w) @@ -1884,14 +1805,12 @@ bool wxWindow::AttachWidget (wxWindow* WXUNUSED(parent), WXWidget mainWidget, WXWidget formWidget, int x, int y, int width, int height) { wxAddWindowToTable((Widget) mainWidget, this); - if (CanAddEventHandler()) - { - XtAddEventHandler((Widget) mainWidget, - ButtonPressMask | ButtonReleaseMask | PointerMotionMask, // | KeyPressMask, - False, - wxPanelItemEventHandler, - (XtPointer) this); - } + XtAddEventHandler( (Widget) mainWidget, + ButtonPressMask | ButtonReleaseMask + | PointerMotionMask, + False, + wxPanelItemEventHandler, + (XtPointer) this); if (!formWidget) { @@ -1905,7 +1824,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, @@ -1925,23 +1844,30 @@ bool wxWindow::AttachWidget (wxWindow* WXUNUSED(parent), WXWidget mainWidget, // Remove event handler, remove from hash table bool wxWindow::DetachWidget(WXWidget widget) { - if (CanAddEventHandler()) - { - XtRemoveEventHandler((Widget) widget, - ButtonPressMask | ButtonReleaseMask | PointerMotionMask, // | KeyPressMask, - False, - wxPanelItemEventHandler, - (XtPointer)this); - } + XtRemoveEventHandler( (Widget) widget, + ButtonPressMask | ButtonReleaseMask + | PointerMotionMask, + False, + wxPanelItemEventHandler, + (XtPointer)this); wxDeleteWindowFromTable((Widget) widget); - return TRUE; + return true; } // ---------------------------------------------------------------------------- // Motif-specific accessors // ---------------------------------------------------------------------------- +WXWindow wxWindow::GetClientXWindow() const +{ + Widget wMain = (Widget)GetClientWidget(); + if ( wMain ) + return (WXWindow) XtWindow(wMain); + else + return (WXWindow) 0; +} + // Get the underlying X window WXWindow wxWindow::GetXWindow() const { @@ -2027,11 +1953,10 @@ static void wxCanvasRepaintProc(Widget drawingArea, { win->AddUpdateRect(event->xexpose.x, event->xexpose.y, event->xexpose.width, event->xexpose.height); - + if (event -> xexpose.count == 0) { win->DoPaint(); - win->ClearUpdateRects(); } break; } @@ -2075,7 +2000,7 @@ static void wxCanvasInputEvent(Widget drawingArea, XmDrawingAreaCallbackStruct * cbs) { wxWindow *canvas = wxGetWindowFromTable(drawingArea); - XEvent local_event; + XEvent* xevent = cbs->event; if (canvas==NULL) return; @@ -2083,9 +2008,7 @@ static void wxCanvasInputEvent(Widget drawingArea, 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: @@ -2093,171 +2016,17 @@ static void wxCanvasInputEvent(Widget drawingArea, 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) - { - //if (local_event.xcrossing.mode!=NotifyNormal) - // return ; // Ignore grab events - eventType = wxEVT_ENTER_WINDOW; - // canvas->GetEventHandler()->OnSetFocus(); - } - 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; - canvas->SetButton1(TRUE); - } - else if (local_event.xbutton.button == Button2) - { - eventType = wxEVT_MIDDLE_DOWN; - canvas->SetButton2(TRUE); - } - else if (local_event.xbutton.button == Button3) - { - eventType = wxEVT_RIGHT_DOWN; - canvas->SetButton3(TRUE); - } - } - else if (local_event.xany.type == ButtonRelease) - { - if (local_event.xbutton.button == Button1) - { - eventType = wxEVT_LEFT_UP; - canvas->SetButton1(FALSE); - } - else if (local_event.xbutton.button == Button2) - { - eventType = wxEVT_MIDDLE_UP; - canvas->SetButton2(FALSE); - } - else if (local_event.xbutton.button == Button3) - { - eventType = wxEVT_RIGHT_UP; - canvas->SetButton3(FALSE); - } - } - - 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) + wxMouseEvent wxevent(0); + if (wxTranslateMouseEvent(wxevent, canvas, drawingArea, xevent)) { - 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); - } - } + canvas->GetEventHandler()->ProcessEvent(wxevent); } - - 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; - } + } 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; @@ -2287,7 +2056,7 @@ static void wxCanvasInputEvent(Widget drawingArea, 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); } @@ -2295,7 +2064,7 @@ static void wxCanvasInputEvent(Widget drawingArea, } case FocusIn: { - if (local_event.xfocus.detail != NotifyPointer) + if (xevent->xfocus.detail != NotifyPointer) { wxFocusEvent event(wxEVT_SET_FOCUS, canvas->GetId()); event.SetEventObject(canvas); @@ -2305,7 +2074,7 @@ static void wxCanvasInputEvent(Widget drawingArea, } case FocusOut: { - if (local_event.xfocus.detail != NotifyPointer) + if (xevent->xfocus.detail != NotifyPointer) { wxFocusEvent event(wxEVT_KILL_FOCUS, canvas->GetId()); event.SetEventObject(canvas); @@ -2336,9 +2105,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. @@ -2350,7 +2119,7 @@ static void wxScrollBarCallback(Widget scrollbar, XmScrollBarCallbackStruct *cbs) { wxWindow *win = wxGetWindowFromTable(scrollbar); - int orientation = (int) clientData; + wxOrientation orientation = (wxOrientation)(int)clientData; wxEventType eventType = wxEVT_NULL; switch (cbs->reason) @@ -2405,8 +2174,7 @@ static void wxScrollBarCallback(Widget scrollbar, wxScrollWinEvent event(eventType, cbs->value, - ((orientation == XmHORIZONTAL) ? - wxHORIZONTAL : wxVERTICAL)); + orientation); event.SetEventObject( win ); win->GetEventHandler()->ProcessEvent(event); } @@ -2428,16 +2196,12 @@ void wxUniversalRepaintProc(Widget w, XtPointer WXUNUSED(c_data), XEvent *event, 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) { win->DoPaint(); - - win->ClearUpdateRects(); - } - else - { - win->AddUpdateRect(event->xexpose.x, event->xexpose.y, - event->xexpose.width, event->xexpose.height); } break; @@ -2449,30 +2213,49 @@ void wxUniversalRepaintProc(Widget w, XtPointer WXUNUSED(c_data), XEvent *event, // TranslateXXXEvent() functions // ---------------------------------------------------------------------------- -bool wxTranslateMouseEvent(wxMouseEvent& wxevent, wxWindow *win, Widget widget, XEvent *xevent) +bool wxTranslateMouseEvent(wxMouseEvent& wxevent, wxWindow *win, + Widget widget, const XEvent *xevent) { switch (xevent->xany.type) { - case EnterNotify: // never received here - yes ? MB - case LeaveNotify: // never received here - yes ? MB + case EnterNotify: + case LeaveNotify: +#if 0 + fprintf(stderr, "Widget 0x%p <-> window %p (%s), %s\n", + (WXWidget)widget, win, win->GetClassInfo()->GetClassName(), + (xevent->xany.type == EnterNotify ? "ENTER" : "LEAVE")); +#endif case ButtonPress: case ButtonRelease: case MotionNotify: { + int eventx = xevent->xbutton.x, eventy = xevent->xbutton.y; + wxEventType eventType = wxEVT_NULL; - // FIXME: this is never true I think - MB - // if (xevent->xany.type == LeaveNotify) { - win->SetButton1(FALSE); - win->SetButton2(FALSE); - win->SetButton3(FALSE); - return FALSE; + eventType = wxEVT_LEAVE_WINDOW; + } + if (xevent->xany.type == EnterNotify) + { + eventType = wxEVT_ENTER_WINDOW; } 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) { @@ -2481,30 +2264,28 @@ bool wxTranslateMouseEvent(wxMouseEvent& wxevent, wxWindow *win, Widget widget, if (xevent->xbutton.button == Button1) { eventType = wxEVT_LEFT_DOWN; - win->SetButton1(TRUE); button = 1; } else if (xevent->xbutton.button == Button2) { eventType = wxEVT_MIDDLE_DOWN; - win->SetButton2(TRUE); button = 2; } else if (xevent->xbutton.button == Button3) { eventType = wxEVT_RIGHT_DOWN; - win->SetButton3(TRUE); button = 3; } // check for a double click // - long dclickTime = XtGetMultiClickTime((Display*) wxGetDisplay()); + long dclickTime = XtGetMultiClickTime(xevent->xany.display); long ts = wxevent.GetTimestamp(); int buttonLast = win->GetLastClickedButton(); long lastTS = win->GetLastClickTime(); - if ( buttonLast && buttonLast == button && (ts - lastTS) < dclickTime ) + if ( buttonLast && buttonLast == button && + (ts - lastTS) < dclickTime ) { // I have a dclick win->SetLastClick(0, ts); @@ -2526,23 +2307,21 @@ bool wxTranslateMouseEvent(wxMouseEvent& wxevent, wxWindow *win, Widget widget, if (xevent->xbutton.button == Button1) { eventType = wxEVT_LEFT_UP; - win->SetButton1(FALSE); } else if (xevent->xbutton.button == Button2) { eventType = wxEVT_MIDDLE_UP; - win->SetButton2(FALSE); } else if (xevent->xbutton.button == Button3) { eventType = wxEVT_RIGHT_UP; - win->SetButton3(FALSE); } - else return FALSE; + else + return false; } else { - return FALSE; + return false; } wxevent.SetEventType(eventType); @@ -2553,7 +2332,7 @@ bool wxTranslateMouseEvent(wxMouseEvent& wxevent, wxWindow *win, Widget widget, 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; @@ -2564,8 +2343,8 @@ bool wxTranslateMouseEvent(wxMouseEvent& wxevent, wxWindow *win, Widget widget, 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) @@ -2585,14 +2364,14 @@ bool wxTranslateMouseEvent(wxMouseEvent& wxevent, wxWindow *win, Widget widget, wxevent.SetId(win->GetId()); wxevent.SetEventObject(win); - return TRUE; + return true; } } - return FALSE; + return false; } bool wxTranslateKeyEvent(wxKeyEvent& wxevent, wxWindow *win, - Widget WXUNUSED(widget), XEvent *xevent) + Widget WXUNUSED(widget), const XEvent *xevent) { switch (xevent->xany.type) { @@ -2610,13 +2389,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); @@ -2625,15 +2404,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; } // ---------------------------------------------------------------------------- @@ -2706,50 +2485,36 @@ void wxWindow::ChangeBackgroundColour() { WXWidget mainWidget = GetMainWidget(); if ( mainWidget ) - DoChangeBackgroundColour(mainWidget, m_backgroundColour); + wxDoChangeBackgroundColour(mainWidget, m_backgroundColour); } void wxWindow::ChangeForegroundColour() { WXWidget mainWidget = GetMainWidget(); if ( mainWidget ) - DoChangeForegroundColour(mainWidget, m_foregroundColour); + wxDoChangeForegroundColour(mainWidget, m_foregroundColour); if ( m_scrolledWindow && mainWidget != m_scrolledWindow ) - DoChangeForegroundColour(m_scrolledWindow, m_foregroundColour); -} - -// Change a widget's foreground and background colours. -void wxWindow::DoChangeForegroundColour(WXWidget widget, - wxColour& foregroundColour) -{ - wxDoChangeForegroundColour( widget, foregroundColour ); -} - -void wxWindow::DoChangeBackgroundColour(WXWidget widget, - wxColour& backgroundColour, - bool changeArmColour) -{ - wxDoChangeBackgroundColour( widget, backgroundColour, changeArmColour ); + wxDoChangeForegroundColour(m_scrolledWindow, m_foregroundColour); } 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) @@ -2801,7 +2566,7 @@ wxWindow* wxFindWindowAtPointer(wxPoint& pt) // Get the current mouse position. wxPoint wxGetMousePosition() { - Display *display = (Display*) wxGetDisplay(); + Display *display = wxGlobalDisplay(); Window rootWindow = RootWindowOfScreen (DefaultScreenOfDisplay(display)); Window rootReturn, childReturn; int rootX, rootY, winX, winY;