From 2acd3b1ae22783b42d75d329be15ca5fee70ef11 Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Thu, 19 Oct 2000 20:39:04 +0000 Subject: [PATCH] Completely blind implementation of wxListBox::SetFirstItem(). Cannot be worse than nothing. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_2_BRANCH@8587 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/gtk/listbox.cpp | 23 +++++++++++++++++++++-- src/gtk1/listbox.cpp | 23 +++++++++++++++++++++-- 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/src/gtk/listbox.cpp b/src/gtk/listbox.cpp index 8ff7ab4cd1..b8daf15ec1 100644 --- a/src/gtk/listbox.cpp +++ b/src/gtk/listbox.cpp @@ -782,9 +782,28 @@ void wxListBox::SetSelection( int n, bool select ) GtkEnableEvents(); } -void wxListBox::DoSetFirstItem( int WXUNUSED(n) ) +void wxListBox::DoSetFirstItem( int n ) { - wxFAIL_MSG(wxT("wxListBox::SetFirstItem not implemented")); + wxCHECK_RET( m_list, wxT("invalid listbox") ); + + if (gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (m_list)) + return; + + // terribly efficient + const gchar *vadjustment_key = "gtk-vadjustment"; + guint vadjustment_key_id = g_quark_from_static_string (vadjustment_key); + + GtkAdjustment *adjustment = + (GtkAdjustment*) gtk_object_get_data_by_id (GTK_OBJECT (m_list), vadjustment_key_id); + wxCHECK_RET( adjustment, wxT("invalid listbox code") ); + + GList *target = g_list_nth( m_list->children, n ); + wxCHECK_RET( target, wxT("invalid listbox index") ); + + GtkWidget *item = GTK_WIDGET(target->data); + wxCHECK_RET( item, wxT("invalid listbox code") ); + + gtk_adjustment_set_value( adjustment, item->allocation.y ); } // ---------------------------------------------------------------------------- diff --git a/src/gtk1/listbox.cpp b/src/gtk1/listbox.cpp index 8ff7ab4cd1..b8daf15ec1 100644 --- a/src/gtk1/listbox.cpp +++ b/src/gtk1/listbox.cpp @@ -782,9 +782,28 @@ void wxListBox::SetSelection( int n, bool select ) GtkEnableEvents(); } -void wxListBox::DoSetFirstItem( int WXUNUSED(n) ) +void wxListBox::DoSetFirstItem( int n ) { - wxFAIL_MSG(wxT("wxListBox::SetFirstItem not implemented")); + wxCHECK_RET( m_list, wxT("invalid listbox") ); + + if (gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (m_list)) + return; + + // terribly efficient + const gchar *vadjustment_key = "gtk-vadjustment"; + guint vadjustment_key_id = g_quark_from_static_string (vadjustment_key); + + GtkAdjustment *adjustment = + (GtkAdjustment*) gtk_object_get_data_by_id (GTK_OBJECT (m_list), vadjustment_key_id); + wxCHECK_RET( adjustment, wxT("invalid listbox code") ); + + GList *target = g_list_nth( m_list->children, n ); + wxCHECK_RET( target, wxT("invalid listbox index") ); + + GtkWidget *item = GTK_WIDGET(target->data); + wxCHECK_RET( item, wxT("invalid listbox code") ); + + gtk_adjustment_set_value( adjustment, item->allocation.y ); } // ----------------------------------------------------------------------------