X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2e1d71048207f3d008dac28d0c290ae0a6b59997..a006e78bd388dfb86f8b34ede2034047c062cffb:/src/gtk/combobox.cpp diff --git a/src/gtk/combobox.cpp b/src/gtk/combobox.cpp index f5e045a71e..7f7e165b00 100644 --- a/src/gtk/combobox.cpp +++ b/src/gtk/combobox.cpp @@ -132,7 +132,7 @@ bool wxComboBox::Create( wxWindow *parent, wxWindowID id, const wxString& value, GtkWidget *list = GTK_COMBO(m_widget)->list; #ifndef __WXGTK20__ - gtk_list_set_selection_mode( GTK_LIST(list), GTK_SELECTION_MULTIPLE ); + // gtk_list_set_selection_mode( GTK_LIST(list), GTK_SELECTION_MULTIPLE ); #endif for (int i = 0; i < n; i++) @@ -197,18 +197,29 @@ bool wxComboBox::Create( wxWindow *parent, wxWindowID id, const wxString& value, wxComboBox::~wxComboBox() { - wxNode *node = m_clientObjectList.First(); + wxNode *node = m_clientObjectList.GetFirst(); while (node) { - wxClientData *cd = (wxClientData*)node->Data(); + wxClientData *cd = (wxClientData*)node->GetData(); if (cd) delete cd; - node = node->Next(); + node = node->GetNext(); } m_clientObjectList.Clear(); m_clientDataList.Clear(); } +void wxComboBox::SetFocus() +{ + if ( m_hasFocus ) + { + // don't do anything if we already have focus + return; + } + + gtk_widget_grab_focus( m_focusWidget ); +} + void wxComboBox::AppendCommon( const wxString &item ) { wxCHECK_RET( m_widget != NULL, wxT("invalid combobox") ); @@ -261,7 +272,7 @@ void wxComboBox::SetClientData( int n, void* clientData ) { wxCHECK_RET( m_widget != NULL, wxT("invalid combobox") ); - wxNode *node = m_clientDataList.Nth( n ); + wxNode *node = m_clientDataList.Item( n ); if (!node) return; node->SetData( (wxObject*) clientData ); @@ -271,20 +282,20 @@ void* wxComboBox::GetClientData( int n ) { wxCHECK_MSG( m_widget != NULL, NULL, wxT("invalid combobox") ); - wxNode *node = m_clientDataList.Nth( n ); + wxNode *node = m_clientDataList.Item( n ); if (!node) return NULL; - return node->Data(); + return node->GetData(); } void wxComboBox::SetClientObject( int n, wxClientData* clientData ) { wxCHECK_RET( m_widget != NULL, wxT("invalid combobox") ); - wxNode *node = m_clientObjectList.Nth( n ); + wxNode *node = m_clientObjectList.Item( n ); if (!node) return; - wxClientData *cd = (wxClientData*) node->Data(); + wxClientData *cd = (wxClientData*) node->GetData(); if (cd) delete cd; node->SetData( (wxObject*) clientData ); @@ -294,10 +305,10 @@ wxClientData* wxComboBox::GetClientObject( int n ) { wxCHECK_MSG( m_widget != NULL, (wxClientData*)NULL, wxT("invalid combobox") ); - wxNode *node = m_clientObjectList.Nth( n ); + wxNode *node = m_clientObjectList.Item( n ); if (!node) return (wxClientData*) NULL; - return (wxClientData*) node->Data(); + return (wxClientData*) node->GetData(); } void wxComboBox::Clear() @@ -307,12 +318,12 @@ void wxComboBox::Clear() GtkWidget *list = GTK_COMBO(m_widget)->list; gtk_list_clear_items( GTK_LIST(list), 0, Number() ); - wxNode *node = m_clientObjectList.First(); + wxNode *node = m_clientObjectList.GetFirst(); while (node) { - wxClientData *cd = (wxClientData*)node->Data(); + wxClientData *cd = (wxClientData*)node->GetData(); if (cd) delete cd; - node = node->Next(); + node = node->GetNext(); } m_clientObjectList.Clear(); @@ -337,15 +348,15 @@ void wxComboBox::Delete( int n ) gtk_list_remove_items( listbox, list ); g_list_free( list ); - wxNode *node = m_clientObjectList.Nth( n ); + wxNode *node = m_clientObjectList.Item( n ); if (node) { - wxClientData *cd = (wxClientData*)node->Data(); + wxClientData *cd = (wxClientData*)node->GetData(); if (cd) delete cd; m_clientObjectList.DeleteNode( node ); } - node = m_clientDataList.Nth( n ); + node = m_clientDataList.Item( n ); if (node) { m_clientDataList.DeleteNode( node ); @@ -364,8 +375,14 @@ int wxComboBox::FindString( const wxString &item ) { GtkBin *bin = GTK_BIN( child->data ); GtkLabel *label = GTK_LABEL( bin->child ); - if (item == wxString(label->label,*wxConvCurrent)) +#ifdef __WXGTK20__ + wxString str( wxGTK_CONV_BACK( gtk_label_get_text(label) ) ); +#else + wxString str( label->label ); +#endif + if (item == str) return count; + count++; child = child->next; } @@ -408,7 +425,7 @@ wxString wxComboBox::GetString( int n ) const GtkBin *bin = GTK_BIN( child->data ); GtkLabel *label = GTK_LABEL( bin->child ); #ifdef __WXGTK20__ - str = wxGTK_CONV_BACK( gtk_label_get_text( label) ); + str = wxGTK_CONV_BACK( gtk_label_get_text(label) ); #else str = wxString( label->label ); #endif @@ -431,7 +448,12 @@ wxString wxComboBox::GetStringSelection() const if (selection) { GtkBin *bin = GTK_BIN( selection->data ); - wxString tmp = wxString(GTK_LABEL( bin->child )->label,*wxConvCurrent); + GtkLabel *label = GTK_LABEL( bin->child ); +#ifdef __WXGTK20__ + wxString tmp( wxGTK_CONV_BACK( gtk_label_get_text(label) ) ); +#else + wxString tmp( label->label ); +#endif return tmp; } @@ -592,7 +614,7 @@ void wxComboBox::SetEditable( bool editable ) void wxComboBox::OnChar( wxKeyEvent &event ) { - if ( event.KeyCode() == WXK_RETURN ) + if ( event.GetKeyCode() == WXK_RETURN ) { wxString value = GetValue(); @@ -728,13 +750,11 @@ wxSize wxComboBox::DoGetBestSize() const ret.x = 0; if ( m_widget ) { - GdkFont *font = m_font.GetInternalFont(); - - wxCoord width; - size_t count = Number(); + int width; + size_t count = GetCount(); for ( size_t n = 0; n < count; n++ ) { - width = (wxCoord)gdk_string_width(font, wxGTK_CONV( GetString(n) ) ); + GetTextExtent( GetString(n), &width, NULL, NULL, NULL, &m_font ); if ( width > ret.x ) ret.x = width; }