summaryrefslogtreecommitdiff
path: root/xfa/fxfa/cxfa_ffdocview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'xfa/fxfa/cxfa_ffdocview.cpp')
-rw-r--r--xfa/fxfa/cxfa_ffdocview.cpp43
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,