X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e71c530e030e5aee15f6cc925c8cd477aa351d13..507abc7b3af8d73e7caf05261d1f40b51775ae7a:/src/msw/toplevel.cpp?ds=inline diff --git a/src/msw/toplevel.cpp b/src/msw/toplevel.cpp index bdd1e301c4..ac6b7b0840 100644 --- a/src/msw/toplevel.cpp +++ b/src/msw/toplevel.cpp @@ -331,6 +331,48 @@ bool wxTopLevelWindowMSW::HandleSettingChange(WXWPARAM wParam, WXLPARAM lParam) } #endif +bool wxTopLevelWindowMSW::MSWProcessMessage(WXMSG* pMsg) +{ + // MSW specific feature: if the dialog has only one notebook-like child + // window (actually it could be any window that returns true from its + // HasMultiplePages()), then [Shift-]Ctrl-Tab and Ctrl-PageUp/Down keys + // should iterate over its pages even if the focus is outside of the + // control because this is how the standard MSW properties dialogs behave + if ( pMsg->message == WM_KEYDOWN && wxIsCtrlDown() && + (pMsg->wParam == VK_TAB || + pMsg->wParam == VK_PRIOR || + pMsg->wParam == VK_NEXT) ) + { + // check if we have a unique notebook-like child + wxWindow *bookctrl = NULL; + for ( wxWindowList::const_iterator i = GetChildren().begin(), + end = GetChildren().end(); + i != end; + ++i ) + { + wxWindow * const window = *i; + if ( window->HasMultiplePages() ) + { + if ( bookctrl ) + { + // this is the second book-like control already so don't do + // anything as we don't know which one should have its page + // changed + bookctrl = NULL; + break; + } + + bookctrl = window; + } + } + + if ( bookctrl && bookctrl->wxWindowMSW::MSWProcessMessage(pMsg) ) + return true; + } + + return wxTopLevelWindowBase::MSWProcessMessage(pMsg); +} + WXLRESULT wxTopLevelWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) { WXLRESULT rc = 0;