button bug fix

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@43185 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Benjamin Williams 2006-11-08 07:44:07 +00:00
parent a93d5af846
commit 9b3f654a4c
2 changed files with 23 additions and 10 deletions

View File

@ -456,6 +456,7 @@ protected:
wxWindow* m_click_tab;
bool m_is_dragging;
wxAuiTabContainerButton* m_hover_button;
wxAuiTabContainerButton* m_pressed_button;
#ifndef SWIG
DECLARE_CLASS(wxAuiTabCtrl)

View File

@ -1834,6 +1834,7 @@ wxAuiTabCtrl::wxAuiTabCtrl(wxWindow* parent,
m_click_pt = wxDefaultPosition;
m_is_dragging = false;
m_hover_button = NULL;
m_pressed_button = NULL;
}
wxAuiTabCtrl::~wxAuiTabCtrl()
@ -1867,14 +1868,12 @@ void wxAuiTabCtrl::OnLeftDown(wxMouseEvent& evt)
m_click_pt = wxDefaultPosition;
m_is_dragging = false;
m_click_tab = NULL;
m_pressed_button = NULL;
wxWindow* wnd;
if (TabHitTest(evt.m_x, evt.m_y, &wnd))
{
if (m_flags & wxAUI_NB_CLOSE_ON_ACTIVE_TAB)
m_hover_button = NULL;
{
wxAuiNotebookEvent e(wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGING, m_windowId);
e.SetSelection(GetIdxFromWindow(wnd));
e.SetOldSelection(GetActivePage());
@ -1888,13 +1887,14 @@ void wxAuiTabCtrl::OnLeftDown(wxMouseEvent& evt)
if (m_hover_button)
{
m_hover_button->cur_state = wxAUI_BUTTON_STATE_PRESSED;
m_pressed_button = m_hover_button;
m_pressed_button->cur_state = wxAUI_BUTTON_STATE_PRESSED;
Refresh();
Update();
}
}
void wxAuiTabCtrl::OnLeftUp(wxMouseEvent&)
void wxAuiTabCtrl::OnLeftUp(wxMouseEvent& evt)
{
if (GetCapture() == this)
ReleaseMouse();
@ -1909,19 +1909,31 @@ void wxAuiTabCtrl::OnLeftUp(wxMouseEvent&)
return;
}
if (m_hover_button)
if (m_pressed_button)
{
m_hover_button->cur_state = wxAUI_BUTTON_STATE_HOVER;
// make sure we're still clicking the button
wxAuiTabContainerButton* button = NULL;
if (!ButtonHitTest(evt.m_x, evt.m_y, &button))
return;
if (button != m_pressed_button)
{
m_pressed_button = NULL;
return;
}
Refresh();
Update();
if (!(m_hover_button->cur_state & wxAUI_BUTTON_STATE_DISABLED))
if (!(m_pressed_button->cur_state & wxAUI_BUTTON_STATE_DISABLED))
{
wxAuiNotebookEvent evt(wxEVT_COMMAND_AUINOTEBOOK_BUTTON, m_windowId);
evt.SetInt(m_hover_button->id);
evt.SetInt(m_pressed_button->id);
evt.SetEventObject(this);
GetEventHandler()->ProcessEvent(evt);
}
m_pressed_button = NULL;
}
m_click_pt = wxDefaultPosition;