From 3f53dd3a2f388772ab0d314f7f2b708e562cabc2 Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Fri, 17 Sep 2010 19:07:02 +0000 Subject: [PATCH] Postpone EnsureVisible() to idle as this sometimes seems to be required, fixes #12480: wxDataViewCtrl::EnsureVisible does not make item visible in some circumstances on GTK git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65562 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/gtk/dataview.h | 1 + src/gtk/dataview.cpp | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/include/wx/gtk/dataview.h b/include/wx/gtk/dataview.h index 79dd7ad7ad..0ca210c132 100644 --- a/include/wx/gtk/dataview.h +++ b/include/wx/gtk/dataview.h @@ -200,6 +200,7 @@ private: GtkWidget *m_treeview; wxDataViewCtrlInternal *m_internal; wxDataViewColumnList m_cols; + wxDataViewItem m_ensureVisibleDefered; virtual void AddChildGTK(wxWindowGTK* child); void GtkEnableSelectionEvents(); diff --git a/src/gtk/dataview.cpp b/src/gtk/dataview.cpp index 0ef9a32f22..a2dbd6ac08 100644 --- a/src/gtk/dataview.cpp +++ b/src/gtk/dataview.cpp @@ -4548,6 +4548,16 @@ void wxDataViewCtrl::OnInternalIdle() wxDataViewColumn *col = GetColumn( i ); col->OnInternalIdle(); } + + if (m_ensureVisibleDefered.IsOk()) + { + ExpandAncestors(m_ensureVisibleDefered); + GtkTreeIter iter; + iter.user_data = (gpointer) m_ensureVisibleDefered.GetID(); + wxGtkTreePath path(m_internal->get_path( &iter )); + gtk_tree_view_scroll_to_cell( GTK_TREE_VIEW(m_treeview), path, NULL, false, 0.0, 0.0 ); + m_ensureVisibleDefered = wxDataViewItem(0); + } } bool wxDataViewCtrl::AssociateModel( wxDataViewModel *model ) @@ -4948,6 +4958,7 @@ void wxDataViewCtrl::UnselectAll() void wxDataViewCtrl::EnsureVisible(const wxDataViewItem& item, const wxDataViewColumn *WXUNUSED(column)) { + m_ensureVisibleDefered = item; ExpandAncestors(item); GtkTreeIter iter; -- 2.47.2