diff --git a/docs/changes.txt b/docs/changes.txt index f26e8978cc..4531ba349b 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -139,6 +139,7 @@ wxGTK: - Return false from wxEventLoop::Dispatch() if gtk_main_quit() was called and so the loop should exit (Rodolfo Schulz de Lima). +- Implement wxListBox::EnsureVisible() (Andreas Kling) - Fixed wxCURSOR_HAND to map to GDK_HAND2 and not GDK_HAND1, for consistency with other applications. diff --git a/include/wx/gtk/listbox.h b/include/wx/gtk/listbox.h index fbbd136117..5b3ecf20dd 100644 --- a/include/wx/gtk/listbox.h +++ b/include/wx/gtk/listbox.h @@ -74,6 +74,8 @@ public: virtual int GetSelection() const; virtual int GetSelections(wxArrayInt& aSelections) const; + virtual void EnsureVisible(int n); + static wxVisualAttributes GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL); @@ -119,6 +121,9 @@ protected: private: void Init(); //common construction + // common part of DoSetFirstItem() and EnsureVisible() + void DoScrollToCell(int n, float alignY, float alignX); + DECLARE_DYNAMIC_CLASS(wxListBox) }; diff --git a/src/gtk/listbox.cpp b/src/gtk/listbox.cpp index d96a8c438b..3802070184 100644 --- a/src/gtk/listbox.cpp +++ b/src/gtk/listbox.cpp @@ -906,7 +906,7 @@ void wxListBox::GtkSetSelection(int n, const bool select, const bool blockEvent) m_blockEvent = false; } -void wxListBox::DoSetFirstItem( int n ) +void wxListBox::DoScrollToCell(int n, float alignY, float alignX) { wxCHECK_RET( m_treeview, wxT("invalid listbox") ); wxCHECK_RET( IsValid(n), wxT("invalid index")); @@ -928,11 +928,21 @@ void wxListBox::DoSetFirstItem( int n ) // Scroll to the desired cell (0.0 == topleft alignment) gtk_tree_view_scroll_to_cell(m_treeview, path, NULL, - TRUE, 0.0f, 0.0f); + TRUE, alignY, alignX); gtk_tree_path_free(path); } +void wxListBox::DoSetFirstItem(int n) +{ + DoScrollToCell(n, 0, 0); +} + +void wxListBox::EnsureVisible(int n) +{ + DoScrollToCell(n, 0.5, 0); +} + // ---------------------------------------------------------------------------- // hittest // ----------------------------------------------------------------------------