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
This commit is contained in:
Vadim Zeitlin
2012-09-28 23:49:20 +00:00
parent eae48ea12d
commit 209dc298e2
2 changed files with 43 additions and 23 deletions

View File

@@ -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();
}
}

View File

@@ -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))
if((instance.base->state & wxRIBBON_BUTTONBAR_BUTTON_DISABLED) == 0)
{
new_hovered_state |= wxRIBBON_BUTTONBAR_BUTTON_NORMAL_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;
}
if(size.dropdown_region.Contains(offset))
{
new_hovered_state |= wxRIBBON_BUTTONBAR_BUTTON_DROPDOWN_HOVERED;
}
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;
}
}
}
}