From: Vadim Zeitlin Date: Sun, 24 May 2009 18:04:37 +0000 (+0000) Subject: fill in the fields of wxListItem in a wxListEvent before handling the event (closes... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/fb4079af5ba82f05e1115f0f0c734b77cf8164e7 fill in the fields of wxListItem in a wxListEvent before handling the event (closes #10820) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@60732 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/listbase.h b/include/wx/listbase.h index ef32584e18..df07401a0e 100644 --- a/include/wx/listbase.h +++ b/include/wx/listbase.h @@ -380,10 +380,10 @@ class WXDLLIMPEXP_CORE wxListEvent : public wxNotifyEvent public: wxListEvent(wxEventType commandType = wxEVT_NULL, int winid = 0) : wxNotifyEvent(commandType, winid) - , m_code(0) - , m_oldItemIndex(0) - , m_itemIndex(0) - , m_col(0) + , m_code(-1) + , m_oldItemIndex(-1) + , m_itemIndex(-1) + , m_col(-1) , m_pointDrag() , m_item() , m_editCancelled(false) diff --git a/src/msw/listctrl.cpp b/src/msw/listctrl.cpp index d3ec4279ed..615d64f8b5 100644 --- a/src/msw/listctrl.cpp +++ b/src/msw/listctrl.cpp @@ -2367,13 +2367,18 @@ bool wxListCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result) wxZeroMemory(lvhti); #if defined(__WXWINCE__) && !defined(__HANDHELDPC__) && _WIN32_WCE < 400 - if(nmhdr->code == GN_CONTEXTMENU) { - lvhti.pt = ((NMRGINFO*)nmhdr)->ptAction; - } else + if ( nmhdr->code == GN_CONTEXTMENU ) + { + lvhti.pt = ((NMRGINFO*)nmhdr)->ptAction; + } + else #endif //__WXWINCE__ - ::GetCursorPos(&(lvhti.pt)); - ::ScreenToClient(GetHwnd(),&(lvhti.pt)); - if ( ListView_HitTest(GetHwnd(),&lvhti) != -1 ) + { + ::GetCursorPos(&(lvhti.pt)); + } + + ::ScreenToClient(GetHwnd(), &lvhti.pt); + if ( ListView_HitTest(GetHwnd(), &lvhti) != -1 ) { if ( lvhti.flags & LVHT_ONITEM ) { @@ -2537,6 +2542,17 @@ bool wxListCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result) event.SetEventType(eventType); + // fill in the item before passing it to the event handler if we do have a + // valid item index and haven't filled it yet (e.g. for LVN_ITEMCHANGED) + if ( event.m_itemIndex != -1 && !event.m_item.GetMask() ) + { + wxListItem& item = event.m_item; + + item.SetId(event.m_itemIndex); + item.SetMask(wxLIST_MASK_TEXT | wxLIST_MASK_IMAGE | wxLIST_MASK_DATA); + GetItem(item); + } + bool processed = HandleWindowEvent(event); // post processing