]> git.saurik.com Git - wxWidgets.git/commitdiff
fixed TREE_ITEM_MENU generation from right mouse clicks: don't pass WM_RBUTTONDOWN...
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 2 Apr 2005 13:48:56 +0000 (13:48 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 2 Apr 2005 13:48:56 +0000 (13:48 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@33264 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/msw/treectrl.cpp

index 8250f4878250ead0e8ada0995bf88173a7f9277f..4e277888cf91abe7e7d6b2d7b9672e9f9083270f 100644 (file)
@@ -2239,7 +2239,7 @@ WXLRESULT wxTreeCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lPara
 {
     bool processed = false;
     WXLRESULT rc = 0;
-    bool isMultiple = (GetWindowStyle() & wxTR_MULTIPLE) != 0;
+    bool isMultiple = HasFlag(wxTR_MULTIPLE);
 
 #ifdef WM_CONTEXTMENU
     if ( nMsg == WM_CONTEXTMENU )
@@ -2248,12 +2248,11 @@ WXLRESULT wxTreeCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lPara
         event.m_item = GetSelection();
         event.SetEventObject( this );
         if ( GetEventHandler()->ProcessEvent(event) )
-            return true;
+            processed = true;
         //else: continue with generating wxEVT_CONTEXT_MENU in base class code
     }
-#endif // __SMARTPHONE__
-
-    if ( (nMsg >= WM_MOUSEFIRST) && (nMsg <= WM_MOUSELAST) )
+#endif // WM_CONTEXTMENU
+    else if ( (nMsg >= WM_MOUSEFIRST) && (nMsg <= WM_MOUSELAST) )
     {
         // we only process mouse messages here and these parameters have the
         // same meaning for all of them
@@ -2276,6 +2275,13 @@ WXLRESULT wxTreeCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lPara
                 // newly selected item
                 ::SelectItem(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;
 
 #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,
             // which may happen perfectly well
             if ( TreeView_GetItemRect(GetHwnd(), HITEM_PTR(selections[n]),
-                                      &rect, true) )
+                                      &rect, TRUE) )
             {
-                ::InvalidateRect(GetHwnd(), &rect, false);
+                ::InvalidateRect(GetHwnd(), &rect, FALSE);
             }
         }
     }