X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b8f434e731d0f6153a87988777baa4c2fbe629c6..9092371c0ad8090dc479d5015a1e69b3b9777e2f:/src/msw/window.cpp diff --git a/src/msw/window.cpp b/src/msw/window.cpp index 7d80f8dd6b..5ed982abb3 100644 --- a/src/msw/window.cpp +++ b/src/msw/window.cpp @@ -650,6 +650,47 @@ wxWindow *wxWindowBase::DoFindFocus() bool wxWindowMSW::Enable(bool enable) { + // we shouldn't really enable the window if our parent is currently + // disabled because under MSW this would indeed show the window in enabled + // state but it still wouldn't respond to the input (as its parent is + // disabled), so just update the internal m_childrenDisabled list in this + // case and our state will be really changed when the parent is enabled + + // the logic above doesn't apply to top level windows, of course + wxWindowMSW * const parent = IsTopLevel() ? NULL : GetParent(); + if ( parent && !parent->IsEnabled() && !IsEnabled() ) + { + // it's a reference as we can create it below + wxWindowList *& disabledSiblings = parent->m_childrenDisabled; + + bool rc = false; + if ( enable ) + { + // shouldn't be disabled when the parent is reenabled + if ( disabledSiblings ) + { + wxWindowList::compatibility_iterator + i = disabledSiblings->Find(this); + if ( i ) + { + disabledSiblings->Erase(i); + rc = true; + } + } + //else: nothing to do + } + else // !enable + { + // should disable this window when the parent is enabled + if ( !disabledSiblings ) + disabledSiblings = new wxWindowList; + + disabledSiblings->Append(this); + } + + return rc; + } + if ( !wxWindowBase::Enable(enable) ) return false; @@ -5779,7 +5820,7 @@ static inline bool wxIsKeyDown(WXWORD vk) switch (vk) { case VK_LBUTTON: - if (GetSystemMetrics(SM_SWAPBUTTON)) vk = VK_RBUTTON; + if (GetSystemMetrics(SM_SWAPBUTTON)) vk = VK_RBUTTON; break; case VK_RBUTTON: if (GetSystemMetrics(SM_SWAPBUTTON)) vk = VK_LBUTTON;