+ if (!listbox->m_hasVMT) return TRUE;
+ if (g_blockEventsOnDrag) return TRUE;
+
+ if (listbox->m_spacePressed) return FALSE; //see keyevent callback
+ if (listbox->m_blockEvent) return TRUE;
+
+ // NB: wxdocs explicitly say that this event only gets sent when
+ // something is actually selected, plus the controls example
+ // assumes so and passes -1 to the dogetclientdata funcs if not
+
+ // OK, so basically we need to do a bit of a run-around here as
+ // 1) is_selected says whether the item(s?) are CURRENTLY selected -
+ // i.e. if is_selected is FALSE then the item is going to be
+ // selected right now!
+ // 2) However, since it is not already selected and the user
+ // will expect it to be we need to manually select it and
+ // return FALSE telling GTK we handled the selection
+ if (is_selected) return TRUE;
+
+ int nIndex = gtk_tree_path_get_indices(path)[0];
+ GtkTreeEntry* entry = listbox->GtkGetEntry(nIndex);
+
+ if(entry)
+ {
+ //Now, as mentioned above, we manually select the row that is/was going
+ //to be selected anyway by GTK
+ listbox->m_blockEvent = TRUE; //if we don't block events we will lock the
+ //app due to recursion!!
+
+ GtkTreeSelection* selection =
+ gtk_tree_view_get_selection(listbox->m_treeview);
+ GtkTreeIter iter;
+ gtk_tree_model_get_iter(GTK_TREE_MODEL(listbox->m_liststore), &iter, path);
+ gtk_tree_selection_select_iter(selection, &iter);
+
+ listbox->m_blockEvent = FALSE;