X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/29006414014249ec3eb86e9c13da7f06b2741e3a..32d4bfd16c554ba060ccee9236abb8e7ff0e913a:/src/gtk/choice.cpp diff --git a/src/gtk/choice.cpp b/src/gtk/choice.cpp index 1385c3c8ae..bd63c5e3f8 100644 --- a/src/gtk/choice.cpp +++ b/src/gtk/choice.cpp @@ -14,9 +14,18 @@ #include "wx/choice.h" +#if wxUSE_CHOICE + #include "gdk/gdk.h" #include "gtk/gtk.h" +//----------------------------------------------------------------------------- +// idle system +//----------------------------------------------------------------------------- + +extern void wxapp_install_idle_handler(); +extern bool g_isIdle; + //----------------------------------------------------------------------------- // data //----------------------------------------------------------------------------- @@ -29,17 +38,17 @@ extern bool g_blockEventsOnDrag; static void gtk_choice_clicked_callback( GtkWidget *WXUNUSED(widget), wxChoice *choice ) { - if (!choice->HasVMT()) - return; + if (g_isIdle) wxapp_install_idle_handler(); + + if (!choice->m_hasVMT) return; - if (g_blockEventsOnDrag) - return; + if (g_blockEventsOnDrag) return; - wxCommandEvent event(wxEVT_COMMAND_CHOICE_SELECTED, choice->GetId() ); - event.SetInt( choice->GetSelection() ); - event.SetString( choice->GetStringSelection() ); - event.SetEventObject(choice); - choice->GetEventHandler()->ProcessEvent(event); + wxCommandEvent event(wxEVT_COMMAND_CHOICE_SELECTED, choice->GetId() ); + event.SetInt( choice->GetSelection() ); + event.SetString( choice->GetStringSelection() ); + event.SetEventObject(choice); + choice->GetEventHandler()->ProcessEvent(event); } //----------------------------------------------------------------------------- @@ -58,10 +67,15 @@ bool wxChoice::Create( wxWindow *parent, wxWindowID id, long style, const wxValidator& validator, const wxString &name ) { m_needParent = TRUE; +#if (GTK_MINOR_VERSION > 0) + m_acceptsFocus = TRUE; +#endif PreCreation( parent, id, pos, size, style, name ); +#if wxUSE_VALIDATORS SetValidator( validator ); +#endif m_widget = gtk_option_menu_new(); @@ -79,12 +93,9 @@ bool wxChoice::Create( wxWindow *parent, wxWindowID id, m_clientDataList.Append( (wxObject*) NULL ); m_clientObjectList.Append( (wxObject*) NULL ); - GtkWidget *item = gtk_menu_item_new_with_label( choices[i] ); + GtkWidget *item = gtk_menu_item_new_with_label( choices[i].mbc_str() ); gtk_menu_append( GTK_MENU(menu), item ); - gtk_widget_realize( item ); - gtk_widget_realize( GTK_BIN(item)->child ); - gtk_widget_show( item ); gtk_signal_connect( GTK_OBJECT( item ), "activate", @@ -92,9 +103,7 @@ bool wxChoice::Create( wxWindow *parent, wxWindowID id, } gtk_option_menu_set_menu( GTK_OPTION_MENU(m_widget), menu ); - m_parent->AddChild( this ); - - (m_parent->m_insertCallback)( m_parent, this ); + m_parent->DoAddChild( this ); PostCreation(); @@ -114,17 +123,20 @@ wxChoice::~wxChoice() void wxChoice::AppendCommon( const wxString &item ) { - wxCHECK_RET( m_widget != NULL, "invalid choice" ); + wxCHECK_RET( m_widget != NULL, _T("invalid choice") ); GtkWidget *menu = gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) ); - GtkWidget *menu_item = gtk_menu_item_new_with_label( item ); + GtkWidget *menu_item = gtk_menu_item_new_with_label( item.mbc_str() ); gtk_menu_append( GTK_MENU(menu), menu_item ); - gtk_widget_realize( menu_item ); - gtk_widget_realize( GTK_BIN(menu_item)->child ); + if (GTK_WIDGET_REALIZED(m_widget)) + { + gtk_widget_realize( menu_item ); + gtk_widget_realize( GTK_BIN(menu_item)->child ); - if (m_widgetStyle) ApplyWidgetStyle(); + if (m_widgetStyle) ApplyWidgetStyle(); + } gtk_signal_connect( GTK_OBJECT( menu_item ), "activate", GTK_SIGNAL_FUNC(gtk_choice_clicked_callback), (gpointer*)this ); @@ -158,7 +170,7 @@ void wxChoice::Append( const wxString &item, wxClientData *clientData ) void wxChoice::SetClientData( int n, void* clientData ) { - wxCHECK_RET( m_widget != NULL, "invalid combobox" ); + wxCHECK_RET( m_widget != NULL, _T("invalid combobox") ); wxNode *node = m_clientDataList.Nth( n ); if (!node) return; @@ -168,7 +180,7 @@ void wxChoice::SetClientData( int n, void* clientData ) void* wxChoice::GetClientData( int n ) { - wxCHECK_MSG( m_widget != NULL, NULL, "invalid combobox" ); + wxCHECK_MSG( m_widget != NULL, NULL, _T("invalid combobox") ); wxNode *node = m_clientDataList.Nth( n ); if (!node) return NULL; @@ -178,7 +190,7 @@ void* wxChoice::GetClientData( int n ) void wxChoice::SetClientObject( int n, wxClientData* clientData ) { - wxCHECK_RET( m_widget != NULL, "invalid combobox" ); + wxCHECK_RET( m_widget != NULL, _T("invalid combobox") ); wxNode *node = m_clientObjectList.Nth( n ); if (!node) return; @@ -191,7 +203,7 @@ void wxChoice::SetClientObject( int n, wxClientData* clientData ) wxClientData* wxChoice::GetClientObject( int n ) { - wxCHECK_MSG( m_widget != NULL, (wxClientData*) NULL, "invalid combobox" ); + wxCHECK_MSG( m_widget != NULL, (wxClientData*) NULL, _T("invalid combobox") ); wxNode *node = m_clientObjectList.Nth( n ); if (!node) return (wxClientData*) NULL; @@ -201,7 +213,7 @@ wxClientData* wxChoice::GetClientObject( int n ) void wxChoice::Clear() { - wxCHECK_RET( m_widget != NULL, "invalid choice" ); + wxCHECK_RET( m_widget != NULL, _T("invalid choice") ); gtk_option_menu_remove_menu( GTK_OPTION_MENU(m_widget) ); GtkWidget *menu = gtk_menu_new(); @@ -221,12 +233,12 @@ void wxChoice::Clear() void wxChoice::Delete( int WXUNUSED(n) ) { - wxFAIL_MSG( "wxChoice:Delete not implemented" ); + wxFAIL_MSG( _T("wxChoice:Delete not implemented") ); } int wxChoice::FindString( const wxString &string ) const { - wxCHECK_MSG( m_widget != NULL, -1, "invalid choice" ); + wxCHECK_MSG( m_widget != NULL, -1, _T("invalid choice") ); // If you read this code once and you think you understand // it, then you are very wrong. Robert Roebling. @@ -241,9 +253,9 @@ int wxChoice::FindString( const wxString &string ) const if (bin->child) label = GTK_LABEL(bin->child); if (!label) label = GTK_LABEL( GTK_BUTTON(m_widget)->child ); - wxASSERT_MSG( label != NULL , "wxChoice: invalid label" ); + wxASSERT_MSG( label != NULL , _T("wxChoice: invalid label") ); - if (string == label->label) + if (string == wxString(label->label,*wxConvCurrent)) return count; child = child->next; @@ -260,7 +272,7 @@ int wxChoice::GetColumns() const int wxChoice::GetSelection() { - wxCHECK_MSG( m_widget != NULL, -1, "invalid choice" ); + wxCHECK_MSG( m_widget != NULL, -1, _T("invalid choice") ); GtkMenuShell *menu_shell = GTK_MENU_SHELL( gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) ) ); int count = 0; @@ -273,14 +285,14 @@ int wxChoice::GetSelection() count++; } - wxFAIL_MSG( "wxChoice: no selection" ); + wxFAIL_MSG( _T("wxChoice: no selection") ); return -1; } wxString wxChoice::GetString( int n ) const { - wxCHECK_MSG( m_widget != NULL, "", "invalid choice" ); + wxCHECK_MSG( m_widget != NULL, _T(""), _T("invalid choice") ); GtkMenuShell *menu_shell = GTK_MENU_SHELL( gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) ) ); int count = 0; @@ -294,33 +306,33 @@ wxString wxChoice::GetString( int n ) const if (bin->child) label = GTK_LABEL(bin->child); if (!label) label = GTK_LABEL( GTK_BUTTON(m_widget)->child ); - wxASSERT_MSG( label != NULL , "wxChoice: invalid label" ); + wxASSERT_MSG( label != NULL , _T("wxChoice: invalid label") ); - return label->label; + return wxString(label->label,*wxConvCurrent); } child = child->next; count++; } - wxFAIL_MSG( "wxChoice: invalid index in GetString()" ); + wxFAIL_MSG( _T("wxChoice: invalid index in GetString()") ); - return ""; + return _T(""); } wxString wxChoice::GetStringSelection() const { - wxCHECK_MSG( m_widget != NULL, "", "invalid choice" ); + wxCHECK_MSG( m_widget != NULL, _T(""), _T("invalid choice") ); GtkLabel *label = GTK_LABEL( GTK_BUTTON(m_widget)->child ); - wxASSERT_MSG( label != NULL , "wxChoice: invalid label" ); + wxASSERT_MSG( label != NULL , _T("wxChoice: invalid label") ); - return label->label; + return wxString(label->label,*wxConvCurrent); } int wxChoice::Number() const { - wxCHECK_MSG( m_widget != NULL, 0, "invalid choice" ); + wxCHECK_MSG( m_widget != NULL, 0, _T("invalid choice") ); GtkMenuShell *menu_shell = GTK_MENU_SHELL( gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) ) ); int count = 0; @@ -339,7 +351,7 @@ void wxChoice::SetColumns( int WXUNUSED(n) ) void wxChoice::SetSelection( int n ) { - wxCHECK_RET( m_widget != NULL, "invalid choice" ); + wxCHECK_RET( m_widget != NULL, _T("invalid choice") ); int tmp = n; gtk_option_menu_set_history( GTK_OPTION_MENU(m_widget), (gint)tmp ); @@ -349,7 +361,7 @@ void wxChoice::SetSelection( int n ) void wxChoice::SetStringSelection( const wxString &string ) { - wxCHECK_RET( m_widget != NULL, "invalid choice" ); + wxCHECK_RET( m_widget != NULL, _T("invalid choice") ); int n = FindString( string ); if (n != -1) SetSelection( n ); @@ -380,3 +392,4 @@ void wxChoice::ApplyWidgetStyle() } } +#endif