Exclude windows not accepting keyboard focus from GTK focus chain.

For some reason the test for AcceptsFocusFromKeyboard() wasn't done in the
correct place when constructing the GTK focus chain and even windows returning
false from it were still added to it.

Do not do this any more, this prevents the windows which are really not meant
to be focusable from keyboard (such as the pseudo-buttons in the generic
implementation of wxSearchCtrl) from gaining focus unexpectedly.

See #12808.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68367 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2011-07-24 22:19:37 +00:00
parent 9023040798
commit a3edb930b9

View File

@ -3443,9 +3443,11 @@ void wxWindowGTK::RealizeTabOrder()
{
wxWindowGTK *win = *i;
bool focusableFromKeyboard = win->AcceptsFocusFromKeyboard();
if ( mnemonicWindow )
{
if ( win->AcceptsFocusFromKeyboard() )
if ( focusableFromKeyboard )
{
// wxComboBox et al. needs to focus on on a different
// widget than m_widget, so if the main widget isn't
@ -3470,7 +3472,8 @@ void wxWindowGTK::RealizeTabOrder()
mnemonicWindow = win;
}
chain = g_list_prepend(chain, win->m_widget);
if ( focusableFromKeyboard )
chain = g_list_prepend(chain, win->m_widget);
}
chain = g_list_reverse(chain);