WXLRESULT rc = 0;
bool isMultiple = HasFlag(wxTR_MULTIPLE);
-#ifdef WM_CONTEXTMENU
if ( nMsg == WM_CONTEXTMENU )
{
wxTreeEvent event( wxEVT_COMMAND_TREE_ITEM_MENU, GetId() );
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
}
}
#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
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);
}