X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c4526184a7e7725c62fac379d74996c14d7a6550..60d8e88654bc14d7c7016f1f8281a26656dc3b10:/src/gtk1/listbox.cpp?ds=sidebyside diff --git a/src/gtk1/listbox.cpp b/src/gtk1/listbox.cpp index ebfc45da5d..b522fd7a88 100644 --- a/src/gtk1/listbox.cpp +++ b/src/gtk1/listbox.cpp @@ -194,7 +194,7 @@ gtk_listbox_button_release_callback( GtkWidget * WXUNUSED(widget), n = -1; } - event.m_commandInt = n; + event.SetInt(n); listbox->GetEventHandler()->ProcessEvent( event ); @@ -233,6 +233,22 @@ gtk_listbox_button_press_callback( GtkWidget *widget, } #endif // wxUSE_CHECKLISTBOX + if ((gdk_event->state == 0) && + (((listbox->GetWindowStyleFlag() & wxLB_MULTIPLE) != 0) || + ((listbox->GetWindowStyleFlag() & wxLB_EXTENDED) != 0)) ) + { + listbox->m_blockEvent = TRUE; + + int i; + for (i = 0; i < (int)listbox->GetCount(); i++) + if (i != sel) + gtk_list_unselect_item( GTK_LIST(listbox->m_list), i ); + + listbox->m_blockEvent = FALSE; + + return false; + } + /* emit wxEVT_COMMAND_LISTBOX_DOUBLECLICKED later */ g_hasDoubleClicked = (gdk_event->type == GDK_2BUTTON_PRESS); @@ -320,7 +336,7 @@ gtk_listbox_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_event, wxLis { n = -1; } - new_event.m_commandInt = n; + new_event.SetInt(n); listbox->GetEventHandler()->ProcessEvent( new_event ); } } @@ -393,7 +409,7 @@ static void gtk_listitem_select_cb( GtkWidget *widget, n = -1; } - event.m_commandInt = n; + event.SetInt(n); // No longer required with new code in wxLB_SINGLE // listbox->GetEventHandler()->AddPendingEvent( event ); @@ -404,6 +420,23 @@ static void gtk_listitem_select_cb( GtkWidget *widget, // wxListBox //----------------------------------------------------------------------------- +static gint +gtk_listbox_realized_callback( GtkWidget *m_widget, wxListBox *win ) +{ + if (g_isIdle) + wxapp_install_idle_handler(); + + GList *child = win->m_list->children; + for (child = win->m_list->children; child != NULL; child = child->next) + gtk_widget_show( GTK_WIDGET(child->data) ); + + return false; +} + +//----------------------------------------------------------------------------- +// wxListBox +//----------------------------------------------------------------------------- + IMPLEMENT_DYNAMIC_CLASS(wxListBox,wxControl) // ---------------------------------------------------------------------------- @@ -475,7 +508,7 @@ bool wxListBox::Create( wxWindow *parent, wxWindowID id, { // if style was 0 set single mode m_windowStyle |= wxLB_SINGLE; - mode = GTK_SELECTION_MULTIPLE; + mode = GTK_SELECTION_SINGLE; } gtk_list_set_selection_mode( GTK_LIST(m_list), mode ); @@ -490,6 +523,9 @@ bool wxListBox::Create( wxWindow *parent, wxWindowID id, gtk_widget_show( GTK_WIDGET(m_list) ); + gtk_signal_connect( GTK_OBJECT(m_list), "realize", + GTK_SIGNAL_FUNC(gtk_listbox_realized_callback), (gpointer) this ); + if ( style & wxLB_SORT ) { // this will change DoAppend() behaviour @@ -678,13 +714,12 @@ void wxListBox::GtkAddItem( const wxString &item, int pos ) gtk_signal_connect( GTK_OBJECT(list_item), "focus_out_event", GTK_SIGNAL_FUNC(gtk_listitem_focus_out_callback), (gpointer)this ); - ConnectWidget( list_item ); - gtk_widget_show( list_item ); - if (GTK_WIDGET_REALIZED(m_widget)) { + gtk_widget_show( list_item ); + gtk_widget_realize( list_item ); gtk_widget_realize( GTK_BIN(list_item)->child ); @@ -987,7 +1022,7 @@ bool wxListBox::IsSelected( int n ) const return (GTK_WIDGET(target->data)->state == GTK_STATE_SELECTED) ; } -void wxListBox::SetSelection( int n, bool select ) +void wxListBox::DoSetSelection( int n, bool select ) { wxCHECK_RET( m_list != NULL, wxT("invalid listbox") );