fixed TREE_ITEM_MENU generation from right mouse clicks: don't pass WM_RBUTTONDOWN to tree control window proc

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@33264 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2005-04-02 13:48:56 +00:00
parent 807c0706e6
commit 2b9a7d4cc2

View File

@@ -2239,7 +2239,7 @@ WXLRESULT wxTreeCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lPara
{ {
bool processed = false; bool processed = false;
WXLRESULT rc = 0; WXLRESULT rc = 0;
bool isMultiple = (GetWindowStyle() & wxTR_MULTIPLE) != 0; bool isMultiple = HasFlag(wxTR_MULTIPLE);
#ifdef WM_CONTEXTMENU #ifdef WM_CONTEXTMENU
if ( nMsg == WM_CONTEXTMENU ) if ( nMsg == WM_CONTEXTMENU )
@@ -2248,12 +2248,11 @@ WXLRESULT wxTreeCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lPara
event.m_item = GetSelection(); event.m_item = GetSelection();
event.SetEventObject( this ); event.SetEventObject( this );
if ( GetEventHandler()->ProcessEvent(event) ) if ( GetEventHandler()->ProcessEvent(event) )
return true; processed = true;
//else: continue with generating wxEVT_CONTEXT_MENU in base class code //else: continue with generating wxEVT_CONTEXT_MENU in base class code
} }
#endif // __SMARTPHONE__ #endif // WM_CONTEXTMENU
else if ( (nMsg >= WM_MOUSEFIRST) && (nMsg <= WM_MOUSELAST) )
if ( (nMsg >= WM_MOUSEFIRST) && (nMsg <= WM_MOUSELAST) )
{ {
// we only process mouse messages here and these parameters have the // we only process mouse messages here and these parameters have the
// same meaning for all of them // same meaning for all of them
@@ -2276,6 +2275,13 @@ WXLRESULT wxTreeCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lPara
// newly selected item // newly selected item
::SelectItem(GetHwnd(), htItem); ::SelectItem(GetHwnd(), htItem);
::SetFocus(GetHwnd(), htItem); ::SetFocus(GetHwnd(), htItem);
// default WM_RBUTTONUP handler enters modal loop inside
// DefWindowProc() waiting for WM_RBUTTONDOWN and then sends
// the resulting WM_CONTEXTMENU to the parent window, not us,
// which completely breaks everything so simply don't let it
// see this message at all
processed = true;
break; break;
#if !wxUSE_CHECKBOXES_IN_MULTI_SEL_TREE #if !wxUSE_CHECKBOXES_IN_MULTI_SEL_TREE
@@ -2426,9 +2432,9 @@ WXLRESULT wxTreeCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lPara
// TreeView_GetItemRect() will return false if item is not visible, // TreeView_GetItemRect() will return false if item is not visible,
// which may happen perfectly well // which may happen perfectly well
if ( TreeView_GetItemRect(GetHwnd(), HITEM_PTR(selections[n]), if ( TreeView_GetItemRect(GetHwnd(), HITEM_PTR(selections[n]),
&rect, true) ) &rect, TRUE) )
{ {
::InvalidateRect(GetHwnd(), &rect, false); ::InvalidateRect(GetHwnd(), &rect, FALSE);
} }
} }
} }