From: Vadim Zeitlin Date: Sat, 27 Sep 2003 12:34:05 +0000 (+0000) Subject: fix for handling (Shift-)Ctrl-Tab when the notebook itself has focus (patch 813507) X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/1d5b3bf0417ea60690c5c1eaf60422fe6d99ef81 fix for handling (Shift-)Ctrl-Tab when the notebook itself has focus (patch 813507) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@23957 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/msw/notebook.cpp b/src/msw/notebook.cpp index f79742abe6..094a91b357 100644 --- a/src/msw/notebook.cpp +++ b/src/msw/notebook.cpp @@ -727,6 +727,23 @@ void wxNotebook::OnSelChange(wxNotebookEvent& event) { wxNotebookPage *pPage = m_pages[sel]; pPage->Show(true); + pPage->SetFocus(); + + // If the newly focused window is not a child of the new page, + // SetFocus was not successful and the notebook itself should be + // focused + wxWindow *currentFocus = FindFocus(); + wxWindow *startFocus = currentFocus; + while ( currentFocus && currentFocus != pPage && currentFocus != this ) + currentFocus = currentFocus->GetParent(); + + if ( startFocus == pPage || currentFocus != pPage ) + SetFocus(); + + } + else // no pages in the notebook, give the focus to itself + { + SetFocus(); } m_nSelection = sel; @@ -740,12 +757,14 @@ bool wxNotebook::MSWTranslateMessage(WXMSG *wxmsg) { const MSG * const msg = (MSG *)wxmsg; - // we want to process (simple, i.e. without Shift or Ctrl) TAB to pass it - // to our page for keyboard navigation + // intercept TAB, CTRL+TAB and CTRL+SHIFT+TAB for processing by wxNotebook. + // TAB will be passed to the currently selected page, CTRL+TAB and + // CTRL+SHIFT+TAB will be processed by the notebook itself. do not + // intercept SHIFT+TAB. This goes to the parent of the notebook which will + // process it. if ( msg->message == WM_KEYDOWN && msg->wParam == VK_TAB && msg->hwnd == m_hwnd && - !wxIsCtrlDown() && !wxIsShiftDown() && - m_nSelection != -1 ) + (wxIsCtrlDown() || !wxIsShiftDown()) ) { return MSWProcessMessage(wxmsg); }