From 46c335c8efffb15b8d0b08b2f1da9c578fb67990 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Fri, 10 Apr 2015 16:37:46 +0200 Subject: [PATCH] Generate wxEVT_SPINCTRL of the correct wxSpinEvent type. Handlers for this event expect to get wxSpinEvent but wxMSW and wxGTK1 sent an object of base wxCommandEvent class which resulted in invalid memory access in the handlers when using the derived class methods such as Veto(). See #16948. --- docs/changes.txt | 1 + src/common/event.cpp | 2 -- src/gtk1/spinctrl.cpp | 2 +- src/msw/spinctrl.cpp | 2 +- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/changes.txt b/docs/changes.txt index 230b970c86..98a0ebba6e 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -615,6 +615,7 @@ wxMSW: - Fix wxEVT_TREE_STATE_IMAGE_CLICK generation (Antal). - Fix wxDV_ROW_LINES in horizontally scrolled wxDataViewCtrl. - Fix RegisterHotKey() with negative IDs (troelsk). +- Fix event object type for wxEVT_SPINCTRL events. wxOSX: diff --git a/src/common/event.cpp b/src/common/event.cpp index d92a4acf0e..b81c173122 100644 --- a/src/common/event.cpp +++ b/src/common/event.cpp @@ -179,8 +179,6 @@ wxDEFINE_EVENT( wxEVT_VLBOX, wxCommandEvent ); wxDEFINE_EVENT( wxEVT_COMBOBOX, wxCommandEvent ); wxDEFINE_EVENT( wxEVT_TOOL_RCLICKED, wxCommandEvent ); wxDEFINE_EVENT( wxEVT_TOOL_ENTER, wxCommandEvent ); -wxDEFINE_EVENT( wxEVT_SPINCTRL, wxCommandEvent ); -wxDEFINE_EVENT( wxEVT_SPINCTRLDOUBLE, wxCommandEvent ); wxDEFINE_EVENT( wxEVT_TOOL_DROPDOWN, wxCommandEvent ); wxDEFINE_EVENT( wxEVT_COMBOBOX_DROPDOWN, wxCommandEvent); wxDEFINE_EVENT( wxEVT_COMBOBOX_CLOSEUP, wxCommandEvent); diff --git a/src/gtk1/spinctrl.cpp b/src/gtk1/spinctrl.cpp index e37bd6737f..79de856b28 100644 --- a/src/gtk1/spinctrl.cpp +++ b/src/gtk1/spinctrl.cpp @@ -82,7 +82,7 @@ static void gtk_spinctrl_callback( GtkWidget *WXUNUSED(widget), wxSpinCtrl *win if (!win->m_hasVMT) return; if (g_blockEventsOnDrag) return; - wxCommandEvent event( wxEVT_SPINCTRL, win->GetId()); + wxSpinEvent event( wxEVT_SPINCTRL, win->GetId()); event.SetEventObject( win ); // note that we don't use wxSpinCtrl::GetValue() here because it would diff --git a/src/msw/spinctrl.cpp b/src/msw/spinctrl.cpp index 4610eef008..a32d224b00 100644 --- a/src/msw/spinctrl.cpp +++ b/src/msw/spinctrl.cpp @@ -670,7 +670,7 @@ void wxSpinCtrl::DoSetToolTip(wxToolTip *tip) void wxSpinCtrl::SendSpinUpdate(int value) { - wxCommandEvent event(wxEVT_SPINCTRL, GetId()); + wxSpinEvent event(wxEVT_SPINCTRL, GetId()); event.SetEventObject(this); event.SetInt(value);