X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ac57418f39e9671c18b99942180563146625d3ae..2a29700ecf3d6862db16c5f5c9086a698a7ff247:/src/gtk/listbox.cpp?ds=sidebyside diff --git a/src/gtk/listbox.cpp b/src/gtk/listbox.cpp index 0cc5635fc5..6d6208d779 100644 --- a/src/gtk/listbox.cpp +++ b/src/gtk/listbox.cpp @@ -17,6 +17,11 @@ #include "wx/utils.h" #include "wx/intl.h" #include "wx/checklst.h" +#include "wx/tooltip.h" + +#if wxUSE_DRAG_AND_DROP +#include "wx/dnd.h" +#endif #include "gdk/gdk.h" #include "gtk/gtk.h" @@ -68,8 +73,25 @@ gtk_listbox_button_press_callback( GtkWidget *widget, GdkEventButton *gdk_event, { wxCommandEvent event( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, listbox->GetId() ); event.SetEventObject( listbox ); - event.SetInt( sel ); + + wxArrayInt aSelections; + int count = listbox->GetSelections(aSelections); + if ( count > 0 ) + { + event.m_commandInt = aSelections[0] ; + event.m_clientData = listbox->GetClientData( event.m_commandInt ); + wxString str(listbox->GetString(event.m_commandInt)); + if (str != "") event.m_commandString = copystring((char *)(const char *)str); + } + else + { + event.m_commandInt = -1 ; + event.m_commandString = copystring("") ; + } + listbox->GetEventHandler()->ProcessEvent( event ); + + if (event.m_commandString) delete[] event.m_commandString ; } return FALSE; @@ -235,18 +257,18 @@ bool wxListBox::Create( wxWindow *parent, wxWindowID id, gtk_signal_connect( GTK_OBJECT(list_item), "deselect", GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this ); + gtk_signal_connect( GTK_OBJECT(list_item), + "button_press_event", + (GtkSignalFunc)gtk_listbox_button_press_callback, + (gpointer) this ); + if (m_hasCheckBoxes) { gtk_signal_connect( GTK_OBJECT(list_item), - "button_press_event", - (GtkSignalFunc)gtk_listbox_button_press_callback, - (gpointer) this ); - } - - gtk_signal_connect( GTK_OBJECT(list_item), "key_press_event", (GtkSignalFunc)gtk_listbox_key_press_callback, (gpointer)this ); + } ConnectWidget( list_item ); @@ -302,28 +324,30 @@ void wxListBox::AppendCommon( const wxString &item ) if (m_widgetStyle) ApplyWidgetStyle(); + gtk_signal_connect( GTK_OBJECT(list_item), + "button_press_event", + (GtkSignalFunc)gtk_listbox_button_press_callback, + (gpointer) this ); + if (m_hasCheckBoxes) { - gtk_signal_connect( GTK_OBJECT(list_item), - "button_press_event", - (GtkSignalFunc)gtk_listbox_button_press_callback, - (gpointer) this ); - } - - gtk_signal_connect( GTK_OBJECT(list_item), + gtk_signal_connect( GTK_OBJECT(list_item), "key_press_event", (GtkSignalFunc)gtk_listbox_key_press_callback, - (gpointer)this ); + (gpointer)this ); + } gtk_widget_show( list_item ); ConnectWidget( list_item ); -#ifdef wxUSE_DRAG_AND_DROP +#if wxUSE_DRAG_AND_DROP #ifndef NEW_GTK_DND_CODE if (m_dropTarget) m_dropTarget->RegisterWidget( list_item ); #endif #endif + + if (m_toolTip) m_toolTip->Create( list_item ); } void wxListBox::Append( const wxString &item ) @@ -419,7 +443,7 @@ void wxListBox::Delete( int n ) wxCHECK_RET( child, "wrong listbox index" ); - GList *list = g_list_append( NULL, child->data ); + GList *list = g_list_append( (GList*) NULL, child->data ); gtk_list_remove_items( m_list, list ); g_list_free( list ); @@ -652,7 +676,30 @@ int wxListBox::GetIndex( GtkWidget *item ) const return -1; } -#ifdef wxUSE_DRAG_AND_DROP +void wxListBox::SetToolTip( const wxString &tip ) +{ + SetToolTip( new wxToolTip( tip ) ); +} + +void wxListBox::SetToolTip( wxToolTip *tip ) +{ + if (m_toolTip) delete m_toolTip; + + m_toolTip = tip; + + if (!tip) return; + + m_toolTip->Create( GTK_WIDGET(m_list) ); /* this has no effect */ + + GList *child = m_list->children; + while (child) + { + m_toolTip->Create( GTK_WIDGET( child->data ) ); + child = child->next; + } +} + +#if wxUSE_DRAG_AND_DROP void wxListBox::SetDropTarget( wxDropTarget *dropTarget ) { wxCHECK_RET( m_list != NULL, "invalid listbox" ); @@ -729,3 +776,4 @@ void wxListBox::ApplyWidgetStyle() child = child->next; } } +