From 0ed415ed1fd9fbbea2bf21459408d1263c0175d1 Mon Sep 17 00:00:00 2001 From: Julian Smart Date: Fri, 25 Sep 2009 09:57:22 +0000 Subject: [PATCH] Applied #10753: WarpPointer() for Mac git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_8_BRANCH@62115 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/mac/carbon/window.cpp | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/mac/carbon/window.cpp b/src/mac/carbon/window.cpp index e4653d6219..5d24622913 100644 --- a/src/mac/carbon/window.cpp +++ b/src/mac/carbon/window.cpp @@ -2527,7 +2527,28 @@ wxWindow *wxGetActiveWindow() // Coordinates relative to the window void wxWindowMac::WarpPointer(int x_pos, int y_pos) { - // We really don't move the mouse programmatically under Mac. + int x = x_pos; + int y = y_pos; + DoClientToScreen(&x, &y); + CGPoint cgpoint = CGPointMake( x, y ); + CGWarpMouseCursorPosition( cgpoint ); + + // At least GTK sends a mouse moved event after WarpMouse + wxMouseEvent event(wxEVT_MOTION); + event.m_x = x_pos; + event.m_y = y_pos; + wxMouseState mState = ::wxGetMouseState(); + + event.m_altDown = mState.AltDown(); + event.m_controlDown = mState.ControlDown(); + event.m_leftDown = mState.LeftDown(); + event.m_middleDown = mState.MiddleDown(); + event.m_rightDown = mState.RightDown(); + event.m_metaDown = mState.MetaDown(); + event.m_shiftDown = mState.ShiftDown(); + event.SetId(GetId()); + event.SetEventObject(this); + GetEventHandler()->ProcessEvent(event); } void wxWindowMac::OnEraseBackground(wxEraseEvent& event)