]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/treectrl.cpp
pass correct tool id (and not always -1) to EVT_TOOL_RCLICKED() handler
[wxWidgets.git] / src / msw / treectrl.cpp
index b7329c5289178ace09ea60d6e6d3b0dc8790acda..b74ae1f2ae25b524821af14eda8e738c48586c0d 100644 (file)
@@ -2053,7 +2053,7 @@ wxTextCtrl* wxTreeCtrl::EditLabel(const wxTreeItemId& item,
 }
 
 // End label editing, optionally cancelling the edit
-void wxTreeCtrl::EndEditLabel(const wxTreeItemId& WXUNUSED(item), bool discardChanges)
+void wxTreeCtrl::DoEndEditLabel(bool discardChanges)
 {
     TreeView_EndEditLabelNow(GetHwnd(), discardChanges);
 
@@ -2219,6 +2219,16 @@ WXLRESULT wxTreeCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lPara
     WXLRESULT rc = 0;
     bool isMultiple = (GetWindowStyle() & wxTR_MULTIPLE) != 0;
 
+    if (nMsg == WM_CONTEXTMENU)
+    {
+        wxTreeEvent event( wxEVT_COMMAND_TREE_ITEM_MENU, GetId() );
+        event.m_item = GetSelection();
+        event.SetEventObject( this );
+        GetEventHandler()->ProcessEvent( event );
+        
+        return rc;
+    }
+
     if ( (nMsg >= WM_MOUSEFIRST) && (nMsg <= WM_MOUSELAST) )
     {
         // we only process mouse messages here and these parameters have the
@@ -2476,6 +2486,24 @@ WXLRESULT wxTreeCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lPara
             processed = true;
         }
     }
+    else if ( nMsg == WM_COMMAND )
+    {
+        // if we receive a EN_KILLFOCUS command from the in-place edit control
+        // used for label editing, make sure to end editing
+        WORD id, cmd;
+        WXHWND hwnd;
+        UnpackCommand(wParam, lParam, &id, &hwnd, &cmd);
+
+        if ( cmd == EN_KILLFOCUS )
+        {
+            if ( m_textCtrl && m_textCtrl->GetHandle() == hwnd )
+            {
+                DoEndEditLabel();
+
+                processed = true;
+            }
+        }
+    }
 
     if ( !processed )
         rc = wxControl::MSWWindowProc(nMsg, wParam, lParam);