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