Send generic wxListCtrl wxEVT_COMMAND_LIST_KEY_DOWN events from OnKeyDown rather than OnChar. Also remove the HasCurrent check. These changes bring the generic control into line with the control under wxMSW. Re-enable the previously failing unit test and document that the key down event might not have a valid item associated with it.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65586 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Steve Lamerton 2010-09-22 08:48:15 +00:00
parent 2f0312f0c4
commit 92d9d10f80
3 changed files with 12 additions and 15 deletions

View File

@ -1085,7 +1085,7 @@ protected:
@event{EVT_LIST_ITEM_RIGHT_CLICK(id, func)}
The right mouse button has been clicked on an item.
@event{EVT_LIST_KEY_DOWN(id, func)}
A key has been pressed.
A key has been pressed. GetIndex() may be -1 if no item is selected.
@event{EVT_LIST_INSERT_ITEM(id, func)}
An item has been inserted.
@event{EVT_LIST_COL_CLICK(id, func)}

View File

@ -2682,6 +2682,16 @@ void wxListMainWindow::OnKeyDown( wxKeyEvent &event )
if (parent->GetEventHandler()->ProcessEvent( ke ))
return;
// send a list event
wxListEvent le( wxEVT_COMMAND_LIST_KEY_DOWN, parent->GetId() );
le.m_itemIndex = m_current;
if (HasCurrent())
GetLine(m_current)->GetItem( 0, le.m_item );
le.m_code = event.GetKeyCode();
le.SetEventObject( parent );
if (parent->GetEventHandler()->ProcessEvent( le ))
return;
event.Skip();
}
@ -2701,17 +2711,6 @@ void wxListMainWindow::OnChar( wxKeyEvent &event )
{
wxWindow *parent = GetParent();
// send a list_key event up
if ( HasCurrent() )
{
wxListEvent le( wxEVT_COMMAND_LIST_KEY_DOWN, GetParent()->GetId() );
le.m_itemIndex = m_current;
GetLine(m_current)->GetItem( 0, le.m_item );
le.m_code = event.GetKeyCode();
le.SetEventObject( parent );
parent->GetEventHandler()->ProcessEvent( le );
}
// propagate the char event upwards
wxKeyEvent ke(event);
ke.SetEventObject( parent );

View File

@ -228,7 +228,7 @@ void ListBaseTestCase::ItemClick()
void ListBaseTestCase::KeyDown()
{
#if wxUSE_UIACTIONSIMULATOR && !defined(__WXGTK__)
#if wxUSE_UIACTIONSIMULATOR
wxTestableFrame* frame = wxStaticCast(wxTheApp->GetTopWindow(),
wxTestableFrame);
@ -239,8 +239,6 @@ void ListBaseTestCase::KeyDown()
wxUIActionSimulator sim;
list->SetFocus();
wxYield();
sim.Text("aAbB");
wxYield();