X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/16edee16a7c3d346b9eab1672a4c696cb0cf6e24..2aa24b607061a398d0876b87e695f4f9dc531cb2:/src/gtk/choice.cpp diff --git a/src/gtk/choice.cpp b/src/gtk/choice.cpp index 39c259f1e5..7b8633ef1b 100644 --- a/src/gtk/choice.cpp +++ b/src/gtk/choice.cpp @@ -38,6 +38,7 @@ extern bool g_blockEventsOnDrag; // "activate" //----------------------------------------------------------------------------- +extern "C" { static void gtk_choice_clicked_callback( GtkWidget *WXUNUSED(widget), wxChoice *choice ) { if (g_isIdle) @@ -47,6 +48,29 @@ static void gtk_choice_clicked_callback( GtkWidget *WXUNUSED(widget), wxChoice * if (g_blockEventsOnDrag) return; + int selection = wxNOT_FOUND; + +#ifdef __WXGTK20__ + selection = gtk_option_menu_get_history( GTK_OPTION_MENU(choice->GetHandle()) ); +#else + GtkMenuShell *menu_shell = GTK_MENU_SHELL( gtk_option_menu_get_menu( GTK_OPTION_MENU(choice->GetHandle()) ) ); + int count = 0; + + GList *child = menu_shell->children; + while (child) + { + GtkBin *bin = GTK_BIN( child->data ); + if (!bin->child) + { + selection = count; + break; + } + child = child->next; + count++; + } +#endif + choice->m_selection_hack = selection; + wxCommandEvent event(wxEVT_COMMAND_CHOICE_SELECTED, choice->GetId() ); int n = choice->GetSelection(); @@ -61,6 +85,7 @@ static void gtk_choice_clicked_callback( GtkWidget *WXUNUSED(widget), wxChoice * choice->GetEventHandler()->ProcessEvent(event); } +} //----------------------------------------------------------------------------- // wxChoice @@ -354,30 +379,8 @@ int wxChoice::GetSelection() const { wxCHECK_MSG( m_widget != NULL, -1, wxT("invalid choice") ); - // this has the same (if not better) behaviour as the following commented code return m_selection_hack; - /* -#ifdef __WXGTK20__ - - return gtk_option_menu_get_history( GTK_OPTION_MENU(m_widget) ); - -#else - GtkMenuShell *menu_shell = GTK_MENU_SHELL( gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) ) ); - int count = 0; - - GList *child = menu_shell->children; - while (child) - { - GtkBin *bin = GTK_BIN( child->data ); - if (!bin->child) return count; - child = child->next; - count++; - } - - return -1; -#endif - */ } void wxChoice::SetString( int n, const wxString& str ) @@ -568,7 +571,7 @@ int wxChoice::GtkAddHelper(GtkWidget *menu, int pos, const wxString& item) // it has to change. Adapted from Matt Ownby. InvalidateBestSize(); - gtk_signal_connect( GTK_OBJECT( menu_item ), "activate", + gtk_signal_connect_after( GTK_OBJECT( menu_item ), "activate", GTK_SIGNAL_FUNC(gtk_choice_clicked_callback), (gpointer*)this ); gtk_widget_show( menu_item );