Don't send SELECTED events for an already selected item in wxGTK wxListBox.
Bring wxGTK in line with wxMSW behaviour and avoid sending the wxEVT_COMMAND_LISTBOX_SELECTED events when the user clicks on an already selected item. Refactor wxMSW code to extract the logic to avoid such events into a reusable in other ports wxListBoxBase::DoChangeSingleSelection() function. Also add wxListBox::GTKOnSelectionChanged() to wxGTK to avoid having to make the new function public just so that it could be called by GTK callback and make the previously existing CalcAndSendEvent() protected as well. This fixes a unit test failure in ListBoxTestCase::ClickEvents() under wxGTK. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65935 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -689,20 +689,10 @@ bool wxListBox::MSWCommand(WXUINT param, WXWORD WXUNUSED(id))
|
||||
if ( n == wxNOT_FOUND )
|
||||
return false;
|
||||
|
||||
// As we don't use m_oldSelections in single selection mode, we store the
|
||||
// last item that we notified the user about in it in this case because we
|
||||
// need to remember it to be able to filter out the dummy LBN_SELCHANGE
|
||||
// messages that we get when the user clicks on an already selected item.
|
||||
if ( param == LBN_SELCHANGE )
|
||||
{
|
||||
if ( !m_oldSelections.empty() && *m_oldSelections.begin() == n )
|
||||
{
|
||||
// Same item as the last time.
|
||||
if ( !DoChangeSingleSelection(n) )
|
||||
return false;
|
||||
}
|
||||
|
||||
m_oldSelections.clear();
|
||||
m_oldSelections.push_back(n);
|
||||
}
|
||||
|
||||
// Do generate an event otherwise.
|
||||
|
Reference in New Issue
Block a user