Changeset 70912 in vbox for trunk/src/VBox/Frontends/VirtualBox
- Timestamp:
- Feb 8, 2018 2:56:45 PM (7 years ago)
- svn:sync-xref-src-repo-rev:
- 120740
- Location:
- trunk/src/VBox/Frontends/VirtualBox/src/runtime/information
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/UIGuestSessionsEventHandler.cpp
r70909 r70912 20 20 #else /* !VBOX_WITH_PRECOMPILED_HEADERS */ 21 21 22 # include <QSharedPointer> 22 23 /* GUI includes: */ 23 24 # include "UIExtraDataManager.h" … … 43 44 typedef QMap<ULONG, UIGuestProcess*> GuestProcessMap; 44 45 46 /** A wrapper around (de)registering event listener for COM objects. */ 47 template <typename T> 48 class UIEventWrapper 49 { 50 51 public: 52 UIEventWrapper(const QVector<KVBoxEventType>& eventTypes, T comObject, QObject* qParent) 53 : m_comObject(comObject) 54 , m_bInitialized(false) 55 , m_pQtListener(0) 56 { 57 /* Check if we have a valid COM object */ 58 if (m_comObject.isOk()) 59 { 60 m_pQtListener.createObject(); 61 m_pQtListener->init(new UIMainEventListener, qParent); 62 m_comEventListener = CEventListener(m_pQtListener); 63 /* Get object event source: */ 64 CEventSource comEventSource = m_comObject.GetEventSource(); 65 if(comEventSource.isOk()) 66 { 67 /* Register event listener for object event source: */ 68 comEventSource.RegisterListener(m_comEventListener, eventTypes, 69 gEDataManager->eventHandlingType() == EventHandlingType_Active ? TRUE : FALSE); 70 m_bInitialized = true; 71 /* If event listener registered as passive one: */ 72 if (gEDataManager->eventHandlingType() == EventHandlingType_Passive) 73 { 74 m_pQtListener->getWrapped()->registerSource(comEventSource, m_comEventListener); 75 } 76 } 77 } 78 } 79 ~UIEventWrapper() 80 { 81 if (!m_pQtListener) 82 return; 83 if (!vboxGlobal().isVBoxSVCAvailable()) 84 return; 85 /* Unregister everything: */ 86 if (gEDataManager->eventHandlingType() == EventHandlingType_Passive) 87 m_pQtListener->getWrapped()->unregisterSources(); 88 /* Unregister event listener for object event source: */ 89 if(m_comObject.isOk()) 90 { 91 CEventSource comEventSourceGuestProcess = m_comObject.GetEventSource(); 92 if(comEventSourceGuestProcess.isOk()) 93 comEventSourceGuestProcess.UnregisterListener(m_comEventListener); 94 } 95 } 96 97 UIMainEventListener* qtListener() 98 { 99 if(!m_pQtListener) 100 return 0; 101 return m_pQtListener->getWrapped(); 102 } 103 104 bool isInitialized() const 105 { 106 return m_bInitialized; 107 } 108 109 private: 110 T m_comObject; 111 bool m_bInitialized; 112 ComObjPtr<UIMainEventListenerImpl> m_pQtListener; 113 CEventListener m_comEventListener; 114 }; 45 115 46 116 /****************************************************************************************************** … … 59 129 public: 60 130 61 UIGuestProcess(QObject *parent, const CGuestProcess &guestProcess); 62 ~UIGuestProcess(); 131 UIGuestProcess(QObject *parent, CGuestProcess guestProcess); 63 132 QString guestProcessName() const; 64 133 ULONG guestPID() const; … … 72 141 73 142 void prepareListener(); 74 void cleanupListener();75 143 76 144 CGuestProcess m_comGuestProcess; 77 ComObjPtr<UIMainEventListenerImpl> m_pQtListener; 78 CEventListener m_comEventListener; 145 QSharedPointer<UIEventWrapper<CGuestProcess> > m_pEventWrapper; 79 146 }; 80 147 … … 94 161 public: 95 162 96 UIGuestSession(QObject *parent, const CGuestSession &guestSession); 97 ~UIGuestSession(); 163 UIGuestSession(QObject *parent, CGuestSession guestSession); 98 164 QString guestSessionName() const; 99 165 QString guestSessionStatus() const; … … 108 174 109 175 void prepareListener(); 110 void cleanupListener();111 176 void initialize(); 112 177 void addGuestProcess(const CGuestProcess &guestProcess); … … 114 179 115 180 CGuestSession m_comGuestSession; 116 ComObjPtr<UIMainEventListenerImpl> m_pQtListener; 117 CEventListener m_comEventListener; 181 QSharedPointer<UIEventWrapper<CGuestSession> > m_pEventWrapper; 118 182 GuestProcessMap m_guestProcessMap; 119 183 }; … … 133 197 public: 134 198 135 UIGuestSessionsEventHandlerImp(QObject *parent, const CGuest &comGuest); 136 ~UIGuestSessionsEventHandlerImp(); 199 UIGuestSessionsEventHandlerImp(QObject *parent, CGuest comGuest); 137 200 const GuestSessionMap& getGuestSessionMap() const; 138 201 … … 145 208 146 209 void prepareListener(); 147 void cleanupListener();148 210 void initialize(); 149 211 … … 151 213 void removeGuestSession(const CGuestSession &guestSession); 152 214 153 154 215 CGuest m_comGuest; 155 ComObjPtr<UIMainEventListenerImpl> m_pQtListener; 156 CEventListener m_comEventListener; 216 QSharedPointer<UIEventWrapper<CGuest> > m_pEventWrapper; 157 217 GuestSessionMap m_guestSessionMap; 158 218 }; … … 162 222 * UIGuestProcess definition. * 163 223 ******************************************************************************************************/ 164 UIGuestProcess::UIGuestProcess(QObject *parent, const CGuestProcess &guestProcess)224 UIGuestProcess::UIGuestProcess(QObject *parent, CGuestProcess guestProcess) 165 225 :QObject(parent) 166 226 , m_comGuestProcess(guestProcess) 227 , m_pEventWrapper(0) 167 228 { 168 229 qRegisterMetaType<CGuestProcess>("CGuestProcess"); … … 170 231 } 171 232 172 UIGuestProcess::~UIGuestProcess()173 {174 cleanupListener();175 }176 233 177 234 void UIGuestProcess::prepareListener() … … 179 236 if (!m_comGuestProcess.isOk()) 180 237 return; 181 182 m_pQtListener.createObject();183 m_pQtListener->init(new UIMainEventListener, this);184 m_comEventListener = CEventListener(m_pQtListener);185 connect(m_pQtListener->getWrapped(), &UIMainEventListener::sigGuestProcessStateChanged,186 this, &UIGuestProcess::sigGuestProcessUpdated);187 188 CEventSource comEventSourceGuestProcess = m_comGuestProcess.GetEventSource();189 AssertWrapperOk(comEventSourceGuestProcess);190 191 238 QVector<KVBoxEventType> eventTypes; 192 239 eventTypes << KVBoxEventType_OnGuestProcessStateChanged … … 194 241 << KVBoxEventType_OnGuestProcessOutput; 195 242 196 comEventSourceGuestProcess.RegisterListener(m_comEventListener, eventTypes, 197 gEDataManager->eventHandlingType() == EventHandlingType_Active ? TRUE : FALSE); 198 AssertWrapperOk(comEventSourceGuestProcess); 199 200 if (gEDataManager->eventHandlingType() == EventHandlingType_Passive) 201 { 202 m_pQtListener->getWrapped()->registerSource(comEventSourceGuestProcess, m_comEventListener); 203 } 204 } 205 206 207 void UIGuestProcess::cleanupListener() 208 { 209 if (gEDataManager->eventHandlingType() == EventHandlingType_Passive) 210 m_pQtListener->getWrapped()->unregisterSources(); 211 212 if (!vboxGlobal().isVBoxSVCAvailable()) 213 return; 214 if(m_comGuestProcess.isOk()) 215 { 216 CEventSource comEventSourceGuestProcess = m_comGuestProcess.GetEventSource(); 217 if(comEventSourceGuestProcess.isOk()) 218 { 219 AssertWrapperOk(comEventSourceGuestProcess); 220 comEventSourceGuestProcess.UnregisterListener(m_comEventListener); 221 } 222 } 223 } 243 m_pEventWrapper = 244 QSharedPointer<UIEventWrapper<CGuestProcess> >(new UIEventWrapper<CGuestProcess>(eventTypes, m_comGuestProcess, this)); 245 246 if (m_pEventWrapper && m_pEventWrapper->isInitialized() && m_pEventWrapper->qtListener()) 247 connect(m_pEventWrapper->qtListener(), &UIMainEventListener::sigGuestProcessStateChanged, 248 this, &UIGuestProcess::sigGuestProcessUpdated); 249 } 250 224 251 225 252 QString UIGuestProcess::guestProcessName() const … … 289 316 ******************************************************************************************************/ 290 317 291 UIGuestSession::UIGuestSession(QObject *parent, const CGuestSession &guestSession)318 UIGuestSession::UIGuestSession(QObject *parent, CGuestSession guestSession) 292 319 : QObject(parent) 293 320 , m_comGuestSession(guestSession) … … 298 325 } 299 326 300 UIGuestSession::~UIGuestSession()301 {302 cleanupListener();303 }304 305 327 void UIGuestSession::prepareListener() 306 328 { 307 329 if (!m_comGuestSession.isOk()) 308 330 return; 309 /* Create event listener instance: */310 m_pQtListener.createObject();311 m_pQtListener->init(new UIMainEventListener, this);312 m_comEventListener = CEventListener(m_pQtListener);313 314 connect(m_pQtListener->getWrapped(), &UIMainEventListener::sigGuestSessionStatedChanged,315 this, &UIGuestSession::sigGuestSessionUpdated);316 connect(m_pQtListener->getWrapped(), &UIMainEventListener::sigGuestProcessRegistered,317 this, &UIGuestSession::sltGuestProcessRegistered);318 connect(m_pQtListener->getWrapped(), &UIMainEventListener::sigGuestProcessUnregistered,319 this, &UIGuestSession::sltGuestProcessUnregistered);320 321 /* Get CGuest event source: */322 CEventSource comEventSourceGuestSession = m_comGuestSession.GetEventSource();323 AssertWrapperOk(comEventSourceGuestSession);324 325 /* Enumerate all the required event-types: */326 331 QVector<KVBoxEventType> eventTypes; 327 332 eventTypes << KVBoxEventType_OnGuestSessionStateChanged 328 333 << KVBoxEventType_OnGuestProcessRegistered; 329 // << KVBoxEventType_OnGuestProcessStateChanged 330 // << KVBoxEventType_OnGuestProcessInputNotify 331 // << KVBoxEventType_OnGuestProcessOutput 332 // << KVBoxEventType_OnGuestFileRegistered 333 // << KVBoxEventType_OnGuestFileStateChanged 334 // << KVBoxEventType_OnGuestFileOffsetChanged 335 // << KVBoxEventType_OnGuestFileRead 336 // << KVBoxEventType_OnGuestFileWrite; 337 338 /* Register event listener for CGuestSession event source: */ 339 comEventSourceGuestSession.RegisterListener(m_comEventListener, eventTypes, 340 gEDataManager->eventHandlingType() == EventHandlingType_Active ? TRUE : FALSE); 341 AssertWrapperOk(comEventSourceGuestSession); 342 343 /* If event listener registered as passive one: */ 344 if (gEDataManager->eventHandlingType() == EventHandlingType_Passive) 345 { 346 /* Register event sources in their listeners as well: */ 347 m_pQtListener->getWrapped()->registerSource(comEventSourceGuestSession, m_comEventListener); 348 } 349 } 350 351 void UIGuestSession::cleanupListener() 352 { 353 /* If event listener registered as passive one: */ 354 if (gEDataManager->eventHandlingType() == EventHandlingType_Passive) 355 { 356 /* Unregister everything: */ 357 m_pQtListener->getWrapped()->unregisterSources(); 358 } 359 360 /* Make sure VBoxSVC is available: */ 361 if (!vboxGlobal().isVBoxSVCAvailable()) 362 return; 363 364 if (m_comGuestSession.isOk()) 365 { 366 /* Get CGuestSession event source: */ 367 CEventSource comEventSourceGuestSession = m_comGuestSession.GetEventSource(); 368 if (comEventSourceGuestSession.isOk()) 369 { 370 AssertWrapperOk(comEventSourceGuestSession); 371 372 /* Unregister event listener for CProgress event source: */ 373 comEventSourceGuestSession.UnregisterListener(m_comEventListener); 374 } 334 335 m_pEventWrapper = 336 QSharedPointer<UIEventWrapper<CGuestSession> >(new UIEventWrapper<CGuestSession>(eventTypes, m_comGuestSession, this)); 337 338 if (m_pEventWrapper && m_pEventWrapper->isInitialized() && m_pEventWrapper->qtListener()) 339 { 340 connect(m_pEventWrapper->qtListener(), &UIMainEventListener::sigGuestSessionStatedChanged, 341 this, &UIGuestSession::sigGuestSessionUpdated); 342 connect(m_pEventWrapper->qtListener(), &UIMainEventListener::sigGuestProcessRegistered, 343 this, &UIGuestSession::sltGuestProcessRegistered); 344 connect(m_pEventWrapper->qtListener(), &UIMainEventListener::sigGuestProcessUnregistered, 345 this, &UIGuestSession::sltGuestProcessUnregistered); 375 346 } 376 347 } … … 477 448 ******************************************************************************************************/ 478 449 479 UIGuestSessionsEventHandlerImp::UIGuestSessionsEventHandlerImp(QObject *parent, const CGuest &comGuest)450 UIGuestSessionsEventHandlerImp::UIGuestSessionsEventHandlerImp(QObject *parent, CGuest comGuest) 480 451 : QObject(parent) 481 452 , m_comGuest(comGuest) 453 , m_pEventWrapper(0) 454 482 455 { 483 456 prepareListener(); … … 485 458 } 486 459 487 UIGuestSessionsEventHandlerImp::~UIGuestSessionsEventHandlerImp()488 {489 cleanupListener();490 }491 492 460 void UIGuestSessionsEventHandlerImp::prepareListener() 493 461 { 494 if (!m_comGuest.isOk()) 495 return; 496 /* Create event listener instance: */ 497 m_pQtListener.createObject(); 498 m_pQtListener->init(new UIMainEventListener, this); 499 m_comEventListener = CEventListener(m_pQtListener); 500 connect(m_pQtListener->getWrapped(), &UIMainEventListener::sigGuestSessionRegistered, 501 this, &UIGuestSessionsEventHandlerImp::sltGuestSessionRegistered); 502 connect(m_pQtListener->getWrapped(), &UIMainEventListener::sigGuestSessionUnregistered, 503 this, &UIGuestSessionsEventHandlerImp::sltGuestSessionUnregistered); 504 505 /* Get CGuest event source: */ 506 CEventSource comEventSourceGuest = m_comGuest.GetEventSource(); 507 AssertWrapperOk(comEventSourceGuest); 508 509 /* Enumerate all the required event-types: */ 462 if (!m_comGuest.isOk()) 463 return; 510 464 QVector<KVBoxEventType> eventTypes; 511 465 eventTypes << KVBoxEventType_OnGuestSessionRegistered; 512 466 513 /* Register event listener for CGuest event source: */ 514 comEventSourceGuest.RegisterListener(m_comEventListener, eventTypes, 515 gEDataManager->eventHandlingType() == EventHandlingType_Active ? TRUE : FALSE); 516 AssertWrapperOk(comEventSourceGuest); 517 518 /* If event listener registered as passive one: */ 519 if (gEDataManager->eventHandlingType() == EventHandlingType_Passive) 520 { 521 /* Register event sources in their listeners as well: */ 522 m_pQtListener->getWrapped()->registerSource(comEventSourceGuest, m_comEventListener); 523 } 524 } 525 526 void UIGuestSessionsEventHandlerImp::cleanupListener() 527 { 528 if (gEDataManager->eventHandlingType() == EventHandlingType_Passive) 529 { 530 m_pQtListener->getWrapped()->unregisterSources(); 531 } 532 533 if (!vboxGlobal().isVBoxSVCAvailable()) 534 return; 535 536 CEventSource comEventSourceGuest = m_comGuest.GetEventSource(); 537 AssertWrapperOk(comEventSourceGuest); 538 539 comEventSourceGuest.UnregisterListener(m_comEventListener); 467 m_pEventWrapper = 468 QSharedPointer<UIEventWrapper<CGuest> >(new UIEventWrapper<CGuest>(eventTypes, m_comGuest, this)); 469 470 if (m_pEventWrapper && m_pEventWrapper->isInitialized() && m_pEventWrapper->qtListener()) 471 { 472 connect(m_pEventWrapper->qtListener(), &UIMainEventListener::sigGuestSessionRegistered, 473 this, &UIGuestSessionsEventHandlerImp::sltGuestSessionRegistered); 474 connect(m_pEventWrapper->qtListener(), &UIMainEventListener::sigGuestSessionUnregistered, 475 this, &UIGuestSessionsEventHandlerImp::sltGuestSessionUnregistered); 476 } 540 477 } 541 478 … … 594 531 } 595 532 596 UIGuestSessionsEventHandler::UIGuestSessionsEventHandler(QObject *parent, const CGuest &comGuest)533 UIGuestSessionsEventHandler::UIGuestSessionsEventHandler(QObject *parent, CGuest comGuest) 597 534 :QObject(parent) 598 535 , m_pPrivateImp(new UIGuestSessionsEventHandlerImp(this, comGuest)) -
trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/UIGuestSessionsEventHandler.h
r70899 r70912 38 38 public: 39 39 40 UIGuestSessionsEventHandler(QObject *parent, const CGuest &comGuest);40 UIGuestSessionsEventHandler(QObject *parent, CGuest comGuest); 41 41 ~UIGuestSessionsEventHandler(); 42 42
Note:
See TracChangeset
for help on using the changeset viewer.