]> git.saurik.com Git - wxWidgets.git/commitdiff
Fix Tab navigation when focused control is disabled.
authorVáclav Slavík <vslavik@fastmail.fm>
Sun, 1 Aug 2010 10:11:53 +0000 (10:11 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Sun, 1 Aug 2010 10:11:53 +0000 (10:11 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65154 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/msw/window.h
src/msw/radiobox.cpp
src/msw/spinctrl.cpp
src/msw/window.cpp

index 33b4354107859885c4653756466d2dcd0a781b68..9557141e5ff3eaceffedc60b79c025d7394c9a48 100644 (file)
@@ -590,6 +590,8 @@ protected:
                                           int& x, int& y,
                                           int& w, int& h) const;
 
                                           int& x, int& y,
                                           int& w, int& h) const;
 
+    bool MSWEnableHWND(WXHWND hWnd, bool enable);
+
 private:
     // common part of all ctors
     void Init();
 private:
     // common part of all ctors
     void Init();
index 8c8b20415876e413d3ce850eef4b39cd98d374c3..634d598476286bd7c2eb0f005397be7cc7a4d3aa 100644 (file)
@@ -403,7 +403,7 @@ bool wxRadioBox::Enable(unsigned int item, bool enable)
     wxCHECK_MSG( IsValid(item), false,
                  wxT("invalid item in wxRadioBox::Enable()") );
 
     wxCHECK_MSG( IsValid(item), false,
                  wxT("invalid item in wxRadioBox::Enable()") );
 
-    BOOL ret = ::EnableWindow((*m_radioButtons)[item], enable);
+    BOOL ret = MSWEnableHWND((*m_radioButtons)[item], enable);
 
     return (ret == 0) != enable;
 }
 
     return (ret == 0) != enable;
 }
index 80416bf320b5aca9ab71f847d8b65aeaa201664f..bb867d36a80e5dd1da47e7a6c453e79d18198e8c 100644 (file)
@@ -625,7 +625,7 @@ bool wxSpinCtrl::Enable(bool enable)
         return false;
     }
 
         return false;
     }
 
-    ::EnableWindow(GetBuddyHwnd(), enable);
+    MSWEnableHWND(GetBuddyHwnd(), enable);
 
     return true;
 }
 
     return true;
 }
index 5dd89b0bc36b53a949f949d27500e731e9244bc8..3bc63109eba7c333c3b2826428adff8cda0b2eb4 100644 (file)
@@ -699,9 +699,21 @@ wxWindow *wxWindowBase::DoFindFocus()
 
 void wxWindowMSW::DoEnable( bool enable )
 {
 
 void wxWindowMSW::DoEnable( bool enable )
 {
-    HWND hWnd = GetHwnd();
-    if ( hWnd )
-        ::EnableWindow(hWnd, (BOOL)enable);
+    MSWEnableHWND(GetHwnd(), enable);
+}
+
+bool wxWindowMSW::MSWEnableHWND(WXHWND hWnd, bool enable)
+{
+    if ( !hWnd )
+        return false;
+
+    // If disabling focused control, we move focus to the next one, as if the
+    // user pressed Tab. That's because we can't keep focus on a disabled
+    // control, Tab-navigation would stop working then.
+    if ( !enable && ::GetFocus() == hWnd )
+        Navigate();
+
+    return ::EnableWindow(hWnd, (BOOL)enable);
 }
 
 bool wxWindowMSW::Show(bool show)
 }
 
 bool wxWindowMSW::Show(bool show)