X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/90c0f5a958242295e950cbd1eedbae8f5309442d..2f91e3dfd2b613494cc95fd4c9341823f56c7bc0:/src/mac/carbon/notebmac.cpp diff --git a/src/mac/carbon/notebmac.cpp b/src/mac/carbon/notebmac.cpp index 27f5e30b91..4dc955d76e 100644 --- a/src/mac/carbon/notebmac.cpp +++ b/src/mac/carbon/notebmac.cpp @@ -323,6 +323,71 @@ bool wxNotebook::InsertPage(size_t nPage, return true; } +int wxNotebook::HitTest(const wxPoint& pt, long * flags) const +{ + int resultV = wxNOT_FOUND; +#if TARGET_API_MAC_OSX + const int countPages = GetPageCount(); + + HIPoint hipoint= { pt.x , pt.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 ; + } +#endif // TARGET_API_MAC_OSX + + if (flags != NULL) + { + *flags = 0; + + // we cannot differentiate better + if (resultV >= 1) + *flags |= wxNB_HITTEST_ONLABEL; + else + *flags |= wxNB_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