From 593ac33e50ab0b01f6186773fa646104d410f365 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sat, 6 May 2006 15:48:27 +0000 Subject: [PATCH] added InitCommandEventWithItems() and call it from wxChoice and wxComboBox code to ensure that per item client data is set correctly in the generated events (replaces patch 1476171; closes bug 1470505) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@39064 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/ctrlsub.h | 7 +++++++ src/msw/choice.cpp | 5 +---- src/msw/combobox.cpp | 13 +++++++++---- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/include/wx/ctrlsub.h b/include/wx/ctrlsub.h index d27f0102ed..e6ad7e9f71 100644 --- a/include/wx/ctrlsub.h +++ b/include/wx/ctrlsub.h @@ -144,6 +144,7 @@ protected: virtual void DoSetItemClientObject(unsigned int n, wxClientData* clientData) = 0; virtual wxClientData* DoGetItemClientObject(unsigned int n) const = 0; + // the type of the client data for the items wxClientDataType m_clientDataItemsType; }; @@ -197,6 +198,12 @@ protected: // ctors for this to work! virtual void SetInitialBestSize(const wxSize& WXUNUSED(size)) { } + // fill in the client object or data field of the event as appropriate + // + // calls InitCommandEvent() and, if n != wxNOT_FOUND, also sets the per + // item client data + void InitCommandEventWithItems(wxCommandEvent& event, int n); + private: DECLARE_ABSTRACT_CLASS(wxControlWithItems) DECLARE_NO_COPY_CLASS(wxControlWithItems) diff --git a/src/msw/choice.cpp b/src/msw/choice.cpp index 1441653418..3dcb4aa42a 100644 --- a/src/msw/choice.cpp +++ b/src/msw/choice.cpp @@ -741,10 +741,7 @@ bool wxChoice::MSWCommand(WXUINT param, WXWORD WXUNUSED(id)) if ( n > -1 ) { event.SetString(GetStringSelection()); - if ( HasClientObjectData() ) - event.SetClientObject( GetClientObject(n) ); - else if ( HasClientUntypedData() ) - event.SetClientData( GetClientData(n) ); + InitCommandEventWithItems(event, n); } ProcessCommand(event); diff --git a/src/msw/combobox.cpp b/src/msw/combobox.cpp index dc948b01de..61908d5fdc 100644 --- a/src/msw/combobox.cpp +++ b/src/msw/combobox.cpp @@ -259,9 +259,12 @@ bool wxComboBox::MSWProcessEditMsg(WXUINT msg, WXWPARAM wParam, WXLPARAM lParam) if ( wParam == VK_RETURN ) { wxCommandEvent event(wxEVT_COMMAND_TEXT_ENTER, m_windowId); - InitCommandEvent(event); + + const int sel = GetSelection(); + event.SetInt(sel); event.SetString(GetValue()); - event.SetInt(GetSelection()); + InitCommandEventWithItems(event, sel); + if ( ProcessCommand(event) ) { // don't let the event through to the native control @@ -313,9 +316,10 @@ bool wxComboBox::MSWCommand(WXUINT param, WXWORD id) value = GetStringSelection(); { wxCommandEvent event(wxEVT_COMMAND_COMBOBOX_SELECTED, GetId()); - event.SetEventObject(this); event.SetInt(sel); event.SetString(value); + InitCommandEventWithItems(event, sel); + ProcessCommand(event); } @@ -326,7 +330,6 @@ bool wxComboBox::MSWCommand(WXUINT param, WXWORD id) case CBN_EDITCHANGE: { wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, GetId()); - event.SetEventObject(this); // if sel != -1, value was already initialized above if ( sel == -1 ) @@ -335,6 +338,8 @@ bool wxComboBox::MSWCommand(WXUINT param, WXWORD id) } event.SetString(value); + InitCommandEventWithItems(event, sel); + ProcessCommand(event); } break; -- 2.45.2