X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c2fd78b10fe4deafcc3f8f97c74f533d05cb4519..3baaf31317b1380ba9f33f8a23ff04bd20356d63:/src/msw/tbar95.cpp?ds=sidebyside diff --git a/src/msw/tbar95.cpp b/src/msw/tbar95.cpp index 1464a65e84..3c1a1b6532 100644 --- a/src/msw/tbar95.cpp +++ b/src/msw/tbar95.cpp @@ -196,6 +196,8 @@ void wxToolBar::Init() m_defaultWidth = DEFAULTBITMAPX; m_defaultHeight = DEFAULTBITMAPY; + + m_pInTool = 0; } bool wxToolBar::Create(wxWindow *parent, @@ -866,20 +868,24 @@ wxSize wxToolBar::GetToolSize() const } } -static wxToolBarToolBase *GetItemSkippingDummySpacers( const wxToolBarToolsList& tools, size_t index ) +static +wxToolBarToolBase *GetItemSkippingDummySpacers(const wxToolBarToolsList& tools, + size_t index ) { wxToolBarToolsList::Node* current = tools.GetFirst(); - for( ; current != 0; current = current->GetNext() ) + for ( ; current != 0; current = current->GetNext() ) { - if( index == 0 ) + if ( index == 0 ) return current->GetData(); - size_t separators = ((wxToolBarTool*)current->GetData())->GetSeparatorsCount(); - // if it is a normal button, sepcount == 0, so skip 1 - // item ( the button ) - // otherwise, skip as many items as the separator count, - // plus the control itself - index -= separators ? separators + 1: 1; + + wxToolBarTool *tool = (wxToolBarTool *)current->GetData(); + size_t separators = tool->GetSeparatorsCount(); + + // if it is a normal button, sepcount == 0, so skip 1 item (the button) + // otherwise, skip as many items as the separator count, plus the + // control itself + index -= separators ? separators + 1 : 1; } return 0; @@ -891,26 +897,25 @@ wxToolBarToolBase *wxToolBar::FindToolForPosition(wxCoord x, wxCoord y) const pt.x = x; pt.y = y; int index = (int)::SendMessage(GetHwnd(), TB_HITTEST, 0, (LPARAM)&pt); - if ( index < 0 ) + // MBN: when the point ( x, y ) is close to the toolbar border + // TB_HITTEST returns m_nButtons ( not -1 ) + if ( index < 0 || (size_t)index >= m_nButtons ) { // it's a separator or there is no tool at all there return (wxToolBarToolBase *)NULL; } - // if comctl32 version < 4.71 - // wxToolBar95 adds dummy spacers + // if comctl32 version < 4.71 wxToolBar95 adds dummy spacers #if defined(_WIN32_IE) && (_WIN32_IE >= 0x400 ) if ( wxTheApp->GetComCtl32Version() >= 471 ) { return m_tools.Item((size_t)index)->GetData(); } else +#endif { return GetItemSkippingDummySpacers( m_tools, (size_t) index ); } -#else - return GetItemSkippingDummySpacers( m_tools, (size_t) index ); -#endif } void wxToolBar::UpdateSize()