X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ba8a196102fe2dfbf51599d77d261607d4d91bc7..f3ebca94dddd57008b48c466d3e4919ba4e6a6f4:/src/msw/treectrl.cpp diff --git a/src/msw/treectrl.cpp b/src/msw/treectrl.cpp index 93bdeea6e7..10d4f48857 100644 --- a/src/msw/treectrl.cpp +++ b/src/msw/treectrl.cpp @@ -2243,7 +2243,6 @@ WXLRESULT wxTreeCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lPara WXLRESULT rc = 0; bool isMultiple = HasFlag(wxTR_MULTIPLE); -#ifdef WM_CONTEXTMENU if ( nMsg == WM_CONTEXTMENU ) { wxTreeEvent event( wxEVT_COMMAND_TREE_ITEM_MENU, GetId() ); @@ -2256,7 +2255,6 @@ WXLRESULT wxTreeCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lPara processed = true; //else: continue with generating wxEVT_CONTEXT_MENU in base class code } -#endif // WM_CONTEXTMENU else if ( (nMsg >= WM_MOUSEFIRST) && (nMsg <= WM_MOUSELAST) ) { // we only process mouse messages here and these parameters have the @@ -2517,18 +2515,6 @@ WXLRESULT wxTreeCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lPara } } #endif // !wxUSE_CHECKBOXES_IN_MULTI_SEL_TREE - else if ( nMsg == WM_CHAR ) - { - // don't let the control process Space and Return keys because it - // doesn't do anything useful with them anyhow but always beeps - // annoyingly when it receives them and there is no way to turn it off - // simply if you just process TREEITEM_ACTIVATED event to which Space - // and Enter presses are mapped in your code - if ( wParam == VK_SPACE || wParam == VK_RETURN ) - { - processed = true; - } - } else if ( nMsg == WM_COMMAND ) { // if we receive a EN_KILLFOCUS command from the in-place edit control @@ -2564,6 +2550,33 @@ wxTreeCtrl::MSWDefWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) if ( nMsg == WM_RBUTTONDOWN ) return 0; + // but because of the above we don't get NM_RCLICK which is normally + // generated by tree window proc when the modal loop mentioned above ends + // because the mouse is released -- synthesize it ourselves instead + if ( nMsg == WM_RBUTTONUP ) + { + NMHDR hdr; + hdr.hwndFrom = GetHwnd(); + hdr.idFrom = GetId(); + hdr.code = NM_RCLICK; + + WXLPARAM rc; + MSWOnNotify(GetId(), (LPARAM)&hdr, &rc); + + // continue as usual + } + + if ( nMsg == WM_CHAR ) + { + // also don't let the control process Space and Return keys because it + // doesn't do anything useful with them anyhow but always beeps + // annoyingly when it receives them and there is no way to turn it off + // simply if you just process TREEITEM_ACTIVATED event to which Space + // and Enter presses are mapped in your code + if ( wParam == VK_SPACE || wParam == VK_RETURN ) + return 0; + } + return wxControl::MSWDefWindowProc(nMsg, wParam, lParam); }