Fall back on the main widget if connect one isn't focusable

If neither main widget nor connect widget is focusable (which notably
happens when they're the same anyhow, as is the case for wxChoice, for
example), still use the main widget as mnemonic instead of not using any
mnemonic at all.

This fixes activation of a wxChoice preceded by wxStaticText by pressing
the key combination corresponding to the label mnemonic, which didn't
work previously.
This commit is contained in:
Vadim Zeitlin
2019-03-27 15:41:53 +01:00
parent 01ed0842ff
commit b0133392b7

View File

@@ -4768,22 +4768,21 @@ void wxWindowGTK::RealizeTabOrder()
{
if ( focusableFromKeyboard )
{
// wxComboBox et al. needs to focus on on a different
// widget than m_widget, so if the main widget isn't
// focusable try the connect widget
// We may need to focus on the connect widget if the
// main one isn't focusable, but note that we still use
// the main widget if neither it nor connect widget is
// focusable, without this using a wxStaticText before
// wxChoice wouldn't work at all, for example.
GtkWidget* w = win->m_widget;
if ( !gtk_widget_get_can_focus(w) )
{
w = win->GetConnectWidget();
if ( !gtk_widget_get_can_focus(w) )
w = NULL;
GtkWidget* const cw = win->GetConnectWidget();
if ( cw != w && gtk_widget_get_can_focus(cw) )
w = cw;
}
if ( w )
{
mnemonicWindow->GTKWidgetDoSetMnemonic(w);
mnemonicWindow = NULL;
}
mnemonicWindow->GTKWidgetDoSetMnemonic(w);
mnemonicWindow = NULL;
}
}