]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/listbox.cpp
typo fix
[wxWidgets.git] / src / gtk / listbox.cpp
index a8d8ab56454205c459f6b221aec20f361a9c0835..beb8d7d33644dc4be83b01942ebd88943f31dbab 100644 (file)
     #include "wx/intl.h"
     #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/settings.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)