Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(522)

Side by Side Diff: xfa/fwl/core/cfwl_notedriver.cpp

Issue 2530993002: Cleanup FWL Event and Message code. (Closed)
Patch Set: Review feedback Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 return p; 84 return p;
85 } 85 }
86 86
87 bool CFWL_NoteDriver::SetFocus(CFWL_Widget* pFocus, bool bNotify) { 87 bool CFWL_NoteDriver::SetFocus(CFWL_Widget* pFocus, bool bNotify) {
88 if (m_pFocus == pFocus) 88 if (m_pFocus == pFocus)
89 return true; 89 return true;
90 90
91 CFWL_Widget* pPrev = m_pFocus; 91 CFWL_Widget* pPrev = m_pFocus;
92 m_pFocus = pFocus; 92 m_pFocus = pFocus;
93 if (pPrev) { 93 if (pPrev) {
94 CFWL_MsgKillFocus ms; 94 CFWL_MsgKillFocus ms(pPrev, pPrev);
95 ms.m_pDstTarget = pPrev;
96 ms.m_pSrcTarget = pPrev;
97 if (bNotify) 95 if (bNotify)
98 ms.m_dwExtend = 1; 96 ms.m_dwExtend = 1;
99 97
100 if (IFWL_WidgetDelegate* pDelegate = pPrev->GetDelegate()) 98 if (IFWL_WidgetDelegate* pDelegate = pPrev->GetDelegate())
101 pDelegate->OnProcessMessage(&ms); 99 pDelegate->OnProcessMessage(&ms);
102 } 100 }
103 if (pFocus) { 101 if (pFocus) {
104 CFWL_Widget* pWidget = 102 CFWL_Widget* pWidget =
105 pFocus->GetOwnerApp()->GetWidgetMgr()->GetSystemFormWidget(pFocus); 103 pFocus->GetOwnerApp()->GetWidgetMgr()->GetSystemFormWidget(pFocus);
106 CFWL_Form* pForm = static_cast<CFWL_Form*>(pWidget); 104 CFWL_Form* pForm = static_cast<CFWL_Form*>(pWidget);
107 if (pForm) 105 if (pForm)
108 pForm->SetSubFocus(pFocus); 106 pForm->SetSubFocus(pFocus);
109 107
110 CFWL_MsgSetFocus ms; 108 CFWL_MsgSetFocus ms(nullptr, pFocus);
111 ms.m_pDstTarget = pFocus;
112 if (bNotify) 109 if (bNotify)
113 ms.m_dwExtend = 1; 110 ms.m_dwExtend = 1;
114 if (IFWL_WidgetDelegate* pDelegate = pFocus->GetDelegate()) 111 if (IFWL_WidgetDelegate* pDelegate = pFocus->GetDelegate())
115 pDelegate->OnProcessMessage(&ms); 112 pDelegate->OnProcessMessage(&ms);
116 } 113 }
117 return true; 114 return true;
118 } 115 }
119 116
120 void CFWL_NoteDriver::Run() { 117 void CFWL_NoteDriver::Run() {
121 #if (_FX_OS_ == _FX_LINUX_DESKTOP_ || _FX_OS_ == _FX_WIN32_DESKTOP_ || \ 118 #if (_FX_OS_ == _FX_LINUX_DESKTOP_ || _FX_OS_ == _FX_WIN32_DESKTOP_ || \
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 CFWL_WidgetMgr* pWidgetMgr = 212 CFWL_WidgetMgr* pWidgetMgr =
216 pMessage->m_pDstTarget->GetOwnerApp()->GetWidgetMgr(); 213 pMessage->m_pDstTarget->GetOwnerApp()->GetWidgetMgr();
217 CFWL_Widget* pMessageForm = pWidgetMgr->IsFormDisabled() 214 CFWL_Widget* pMessageForm = pWidgetMgr->IsFormDisabled()
218 ? pMessage->m_pDstTarget 215 ? pMessage->m_pDstTarget
219 : GetMessageForm(pMessage->m_pDstTarget); 216 : GetMessageForm(pMessage->m_pDstTarget);
220 if (!pMessageForm) 217 if (!pMessageForm)
221 return; 218 return;
222 if (!DispatchMessage(pMessage, pMessageForm)) 219 if (!DispatchMessage(pMessage, pMessageForm))
223 return; 220 return;
224 221
225 if (pMessage->GetClassID() == CFWL_MessageType::Mouse) 222 if (pMessage->GetType() == CFWL_Message::Type::Mouse)
226 MouseSecondary(pMessage); 223 MouseSecondary(pMessage);
227 } 224 }
228 225
229 bool CFWL_NoteDriver::DispatchMessage(CFWL_Message* pMessage, 226 bool CFWL_NoteDriver::DispatchMessage(CFWL_Message* pMessage,
230 CFWL_Widget* pMessageForm) { 227 CFWL_Widget* pMessageForm) {
231 switch (pMessage->GetClassID()) { 228 switch (pMessage->GetType()) {
232 case CFWL_MessageType::SetFocus: { 229 case CFWL_Message::Type::SetFocus: {
233 if (!DoSetFocus(pMessage, pMessageForm)) 230 if (!DoSetFocus(pMessage, pMessageForm))
234 return false; 231 return false;
235 break; 232 break;
236 } 233 }
237 case CFWL_MessageType::KillFocus: { 234 case CFWL_Message::Type::KillFocus: {
238 if (!DoKillFocus(pMessage, pMessageForm)) 235 if (!DoKillFocus(pMessage, pMessageForm))
239 return false; 236 return false;
240 break; 237 break;
241 } 238 }
242 case CFWL_MessageType::Key: { 239 case CFWL_Message::Type::Key: {
243 if (!DoKey(pMessage, pMessageForm)) 240 if (!DoKey(pMessage, pMessageForm))
244 return false; 241 return false;
245 break; 242 break;
246 } 243 }
247 case CFWL_MessageType::Mouse: { 244 case CFWL_Message::Type::Mouse: {
248 if (!DoMouse(pMessage, pMessageForm)) 245 if (!DoMouse(pMessage, pMessageForm))
249 return false; 246 return false;
250 break; 247 break;
251 } 248 }
252 case CFWL_MessageType::MouseWheel: { 249 case CFWL_Message::Type::MouseWheel: {
253 if (!DoWheel(pMessage, pMessageForm)) 250 if (!DoWheel(pMessage, pMessageForm))
254 return false; 251 return false;
255 break; 252 break;
256 } 253 }
257 default: 254 default:
258 break; 255 break;
259 } 256 }
260 if (IFWL_WidgetDelegate* pDelegate = pMessage->m_pDstTarget->GetDelegate()) 257 if (IFWL_WidgetDelegate* pDelegate = pMessage->m_pDstTarget->GetDelegate())
261 pDelegate->OnProcessMessage(pMessage); 258 pDelegate->OnProcessMessage(pMessage);
262 259
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
409 return true; 406 return true;
410 } 407 }
411 408
412 void CFWL_NoteDriver::MouseSecondary(CFWL_Message* pMessage) { 409 void CFWL_NoteDriver::MouseSecondary(CFWL_Message* pMessage) {
413 CFWL_Widget* pTarget = pMessage->m_pDstTarget; 410 CFWL_Widget* pTarget = pMessage->m_pDstTarget;
414 if (pTarget == m_pHover) 411 if (pTarget == m_pHover)
415 return; 412 return;
416 413
417 CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage); 414 CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage);
418 if (m_pHover) { 415 if (m_pHover) {
419 CFWL_MsgMouse msLeave; 416 CFWL_MsgMouse msLeave(nullptr, m_pHover);
420 msLeave.m_pDstTarget = m_pHover;
421 msLeave.m_fx = pMsg->m_fx; 417 msLeave.m_fx = pMsg->m_fx;
422 msLeave.m_fy = pMsg->m_fy; 418 msLeave.m_fy = pMsg->m_fy;
423 pTarget->TransformTo(m_pHover, msLeave.m_fx, msLeave.m_fy); 419 pTarget->TransformTo(m_pHover, msLeave.m_fx, msLeave.m_fy);
424 420
425 msLeave.m_dwFlags = 0; 421 msLeave.m_dwFlags = 0;
426 msLeave.m_dwCmd = FWL_MouseCommand::Leave; 422 msLeave.m_dwCmd = FWL_MouseCommand::Leave;
427 DispatchMessage(&msLeave, nullptr); 423 DispatchMessage(&msLeave, nullptr);
428 } 424 }
429 if (pTarget->GetClassID() == FWL_Type::Form) { 425 if (pTarget->GetClassID() == FWL_Type::Form) {
430 m_pHover = nullptr; 426 m_pHover = nullptr;
431 return; 427 return;
432 } 428 }
433 m_pHover = pTarget; 429 m_pHover = pTarget;
434 430
435 CFWL_MsgMouse msHover; 431 CFWL_MsgMouse msHover(nullptr, pTarget);
436 msHover.m_pDstTarget = pTarget;
437 msHover.m_fx = pMsg->m_fx; 432 msHover.m_fx = pMsg->m_fx;
438 msHover.m_fy = pMsg->m_fy; 433 msHover.m_fy = pMsg->m_fy;
439 msHover.m_dwFlags = 0; 434 msHover.m_dwFlags = 0;
440 msHover.m_dwCmd = FWL_MouseCommand::Hover; 435 msHover.m_dwCmd = FWL_MouseCommand::Hover;
441 DispatchMessage(&msHover, nullptr); 436 DispatchMessage(&msHover, nullptr);
442 } 437 }
443 438
444 bool CFWL_NoteDriver::IsValidMessage(CFWL_Message* pMessage) { 439 bool CFWL_NoteDriver::IsValidMessage(CFWL_Message* pMessage) {
445 for (int32_t i = 0; i < m_noteLoopQueue.GetSize(); i++) { 440 for (int32_t i = 0; i < m_noteLoopQueue.GetSize(); i++) {
446 CFWL_NoteLoop* pNoteLoop = m_noteLoopQueue[i]; 441 CFWL_NoteLoop* pNoteLoop = m_noteLoopQueue[i];
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
479 void CFWL_NoteDriver::ClearEventTargets(bool bRemoveAll) { 474 void CFWL_NoteDriver::ClearEventTargets(bool bRemoveAll) {
480 auto it = m_eventTargets.begin(); 475 auto it = m_eventTargets.begin();
481 while (it != m_eventTargets.end()) { 476 while (it != m_eventTargets.end()) {
482 auto old = it++; 477 auto old = it++;
483 if (old->second && (bRemoveAll || old->second->IsInvalid())) { 478 if (old->second && (bRemoveAll || old->second->IsInvalid())) {
484 delete old->second; 479 delete old->second;
485 m_eventTargets.erase(old); 480 m_eventTargets.erase(old);
486 } 481 }
487 } 482 }
488 } 483 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698