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 ) if ( focusableFromKeyboard )
{ {
// wxComboBox et al. needs to focus on on a different // We may need to focus on the connect widget if the
// widget than m_widget, so if the main widget isn't // main one isn't focusable, but note that we still use
// focusable try the connect widget // 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; GtkWidget* w = win->m_widget;
if ( !gtk_widget_get_can_focus(w) ) if ( !gtk_widget_get_can_focus(w) )
{ {
w = win->GetConnectWidget(); GtkWidget* const cw = win->GetConnectWidget();
if ( !gtk_widget_get_can_focus(w) ) if ( cw != w && gtk_widget_get_can_focus(cw) )
w = NULL; w = cw;
} }
if ( w ) mnemonicWindow->GTKWidgetDoSetMnemonic(w);
{ mnemonicWindow = NULL;
mnemonicWindow->GTKWidgetDoSetMnemonic(w);
mnemonicWindow = NULL;
}
} }
} }