diff --git a/docs/changes.txt b/docs/changes.txt index 5969f3b391..4efea97d7b 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -108,6 +108,7 @@ All (GUI): - Fix retrieving bounding box for wxDC with transformed coordinates. - Fix wxGraphicsMatrixData::Concat() for Direct2D and Cairo renderers. - Fix calculating point position in wxDataViewCtrl::HitTest(). +- Fix position of the rectangle returned by wxDataViewCtrl::GetItemRect(). wxGTK: diff --git a/interface/wx/dataview.h b/interface/wx/dataview.h index 7517edea55..f9c37a3c0a 100644 --- a/interface/wx/dataview.h +++ b/interface/wx/dataview.h @@ -1395,11 +1395,8 @@ public: int GetIndent() const; /** - Returns item rectangle. - - This method is currently not implemented at all in wxGTK and only - implemented for non-@NULL @a col argument in wxOSX. It is fully - implemented in the generic version of the control. + Returns item rectangle. Coordinates of the rectangle are specified in + wxDataViewCtrl client area coordinates. @param item A valid item. @@ -1407,6 +1404,10 @@ public: If non-@NULL, the rectangle returned corresponds to the intersection of the item with the specified column. If @NULL, the rectangle spans all the columns. + + @note This method is currently not implemented at all in wxGTK and only + implemented for non-@NULL @a col argument in wxOSX. It is fully + implemented in the generic version of the control. */ virtual wxRect GetItemRect(const wxDataViewItem& item, const wxDataViewColumn* col = NULL) const; diff --git a/src/generic/datavgen.cpp b/src/generic/datavgen.cpp index d35af10b3b..9c9a87fb17 100644 --- a/src/generic/datavgen.cpp +++ b/src/generic/datavgen.cpp @@ -5349,7 +5349,12 @@ void wxDataViewCtrl::HitTest( const wxPoint & point, wxDataViewItem & item, wxRect wxDataViewCtrl::GetItemRect( const wxDataViewItem & item, const wxDataViewColumn* column ) const { - return m_clientArea->GetItemRect(item, column); + // Convert position from the main window coordinates to the control coordinates. + // (They can be different due to the presence of the header.). + wxRect r = m_clientArea->GetItemRect(item, column); + const wxPoint ctrlPos = ScreenToClient(m_clientArea->ClientToScreen(r.GetPosition())); + r.SetPosition(ctrlPos); + return r; } wxDataViewItem wxDataViewCtrl::GetItemByRow( unsigned int row ) const