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
This commit is contained in:
Vadim Zeitlin
2006-05-06 15:48:27 +00:00
parent 9b7d3c0988
commit 593ac33e50
3 changed files with 17 additions and 8 deletions

View File

@@ -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)

View File

@@ -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);

View File

@@ -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;