X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e409b62aaf6b333803027645ecc77de6c92cae2d..89ba044b378ff9341fc32992cb00021190b2072b:/src/msw/listctrl.cpp diff --git a/src/msw/listctrl.cpp b/src/msw/listctrl.cpp index a0301aec4a..6f3a70e136 100644 --- a/src/msw/listctrl.cpp +++ b/src/msw/listctrl.cpp @@ -1394,21 +1394,19 @@ bool wxListCtrl::EndEditLabel(bool cancel) { // m_textCtrl is not always ready, ie. in EVT_LIST_BEGIN_LABEL_EDIT HWND hwnd = ListView_GetEditControl(GetHwnd()); - bool b = (hwnd != NULL); - if (b) - { - if (cancel) - ::SetWindowText(hwnd, wxEmptyString); // dubious but better than nothing - if (m_textCtrl) - { - m_textCtrl->UnsubclassWin(); - m_textCtrl->SetHWND(0); - delete m_textCtrl; - m_textCtrl = NULL; - } - ::DestroyWindow(hwnd); - } - return b; + if ( !hwnd ) + return false; + + if ( cancel ) + ::SetWindowText(hwnd, wxEmptyString); // dubious but better than nothing + + // we shouldn't destroy the control ourselves according to MSDN, which + // proposes WM_CANCELMODE to do this, but it doesn't seem to work + // + // posting WM_CLOSE to it does seem to work without any side effects + ::PostMessage(hwnd, WM_CLOSE, 0, 0); + + return true; } // Ensures this item is visible @@ -1895,7 +1893,7 @@ bool wxListCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result) } else #endif // defined(HDN_BEGINTRACKA) - if ( nmhdr->hwndFrom == GetHwnd() ) + if ( nmhdr->hwndFrom == GetHwnd() ) { // almost all messages use NM_LISTVIEW NM_LISTVIEW *nmLV = (NM_LISTVIEW *)nmhdr; @@ -2318,10 +2316,13 @@ bool wxListCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result) } #endif // NM_CUSTOMDRAW - // a little dose of healthy paranoia: as we never use - // LVM_SETCALLBACKMASK we're not supposed to get these ones - wxASSERT_MSG( !(lvi.mask & LVIF_STATE), - _T("we don't support state callbacks yet!") ); + // even though we never use LVM_SETCALLBACKMASK, we still + // can get messages with LVIF_STATE in lvi.mask under Vista + if ( lvi.mask & LVIF_STATE ) + { + // we don't have anything to return from here... + lvi.stateMask = 0; + } return true; }