From 209dc298e23ed61ee17dd063bf7cd397209f473c Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Fri, 28 Sep 2012 23:49:20 +0000 Subject: [PATCH] Don't send events for disabled ribbon bar buttons. Hover and activation events were sent even for the disabled buttons which was unexpected and inconsistent with wxRibbonToolBar, so don't do it. Closes #14709. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72574 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- samples/ribbon/ribbondemo.cpp | 16 +++++++++++++- src/ribbon/buttonbar.cpp | 50 ++++++++++++++++++++++++------------------- 2 files changed, 43 insertions(+), 23 deletions(-) diff --git a/samples/ribbon/ribbondemo.cpp b/samples/ribbon/ribbondemo.cpp index c29360c..a3933a0 100644 --- a/samples/ribbon/ribbondemo.cpp +++ b/samples/ribbon/ribbondemo.cpp @@ -94,6 +94,8 @@ public: void OnCheck(wxRibbonButtonBarEvent& evt); void OnEnable(wxRibbonButtonBarEvent& evt); void OnDisable(wxRibbonButtonBarEvent& evt); + void OnDisabled(wxRibbonButtonBarEvent& evt); + void OnEnableUpdated(wxRibbonButtonBarEvent& evt); void OnChangeText1(wxRibbonButtonBarEvent& evt); void OnChangeText2(wxRibbonButtonBarEvent& evt); void OnCircleButton(wxRibbonButtonBarEvent& evt); @@ -187,6 +189,8 @@ bool MyApp::OnInit() BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_RIBBONBUTTONBAR_CLICKED(ID_ENABLE, MyFrame::OnEnable) EVT_RIBBONBUTTONBAR_CLICKED(ID_DISABLE, MyFrame::OnDisable) +EVT_RIBBONBUTTONBAR_CLICKED(ID_DISABLED, MyFrame::OnDisabled) +EVT_RIBBONBUTTONBAR_CLICKED(ID_UI_ENABLE_UPDATED, MyFrame::OnEnableUpdated) EVT_UPDATE_UI(ID_UI_ENABLE_UPDATED, MyFrame::OnEnableUpdateUI) EVT_RIBBONBUTTONBAR_CLICKED(ID_CHECK, MyFrame::OnCheck) EVT_UPDATE_UI(ID_UI_CHECK_UPDATED, MyFrame::OnCheckUpdateUI) @@ -623,6 +627,16 @@ void MyFrame::OnDisable(wxRibbonButtonBarEvent& WXUNUSED(evt)) m_bEnabled = false; } +void MyFrame::OnDisabled(wxRibbonButtonBarEvent& WXUNUSED(evt)) +{ + AddText("ERROR: Disabled button activated (not supposed to happen)"); +} + +void MyFrame::OnEnableUpdated(wxRibbonButtonBarEvent& WXUNUSED(evt)) +{ + AddText("Button activated"); +} + void MyFrame::OnCheck(wxRibbonButtonBarEvent& WXUNUSED(evt)) { m_bChecked = !m_bChecked; @@ -1042,4 +1056,4 @@ void MyFrame::OnSizeEvent(wxSizeEvent& evt) m_ribbon->Show(); evt.Skip(); -} \ No newline at end of file +} diff --git a/src/ribbon/buttonbar.cpp b/src/ribbon/buttonbar.cpp index b04c83b..d8acaa6 100644 --- a/src/ribbon/buttonbar.cpp +++ b/src/ribbon/buttonbar.cpp @@ -993,20 +993,23 @@ void wxRibbonButtonBar::OnMouseMove(wxMouseEvent& evt) btn_rect.SetSize(size.size); if(btn_rect.Contains(cursor)) { - new_hovered = &instance; - new_hovered_state = instance.base->state; - new_hovered_state &= ~wxRIBBON_BUTTONBAR_BUTTON_HOVER_MASK; - wxPoint offset(cursor); - offset -= btn_rect.GetTopLeft(); - if(size.normal_region.Contains(offset)) - { - new_hovered_state |= wxRIBBON_BUTTONBAR_BUTTON_NORMAL_HOVERED; - } - if(size.dropdown_region.Contains(offset)) + if((instance.base->state & wxRIBBON_BUTTONBAR_BUTTON_DISABLED) == 0) { - new_hovered_state |= wxRIBBON_BUTTONBAR_BUTTON_DROPDOWN_HOVERED; + new_hovered = &instance; + new_hovered_state = instance.base->state; + new_hovered_state &= ~wxRIBBON_BUTTONBAR_BUTTON_HOVER_MASK; + wxPoint offset(cursor); + offset -= btn_rect.GetTopLeft(); + if(size.normal_region.Contains(offset)) + { + new_hovered_state |= wxRIBBON_BUTTONBAR_BUTTON_NORMAL_HOVERED; + } + if(size.dropdown_region.Contains(offset)) + { + new_hovered_state |= wxRIBBON_BUTTONBAR_BUTTON_DROPDOWN_HOVERED; + } + break; } - break; } } @@ -1082,16 +1085,19 @@ void wxRibbonButtonBar::OnMouseDown(wxMouseEvent& evt) btn_rect.SetSize(size.size); if(btn_rect.Contains(cursor)) { - m_active_button = &instance; - cursor -= btn_rect.GetTopLeft(); - long state = 0; - if(size.normal_region.Contains(cursor)) - state = wxRIBBON_BUTTONBAR_BUTTON_NORMAL_ACTIVE; - else if(size.dropdown_region.Contains(cursor)) - state = wxRIBBON_BUTTONBAR_BUTTON_DROPDOWN_ACTIVE; - instance.base->state |= state; - Refresh(false); - break; + if((instance.base->state & wxRIBBON_BUTTONBAR_BUTTON_DISABLED) == 0) + { + m_active_button = &instance; + cursor -= btn_rect.GetTopLeft(); + long state = 0; + if(size.normal_region.Contains(cursor)) + state = wxRIBBON_BUTTONBAR_BUTTON_NORMAL_ACTIVE; + else if(size.dropdown_region.Contains(cursor)) + state = wxRIBBON_BUTTONBAR_BUTTON_DROPDOWN_ACTIVE; + instance.base->state |= state; + Refresh(false); + break; + } } } } -- 2.7.4