unselect all selected items, not just the currently focused one, when the mouse is right clicked outside of selection to minimize user confusion (patch 1702201, bug 1676471) [backport of r49916 from trunk]

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_8_BRANCH@49918 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2007-11-13 17:23:32 +00:00
parent dc8f4ea54d
commit 9becb2e665

View File

@@ -2191,6 +2191,38 @@ WXLRESULT wxTreeCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lPara
} }
break; break;
case WM_RBUTTONDOWN:
// default handler removes the highlight from the currently
// focused item when right mouse button is pressed on another
// one but keeps the remaining items highlighted, which is
// confusing, so override this default behaviour for tree with
// multiple selections
if ( isMultiple )
{
if ( !IsItemSelected(GetHwnd(), htItem) )
{
UnselectAll();
SelectItem(htItem);
::SetFocus(GetHwnd(), htItem);
}
// fire EVT_RIGHT_DOWN
HandleMouseEvent(nMsg, x, y, wParam);
// send NM_RCLICK
NMHDR nmhdr;
nmhdr.hwndFrom = GetHwnd();
nmhdr.idFrom = ::GetWindowLong(GetHwnd(), GWL_ID);
nmhdr.code = NM_RCLICK;
::SendMessage(::GetParent(GetHwnd()), WM_NOTIFY,
nmhdr.idFrom, (LPARAM)&nmhdr);
// prevent tree control default processing, as we've
// already done everything
processed = true;
}
break;
case WM_MOUSEMOVE: case WM_MOUSEMOVE:
#ifndef __WXWINCE__ #ifndef __WXWINCE__
if ( m_htClickedItem ) if ( m_htClickedItem )