X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/002f42185d25472085d36a077d1428d71c781e5b..ee6db21e41cb61c310162720bfd5f7a1ef90b01d:/src/gtk1/listbox.cpp diff --git a/src/gtk1/listbox.cpp b/src/gtk1/listbox.cpp index 5fa2491aee..0b62dcb261 100644 --- a/src/gtk1/listbox.cpp +++ b/src/gtk1/listbox.cpp @@ -12,8 +12,11 @@ #pragma implementation "listbox.h" #endif -#include "wx/dynarray.h" #include "wx/listbox.h" + +#if wxUSE_LISTBOX + +#include "wx/dynarray.h" #include "wx/utils.h" #include "wx/intl.h" #include "wx/checklst.h" @@ -159,6 +162,7 @@ gtk_listbox_button_press_callback( GtkWidget *widget, GdkEventButton *gdk_event, // "key_press_event" //----------------------------------------------------------------------------- +#if wxUSE_CHECKLISTBOX static gint gtk_listbox_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_event, wxListBox *listbox ) { @@ -170,7 +174,6 @@ gtk_listbox_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_event, wxLis if (gdk_event->keyval != ' ') return FALSE; -#if wxUSE_CHECKLISTBOX int sel = listbox->GetIndex( widget ); wxCheckListBox *clb = (wxCheckListBox *)listbox; @@ -181,10 +184,10 @@ gtk_listbox_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_event, wxLis event.SetEventObject( listbox ); event.SetInt( sel ); listbox->GetEventHandler()->ProcessEvent( event ); -#endif // wxUSE_CHECKLISTBOX return FALSE; } +#endif // wxUSE_CHECKLISTBOX //----------------------------------------------------------------------------- // "select" and "deselect" @@ -243,7 +246,9 @@ bool wxListBox::Create( wxWindow *parent, wxWindowID id, PreCreation( parent, id, pos, size, style, name ); +#if wxUSE_VALIDATORS SetValidator( validator ); +#endif m_widget = gtk_scrolled_window_new( (GtkAdjustment*) NULL, (GtkAdjustment*) NULL ); if (style & wxLB_ALWAYS_SB) @@ -635,7 +640,11 @@ void wxListBox::Deselect( int n ) { wxCHECK_RET( m_list != NULL, _T("invalid listbox") ); + DisableEvents(); + gtk_list_unselect_item( m_list, n ); + + EnableEvents(); } int wxListBox::FindString( const wxString &item ) const @@ -794,10 +803,14 @@ void wxListBox::SetSelection( int n, bool select ) { wxCHECK_RET( m_list != NULL, _T("invalid listbox") ); + DisableEvents(); + if (select) gtk_list_select_item( m_list, n ); else gtk_list_unselect_item( m_list, n ); + + EnableEvents(); } void wxListBox::SetString( int n, const wxString &string ) @@ -854,7 +867,7 @@ void wxListBox::ApplyToolTip( GtkTooltips *tips, const wxChar *tip ) GList *child = m_list->children; while (child) { - gtk_tooltips_set_tip( tips, GTK_WIDGET( child->data ), wxConv_local.cWX2MB(tip), (gchar*) NULL ); + gtk_tooltips_set_tip( tips, GTK_WIDGET( child->data ), wxConvCurrent->cWX2MB(tip), (gchar*) NULL ); child = child->next; } } @@ -893,6 +906,38 @@ void wxListBox::SetDropTarget( wxDropTarget *dropTarget ) } #endif +void wxListBox::DisableEvents() +{ + GList *child = m_list->children; + while (child) + { + gtk_signal_disconnect_by_func( GTK_OBJECT(child->data), + GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this ); + + if (HasFlag(wxLB_MULTIPLE)) + gtk_signal_disconnect_by_func( GTK_OBJECT(child->data), + GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this ); + + child = child->next; + } +} + +void wxListBox::EnableEvents() +{ + GList *child = m_list->children; + while (child) + { + gtk_signal_connect( GTK_OBJECT(child->data), "select", + GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this ); + + if (HasFlag(wxLB_MULTIPLE)) + gtk_signal_connect( GTK_OBJECT(child->data), "deselect", + GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this ); + + child = child->next; + } +} + GtkWidget *wxListBox::GetConnectWidget() { return GTK_WIDGET(m_list); @@ -940,3 +985,5 @@ void wxListBox::ApplyWidgetStyle() child = child->next; } } + +#endif \ No newline at end of file