diff options
Diffstat (limited to 'xfa/fxfa/cxfa_ffdocview.cpp')
-rw-r--r-- | xfa/fxfa/cxfa_ffdocview.cpp | 43 |
1 files changed, 19 insertions, 24 deletions
diff --git a/xfa/fxfa/cxfa_ffdocview.cpp b/xfa/fxfa/cxfa_ffdocview.cpp index 86a2a9fee9..51277c91ae 100644 --- a/xfa/fxfa/cxfa_ffdocview.cpp +++ b/xfa/fxfa/cxfa_ffdocview.cpp @@ -261,44 +261,40 @@ CXFA_FFDocView::CreateReadyNodeIterator() { : nullptr; } -bool CXFA_FFDocView::SetFocus(CXFA_FFWidget* hWidget) { - CXFA_FFWidget* pNewFocus = hWidget; - if (m_pOldFocusWidget == pNewFocus) +bool CXFA_FFDocView::SetFocus(CXFA_FFWidget* pNewFocus) { + CXFA_FFWidget* pOldFocus = m_pFocusWidget.Get(); + + if (pOldFocus == pNewFocus) return false; - CXFA_FFWidget* pOldFocus = m_pOldFocusWidget.Get(); - 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->GetStatus() & XFA_WidgetStatus_Focused) && + (pOldFocus->GetStatus() & XFA_WidgetStatus_Visible)) { if (!pOldFocus->IsLoaded()) pOldFocus->LoadWidget(); - pOldFocus->OnSetFocus(m_pFocusWidget.Get()); - m_pFocusWidget = pOldFocus; - pOldFocus->OnKillFocus(pNewFocus); + pOldFocus->OnSetFocus(pOldFocus); } - } - if (m_pFocusWidget == m_pOldFocusWidget) - return false; - pNewFocus = m_pOldFocusWidget.Get(); - if (pNewFocus && (pNewFocus->GetStatus() & XFA_WidgetStatus_Visible)) { - if (!pNewFocus->IsLoaded()) - pNewFocus->LoadWidget(); - pNewFocus->OnSetFocus(m_pFocusWidget.Get()); + pOldFocus->OnKillFocus(pNewFocus); } + if (pNewFocus) { + if (pNewFocus->GetStatus() & XFA_WidgetStatus_Visible) { + if (!pNewFocus->IsLoaded()) + pNewFocus->LoadWidget(); + + pNewFocus->OnSetFocus(pOldFocus); + } + CXFA_Node* node = pNewFocus->GetNode(); m_pFocusNode = node->IsWidgetReady() ? node : nullptr; + m_pFocusWidget = pNewFocus; } else { m_pFocusNode = nullptr; + m_pFocusWidget = nullptr; } - m_pFocusWidget = pNewFocus; - m_pOldFocusWidget = m_pFocusWidget; + return true; } @@ -323,7 +319,6 @@ void CXFA_FFDocView::DeleteLayoutItem(CXFA_FFWidget* pWidget) { m_pFocusNode = nullptr; m_pFocusWidget = nullptr; - m_pOldFocusWidget = nullptr; } static int32_t XFA_ProcessEvent(CXFA_FFDocView* pDocView, |