X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/47a8a4d5cc3e8fcb2efee4787cb9d244104beea5..ba5787676d002f76b4c3944cb598b626f10f058d:/include/wx/window.h?ds=sidebyside diff --git a/include/wx/window.h b/include/wx/window.h index 9e73245752..2dde62f41f 100644 --- a/include/wx/window.h +++ b/include/wx/window.h @@ -571,16 +571,35 @@ public: static wxWindow *DoFindFocus() /* = 0: implement in derived classes */; - // can this window have focus? - virtual bool AcceptsFocus() const { return IsShown() && IsEnabled(); } + // can this window have focus in principle? + // + // the difference between AcceptsFocus[FromKeyboard]() and CanAcceptFocus + // [FromKeyboard]() is that the former functions are meant to be + // overridden in the derived classes to simply return false if the + // control can't have focus, while the latter are meant to be used by + // this class clients and take into account the current window state + virtual bool AcceptsFocus() const { return true; } + + // can this window have focus right now? + bool CanAcceptFocus() const { return AcceptsFocus() && IsShown() && IsEnabled(); } // can this window be given focus by keyboard navigation? if not, the // only way to give it focus (provided it accepts it at all) is to // click it virtual bool AcceptsFocusFromKeyboard() const { return AcceptsFocus(); } - // navigates in the specified direction by sending a wxNavigationKeyEvent - virtual bool Navigate(int flags = wxNavigationKeyEvent::IsForward); + // can this window be assigned focus from keyboard right now? + bool CanAcceptFocusFromKeyboard() const + { return AcceptsFocusFromKeyboard() && CanAcceptFocus(); } + + // navigates inside this window + bool NavigateIn(int flags = wxNavigationKeyEvent::IsForward) + { return DoNavigateIn(flags); } + + // navigates in the specified direction from this window, this is + // equivalent to GetParent()->NavigateIn() + bool Navigate(int flags = wxNavigationKeyEvent::IsForward) + { return m_parent && ((wxWindowBase *)m_parent)->DoNavigateIn(flags); } // move this window just before/after the specified one in tab order // (the other window must be our sibling!) @@ -1187,6 +1206,10 @@ protected: }; virtual void DoMoveInTabOrder(wxWindow *win, MoveKind move); + // implementation of Navigate() and NavigateIn() + virtual bool DoNavigateIn(int flags); + + #if wxUSE_CONSTRAINTS // satisfy the constraints for the windows but don't set the window sizes void SatisfyConstraints();