X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/dfc7216da7cf3c5bc06d19ed29ac2af419b036cd..f5406730ffdde05e710a68367ac45c15a11c00bc:/src/common/event.cpp diff --git a/src/common/event.cpp b/src/common/event.cpp index 7db770744c..fa39ae924b 100644 --- a/src/common/event.cpp +++ b/src/common/event.cpp @@ -554,10 +554,10 @@ wxMouseEvent::wxMouseEvent(wxEventType commandType) m_clickCount = -1; + m_wheelAxis = wxMOUSE_WHEEL_VERTICAL; m_wheelRotation = 0; m_wheelDelta = 0; m_linesPerAction = 0; - m_wheelAxis = 0; } void wxMouseEvent::Assign(const wxMouseEvent& event) @@ -735,6 +735,12 @@ wxKeyEvent::wxKeyEvent(wxEventType type) #if wxUSE_UNICODE m_uniChar = WXK_NONE; #endif + + m_x = + m_y = wxDefaultCoord; + m_hasPosition = false; + + InitPropagation(); } wxKeyEvent::wxKeyEvent(const wxKeyEvent& evt) @@ -742,6 +748,55 @@ wxKeyEvent::wxKeyEvent(const wxKeyEvent& evt) wxKeyboardState(evt) { DoAssignMembers(evt); + + InitPropagation(); +} + +wxKeyEvent::wxKeyEvent(wxEventType eventType, const wxKeyEvent& evt) + : wxEvent(evt), + wxKeyboardState(evt) +{ + DoAssignMembers(evt); + + m_eventType = eventType; + + InitPropagation(); +} + +void wxKeyEvent::InitPositionIfNecessary() const +{ + if ( m_hasPosition ) + return; + + // We're const because we're called from const Get[XY]() methods but we + // need to update the "cached" values. + wxKeyEvent& self = const_cast(*this); + self.m_hasPosition = true; + + // The only position we can possibly associate with the keyboard event on + // the platforms where it doesn't carry it already is the mouse position. + wxGetMousePosition(&self.m_x, &self.m_y); + + // If this event is associated with a window, the position should be in its + // client coordinates, but otherwise leave it in screen coordinates as what + // else can we use? + wxWindow* const win = wxDynamicCast(GetEventObject(), wxWindow); + if ( win ) + win->ScreenToClient(&self.m_x, &self.m_y); +} + +wxCoord wxKeyEvent::GetX() const +{ + InitPositionIfNecessary(); + + return m_x; +} + +wxCoord wxKeyEvent::GetY() const +{ + InitPositionIfNecessary(); + + return m_y; } bool wxKeyEvent::IsKeyInCategory(int category) const @@ -1147,6 +1202,8 @@ wxEventFilter* wxEvtHandler::ms_filterList = NULL; // Skip the assert below. return; } + + prev = f; } wxFAIL_MSG( "Filter not found" );