]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/treebkg.cpp
don't crash when destroying a not initialized socket (patch 1489095)
[wxWidgets.git] / src / generic / treebkg.cpp
index 165422a7059960e05a405c5f54326c0032066618..57593a5bb1a778fc21822932ecca2d6d7ac4abe5 100644 (file)
 #if wxUSE_TREEBOOK
 
 #include "wx/treebook.h"
+
+#ifndef WX_PRECOMP
+    #include "wx/settings.h"
+#endif
+
 #include "wx/imaglist.h"
-#include "wx/settings.h"
 
 // ----------------------------------------------------------------------------
 // various wxWidgets macros
@@ -100,7 +104,9 @@ wxTreebook::Create(wxWindow *parent,
                     wxID_TREEBOOKTREEVIEW,
                     wxDefaultPosition,
                     wxDefaultSize,
-                    wxBORDER_SIMPLE |
+#ifndef __WXMSW__
+                    wxBORDER_SIMPLE | // On wxMSW this produces a black border which is wrong
+#endif
                     wxTR_DEFAULT_STYLE |
                     wxTR_HIDE_ROOT |
                     wxTR_SINGLE
@@ -644,6 +650,20 @@ int wxTreebook::DoSetSelection(size_t pagePos)
     return oldSel;
 }
 
+wxTreebookPage *wxTreebook::DoGetCurrentPage() const
+{
+    if ( m_selection == wxNOT_FOUND )
+        return NULL;
+
+    wxTreebookPage *page = wxBookCtrlBase::GetPage(m_selection);
+    if ( !page && m_actualSelection != wxNOT_FOUND )
+    {
+        page = wxBookCtrlBase::GetPage(m_actualSelection);
+    }
+
+    return page;
+}
+
 void wxTreebook::SetImageList(wxImageList *imageList)
 {
     wxBookCtrlBase::SetImageList(imageList);
@@ -703,18 +723,25 @@ void wxTreebook::OnTreeNodeExpandedCollapsed(wxTreeEvent & event)
 // wxTreebook geometry management
 // ----------------------------------------------------------------------------
 
-wxTreebookPage * wxTreebook::DoGetCurrentPage() const
+int wxTreebook::HitTest(wxPoint const & pt, long * WXUNUSED(flags)) const
 {
-    if ( m_selection == wxNOT_FOUND )
-        return NULL;
+    int pagePos = wxNOT_FOUND;
 
-    wxTreebookPage *page = wxBookCtrlBase::GetPage(m_selection);
-    if ( !page && m_actualSelection != wxNOT_FOUND )
+    wxTreeCtrl * const tree = GetTreeCtrl();
+    const wxPoint treePt = ClientToScreen(tree->ScreenToClient(pt));
+
+    if ( wxRect(tree->GetSize()).Inside(treePt) )
     {
-        page = wxBookCtrlBase::GetPage(m_actualSelection);
+        int flagsTree;
+        wxTreeItemId id = tree->HitTest(treePt, flagsTree);
+
+        if ( id.IsOk() && (flagsTree & wxTREE_HITTEST_ONITEM) )
+        {
+            pagePos = DoInternalFindPageById(id);
+        }
     }
 
-    return page;
+    return pagePos;
 }
 
 #endif // wxUSE_TREEBOOK