X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/28169f14ec80f07874464412c72d7523a7768d81..785f5eaa05195f5e44a974861864324667a3326e:/src/motif/window.cpp diff --git a/src/motif/window.cpp b/src/motif/window.cpp index 855d4e1785..a50692831c 100644 --- a/src/motif/window.cpp +++ b/src/motif/window.cpp @@ -17,7 +17,7 @@ // headers // ---------------------------------------------------------------------------- -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "window.h" #endif @@ -145,7 +145,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() // ============================================================================ @@ -172,26 +171,26 @@ bool wxWindow::MapOrUnmap(WXWidget widget, bool domap) if ( !w ) return FALSE; + // Rationale: a lot of common operations (including but not + // limited to moving, resizing and appending items to a listbox) + // unmamange the widget, do their work, then manage it again. + // This means that, for example adding an item to a listbox will show it, + // or that most controls are shown every time they are moved or resized! + XtSetMappedWhenManaged( w, domap ); + // 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); + // XtMapWidget(w); } else { - XtUnmapWidget(w); XtUnmanageChild(w); + // XtUnmapWidget(w); } - // Rationale: a lot of common operations (including but not - // limited to moving, resizing and appending items to a listbox) - // unmamange the widget, do their work, then manage it again. - // This means that, for example adding an item to a listbox will show it, - // or that most controls are shown every time they are moved or resized! - XtSetMappedWhenManaged( w, domap ); - return TRUE; } @@ -201,9 +200,6 @@ bool wxWindow::MapOrUnmap(WXWidget widget, bool domap) void wxWindow::Init() { - // generic initializations first - InitBase(); - // Motif-specific m_needsRefresh = TRUE; m_mainWidget = (WXWidget) 0; @@ -211,7 +207,6 @@ void wxWindow::Init() m_winCaptured = FALSE; m_isShown = TRUE; - m_isBeingDeleted = FALSE; m_hScrollBar = m_vScrollBar = @@ -277,36 +272,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 +326,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 | @@ -386,13 +346,6 @@ bool wxWindow::Create(wxWindow *parent, wxWindowID id, (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); @@ -417,11 +370,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,120 +446,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); wxDoChangeBackgroundColour(m_hScrollBar, backgroundColour, TRUE); - XtRealizeWidget(hScrollBar); + XtRealizeWidget( (Widget)m_hScrollBar ); XtVaSetValues((Widget) m_scrolledWindow, XmNhorizontalScrollBar, (Widget) m_hScrollBar, NULL); - 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); wxDoChangeBackgroundColour(m_vScrollBar, backgroundColour, TRUE); - XtRealizeWidget(vScrollBar); + XtRealizeWidget((Widget)m_vScrollBar); XtVaSetValues((Widget) m_scrolledWindow, XmNverticalScrollBar, (Widget) m_vScrollBar, NULL); - 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; + 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; + 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); } // --------------------------------------------------------------------------- @@ -635,7 +570,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() ) { @@ -676,8 +611,8 @@ bool wxWindow::Show(bool show) if (m_borderWidget || m_scrolledWindow) { - MapOrUnmap(m_drawingArea, show); MapOrUnmap(m_borderWidget ? m_borderWidget : m_scrolledWindow, show); + // MapOrUnmap(m_drawingArea, show); } else { @@ -962,7 +897,7 @@ void wxWindow::ScrollWindow(int dx, int dy, const wxRect *rect) 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(); @@ -1058,7 +993,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(); @@ -1469,6 +1404,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); } @@ -1485,6 +1421,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); } @@ -1586,6 +1523,11 @@ 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; @@ -1630,27 +1572,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 @@ -1732,7 +1653,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 @@ -1748,11 +1669,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); } // ---------------------------------------------------------------------------- @@ -1932,6 +1854,15 @@ bool wxWindow::DetachWidget(WXWidget widget) // 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 { @@ -2017,11 +1948,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; } @@ -2065,7 +1995,7 @@ static void wxCanvasInputEvent(Widget drawingArea, XmDrawingAreaCallbackStruct * cbs) { wxWindow *canvas = wxGetWindowFromTable(drawingArea); - XEvent local_event; + XEvent* xevent = cbs->event; if (canvas==NULL) return; @@ -2073,27 +2003,25 @@ 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: case ButtonPress: case ButtonRelease: case MotionNotify: - { - wxMouseEvent wxevent; - if(wxTranslateMouseEvent(wxevent, canvas, drawingArea, &local_event)) { - canvas->GetEventHandler()->ProcessEvent(wxevent); + wxMouseEvent wxevent(0); + if (wxTranslateMouseEvent(wxevent, canvas, drawingArea, xevent)) + { + canvas->GetEventHandler()->ProcessEvent(wxevent); + } + break; } - 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; @@ -2123,7 +2051,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); } @@ -2131,7 +2059,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); @@ -2141,7 +2069,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); @@ -2186,7 +2114,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) @@ -2241,8 +2169,7 @@ static void wxScrollBarCallback(Widget scrollbar, wxScrollWinEvent event(eventType, cbs->value, - ((orientation == XmHORIZONTAL) ? - wxHORIZONTAL : wxVERTICAL)); + orientation); event.SetEventObject( win ); win->GetEventHandler()->ProcessEvent(event); } @@ -2264,16 +2191,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; @@ -2286,7 +2209,7 @@ void wxUniversalRepaintProc(Widget w, XtPointer WXUNUSED(c_data), XEvent *event, // ---------------------------------------------------------------------------- bool wxTranslateMouseEvent(wxMouseEvent& wxevent, wxWindow *win, - Widget widget, XEvent *xevent) + Widget widget, const XEvent *xevent) { switch (xevent->xany.type) { @@ -2301,6 +2224,8 @@ bool wxTranslateMouseEvent(wxMouseEvent& wxevent, wxWindow *win, case ButtonRelease: case MotionNotify: { + int eventx = xevent->xbutton.x, eventy = xevent->xbutton.y; + wxEventType eventType = wxEVT_NULL; if (xevent->xany.type == LeaveNotify) @@ -2314,6 +2239,18 @@ bool wxTranslateMouseEvent(wxMouseEvent& wxevent, wxWindow *win, 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) { @@ -2337,7 +2274,7 @@ bool wxTranslateMouseEvent(wxMouseEvent& wxevent, wxWindow *win, // check for a double click // - long dclickTime = XtGetMultiClickTime(wxGlobalDisplay()); + long dclickTime = XtGetMultiClickTime(xevent->xany.display); long ts = wxevent.GetTimestamp(); int buttonLast = win->GetLastClickedButton(); @@ -2401,8 +2338,8 @@ bool wxTranslateMouseEvent(wxMouseEvent& wxevent, wxWindow *win, 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) @@ -2429,7 +2366,7 @@ bool wxTranslateMouseEvent(wxMouseEvent& wxevent, wxWindow *win, } bool wxTranslateKeyEvent(wxKeyEvent& wxevent, wxWindow *win, - Widget WXUNUSED(widget), XEvent *xevent) + Widget WXUNUSED(widget), const XEvent *xevent) { switch (xevent->xany.type) { @@ -2624,7 +2561,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;