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:
parent
d6c69b1772
commit
5f3565a2fb
@ -104,10 +104,12 @@ private:
|
|||||||
// allocate it if it's needed (hence using pointer)
|
// allocate it if it's needed (hence using pointer)
|
||||||
wxSortedArrayString *m_strings;
|
wxSortedArrayString *m_strings;
|
||||||
|
|
||||||
|
public:
|
||||||
// this circumvents a GTK+ 2.0 bug so that the selection is
|
// this circumvents a GTK+ 2.0 bug so that the selection is
|
||||||
// invalidated properly
|
// invalidated properly
|
||||||
int m_selection_hack;
|
int m_selection_hack;
|
||||||
|
|
||||||
|
private:
|
||||||
DECLARE_DYNAMIC_CLASS(wxChoice)
|
DECLARE_DYNAMIC_CLASS(wxChoice)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -104,10 +104,12 @@ private:
|
|||||||
// allocate it if it's needed (hence using pointer)
|
// allocate it if it's needed (hence using pointer)
|
||||||
wxSortedArrayString *m_strings;
|
wxSortedArrayString *m_strings;
|
||||||
|
|
||||||
|
public:
|
||||||
// this circumvents a GTK+ 2.0 bug so that the selection is
|
// this circumvents a GTK+ 2.0 bug so that the selection is
|
||||||
// invalidated properly
|
// invalidated properly
|
||||||
int m_selection_hack;
|
int m_selection_hack;
|
||||||
|
|
||||||
|
private:
|
||||||
DECLARE_DYNAMIC_CLASS(wxChoice)
|
DECLARE_DYNAMIC_CLASS(wxChoice)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -47,6 +47,29 @@ static void gtk_choice_clicked_callback( GtkWidget *WXUNUSED(widget), wxChoice *
|
|||||||
|
|
||||||
if (g_blockEventsOnDrag) return;
|
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() );
|
wxCommandEvent event(wxEVT_COMMAND_CHOICE_SELECTED, choice->GetId() );
|
||||||
int n = choice->GetSelection();
|
int n = choice->GetSelection();
|
||||||
|
|
||||||
@ -354,30 +377,8 @@ int wxChoice::GetSelection() const
|
|||||||
{
|
{
|
||||||
wxCHECK_MSG( m_widget != NULL, -1, wxT("invalid choice") );
|
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;
|
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 )
|
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;
|
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() );
|
wxCommandEvent event(wxEVT_COMMAND_CHOICE_SELECTED, choice->GetId() );
|
||||||
int n = choice->GetSelection();
|
int n = choice->GetSelection();
|
||||||
|
|
||||||
@ -354,30 +377,8 @@ int wxChoice::GetSelection() const
|
|||||||
{
|
{
|
||||||
wxCHECK_MSG( m_widget != NULL, -1, wxT("invalid choice") );
|
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;
|
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 )
|
void wxChoice::SetString( int n, const wxString& str )
|
||||||
|
Loading…
Reference in New Issue
Block a user