/** * initialise the service. */ int SeamlessMain::init(void) { int rc; const char *pcszStage; LogRelFlowFunc(("\n")); do { pcszStage = "Connecting to the X server"; rc = mX11Monitor.init(sendRegionUpdate); if (RT_FAILURE(rc)) break; pcszStage = "Setting guest IRQ filter mask"; rc = VbglR3CtlFilterMask(VMMDEV_EVENT_SEAMLESS_MODE_CHANGE_REQUEST, 0); if (RT_FAILURE(rc)) break; pcszStage = "Reporting support for seamless capability"; rc = VbglR3SeamlessSetCap(true); if (RT_FAILURE(rc)) break; rc = startX11MonitorThread(); if (RT_FAILURE(rc)) break; } while(0); if (RT_FAILURE(rc)) VBClFatalError(("VBoxClient (seamless): failed to start. Stage: \"%s\" Error: %Rrc\n", pcszStage, rc)); return rc; }
/** Stops the service. */ void SeamlessMain::stop() { LogRelFlowFunc(("\n")); VbglR3SeamlessSetCap(false); VbglR3CtlFilterMask(0, VMMDEV_EVENT_SEAMLESS_MODE_CHANGE_REQUEST); stopX11MonitorThread(); mX11Monitor.uninit(); LogRelFlowFunc(("returning\n")); }
static void cleanup(struct VBCLSERVICE **ppInterface) { NOREF(ppInterface); VbglR3SeamlessSetCap(false); VbglR3Term(); }
virtual void cleanup() { VbglR3SeamlessSetCap(false); }