]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/treectrl.cpp
Patch [ 1816051 ] MSW DrawEllipticArc inconsistent with other platforms
[wxWidgets.git] / src / msw / treectrl.cpp
index 96bf25a0b5eea4df84a659bf0462327f9cb0686b..f7e310659d81e51030f04a68a37d448a8fb93444 100644 (file)
@@ -1354,7 +1354,15 @@ wxTreeItemId wxTreeCtrl::GetNextVisible(const wxTreeItemId& item) const
     wxCHECK_MSG( item.IsOk(), wxTreeItemId(), wxT("invalid tree item") );
     wxASSERT_MSG( IsVisible(item), wxT("The item you call GetNextVisible() for must be visible itself!"));
 
-    return wxTreeItemId(TreeView_GetNextVisible(GetHwnd(), HITEM(item)));
+    wxTreeItemId next(TreeView_GetNextVisible(GetHwnd(), HITEM(item)));
+    if ( next.IsOk() && !IsVisible(next) )
+    {
+        // Win32 considers that any non-collapsed item is visible while we want
+        // to return only really visible items
+        next.Unset();
+    }
+
+    return next;
 }
 
 wxTreeItemId wxTreeCtrl::GetPrevVisible(const wxTreeItemId& item) const
@@ -1362,7 +1370,15 @@ wxTreeItemId wxTreeCtrl::GetPrevVisible(const wxTreeItemId& item) const
     wxCHECK_MSG( item.IsOk(), wxTreeItemId(), wxT("invalid tree item") );
     wxASSERT_MSG( IsVisible(item), wxT("The item you call GetPrevVisible() for must be visible itself!"));
 
-    return wxTreeItemId(TreeView_GetPrevVisible(GetHwnd(), HITEM(item)));
+    wxTreeItemId prev(TreeView_GetPrevVisible(GetHwnd(), HITEM(item)));
+    if ( prev.IsOk() && !IsVisible(prev) )
+    {
+        // just as above, Win32 function will happily return the previous item
+        // in the tree for the first visible item too
+        prev.Unset();
+    }
+
+    return prev;
 }
 
 // ----------------------------------------------------------------------------