diff --git a/include/wx/dvrenderers.h b/include/wx/dvrenderers.h index ca14b16a42..a9c5156186 100644 --- a/include/wx/dvrenderers.h +++ b/include/wx/dvrenderers.h @@ -180,6 +180,9 @@ public: // wxDVR_DEFAULT_ALIGNMENT. int GetEffectiveAlignment() const; + // Send wxEVT_DATAVIEW_ITEM_EDITING_STARTED event. + void NotifyEditingStarted(const wxDataViewItem& item); + protected: // These methods are called from PrepareForItem() and should do whatever is // needed for the current platform to ensure that the item is rendered diff --git a/src/common/datavcmn.cpp b/src/common/datavcmn.cpp index de6f21f9ea..d7c7b04bb3 100644 --- a/src/common/datavcmn.cpp +++ b/src/common/datavcmn.cpp @@ -703,15 +703,22 @@ bool wxDataViewRendererBase::StartEditing( const wxDataViewItem &item, wxRect la m_editorCtrl->SetFocus(); #endif - // Now we should send Editing Started event + NotifyEditingStarted(item); + + return true; +} + +void wxDataViewRendererBase::NotifyEditingStarted(const wxDataViewItem& item) +{ + wxDataViewColumn* const column = GetOwner(); + wxDataViewCtrl* const dv_ctrl = column->GetOwner(); + wxDataViewEvent event( wxEVT_DATAVIEW_ITEM_EDITING_STARTED, dv_ctrl->GetId() ); - event.SetDataViewColumn( GetOwner() ); + event.SetDataViewColumn( column ); event.SetModel( dv_ctrl->GetModel() ); event.SetItem( item ); event.SetEventObject( dv_ctrl ); dv_ctrl->GetEventHandler()->ProcessEvent( event ); - - return true; } void wxDataViewRendererBase::DestroyEditControl() diff --git a/src/gtk/dataview.cpp b/src/gtk/dataview.cpp index 3455a205b0..0e93eeda0a 100644 --- a/src/gtk/dataview.cpp +++ b/src/gtk/dataview.cpp @@ -1767,12 +1767,8 @@ wxgtk_renderer_editing_started( GtkCellRenderer *WXUNUSED(cell), GtkCellEditable wxDataViewColumn *column = wxrenderer->GetOwner(); wxDataViewCtrl *dv = column->GetOwner(); - wxDataViewEvent event( wxEVT_DATAVIEW_ITEM_EDITING_STARTED, dv->GetId() ); - event.SetDataViewColumn( column ); - event.SetModel( dv->GetModel() ); wxDataViewItem item(dv->GTKPathToItem(wxGtkTreePath(path))); - event.SetItem( item ); - dv->HandleWindowEvent( event ); + wxrenderer->NotifyEditingStarted(item); if (GTK_IS_CELL_EDITABLE(editable)) { diff --git a/src/osx/cocoa/dataview.mm b/src/osx/cocoa/dataview.mm index 259e9a62a5..0690d4456f 100644 --- a/src/osx/cocoa/dataview.mm +++ b/src/osx/cocoa/dataview.mm @@ -1886,22 +1886,20 @@ outlineView:(NSOutlineView*)outlineView wxDataViewColumn* const col([static_cast(tableColumn) getColumnPointer]); - wxDataViewCtrl* const dvc = implementation->GetDataViewCtrl(); - - // stop editing of a custom item first (if necessary) dvc->FinishCustomItemEditing(); // now, send the event: - wxDataViewEvent - event(wxEVT_DATAVIEW_ITEM_EDITING_STARTED,dvc->GetId()); - - event.SetEventObject(dvc); - event.SetItem( - wxDataViewItemFromItem([self itemAtRow:currentlyEditedRow])); - event.SetColumn(dvc->GetColumnPosition(col)); - event.SetDataViewColumn(col); - dvc->GetEventHandler()->ProcessEvent(event); + wxDataViewRenderer* const renderer = col->GetRenderer(); + if ( renderer ) + { + renderer->NotifyEditingStarted + ( + wxDataViewItemFromItem([self itemAtRow:currentlyEditedRow]) + ); + } + //else: we should always have a renderer but don't crash if for some + // unfathomable reason we don't have it } -(void) textDidEndEditing:(NSNotification*)notification