X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8e72b8b51770b59a83eb32f4d766b89f6c4dc615..dd23c25cde86903f2a4115e4a24e891e80d477e4:/src/common/event.cpp diff --git a/src/common/event.cpp b/src/common/event.cpp index 6bdc802f27..d4cc3c54d4 100644 --- a/src/common/event.cpp +++ b/src/common/event.cpp @@ -79,6 +79,7 @@ IMPLEMENT_ABSTRACT_CLASS(wxEvent, wxObject) IMPLEMENT_DYNAMIC_CLASS(wxInitDialogEvent, wxEvent) IMPLEMENT_DYNAMIC_CLASS(wxSetCursorEvent, wxEvent) IMPLEMENT_DYNAMIC_CLASS(wxSysColourChangedEvent, wxEvent) + IMPLEMENT_DYNAMIC_CLASS(wxDisplayChangedEvent, wxEvent) IMPLEMENT_DYNAMIC_CLASS(wxUpdateUIEvent, wxCommandEvent) IMPLEMENT_DYNAMIC_CLASS(wxNavigationKeyEvent, wxCommandEvent) IMPLEMENT_DYNAMIC_CLASS(wxPaletteChangedEvent, wxEvent) @@ -87,6 +88,7 @@ IMPLEMENT_ABSTRACT_CLASS(wxEvent, wxObject) IMPLEMENT_DYNAMIC_CLASS(wxWindowDestroyEvent, wxEvent) IMPLEMENT_DYNAMIC_CLASS(wxHelpEvent, wxCommandEvent) IMPLEMENT_DYNAMIC_CLASS(wxContextMenuEvent, wxCommandEvent) + IMPLEMENT_DYNAMIC_CLASS(wxMouseCaptureChangedEvent, wxEvent) #endif // wxUSE_GUI const wxEventTable *wxEvtHandler::GetEventTable() const @@ -188,6 +190,7 @@ DEFINE_EVENT_TYPE(wxEVT_SCROLL_PAGEUP) DEFINE_EVENT_TYPE(wxEVT_SCROLL_PAGEDOWN) DEFINE_EVENT_TYPE(wxEVT_SCROLL_THUMBTRACK) DEFINE_EVENT_TYPE(wxEVT_SCROLL_THUMBRELEASE) +DEFINE_EVENT_TYPE(wxEVT_SCROLL_ENDSCROLL) // Scroll events from wxWindow DEFINE_EVENT_TYPE(wxEVT_SCROLLWIN_TOP) @@ -218,12 +221,12 @@ DEFINE_EVENT_TYPE(wxEVT_PAINT) DEFINE_EVENT_TYPE(wxEVT_ERASE_BACKGROUND) DEFINE_EVENT_TYPE(wxEVT_NC_PAINT) DEFINE_EVENT_TYPE(wxEVT_PAINT_ICON) -DEFINE_EVENT_TYPE(wxEVT_MENU_CHAR) -DEFINE_EVENT_TYPE(wxEVT_MENU_INIT) +DEFINE_EVENT_TYPE(wxEVT_MENU_OPEN) +DEFINE_EVENT_TYPE(wxEVT_MENU_CLOSE) DEFINE_EVENT_TYPE(wxEVT_MENU_HIGHLIGHT) -DEFINE_EVENT_TYPE(wxEVT_POPUP_MENU_INIT) DEFINE_EVENT_TYPE(wxEVT_CONTEXT_MENU) DEFINE_EVENT_TYPE(wxEVT_SYS_COLOUR_CHANGED) +DEFINE_EVENT_TYPE(wxEVT_DISPLAY_CHANGED) DEFINE_EVENT_TYPE(wxEVT_SETTING_CHANGED) DEFINE_EVENT_TYPE(wxEVT_QUERY_NEW_PALETTE) DEFINE_EVENT_TYPE(wxEVT_PALETTE_CHANGED) @@ -306,14 +309,15 @@ wxEvent::wxEvent(int theId, wxEventType commandType ) } wxEvent::wxEvent(const wxEvent &src) + : wxObject() + , m_eventObject(src.m_eventObject) + , m_eventType(src.m_eventType) + , m_timeStamp(src.m_timeStamp) + , m_id(src.m_id) + , m_callbackUserData(src.m_callbackUserData) + , m_skipped(src.m_skipped) + , m_isCommandEvent(src.m_isCommandEvent) { - m_eventType = src.m_eventType; - m_eventObject = src.m_eventObject; - m_timeStamp = src.m_timeStamp; - m_id = src.m_id; - m_skipped = src.m_skipped; - m_callbackUserData = src.m_callbackUserData; - m_isCommandEvent = src.m_isCommandEvent; } #if wxUSE_GUI @@ -324,7 +328,7 @@ wxEvent::wxEvent(const wxEvent &src) */ wxCommandEvent::wxCommandEvent(wxEventType commandType, int theId) - : wxEvent( theId, commandType ) + : wxEvent(theId, commandType) { m_clientData = (char *) NULL; m_clientObject = (wxClientData *) NULL; @@ -342,7 +346,7 @@ wxScrollEvent::wxScrollEvent(wxEventType commandType, int id, int pos, int orient) - : wxCommandEvent(commandType, id) + : wxCommandEvent(commandType, id) { m_extraLong = orient; m_commandInt = pos; @@ -383,6 +387,27 @@ wxMouseEvent::wxMouseEvent(wxEventType commandType) m_linesPerAction = 0; } +void wxMouseEvent::Assign(const wxMouseEvent& event) +{ + m_eventType = event.m_eventType; + + m_x = event.m_x; + m_y = event.m_y; + + m_leftDown = event.m_leftDown; + m_middleDown = event.m_middleDown; + m_rightDown = event.m_rightDown; + + m_controlDown = event.m_controlDown; + m_shiftDown = event.m_shiftDown; + m_altDown = event.m_altDown; + m_metaDown = event.m_metaDown; + + m_wheelRotation = event.m_wheelRotation; + m_wheelDelta = event.m_wheelDelta; + m_linesPerAction = event.m_linesPerAction; +} + // True if was a button dclick event (1 = left, 2 = middle, 3 = right) // or any button dclick event (but = -1) bool wxMouseEvent::ButtonDClick(int but) const @@ -629,6 +654,13 @@ void wxEvtHandler::AddPendingEvent(wxEvent& event) { // 1) Add event to list of pending events of this event handler + wxEvent *eventCopy = event.Clone(); + + // we must be able to copy the events here so the event class must + // implement Clone() properly instead of just providing a NULL stab for it + wxCHECK_RET( eventCopy, + _T("events of this type aren't supposed to be posted") ); + #if defined(__VISAGECPP__) wxENTER_CRIT_SECT( m_eventsLocker); #else @@ -638,9 +670,7 @@ void wxEvtHandler::AddPendingEvent(wxEvent& event) if ( !m_pendingEvents ) m_pendingEvents = new wxList; - wxEvent *event2 = (wxEvent *)event.Clone(); - - m_pendingEvents->Append(event2); + m_pendingEvents->Append(eventCopy); #if defined(__VISAGECPP__) wxLEAVE_CRIT_SECT( m_eventsLocker); @@ -711,8 +741,8 @@ bool wxEvtHandler::ProcessEvent(wxEvent& event) { #if wxUSE_GUI - // We have to use the actual window or processing events from wxWindowNative - // destructor won't work (we don't see the wxWindow class) + // We have to use the actual window or processing events from + // wxWindowNative destructor won't work (we don't see the wxWindow class) #ifdef __WXDEBUG__ // check that our flag corresponds to reality wxClassInfo* info = NULL; @@ -721,6 +751,8 @@ bool wxEvtHandler::ProcessEvent(wxEvent& event) info = CLASSINFO(wxWindowMSW); # elif defined(__WXGTK__) info = CLASSINFO(wxWindowGTK); +# elif defined(__WXX11__) + info = CLASSINFO(wxWindowX11); # elif defined(__WXMGL__) info = CLASSINFO(wxWindowMGL); # elif defined(__WXPM__) @@ -734,12 +766,32 @@ bool wxEvtHandler::ProcessEvent(wxEvent& event) info = CLASSINFO(wxWindow); #endif - wxASSERT_MSG( m_isWindow == IsKindOf(info), - _T("this should [not] be a window but it is [not]") ); -#endif + if ( m_isWindow != IsKindOf(info) ) + { + wxString msg = GetClassInfo()->GetClassName(); + msg += _T(" should [not] be a window but it is [not]"); + + wxFAIL_MSG( msg ); + } + +#endif // __WXDEBUG__ #endif // wxUSE_GUI + // allow the application to hook into event processing + if ( wxTheApp ) + { + int rc = wxTheApp->FilterEvent(event); + if ( rc != -1 ) + { + wxASSERT_MSG( rc == 1 || rc == 0, + _T("unexpected wxApp::FilterEvent return value") ); + + return rc != 0; + } + //else: proceed normally + } + // An event handler can be enabled or disabled if ( GetEvtHandlerEnabled() ) {