Use mouse position to find the item for selection events in wxMSW listbox.
Using LB_GETCARETINDEX doesn't work when the mouse is used to make selection because it always returns the index of the last item, even if the mouse is clicked below it, on an area without any listbox items. So use the mouse position to find the item in this case but still use LB_GETCARETINDEX to find the item when the keyboard is used. This required adding a flag to wxListBox storing the kind of the last input message that it received as there doesn't seem to be any way to determine how the message was generated otherwise. This code will be refactored/improved further in the next two commits. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64498 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -149,6 +149,8 @@ public:
|
||||
|
||||
virtual void OnInternalIdle();
|
||||
|
||||
virtual WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam);
|
||||
|
||||
protected:
|
||||
virtual wxSize DoGetBestClientSize() const;
|
||||
|
||||
@@ -190,6 +192,11 @@ private:
|
||||
// i.e. if we need to call SetHorizontalExtent() from OnInternalIdle()
|
||||
bool m_updateHorizontalExtent;
|
||||
|
||||
// flag set to true when we get a keyboard event and reset to false when we
|
||||
// get a mouse one: this is used to find the correct item for the selection
|
||||
// event
|
||||
bool m_selectedByKeyboard;
|
||||
|
||||
DECLARE_DYNAMIC_CLASS_NO_COPY(wxListBox)
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user