diff options
-rw-r--r-- | xfa/fxfa/cxfa_ffdocview.cpp | 43 | ||||
-rw-r--r-- | xfa/fxfa/cxfa_ffdocview.h | 3 |
2 files changed, 20 insertions, 26 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, diff --git a/xfa/fxfa/cxfa_ffdocview.h b/xfa/fxfa/cxfa_ffdocview.h index dbc7672caa..2b8358264c 100644 --- a/xfa/fxfa/cxfa_ffdocview.h +++ b/xfa/fxfa/cxfa_ffdocview.h @@ -60,7 +60,7 @@ class CXFA_FFDocView { CXFA_FFWidgetHandler* GetWidgetHandler(); std::unique_ptr<CXFA_ReadyNodeIterator> CreateReadyNodeIterator(); CXFA_FFWidget* GetFocusWidget() const { return m_pFocusWidget.Get(); } - bool SetFocus(CXFA_FFWidget* hWidget); + bool SetFocus(CXFA_FFWidget* pNewFocus); CXFA_FFWidget* GetWidgetForNode(CXFA_Node* node); CXFA_FFWidget* GetWidgetByName(const WideString& wsName, CXFA_FFWidget* pRefWidget); @@ -118,7 +118,6 @@ class CXFA_FFDocView { CXFA_LayoutProcessor* m_pXFADocLayout = nullptr; // Not owned. UnownedPtr<CXFA_Node> m_pFocusNode; UnownedPtr<CXFA_FFWidget> m_pFocusWidget; - UnownedPtr<CXFA_FFWidget> m_pOldFocusWidget; std::vector<CXFA_Node*> m_ValidateNodes; std::vector<CXFA_Node*> m_CalculateNodes; std::vector<CXFA_BindItems*> m_BindItems; |