STDMETHOD(HandleEvent)(VBoxEventType_T aType, IEvent *aEvent) { switch (aType) { case VBoxEventType_OnMouseCapabilityChanged: { ComPtr<IMouseCapabilityChangedEvent> mccev = aEvent; Assert(mccev); BOOL fSupportsAbsolute = false; mccev->COMGETTER(SupportsAbsolute)(&fSupportsAbsolute); /* Emit absolute mouse event to actually enable the host mouse cursor. */ if (fSupportsAbsolute && gConsole) { ComPtr<IMouse> mouse; gConsole->COMGETTER(Mouse)(mouse.asOutParam()); if (mouse) { mouse->PutMouseEventAbsolute(-1, -1, 0, 0 /* Horizontal wheel */, 0); } } break; } case VBoxEventType_OnStateChanged: { ComPtr<IStateChangedEvent> scev = aEvent; Assert(scev); MachineState_T machineState; scev->COMGETTER(State)(&machineState); /* Terminate any event wait operation if the machine has been * PoweredDown/Saved/Aborted. */ if (machineState < MachineState_Running && !m_fIgnorePowerOffEvents) { g_fTerminateFE = true; gEventQ->interruptEventQueueProcessing(); } break; } case VBoxEventType_OnVRDEServerInfoChanged: { ComPtr<IVRDEServerInfoChangedEvent> rdicev = aEvent; Assert(rdicev); if (gConsole) { ComPtr<IVRDEServerInfo> info; gConsole->COMGETTER(VRDEServerInfo)(info.asOutParam()); if (info) { LONG port; info->COMGETTER(Port)(&port); if (port != mLastVRDEPort) { if (port == -1) RTPrintf("VRDE server is inactive.\n"); else if (port == 0) RTPrintf("VRDE server failed to start.\n"); else RTPrintf("VRDE server is listening on port %d.\n", port); mLastVRDEPort = port; } } } break; } case VBoxEventType_OnCanShowWindow: { ComPtr<ICanShowWindowEvent> cswev = aEvent; Assert(cswev); cswev->AddVeto(NULL); break; } case VBoxEventType_OnShowWindow: { ComPtr<IShowWindowEvent> swev = aEvent; Assert(swev); swev->COMSETTER(WinId)(0); break; } default: AssertFailed(); } return S_OK; }