X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2d33aec94c9217b94ada107fbd125db4c51c22ab..33754c4d83c59b7523a6da0c4fb21079cb60301c:/src/msw/listctrl.cpp diff --git a/src/msw/listctrl.cpp b/src/msw/listctrl.cpp index bdab497417..6b4a882131 100644 --- a/src/msw/listctrl.cpp +++ b/src/msw/listctrl.cpp @@ -752,8 +752,9 @@ bool wxListCtrl::SetItemState(long item, long state, long stateMask) wxConvertToMSWFlags(state, stateMask, lvItem); // for the virtual list controls we need to refresh the previously focused - // item manually when changing focus programmatically because otherwise it - // keeps its focus rectangle until next repaint (yet another comctl32 bug) + // item manually when changing focus without changing selection + // programmatically because otherwise it keeps its focus rectangle until + // next repaint (yet another comctl32 bug) long focusOld; if ( IsVirtual() && (stateMask & wxLIST_STATE_FOCUSED) && @@ -776,7 +777,13 @@ bool wxListCtrl::SetItemState(long item, long state, long stateMask) if ( focusOld != -1 ) { - RefreshItem(focusOld); + // no need to refresh the item if it was previously selected, it would + // only result in annoying flicker + if ( !(GetItemState(focusOld, + wxLIST_STATE_SELECTED) & wxLIST_STATE_SELECTED) ) + { + RefreshItem(focusOld); + } } return TRUE; @@ -1502,7 +1509,11 @@ bool wxListCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result) // is it a message from the header? if ( nmhdr->hwndFrom == hwndHdr ) { +#ifdef __WATCOMC__ + HD_NOTIFY *nmHDR = (HD_NOTIFY *)nmhdr; +#else NMHEADER *nmHDR = (NMHEADER *)nmhdr; +#endif event.m_itemIndex = -1; switch ( nmhdr->code )