diff --git a/include/wx/univ/toolbar.h b/include/wx/univ/toolbar.h index 968bf6c267..823888bda4 100644 --- a/include/wx/univ/toolbar.h +++ b/include/wx/univ/toolbar.h @@ -152,6 +152,8 @@ public: virtual bool HandleKey(wxInputConsumer *consumer, const wxKeyEvent& event, bool pressed); + virtual bool HandleMouse(wxInputConsumer *consumer, + const wxMouseEvent& event); virtual bool HandleMouseMove(wxInputConsumer *consumer, const wxMouseEvent& event); virtual bool HandleFocus(wxInputConsumer *consumer, const wxFocusEvent& event); virtual bool HandleActivation(wxInputConsumer *consumer, bool activated); diff --git a/src/univ/toolbar.cpp b/src/univ/toolbar.cpp index ce2d9b67af..c995466a66 100644 --- a/src/univ/toolbar.cpp +++ b/src/univ/toolbar.cpp @@ -512,6 +512,10 @@ void wxToolBar::Press() { wxCHECK_RET( m_toolCurrent, _T("no tool to press?") ); + wxLogTrace(_T("toolbar"), + _T("Button '%s' pressed."), + m_toolCurrent->GetShortHelp().c_str()); + // this is the tool whose state is going to change m_toolPressed = (wxToolBarTool *)m_toolCurrent; @@ -526,14 +530,15 @@ void wxToolBar::Release() { wxCHECK_RET( m_toolPressed, _T("no tool to release?") ); + wxLogTrace(_T("toolbar"), + _T("Button '%s' released."), + m_toolCurrent->GetShortHelp().c_str()); + wxASSERT_MSG( m_toolPressed->IsInverted(), _T("release unpressed button?") ); m_toolPressed->Invert(); RefreshTool(m_toolPressed); - - // we're going to lose the mouse capture - m_toolPressed = NULL; } void wxToolBar::Toggle() @@ -639,6 +644,20 @@ bool wxStdToolbarInputHandler::HandleKey(wxInputConsumer *consumer, return wxStdInputHandler::HandleKey(consumer, event, pressed); } +bool wxStdToolbarInputHandler::HandleMouse(wxInputConsumer *consumer, + const wxMouseEvent& event) +{ + // don't let the base class press the disabled buttons but simply ignore + // all events on them + wxToolBar *tbar = wxStaticCast(consumer->GetInputWindow(), wxToolBar); + wxToolBarToolBase *tool = tbar->FindToolForPosition(event.GetX(), event.GetY()); + + if ( tool && !tool->IsEnabled() ) + return TRUE; + + return wxStdButtonInputHandler::HandleMouse(consumer, event); +} + bool wxStdToolbarInputHandler::HandleMouseMove(wxInputConsumer *consumer, const wxMouseEvent& event) {