diff --git a/src/gtk/dataview.cpp b/src/gtk/dataview.cpp index 767334e004..7d8140d153 100644 --- a/src/gtk/dataview.cpp +++ b/src/gtk/dataview.cpp @@ -3171,6 +3171,14 @@ gtk_dataview_header_button_press_callback( GtkWidget *WXUNUSED(widget), return FALSE; } +// Helper for wxGtkTreeCellDataFunc() below. +static void wxGtkTreeSetVisibleProp(GtkCellRenderer *renderer, gboolean visible) +{ + wxGtkValue gvalue( G_TYPE_BOOLEAN ); + g_value_set_boolean( gvalue, visible ); + g_object_set_property( G_OBJECT(renderer), "visible", gvalue ); +} + extern "C" { @@ -3200,16 +3208,22 @@ static void wxGtkTreeCellDataFunc( GtkTreeViewColumn *WXUNUSED(column), if (!wx_model->IsVirtualListModel()) { gboolean visible = wx_model->HasValue(item, column); - wxGtkValue gvalue( G_TYPE_BOOLEAN ); - g_value_set_boolean( gvalue, visible ); - g_object_set_property( G_OBJECT(renderer), "visible", gvalue ); + wxGtkTreeSetVisibleProp(renderer, visible); if ( !visible ) return; } cell->GtkSetCurrentItem(item); - cell->PrepareForItem(wx_model, item, column); + + if (!cell->PrepareForItem(wx_model, item, column)) + { + // We don't have any value in this cell, after all, so hide it. + if (!wx_model->IsVirtualListModel()) + { + wxGtkTreeSetVisibleProp(renderer, FALSE); + } + } } } // extern "C"