X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b33c8d22ccc7f7d059c2d0daaa2a86f6e30e7315..44ba8f0ea92f65d9893ce0780971745a5d8e80ea:/src/gtk/listbox.cpp diff --git a/src/gtk/listbox.cpp b/src/gtk/listbox.cpp index d54e30e324..b81275e629 100644 --- a/src/gtk/listbox.cpp +++ b/src/gtk/listbox.cpp @@ -21,6 +21,7 @@ #include "wx/intl.h" #include "wx/checklst.h" #include "wx/settings.h" +#include "wx/gtk/private.h" #if wxUSE_TOOLTIPS #include "wx/tooltip.h" @@ -59,9 +60,10 @@ extern bool g_isIdle; // data //----------------------------------------------------------------------------- -extern bool g_blockEventsOnDrag; -extern bool g_blockEventsOnScroll; -extern wxCursor g_globalCursor; +extern bool g_blockEventsOnDrag; +extern bool g_blockEventsOnScroll; +extern wxCursor g_globalCursor; +extern wxWindowGTK *g_delayedFocus; static bool g_hasDoubleClicked = FALSE; @@ -83,7 +85,13 @@ extern "C" gint wxlistbox_idle_callback( gpointer gdata ) gtk_idle_remove( data->m_tag ); - data->m_listbox->SetFirstItem( data->m_item ); + // check that the items haven't been deleted from the listbox since we had + // installed this callback + wxListBox *lbox = data->m_listbox; + if ( data->m_item < lbox->GetCount() ) + { + lbox->SetFirstItem( data->m_item ); + } delete data; @@ -328,7 +336,6 @@ bool wxListBox::Create( wxWindow *parent, wxWindowID id, { m_needParent = TRUE; m_acceptsFocus = TRUE; - m_isListBox = TRUE; m_prevSelection = 0; // or -1 ?? m_blockEvent = FALSE; @@ -531,7 +538,7 @@ void wxListBox::GtkAddItem( const wxString &item, int pos ) } #endif // wxUSE_CHECKLISTBOX - list_item = gtk_list_item_new_with_label( label.mbc_str() ); + list_item = gtk_list_item_new_with_label( wxGTK_CONV( label ) ); GList *gitem_list = g_list_alloc (); gitem_list->data = list_item; @@ -731,7 +738,7 @@ void wxListBox::SetString( int n, const wxString &string ) #endif // wxUSE_CHECKLISTBOX str += string; - gtk_label_set( label, str.mbc_str() ); + gtk_label_set( label, wxGTK_CONV( str ) ); } else { @@ -749,7 +756,11 @@ wxString wxListBox::GetString( int n ) const GtkBin *bin = GTK_BIN( child->data ); GtkLabel *label = GTK_LABEL( bin->child ); - wxString str = wxString(GET_REAL_LABEL(label->label),*wxConvCurrent); +#ifdef __WXGTK20__ + wxString str = wxGTK_CONV_BACK( gtk_label_get_text( label ) ); +#else + wxString str = wxString( label->label ); +#endif return str; } @@ -778,7 +789,11 @@ int wxListBox::FindString( const wxString &item ) const GtkBin *bin = GTK_BIN( child->data ); GtkLabel *label = GTK_LABEL( bin->child ); - wxString str = wxString(GET_REAL_LABEL(label->label),*wxConvCurrent); +#ifdef __WXGTK20__ + wxString str = wxGTK_CONV_BACK( gtk_label_get_text( label ) ); +#else + wxString str = wxString( label->label ); +#endif if (str == item) return count; @@ -1017,6 +1032,15 @@ void wxListBox::OnInternalIdle() } } + if (g_delayedFocus == this) + { + if (GTK_WIDGET_REALIZED(m_widget)) + { + gtk_widget_grab_focus( m_widget ); + g_delayedFocus = NULL; + } + } + UpdateWindowUI(); } @@ -1048,4 +1072,13 @@ wxSize wxListBox::DoGetBestSize() const return wxSize(lbWidth, lbHeight); } -#endif +void wxListBox::FixUpMouseEvent(GtkWidget *widget, wxCoord& x, wxCoord& y) +{ + // the mouse event coords are relative to the listbox items, we need to + // translate them to the normal client coords + x += widget->allocation.x; + y += widget->allocation.y; +} + +#endif // wxUSE_LISTBOX +