+int wxNotebook::HitTest(const wxPoint& pt, long * flags) const
+{
+ int resultV = wxNOT_FOUND;
+
+ const int countPages = GetPageCount();
+
+ // we have to convert from Client to Window relative coordinates
+ wxPoint adjustedPt = pt + GetClientAreaOrigin();
+ // and now to HIView native ones
+ adjustedPt.x -= MacGetLeftBorderSize() ;
+ adjustedPt.y -= MacGetTopBorderSize() ;
+
+ HIPoint hipoint= { adjustedPt.x , adjustedPt.y } ;
+ HIViewPartCode outPart = 0 ;
+ OSStatus err = HIViewGetPartHit( m_peer->GetControlRef(), &hipoint, &outPart );
+
+ int max = m_peer->GetMaximum() ;
+ if ( outPart == 0 && max > 0 )
+ {
+ // this is a hack, as unfortunately a hit on an already selected tab returns 0,
+ // so we have to go some extra miles to make sure we select something different
+ // and try again ..
+ int val = m_peer->GetValue() ;
+ int maxval = max ;
+ if ( max == 1 )
+ {
+ m_peer->SetMaximum( 2 ) ;
+ maxval = 2 ;
+ }
+
+ if ( val == 1 )
+ m_peer->SetValue( maxval ) ;
+ else
+ m_peer->SetValue( 1 ) ;
+
+ err = HIViewGetPartHit( m_peer->GetControlRef(), &hipoint, &outPart );
+
+ m_peer->SetValue( val ) ;
+ if ( max == 1 )
+ m_peer->SetMaximum( 1 ) ;
+ }
+
+ if ( outPart >= 1 && outPart <= countPages )
+ resultV = outPart - 1 ;
+
+ if (flags != NULL)
+ {
+ *flags = 0;
+
+ // we cannot differentiate better
+ if (resultV >= 0)
+ *flags |= wxBK_HITTEST_ONLABEL;
+ else
+ *flags |= wxBK_HITTEST_NOWHERE;
+ }
+
+ return resultV;
+}
+
+// Added by Mark Newsam
+// When a page is added or deleted to the notebook this function updates
+// information held in the control so that it matches the order
+// the user would expect.
+//