From acc9d5db2f6387816ae46036c3de33bf65fa4b82 Mon Sep 17 00:00:00 2001 From: Paul Cornett Date: Sun, 26 Apr 2015 11:02:26 -0700 Subject: [PATCH] Fix GTK warnings after 92c45ba when TLW is closed while editor is still shown, see #16850 --- include/wx/gtk/dvrenderer.h | 2 ++ src/gtk/dataview.cpp | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/include/wx/gtk/dvrenderer.h b/include/wx/gtk/dvrenderer.h index dfaba5609a..0d61090f5b 100644 --- a/include/wx/gtk/dvrenderer.h +++ b/include/wx/gtk/dvrenderer.h @@ -34,6 +34,8 @@ public: virtual void EnableEllipsize(wxEllipsizeMode mode = wxELLIPSIZE_MIDDLE); virtual wxEllipsizeMode GetEllipsizeMode() const; + virtual bool FinishEditing(); + // GTK-specific implementation // --------------------------- diff --git a/src/gtk/dataview.cpp b/src/gtk/dataview.cpp index a0cd048f59..021c024554 100644 --- a/src/gtk/dataview.cpp +++ b/src/gtk/dataview.cpp @@ -1840,6 +1840,24 @@ wxDataViewRenderer::wxDataViewRenderer( const wxString &varianttype, wxDataViewC // after the m_renderer pointer has been initialized } +bool wxDataViewRenderer::FinishEditing() +{ + wxWindow* editorCtrl = m_editorCtrl; + + bool ret = wxDataViewRendererBase::FinishEditing(); + + if (editorCtrl && wxGetTopLevelParent(editorCtrl)->IsBeingDeleted()) + { + // remove editor widget before editor control is deleted, + // to prevent several GTK warnings + gtk_cell_editable_remove_widget(GTK_CELL_EDITABLE(editorCtrl->m_widget)); + // delete editor control now, if it is deferred multiple erroneous + // focus-out events will occur, causing debug warnings + delete editorCtrl; + } + return ret; +} + void wxDataViewRenderer::GtkPackIntoColumn(GtkTreeViewColumn *column) { gtk_tree_view_column_pack_end( column, m_renderer, TRUE /* expand */);