From: Stefan Csomor Date: Sun, 18 Nov 2001 18:52:47 +0000 (+0000) Subject: added a preImage of the selection in order to avoid unnecessary events being triggered X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/ccf0e7f6d42817cad37fc6480a6c0381fe6799e0 added a preImage of the selection in order to avoid unnecessary events being triggered git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12479 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/mac/listbox.h b/include/wx/mac/listbox.h index 412db33a59..0f052594b6 100644 --- a/include/wx/mac/listbox.h +++ b/include/wx/mac/listbox.h @@ -113,6 +113,7 @@ public: ListHandle m_macList ; wxArrayString m_stringArray ; wxListDataArray m_dataArray ; + wxArrayInt m_selectionPreImage ; void MacSetRedraw( bool doDraw ) ; protected: void MacDestroy() ; diff --git a/src/mac/carbon/listbox.cpp b/src/mac/carbon/listbox.cpp index d4dbdffb51..7dfe8b1f32 100644 --- a/src/mac/carbon/listbox.cpp +++ b/src/mac/carbon/listbox.cpp @@ -440,7 +440,8 @@ void wxListBox::SetSelection(int N, bool select) { wxCHECK_RET( N >= 0 && N < m_noItems, "invalid index in wxListBox::SetSelection" ); - MacSetSelection( N , select ) ; + MacSetSelection( N , select ) ; + GetSelections( m_selectionPreImage ) ; } bool wxListBox::IsSelected(int N) const @@ -448,7 +449,7 @@ bool wxListBox::IsSelected(int N) const wxCHECK_MSG( N >= 0 && N < m_noItems, FALSE, "invalid index in wxListBox::Selected" ); - return MacIsSelected( N ) ; + return MacIsSelected( N ) ; } void *wxListBox::DoGetItemClientData(int N) const @@ -498,23 +499,6 @@ void wxListBox::DoSetItemClientObject(int n, wxClientData* clientData) int wxListBox::GetSelections(wxArrayInt& aSelections) const { return MacGetSelections( aSelections ) ; - -/* TODO - if ((m_windowStyle & wxLB_MULTIMacE) || (m_windowStyle & wxLB_EXTENDED)) - { - int no_sel = ?? - for ( int n = 0; n < no_sel; n++ ) - aSelections.Add(??); - - return no_sel; - } - else // single-selection listbox - { - aSelections.Add(??); - - return 1; - } -*/ } // Get single selection, for single choice list items @@ -768,11 +752,27 @@ void wxListBox::MacSetRedraw( bool doDraw ) void wxListBox::MacDoClick() { - wxCommandEvent event(wxEVT_COMMAND_LISTBOX_SELECTED, m_windowId); - event.SetEventObject( this ); - wxArrayInt aSelections; int n, count = GetSelections(aSelections); + + if ( count == m_selectionPreImage.GetCount() ) + { + bool hasChanged = false ; + for ( int i = 0 ; i < count ; ++i ) + { + if ( aSelections[i] != m_selectionPreImage[i] ) + { + hasChanged = true ; + break ; + } + } + if ( !hasChanged ) + return ; + } + + wxCommandEvent event(wxEVT_COMMAND_LISTBOX_SELECTED, m_windowId); + event.SetEventObject( this ); + if ( count > 0 ) { n = aSelections[0]; diff --git a/src/mac/listbox.cpp b/src/mac/listbox.cpp index d4dbdffb51..7dfe8b1f32 100644 --- a/src/mac/listbox.cpp +++ b/src/mac/listbox.cpp @@ -440,7 +440,8 @@ void wxListBox::SetSelection(int N, bool select) { wxCHECK_RET( N >= 0 && N < m_noItems, "invalid index in wxListBox::SetSelection" ); - MacSetSelection( N , select ) ; + MacSetSelection( N , select ) ; + GetSelections( m_selectionPreImage ) ; } bool wxListBox::IsSelected(int N) const @@ -448,7 +449,7 @@ bool wxListBox::IsSelected(int N) const wxCHECK_MSG( N >= 0 && N < m_noItems, FALSE, "invalid index in wxListBox::Selected" ); - return MacIsSelected( N ) ; + return MacIsSelected( N ) ; } void *wxListBox::DoGetItemClientData(int N) const @@ -498,23 +499,6 @@ void wxListBox::DoSetItemClientObject(int n, wxClientData* clientData) int wxListBox::GetSelections(wxArrayInt& aSelections) const { return MacGetSelections( aSelections ) ; - -/* TODO - if ((m_windowStyle & wxLB_MULTIMacE) || (m_windowStyle & wxLB_EXTENDED)) - { - int no_sel = ?? - for ( int n = 0; n < no_sel; n++ ) - aSelections.Add(??); - - return no_sel; - } - else // single-selection listbox - { - aSelections.Add(??); - - return 1; - } -*/ } // Get single selection, for single choice list items @@ -768,11 +752,27 @@ void wxListBox::MacSetRedraw( bool doDraw ) void wxListBox::MacDoClick() { - wxCommandEvent event(wxEVT_COMMAND_LISTBOX_SELECTED, m_windowId); - event.SetEventObject( this ); - wxArrayInt aSelections; int n, count = GetSelections(aSelections); + + if ( count == m_selectionPreImage.GetCount() ) + { + bool hasChanged = false ; + for ( int i = 0 ; i < count ; ++i ) + { + if ( aSelections[i] != m_selectionPreImage[i] ) + { + hasChanged = true ; + break ; + } + } + if ( !hasChanged ) + return ; + } + + wxCommandEvent event(wxEVT_COMMAND_LISTBOX_SELECTED, m_windowId); + event.SetEventObject( this ); + if ( count > 0 ) { n = aSelections[0];