From: Vadim Zeitlin Date: Sun, 21 Apr 2013 17:39:43 +0000 (+0000) Subject: Fix hit testing in generic wxDataViewToggleRenderer. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/9483e1ac7739c2f920067c2a9343f1b158bc975c Fix hit testing in generic wxDataViewToggleRenderer. Handle clicks on the checkboxes in generic wxDataViewCtrl correctly by taking into account that the checkbox rectangle is centred inside the total cell rectangle. Closes #15144. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73835 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/generic/datavgen.cpp b/src/generic/datavgen.cpp index 2334084bcd..ba18a3bdea 100644 --- a/src/generic/datavgen.cpp +++ b/src/generic/datavgen.cpp @@ -1090,7 +1090,7 @@ bool wxDataViewToggleRenderer::Render( wxRect cell, wxDC *dc, int WXUNUSED(state return true; } -bool wxDataViewToggleRenderer::WXActivateCell(const wxRect& WXUNUSED(cell), +bool wxDataViewToggleRenderer::WXActivateCell(const wxRect& cellRect, wxDataViewModel *model, const wxDataViewItem& item, unsigned int col, @@ -1098,8 +1098,16 @@ bool wxDataViewToggleRenderer::WXActivateCell(const wxRect& WXUNUSED(cell), { if ( mouseEvent ) { - // only react to clicks directly on the checkbox, not elsewhere in the same cell: - if ( !wxRect(GetSize()).Contains(mouseEvent->GetPosition()) ) + // Only react to clicks directly on the checkbox, not elsewhere in the + // same cell. + // + // We suppose that the checkbox is centred in the total cell rectangle + // as this is how it's rendered, at least under MSW. If this turns out + // to be a wrong assumption, we probably would need to do the hit test + // checking in wxRendererNative but for now this simple solution works. + const wxRect checkRect = wxRect(GetSize()).CentreIn(cellRect); + + if ( !checkRect.Contains(mouseEvent->GetPosition()) ) return false; }