| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "xfa/fwl/core/cfwl_notedriver.h" | 7 #include "xfa/fwl/core/cfwl_notedriver.h" |
| 8 | 8 |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| 11 #include "core/fxcrt/fx_ext.h" | 11 #include "core/fxcrt/fx_ext.h" |
| 12 #include "third_party/base/ptr_util.h" | 12 #include "third_party/base/ptr_util.h" |
| 13 #include "third_party/base/stl_util.h" | 13 #include "third_party/base/stl_util.h" |
| 14 #include "xfa/fwl/core/cfwl_app.h" | 14 #include "xfa/fwl/core/cfwl_app.h" |
| 15 #include "xfa/fwl/core/cfwl_eventtarget.h" | 15 #include "xfa/fwl/core/cfwl_eventtarget.h" |
| 16 #include "xfa/fwl/core/cfwl_form.h" |
| 16 #include "xfa/fwl/core/cfwl_msgkey.h" | 17 #include "xfa/fwl/core/cfwl_msgkey.h" |
| 17 #include "xfa/fwl/core/cfwl_msgkillfocus.h" | 18 #include "xfa/fwl/core/cfwl_msgkillfocus.h" |
| 18 #include "xfa/fwl/core/cfwl_msgmouse.h" | 19 #include "xfa/fwl/core/cfwl_msgmouse.h" |
| 19 #include "xfa/fwl/core/cfwl_msgmousewheel.h" | 20 #include "xfa/fwl/core/cfwl_msgmousewheel.h" |
| 20 #include "xfa/fwl/core/cfwl_msgsetfocus.h" | 21 #include "xfa/fwl/core/cfwl_msgsetfocus.h" |
| 21 #include "xfa/fwl/core/cfwl_noteloop.h" | 22 #include "xfa/fwl/core/cfwl_noteloop.h" |
| 22 #include "xfa/fwl/core/cfwl_widgetmgr.h" | 23 #include "xfa/fwl/core/cfwl_widgetmgr.h" |
| 23 #include "xfa/fwl/core/ifwl_form.h" | |
| 24 | 24 |
| 25 CFWL_NoteDriver::CFWL_NoteDriver() | 25 CFWL_NoteDriver::CFWL_NoteDriver() |
| 26 : m_pHover(nullptr), | 26 : m_pHover(nullptr), |
| 27 m_pFocus(nullptr), | 27 m_pFocus(nullptr), |
| 28 m_pGrab(nullptr), | 28 m_pGrab(nullptr), |
| 29 m_pNoteLoop(pdfium::MakeUnique<CFWL_NoteLoop>()) { | 29 m_pNoteLoop(pdfium::MakeUnique<CFWL_NoteLoop>()) { |
| 30 PushNoteLoop(m_pNoteLoop.get()); | 30 PushNoteLoop(m_pNoteLoop.get()); |
| 31 } | 31 } |
| 32 | 32 |
| 33 CFWL_NoteDriver::~CFWL_NoteDriver() { | 33 CFWL_NoteDriver::~CFWL_NoteDriver() { |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 96 ms.m_pSrcTarget = pPrev; | 96 ms.m_pSrcTarget = pPrev; |
| 97 if (bNotify) | 97 if (bNotify) |
| 98 ms.m_dwExtend = 1; | 98 ms.m_dwExtend = 1; |
| 99 | 99 |
| 100 if (IFWL_WidgetDelegate* pDelegate = pPrev->GetDelegate()) | 100 if (IFWL_WidgetDelegate* pDelegate = pPrev->GetDelegate()) |
| 101 pDelegate->OnProcessMessage(&ms); | 101 pDelegate->OnProcessMessage(&ms); |
| 102 } | 102 } |
| 103 if (pFocus) { | 103 if (pFocus) { |
| 104 IFWL_Widget* pWidget = | 104 IFWL_Widget* pWidget = |
| 105 pFocus->GetOwnerApp()->GetWidgetMgr()->GetSystemFormWidget(pFocus); | 105 pFocus->GetOwnerApp()->GetWidgetMgr()->GetSystemFormWidget(pFocus); |
| 106 IFWL_Form* pForm = static_cast<IFWL_Form*>(pWidget); | 106 CFWL_Form* pForm = static_cast<CFWL_Form*>(pWidget); |
| 107 if (pForm) | 107 if (pForm) |
| 108 pForm->SetSubFocus(pFocus); | 108 pForm->SetSubFocus(pFocus); |
| 109 | 109 |
| 110 CFWL_MsgSetFocus ms; | 110 CFWL_MsgSetFocus ms; |
| 111 ms.m_pDstTarget = pFocus; | 111 ms.m_pDstTarget = pFocus; |
| 112 if (bNotify) | 112 if (bNotify) |
| 113 ms.m_dwExtend = 1; | 113 ms.m_dwExtend = 1; |
| 114 if (IFWL_WidgetDelegate* pDelegate = pFocus->GetDelegate()) | 114 if (IFWL_WidgetDelegate* pDelegate = pFocus->GetDelegate()) |
| 115 pDelegate->OnProcessMessage(&ms); | 115 pDelegate->OnProcessMessage(&ms); |
| 116 } | 116 } |
| (...skipping 25 matching lines...) Expand all Loading... |
| 142 if (m_pFocus == pNoteTarget) | 142 if (m_pFocus == pNoteTarget) |
| 143 m_pFocus = nullptr; | 143 m_pFocus = nullptr; |
| 144 if (m_pHover == pNoteTarget) | 144 if (m_pHover == pNoteTarget) |
| 145 m_pHover = nullptr; | 145 m_pHover = nullptr; |
| 146 if (m_pGrab == pNoteTarget) | 146 if (m_pGrab == pNoteTarget) |
| 147 m_pGrab = nullptr; | 147 m_pGrab = nullptr; |
| 148 | 148 |
| 149 UnregisterEventTarget(pNoteTarget); | 149 UnregisterEventTarget(pNoteTarget); |
| 150 | 150 |
| 151 for (int32_t nIndex = 0; nIndex < m_forms.GetSize(); nIndex++) { | 151 for (int32_t nIndex = 0; nIndex < m_forms.GetSize(); nIndex++) { |
| 152 IFWL_Form* pForm = static_cast<IFWL_Form*>(m_forms[nIndex]); | 152 CFWL_Form* pForm = static_cast<CFWL_Form*>(m_forms[nIndex]); |
| 153 if (!pForm) | 153 if (!pForm) |
| 154 continue; | 154 continue; |
| 155 | 155 |
| 156 IFWL_Widget* pSubFocus = pForm->GetSubFocus(); | 156 IFWL_Widget* pSubFocus = pForm->GetSubFocus(); |
| 157 if (!pSubFocus) | 157 if (!pSubFocus) |
| 158 return; | 158 return; |
| 159 if (pSubFocus == pNoteTarget) | 159 if (pSubFocus == pNoteTarget) |
| 160 pForm->SetSubFocus(nullptr); | 160 pForm->SetSubFocus(nullptr); |
| 161 } | 161 } |
| 162 } | 162 } |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 268 CFWL_WidgetMgr* pWidgetMgr = pMessageForm->GetOwnerApp()->GetWidgetMgr(); | 268 CFWL_WidgetMgr* pWidgetMgr = pMessageForm->GetOwnerApp()->GetWidgetMgr(); |
| 269 if (pWidgetMgr->IsFormDisabled()) { | 269 if (pWidgetMgr->IsFormDisabled()) { |
| 270 m_pFocus = pMessage->m_pDstTarget; | 270 m_pFocus = pMessage->m_pDstTarget; |
| 271 return true; | 271 return true; |
| 272 } | 272 } |
| 273 | 273 |
| 274 IFWL_Widget* pWidget = pMessage->m_pDstTarget; | 274 IFWL_Widget* pWidget = pMessage->m_pDstTarget; |
| 275 if (!pWidget) | 275 if (!pWidget) |
| 276 return false; | 276 return false; |
| 277 | 277 |
| 278 IFWL_Form* pForm = static_cast<IFWL_Form*>(pWidget); | 278 CFWL_Form* pForm = static_cast<CFWL_Form*>(pWidget); |
| 279 IFWL_Widget* pSubFocus = pForm->GetSubFocus(); | 279 IFWL_Widget* pSubFocus = pForm->GetSubFocus(); |
| 280 if (pSubFocus && ((pSubFocus->GetStates() & FWL_WGTSTATE_Focused) == 0)) { | 280 if (pSubFocus && ((pSubFocus->GetStates() & FWL_WGTSTATE_Focused) == 0)) { |
| 281 pMessage->m_pDstTarget = pSubFocus; | 281 pMessage->m_pDstTarget = pSubFocus; |
| 282 if (m_pFocus != pMessage->m_pDstTarget) { | 282 if (m_pFocus != pMessage->m_pDstTarget) { |
| 283 m_pFocus = pMessage->m_pDstTarget; | 283 m_pFocus = pMessage->m_pDstTarget; |
| 284 return true; | 284 return true; |
| 285 } | 285 } |
| 286 } | 286 } |
| 287 return false; | 287 return false; |
| 288 } | 288 } |
| 289 | 289 |
| 290 bool CFWL_NoteDriver::DoKillFocus(CFWL_Message* pMessage, | 290 bool CFWL_NoteDriver::DoKillFocus(CFWL_Message* pMessage, |
| 291 IFWL_Widget* pMessageForm) { | 291 IFWL_Widget* pMessageForm) { |
| 292 CFWL_WidgetMgr* pWidgetMgr = pMessageForm->GetOwnerApp()->GetWidgetMgr(); | 292 CFWL_WidgetMgr* pWidgetMgr = pMessageForm->GetOwnerApp()->GetWidgetMgr(); |
| 293 if (pWidgetMgr->IsFormDisabled()) { | 293 if (pWidgetMgr->IsFormDisabled()) { |
| 294 if (m_pFocus == pMessage->m_pDstTarget) | 294 if (m_pFocus == pMessage->m_pDstTarget) |
| 295 m_pFocus = nullptr; | 295 m_pFocus = nullptr; |
| 296 return true; | 296 return true; |
| 297 } | 297 } |
| 298 | 298 |
| 299 IFWL_Form* pForm = static_cast<IFWL_Form*>(pMessage->m_pDstTarget); | 299 CFWL_Form* pForm = static_cast<CFWL_Form*>(pMessage->m_pDstTarget); |
| 300 if (!pForm) | 300 if (!pForm) |
| 301 return false; | 301 return false; |
| 302 | 302 |
| 303 IFWL_Widget* pSubFocus = pForm->GetSubFocus(); | 303 IFWL_Widget* pSubFocus = pForm->GetSubFocus(); |
| 304 if (pSubFocus && (pSubFocus->GetStates() & FWL_WGTSTATE_Focused)) { | 304 if (pSubFocus && (pSubFocus->GetStates() & FWL_WGTSTATE_Focused)) { |
| 305 pMessage->m_pDstTarget = pSubFocus; | 305 pMessage->m_pDstTarget = pSubFocus; |
| 306 if (m_pFocus == pMessage->m_pDstTarget) { | 306 if (m_pFocus == pMessage->m_pDstTarget) { |
| 307 m_pFocus = nullptr; | 307 m_pFocus = nullptr; |
| 308 return true; | 308 return true; |
| 309 } | 309 } |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 443 | 443 |
| 444 bool CFWL_NoteDriver::IsValidMessage(CFWL_Message* pMessage) { | 444 bool CFWL_NoteDriver::IsValidMessage(CFWL_Message* pMessage) { |
| 445 for (int32_t i = 0; i < m_noteLoopQueue.GetSize(); i++) { | 445 for (int32_t i = 0; i < m_noteLoopQueue.GetSize(); i++) { |
| 446 CFWL_NoteLoop* pNoteLoop = m_noteLoopQueue[i]; | 446 CFWL_NoteLoop* pNoteLoop = m_noteLoopQueue[i]; |
| 447 IFWL_Widget* pForm = pNoteLoop->GetForm(); | 447 IFWL_Widget* pForm = pNoteLoop->GetForm(); |
| 448 if (pForm && (pForm == pMessage->m_pDstTarget)) | 448 if (pForm && (pForm == pMessage->m_pDstTarget)) |
| 449 return true; | 449 return true; |
| 450 } | 450 } |
| 451 | 451 |
| 452 for (int32_t j = 0; j < m_forms.GetSize(); j++) { | 452 for (int32_t j = 0; j < m_forms.GetSize(); j++) { |
| 453 IFWL_Form* pForm = static_cast<IFWL_Form*>(m_forms[j]); | 453 CFWL_Form* pForm = static_cast<CFWL_Form*>(m_forms[j]); |
| 454 if (pForm == pMessage->m_pDstTarget) | 454 if (pForm == pMessage->m_pDstTarget) |
| 455 return true; | 455 return true; |
| 456 } | 456 } |
| 457 return false; | 457 return false; |
| 458 } | 458 } |
| 459 | 459 |
| 460 IFWL_Widget* CFWL_NoteDriver::GetMessageForm(IFWL_Widget* pDstTarget) { | 460 IFWL_Widget* CFWL_NoteDriver::GetMessageForm(IFWL_Widget* pDstTarget) { |
| 461 int32_t iTrackLoop = m_noteLoopQueue.GetSize(); | 461 int32_t iTrackLoop = m_noteLoopQueue.GetSize(); |
| 462 if (iTrackLoop <= 0) | 462 if (iTrackLoop <= 0) |
| 463 return nullptr; | 463 return nullptr; |
| (...skipping 15 matching lines...) Expand all Loading... |
| 479 void CFWL_NoteDriver::ClearEventTargets(bool bRemoveAll) { | 479 void CFWL_NoteDriver::ClearEventTargets(bool bRemoveAll) { |
| 480 auto it = m_eventTargets.begin(); | 480 auto it = m_eventTargets.begin(); |
| 481 while (it != m_eventTargets.end()) { | 481 while (it != m_eventTargets.end()) { |
| 482 auto old = it++; | 482 auto old = it++; |
| 483 if (old->second && (bRemoveAll || old->second->IsInvalid())) { | 483 if (old->second && (bRemoveAll || old->second->IsInvalid())) { |
| 484 delete old->second; | 484 delete old->second; |
| 485 m_eventTargets.erase(old); | 485 m_eventTargets.erase(old); |
| 486 } | 486 } |
| 487 } | 487 } |
| 488 } | 488 } |
| OLD | NEW |