]> git.saurik.com Git - wxWidgets.git/commitdiff
Fix selection events generation in multi-select wxTreeCtrl.
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 30 Aug 2009 17:24:53 +0000 (17:24 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 30 Aug 2009 17:24:53 +0000 (17:24 +0000)
Only deselect the items when the mouse is released if really necessary: add a
flag indicating when it is instead of trying to deduce it in the mouse up
handler.

Closes #11099 (thanks to Jonathan Liu).

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61784 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/msw/treectrl.h
src/msw/treectrl.cpp

index 41b8df96f15032b4fe084c29930ac471b76265eb..e2b76ae601cbb33c9bd005fceb1ccdc6f707ff24 100644 (file)
@@ -318,6 +318,9 @@ private:
     // whether we need to trigger a state image click event
     bool m_triggerStateImageClick;
 
+    // whether we need to deselect other items on mouse up
+    bool m_mouseUpDeselect;
+
     friend class wxTreeItemIndirectData;
     friend class wxTreeSortHelper;
 
index f90ba117d3b6856ad8facc0815733dafd1c83b10..b408ac740d961ef193b216d71d656e56ac3ea6fe 100644 (file)
@@ -750,6 +750,7 @@ void wxTreeCtrl::Init()
     m_focusLost = true;
     m_changingSelection = false;
     m_triggerStateImageClick = false;
+    m_mouseUpDeselect = false;
 
     // initialize the global array of events now as it can't be done statically
     // with the wxEVT_XXX values being allocated during run-time only
@@ -2876,6 +2877,7 @@ wxTreeCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
                         else
                         {
                             SetFocusedItem(wxTreeItemId(htItem));
+                            m_mouseUpDeselect = true;
                         }
                     }
                     else // click on a single selected item
@@ -3025,16 +3027,13 @@ wxTreeCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
             case WM_LBUTTONUP:
                 if ( isMultiple )
                 {
-                    // deselect other items if multiple items selected
+                    // deselect other items if needed
                     if ( htItem )
                     {
-                        wxArrayTreeItemIds selections;
-                        size_t count = GetSelections(selections);
-
-                        if ( count > 1 &&
-                             !(wParam & MK_CONTROL) &&
-                             !(wParam & MK_SHIFT) )
+                        if ( m_mouseUpDeselect )
                         {
+                            m_mouseUpDeselect = false;
+
                             wxTreeEvent changingEvent(wxEVT_COMMAND_TREE_SEL_CHANGING,
                                                       this, htItem);
                             changingEvent.m_itemOld = htOldItem;