]> git.saurik.com Git - wxWidgets.git/commitdiff
Exclude windows not accepting keyboard focus from GTK focus chain.
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 24 Jul 2011 22:19:37 +0000 (22:19 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 24 Jul 2011 22:19:37 +0000 (22:19 +0000)
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

src/gtk/window.cpp

index e7da36cf0703a960661297e90c63803dbe62156e..82a20f8a58249cd4f24962262f93a4731cf81430 100644 (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);