X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/aaa6d89a0d0810b001a9217df913b9b74b883c8d..823fb291ae04c8236e4ef129209f488812d638fb:/src/gtk/combobox.cpp?ds=sidebyside diff --git a/src/gtk/combobox.cpp b/src/gtk/combobox.cpp index 6549733c33..7fb0ce2424 100644 --- a/src/gtk/combobox.cpp +++ b/src/gtk/combobox.cpp @@ -45,8 +45,6 @@ extern "C" { static void gtkcombo_text_changed_callback( GtkWidget *WXUNUSED(widget), wxComboBox *combo ) { - if (g_isIdle) wxapp_install_idle_handler(); - if (combo->m_ignoreNextUpdate) { combo->m_ignoreNextUpdate = false; @@ -118,8 +116,6 @@ extern "C" { static void gtkcombo_combo_select_child_callback( GtkList *WXUNUSED(list), GtkWidget *WXUNUSED(widget), wxComboBox *combo ) { - if (g_isIdle) wxapp_install_idle_handler(); - if (!combo->m_hasVMT) return; if (g_blockEventsOnDrag) return; @@ -171,8 +167,6 @@ extern "C" { static void gtkcombobox_text_changed_callback( GtkWidget *WXUNUSED(widget), wxComboBox *combo ) { - if (g_isIdle) wxapp_install_idle_handler(); - if (!combo->m_hasVMT) return; wxCommandEvent event( wxEVT_COMMAND_TEXT_UPDATED, combo->GetId() ); @@ -186,10 +180,11 @@ extern "C" { static void gtkcombobox_changed_callback( GtkWidget *WXUNUSED(widget), wxComboBox *combo ) { - if (g_isIdle) wxapp_install_idle_handler(); - if (!combo->m_hasVMT) return; + if (combo->GetSelection() == -1) + return; + wxCommandEvent event( wxEVT_COMMAND_COMBOBOX_SELECTED, combo->GetId() ); event.SetInt( combo->GetSelection() ); event.SetString( combo->GetStringSelection() ); @@ -197,6 +192,7 @@ gtkcombobox_changed_callback( GtkWidget *WXUNUSED(widget), wxComboBox *combo ) combo->GetEventHandler()->ProcessEvent( event ); } } + #endif //----------------------------------------------------------------------------- @@ -246,8 +242,6 @@ bool wxComboBox::Create( wxWindow *parent, wxWindowID id, const wxString& value, const wxString& name ) { m_ignoreNextUpdate = false; - m_needParent = true; - m_acceptsFocus = true; m_prevSelection = 0; if (!PreCreation( parent, pos, size ) || @@ -345,6 +339,7 @@ bool wxComboBox::Create( wxWindow *parent, wxWindowID id, const wxString& value, g_signal_connect_after (m_widget, "changed", G_CALLBACK (gtkcombobox_changed_callback), this); + } else #endif @@ -368,15 +363,9 @@ bool wxComboBox::Create( wxWindow *parent, wxWindowID id, const wxString& value, this); g_signal_connect_after (entry, "changed", G_CALLBACK (gtkcombo_text_changed_callback), this); - - // This is required for tool bar support - // Doesn't currently work -// wxSize setsize = GetSize(); -// gtk_widget_set_size_request( m_widget, setsize.x, setsize.y ); } - SetBestSize(size); // need this too because this is a wxControlWithItems - + SetInitialSize(size); // need this too because this is a wxControlWithItems return true; } @@ -436,9 +425,9 @@ int wxComboBox::DoAppend( const wxString &item ) GtkRcStyle *style = CreateWidgetStyle(); if (style) { - gtk_widget_modify_style( GTK_WIDGET( list_item ), style ); + gtk_widget_modify_style(list_item, style); GtkBin *bin = GTK_BIN( list_item ); - GtkWidget *label = GTK_WIDGET( bin->child ); + GtkWidget *label = bin->child; gtk_widget_modify_style( label, style ); gtk_rc_style_unref( style ); } @@ -957,7 +946,10 @@ void wxComboBox::SetValue( const wxString& value ) wxString tmp; if (!value.IsNull()) tmp = value; + + DisableEvents(); gtk_entry_set_text( entry, wxGTK_CONV( tmp ) ); + EnableEvents(); InvalidateBestSize(); } @@ -1125,12 +1117,13 @@ void wxComboBox::Replace( long from, long to, const wxString& value ) if (value.IsNull()) return; gint pos = (gint)to; -#if wxUSE_UNICODE - wxCharBuffer buffer = wxConvUTF8.cWX2MB( value ); - gtk_editable_insert_text( GTK_EDITABLE(entry), (const char*) buffer, strlen( (const char*) buffer ), &pos ); +#if wxUSE_UNICODE_UTF8 + const char *utf8 = value.utf8_str(); #else - gtk_editable_insert_text( GTK_EDITABLE(entry), value.c_str(), value.length(), &pos ); + wxCharBuffer buffer(value.utf8_str()); + char char *utf8 = buffer; #endif + gtk_editable_insert_text(GTK_EDITABLE(entry), utf8, strlen(utf8), &pos); } void wxComboBox::SetSelection( long from, long to ) @@ -1325,21 +1318,23 @@ GtkWidget* wxComboBox::GetConnectWidget() return GTK_WIDGET( entry ); } -bool wxComboBox::IsOwnGtkWindow( GdkWindow *window ) +GdkWindow *wxComboBox::GTKGetWindow(wxArrayGdkWindows& windows) const { - GtkEntry *entry = NULL; #ifdef __WXGTK24__ if (!gtk_check_version(2,4,0)) { - entry = GTK_ENTRY( GTK_BIN(m_widget)->child ); - return (window == entry->text_area); + wxUnusedVar(windows); + + return GTK_ENTRY(GTK_BIN(m_widget)->child)->text_area; } else -#endif +#endif // GTK+ 2.4 { - entry = GTK_ENTRY( GTK_COMBO(m_widget)->entry ); - return ( (window == entry->text_area) || - (window == GTK_COMBO(m_widget)->button->window ) ); + windows.push_back(GTK_ENTRY(GTK_COMBO(m_widget)->entry)->text_area); + windows.push_back(GTK_COMBO(m_widget)->button->window); + + // indicate that we return multiple windows in the windows array + return NULL; } }