m_defaultWidth = DEFAULTBITMAPX;
m_defaultHeight = DEFAULTBITMAPY;
+
+ m_pInTool = 0;
}
bool wxToolBar::Create(wxWindow *parent,
{
// we must refresh the frame size when the toolbar is deleted but the frame
// is not - otherwise toolbar leaves a hole in the place it used to occupy
- //
- // NB: a frame is being deleted only if it is not any longer in
- // wxTopLevelWindows list
wxFrame *frame = wxDynamicCast(GetParent(), wxFrame);
- if ( frame && wxTopLevelWindows.Find(frame) )
+ if ( frame && !frame->IsBeingDeleted() )
{
frame->SendSizeEvent();
}
}
}
-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;
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()