X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9eddec696f06d65a80e7339b2fae14fcb55f8383..6d7b547184bfdcdf67790755deb0122050b1d728:/src/gtk/listbox.cpp diff --git a/src/gtk/listbox.cpp b/src/gtk/listbox.cpp index e20ebc219e..beb8d7d336 100644 --- a/src/gtk/listbox.cpp +++ b/src/gtk/listbox.cpp @@ -21,10 +21,10 @@ #include "wx/log.h" #include "wx/utils.h" #include "wx/settings.h" + #include "wx/checklst.h" + #include "wx/arrstr.h" #endif -#include "wx/arrstr.h" -#include "wx/checklst.h" #include "wx/gtk/private.h" #include "wx/gtk/treeentry_gtk.h" @@ -880,8 +880,8 @@ int wxListBox::FindString( const wxString &item, bool bCase ) const int wxListBox::GetSelection() const { - wxCHECK_MSG( m_treeview != NULL, -1, wxT("invalid listbox")); - wxCHECK_MSG( HasFlag(wxLB_SINGLE), -1, + wxCHECK_MSG( m_treeview != NULL, wxNOT_FOUND, wxT("invalid listbox")); + wxCHECK_MSG( HasFlag(wxLB_SINGLE), wxNOT_FOUND, wxT("must be single selection listbox")); GtkTreeIter iter; @@ -889,7 +889,7 @@ int wxListBox::GetSelection() const // only works on single-sel if (!gtk_tree_selection_get_selected(selection, NULL, &iter)) - return -1; + return wxNOT_FOUND; GtkTreePath* path = gtk_tree_model_get_path(GTK_TREE_MODEL(m_liststore), &iter); @@ -903,7 +903,7 @@ int wxListBox::GetSelection() const int wxListBox::GetSelections( wxArrayInt& aSelections ) const { - wxCHECK_MSG( m_treeview != NULL, -1, wxT("invalid listbox") ); + wxCHECK_MSG( m_treeview != NULL, wxNOT_FOUND, wxT("invalid listbox") ); aSelections.Empty(); @@ -944,7 +944,30 @@ bool wxListBox::IsSelected( int n ) const void wxListBox::DoSetSelection( int n, bool select ) { - return GtkSetSelection(n, select, true); //docs say no events here + // passing -1 to SetSelection() is documented to deselect all items + if ( n == wxNOT_FOUND ) + { + // ... and not generate any events in the process + GtkDeselectAll(); + } + + wxCHECK_RET( IsValid(n), wxT("invalid index in wxListBox::SetSelection") ); + + // don't generate the selection event + GtkSetSelection(n, select, true); +} + +void wxListBox::GtkDeselectAll() +{ + wxCHECK_RET( m_treeview != NULL, wxT("invalid listbox") ); + + GtkTreeSelection* selection = gtk_tree_view_get_selection(m_treeview); + + m_blockEvent = true; + + gtk_tree_selection_unselect_all(selection); + + m_blockEvent = false; } void wxListBox::GtkSetSelection(int n, const bool select, const bool blockEvent)