X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8a0681f9338345d0ef32b2ad809d49fd20861119..93d2bf4406e5f850189f827275c66ef99bb64791:/src/common/tbarbase.cpp diff --git a/src/common/tbarbase.cpp b/src/common/tbarbase.cpp index 7864d099dd..dbce9ffff6 100644 --- a/src/common/tbarbase.cpp +++ b/src/common/tbarbase.cpp @@ -28,8 +28,9 @@ #pragma hdrstop #endif +#if wxUSE_TOOLBAR + #ifndef WX_PRECOMP - #include "wx/wx.h" #endif #include "wx/frame.h" @@ -39,19 +40,17 @@ #include #endif -#if wxUSE_TOOLBAR - #include "wx/tbarbase.h" // ---------------------------------------------------------------------------- // wxWindows macros // ---------------------------------------------------------------------------- -#if !USE_SHARED_LIBRARY - BEGIN_EVENT_TABLE(wxToolBarBase, wxControl) - EVT_IDLE(wxToolBarBase::OnIdle) - END_EVENT_TABLE() -#endif +IMPLEMENT_CLASS(wxToolBarBase, wxControl) + +BEGIN_EVENT_TABLE(wxToolBarBase, wxControl) + EVT_IDLE(wxToolBarBase::OnIdle) +END_EVENT_TABLE() #include "wx/listimpl.cpp" @@ -403,6 +402,15 @@ wxObject *wxToolBarBase::GetToolClientData(int id) const return tool ? tool->GetClientData() : (wxObject *)NULL; } +void wxToolBarBase::SetToolClientData(int id, wxObject *clientData) +{ + wxToolBarToolBase *tool = FindById(id); + + wxCHECK_RET( tool, _T("no such tool in wxToolBar::SetToolClientData") ); + + tool->SetClientData(clientData); +} + bool wxToolBarBase::GetToolState(int id) const { wxToolBarToolBase *tool = FindById(id); @@ -459,7 +467,12 @@ bool wxToolBarBase::OnLeftClick(int id, bool toggleDown) { wxCommandEvent event(wxEVT_COMMAND_TOOL_CLICKED, id); event.SetEventObject(this); - event.SetExtraLong((long) toggleDown); + + // we use SetInt() to make wxCommandEvent::IsChecked() return toggleDown + event.SetInt((int)toggleDown); + + // and SetExtraLong() for backwards compatibility + event.SetExtraLong((long)toggleDown); // Send events to this toolbar instead (and thence up the window hierarchy) GetEventHandler()->ProcessEvent(event); @@ -517,7 +530,17 @@ void wxToolBarBase::OnIdle(wxIdleEvent& event) // Do the toolbar button updates (check for EVT_UPDATE_UI handlers) void wxToolBarBase::DoToolbarUpdates() { - wxEvtHandler* evtHandler = GetEventHandler(); + wxWindow* parent = this; + while (parent->GetParent()) + parent = parent->GetParent(); + +#ifdef __WXMSW__ + wxWindow* focusWin = wxFindFocusDescendant(parent); +#else + wxWindow* focusWin = (wxWindow*) NULL; +#endif + + wxEvtHandler* evtHandler = focusWin ? focusWin->GetEventHandler() : GetEventHandler() ; for ( wxToolBarToolsList::Node* node = m_tools.GetFirst(); node;