FX_BOOL CXFA_FFDocView::SetFocus(IXFA_Widget* hWidget) { CXFA_FFWidget* pNewFocus = (CXFA_FFWidget*)hWidget; if (m_pOldFocusWidget == pNewFocus) { return FALSE; } CXFA_FFWidget* pOldFocus = m_pOldFocusWidget; m_pOldFocusWidget = pNewFocus; if (pOldFocus) { if (m_pFocusWidget != m_pOldFocusWidget && (pOldFocus->GetStatus() & XFA_WIDGETSTATUS_Focused)) { m_pFocusWidget = pOldFocus; pOldFocus->OnKillFocus(pNewFocus); } else if ((pOldFocus->GetStatus() & XFA_WIDGETSTATUS_Visible)) { if (!pOldFocus->IsLoaded()) { pOldFocus->LoadWidget(); } pOldFocus->OnSetFocus(m_pFocusWidget); m_pFocusWidget = pOldFocus; pOldFocus->OnKillFocus(pNewFocus); } } if (m_pFocusWidget == m_pOldFocusWidget) { return FALSE; } pNewFocus = m_pOldFocusWidget; if (m_pListFocusWidget && pNewFocus == m_pListFocusWidget) { m_pFocusAcc = NULL; m_pFocusWidget = NULL; m_pListFocusWidget = NULL; m_pOldFocusWidget = NULL; return FALSE; } if (pNewFocus && (pNewFocus->GetStatus() & XFA_WIDGETSTATUS_Visible)) { if (!pNewFocus->IsLoaded()) { pNewFocus->LoadWidget(); } pNewFocus->OnSetFocus(m_pFocusWidget); } m_pFocusAcc = pNewFocus ? pNewFocus->GetDataAcc() : NULL; m_pFocusWidget = pNewFocus; m_pOldFocusWidget = m_pFocusWidget; return TRUE; }