Fix for the fix for wxChoice selection.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@31055 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -104,10 +104,12 @@ private:
|
||||
// allocate it if it's needed (hence using pointer)
|
||||
wxSortedArrayString *m_strings;
|
||||
|
||||
public:
|
||||
// this circumvents a GTK+ 2.0 bug so that the selection is
|
||||
// invalidated properly
|
||||
int m_selection_hack;
|
||||
|
||||
|
||||
private:
|
||||
DECLARE_DYNAMIC_CLASS(wxChoice)
|
||||
};
|
||||
|
||||
|
@@ -104,10 +104,12 @@ private:
|
||||
// allocate it if it's needed (hence using pointer)
|
||||
wxSortedArrayString *m_strings;
|
||||
|
||||
public:
|
||||
// this circumvents a GTK+ 2.0 bug so that the selection is
|
||||
// invalidated properly
|
||||
int m_selection_hack;
|
||||
|
||||
|
||||
private:
|
||||
DECLARE_DYNAMIC_CLASS(wxChoice)
|
||||
};
|
||||
|
||||
|
@@ -47,6 +47,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();
|
||||
|
||||
@@ -354,30 +377,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 )
|
||||
|
@@ -47,6 +47,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();
|
||||
|
||||
@@ -354,30 +377,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 )
|
||||
|
Reference in New Issue
Block a user