/** * @param pView new focus view */ void CFrame::setFocusView (CView *pView) { static bool recursion = false; if (pView == pFocusView || (recursion && pFocusView != 0)) return; if (!bActive) { pActiveFocusView = pView; return; } recursion = true; CView *pOldFocusView = pFocusView; if (pView == 0 || (pView && pView->isAttached () == false)) pFocusView = 0; else pFocusView = pView; if (pFocusView && pFocusView->wantsFocus ()) { pFocusView->invalid (); CView* receiver = pFocusView->getParentView (); while (receiver != this && receiver != 0) { receiver->notify (pFocusView, kMsgNewFocusView); receiver = receiver->getParentView (); } notify (pFocusView, kMsgNewFocusView); } if (pOldFocusView) { if (pOldFocusView->wantsFocus ()) { pOldFocusView->invalid (); CView* receiver = pOldFocusView->getParentView (); while (receiver != this && receiver != 0) { receiver->notify (pOldFocusView, kMsgOldFocusView); receiver = receiver->getParentView (); } notify (pOldFocusView, kMsgOldFocusView); } pOldFocusView->looseFocus (); } if (pFocusView && pFocusView->wantsFocus ()) pFocusView->takeFocus (); recursion = false; }