From: Robert Roebling Date: Sun, 8 Oct 2006 15:59:53 +0000 (+0000) Subject: [ 1572220 ] Show popup when wxComboCtrl image area clicked X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/1efad474fdc991183054287762e93756c5084e6c?ds=inline [ 1572220 ] Show popup when wxComboCtrl image area clicked git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41731 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/combo.h b/include/wx/combo.h index 25dc298df4..55b1e2d481 100644 --- a/include/wx/combo.h +++ b/include/wx/combo.h @@ -90,7 +90,9 @@ enum // Flags used by PreprocessMouseEvent and HandleButtonMouseEvent enum { - wxCC_MF_ON_BUTTON = 0x0001 // cursor is on dropbutton area + wxCC_MF_ON_BUTTON = 0x0001, // cursor is on dropbutton area + wxCC_MF_ON_CLICK_AREA = 0x0002 // cursor is on dropbutton or other area + // that can be clicked to show the popup. }; diff --git a/src/common/combocmn.cpp b/src/common/combocmn.cpp index deeff9218a..44bdce8103 100644 --- a/src/common/combocmn.cpp +++ b/src/common/combocmn.cpp @@ -1302,26 +1302,17 @@ bool wxComboCtrlBase::HandleButtonMouseEvent( wxMouseEvent& event, } else if ( type == wxEVT_LEFT_DOWN ) { - // Only accept event if it wasn't right after popup dismiss - //if ( ::wxGetLocalTimeMillis() > m_timeCanClick ) + if ( flags & (wxCC_MF_ON_CLICK_AREA|wxCC_MF_ON_BUTTON) ) { - // Need to test this, because it might be outside. - if ( flags & wxCC_MF_ON_BUTTON ) - { - m_btnState |= wxCONTROL_PRESSED; - Refresh(); + m_btnState |= wxCONTROL_PRESSED; + Refresh(); - if ( !(m_iFlags & wxCC_POPUP_ON_MOUSE_UP) ) - OnButtonClick(); - else - // If showing popup now, do not capture mouse or there will be interference - CaptureMouse(); - } + if ( !(m_iFlags & wxCC_POPUP_ON_MOUSE_UP) ) + OnButtonClick(); + else + // If showing popup now, do not capture mouse or there will be interference + CaptureMouse(); } - /*else - { - m_btnState = 0; - }*/ } else if ( type == wxEVT_LEFT_UP ) { @@ -1335,7 +1326,7 @@ bool wxComboCtrlBase::HandleButtonMouseEvent( wxMouseEvent& event, // If mouse was inside, fire the click event. if ( m_iFlags & wxCC_POPUP_ON_MOUSE_UP ) { - if ( flags & wxCC_MF_ON_BUTTON ) + if ( flags & (wxCC_MF_ON_CLICK_AREA|wxCC_MF_ON_BUTTON) ) OnButtonClick(); } diff --git a/src/generic/combog.cpp b/src/generic/combog.cpp index 1ad84ee1db..5864782b95 100644 --- a/src/generic/combog.cpp +++ b/src/generic/combog.cpp @@ -280,11 +280,10 @@ void wxGenericComboCtrl::OnPaintEvent( wxPaintEvent& WXUNUSED(event) ) void wxGenericComboCtrl::OnMouseEvent( wxMouseEvent& event ) { - bool isOnButtonArea = m_btnArea.Contains(event.m_x,event.m_y); + int mx = event.m_x; + bool isOnButtonArea = m_btnArea.Contains(mx,event.m_y); int handlerFlags = isOnButtonArea ? wxCC_MF_ON_BUTTON : 0; - // Preprocessing fabricates double-clicks and prevents - // (it may also do other common things in future) if ( PreprocessMouseEvent(event,handlerFlags) ) return; @@ -301,8 +300,11 @@ void wxGenericComboCtrl::OnMouseEvent( wxMouseEvent& event ) } else { - if ( isOnButtonArea || HasCapture() ) + if ( isOnButtonArea || HasCapture() || + (m_widthCustomPaint && mx < (m_tcArea.x+m_widthCustomPaint)) ) { + handlerFlags |= wxCC_MF_ON_CLICK_AREA; + if ( HandleButtonMouseEvent(event,handlerFlags) ) return; } diff --git a/src/msw/combo.cpp b/src/msw/combo.cpp index 3c28925719..85866cb9eb 100644 --- a/src/msw/combo.cpp +++ b/src/msw/combo.cpp @@ -489,11 +489,10 @@ void wxComboCtrl::OnPaintEvent( wxPaintEvent& WXUNUSED(event) ) void wxComboCtrl::OnMouseEvent( wxMouseEvent& event ) { - bool isOnButtonArea = m_btnArea.Contains(event.m_x,event.m_y); + int mx = event.m_x; + bool isOnButtonArea = m_btnArea.Contains(mx,event.m_y); int handlerFlags = isOnButtonArea ? wxCC_MF_ON_BUTTON : 0; - // Preprocessing fabricates double-clicks and prevents - // (it may also do other common things in future) if ( PreprocessMouseEvent(event,isOnButtonArea) ) return; @@ -507,8 +506,11 @@ void wxComboCtrl::OnMouseEvent( wxMouseEvent& event ) } else { - if ( isOnButtonArea || HasCapture() ) + if ( isOnButtonArea || HasCapture() || + (m_widthCustomPaint && mx < (m_tcArea.x+m_widthCustomPaint)) ) { + handlerFlags |= wxCC_MF_ON_CLICK_AREA; + if ( HandleButtonMouseEvent(event,handlerFlags) ) return; }