X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/29de6f400ce48a9ce52c4aa900d8d1edb178d5ba..12b5f4b4d2d8a07962da7ba3b78c8c1ec2634a67:/src/common/event.cpp diff --git a/src/common/event.cpp b/src/common/event.cpp index 3ee0d136ed..85951a1b3e 100644 --- a/src/common/event.cpp +++ b/src/common/event.cpp @@ -38,6 +38,7 @@ #include "wx/window.h" #include "wx/control.h" #include "wx/dc.h" + #include "wx/spinbutt.h" #include "wx/textctrl.h" #include "wx/validate.h" #endif // wxUSE_GUI @@ -232,6 +233,21 @@ wxDEFINE_EVENT( wxEVT_SCROLL_THUMBTRACK, wxScrollEvent ) wxDEFINE_EVENT( wxEVT_SCROLL_THUMBRELEASE, wxScrollEvent ) wxDEFINE_EVENT( wxEVT_SCROLL_CHANGED, wxScrollEvent ) +// Due to a bug in older wx versions, wxSpinEvents were being sent with type of +// wxEVT_SCROLL_LINEUP, wxEVT_SCROLL_LINEDOWN and wxEVT_SCROLL_THUMBTRACK. But +// with the type-safe events in place, these event types are associated with +// wxScrollEvent. To allow handling of spin events, new event types have been +// defined in spinbutt.h/spinnbuttcmn.cpp. To maintain backward compatibility +// the spin event types are being initialized with the scroll event types. + +#if wxUSE_SPINBTN + +wxDEFINE_EVENT_ALIAS( wxEVT_SPIN_UP, wxSpinEvent, wxEVT_SCROLL_LINEUP ) +wxDEFINE_EVENT_ALIAS( wxEVT_SPIN_DOWN, wxSpinEvent, wxEVT_SCROLL_LINEDOWN ) +wxDEFINE_EVENT_ALIAS( wxEVT_SPIN, wxSpinEvent, wxEVT_SCROLL_THUMBTRACK ) + +#endif // wxUSE_SPINBTN + // Scroll events from wxWindow wxDEFINE_EVENT( wxEVT_SCROLLWIN_TOP, wxScrollWinEvent ) wxDEFINE_EVENT( wxEVT_SCROLLWIN_BOTTOM, wxScrollWinEvent ) @@ -1036,12 +1052,7 @@ wxEvtHandler::wxEvtHandler() wxEvtHandler::~wxEvtHandler() { - // Takes itself out of the list of handlers - if (m_previousHandler) - m_previousHandler->m_nextHandler = m_nextHandler; - - if (m_nextHandler) - m_nextHandler->m_previousHandler = m_previousHandler; + Unlink(); if (m_dynamicEvents) { @@ -1103,6 +1114,26 @@ wxEvtHandler::~wxEvtHandler() delete m_clientObject; } +void wxEvtHandler::Unlink() +{ + // this event handler must take itself out of the chain of handlers: + + if (m_previousHandler) + m_previousHandler->SetNextHandler(m_nextHandler); + + if (m_nextHandler) + m_nextHandler->SetPreviousHandler(m_previousHandler); + + m_nextHandler = NULL; + m_previousHandler = NULL; +} + +bool wxEvtHandler::IsUnlinked() const +{ + return m_previousHandler == NULL && + m_nextHandler == NULL; +} + #if wxUSE_THREADS bool wxEvtHandler::ProcessThreadEvent(const wxEvent& event)