void UIMachineWindow::prepareMachineView() { #ifdef VBOX_WITH_VIDEOHWACCEL /* Need to force the QGL framebuffer in case 2D Video Acceleration is supported & enabled: */ bool bAccelerate2DVideo = machine().GetAccelerate2DVideoEnabled() && VBoxGlobal::isAcceleration2DVideoAvailable(); #endif /* VBOX_WITH_VIDEOHWACCEL */ /* Get visual-state type: */ UIVisualStateType visualStateType = machineLogic()->visualStateType(); /* Create machine-view: */ m_pMachineView = UIMachineView::create( this , m_uScreenId , visualStateType #ifdef VBOX_WITH_VIDEOHWACCEL , bAccelerate2DVideo #endif /* VBOX_WITH_VIDEOHWACCEL */ ); /* Listen for frame-buffer resize: */ connect(m_pMachineView, SIGNAL(sigFrameBufferResize()), this, SIGNAL(sigFrameBufferResize())); /* Add machine-view into main-layout: */ m_pMainLayout->addWidget(m_pMachineView, 1, 1, viewAlignment(visualStateType)); /* Install focus-proxy: */ setFocusProxy(m_pMachineView); }
void UIMachineLogicScale::prepareMachineWindows() { /* Do not create machine-window(s) if they created already: */ if (isMachineWindowsCreated()) return; #ifdef Q_WS_MAC // TODO: Is that really need here? /* We have to make sure that we are getting the front most process. * This is necessary for Qt versions > 4.3.3: */ ::darwinSetFrontMostProcess(); #endif /* Q_WS_MAC */ /* Get monitors count: */ ulong uMonitorCount = machine().GetMonitorCount(); /* Create machine window(s): */ for (ulong uScreenId = 0; uScreenId < uMonitorCount; ++ uScreenId) addMachineWindow(UIMachineWindow::create(this, uScreenId)); /* Order machine window(s): */ for (ulong uScreenId = uMonitorCount; uScreenId > 0; -- uScreenId) machineWindows()[uScreenId - 1]->raise(); /* Listen for frame-buffer resize: */ foreach (UIMachineWindow *pMachineWindow, machineWindows()) connect(pMachineWindow, SIGNAL(sigFrameBufferResize()), this, SIGNAL(sigFrameBufferResize())); emit sigFrameBufferResize(); /* Mark machine-window(s) created: */ setMachineWindowsCreated(true); }
void UIMachineLogicSeamless::prepareMachineWindows() { /* Do not create machine-window(s) if they created already: */ if (isMachineWindowsCreated()) return; #ifdef VBOX_WS_MAC /* We have to make sure that we are getting the front most process. * This is necessary for Qt versions > 4.3.3: */ darwinSetFrontMostProcess(); #endif /* VBOX_WS_MAC */ /* Update the multi-screen layout: */ m_pScreenLayout->update(); /* Create machine-window(s): */ for (uint cScreenId = 0; cScreenId < machine().GetMonitorCount(); ++cScreenId) addMachineWindow(UIMachineWindow::create(this, cScreenId)); /* Listen for frame-buffer resize: */ foreach (UIMachineWindow *pMachineWindow, machineWindows()) connect(pMachineWindow, SIGNAL(sigFrameBufferResize()), this, SIGNAL(sigFrameBufferResize())); emit sigFrameBufferResize(); /* Connect multi-screen layout change handler: */ connect(m_pScreenLayout, SIGNAL(sigScreenLayoutChange()), this, SLOT(sltScreenLayoutChanged())); /* Mark machine-window(s) created: */ setMachineWindowsCreated(true); #ifdef VBOX_WS_X11 switch (vboxGlobal().typeOfWindowManager()) { case X11WMType_GNOMEShell: case X11WMType_Mutter: { // WORKAROUND: // Under certain WMs we can loose machine-window activation due to any Qt::Tool // overlay asynchronously shown above it. Qt is not become aware of such event. // We are going to ask to return machine-window activation in let's say 100ms. QTimer::singleShot(100, machineWindows().first(), SLOT(sltActivateWindow())); break; } default: break; } #endif /* VBOX_WS_X11 */ }
/* Prepare listener for particular machine-window: */ void UIMouseHandler::prepareListener(ulong uIndex, UIMachineWindow *pMachineWindow) { /* If that window is NOT registered yet: */ if (!m_windows.contains(uIndex)) { /* Register machine-window: */ m_windows.insert(uIndex, pMachineWindow); /* Install event-filter for machine-window: */ m_windows[uIndex]->installEventFilter(this); } /* If that view is NOT registered yet: */ if (!m_views.contains(uIndex)) { /* Register machine-view: */ m_views.insert(uIndex, pMachineWindow->machineView()); /* Install event-filter for machine-view: */ m_views[uIndex]->installEventFilter(this); /* Make machine-view notify mouse-handler about frame-buffer resize: */ connect(m_views[uIndex], SIGNAL(sigFrameBufferResize()), this, SLOT(sltMousePointerShapeChanged())); } /* If that viewport is NOT registered yet: */ if (!m_viewports.contains(uIndex)) { /* Register machine-view-viewport: */ m_viewports.insert(uIndex, pMachineWindow->machineView()->viewport()); /* Install event-filter for machine-view-viewport: */ m_viewports[uIndex]->installEventFilter(this); } }
void UIVMInformationDialog::prepareThis() { /* Delete dialog on close: */ setAttribute(Qt::WA_DeleteOnClose); /* Delete dialog on machine-window destruction: */ connect(m_pMachineWindow, SIGNAL(destroyed(QObject*)), this, SLOT(suicide())); #ifdef Q_WS_MAC /* No window-icon on Mac OX X, because it acts as proxy icon which isn't necessary here. */ setWindowIcon(QIcon()); #else /* !Q_WS_MAC */ /* Assign window-icon(s: */ setWindowIcon(UIIconPool::iconSetFull(":/session_info_32px.png", ":/session_info_16px.png")); #endif /* !Q_WS_MAC */ /* Prepare central-widget: */ prepareCentralWidget(); /* Configure handlers: */ connect(m_pMachineWindow->uisession(), SIGNAL(sigMediumChange(const CMediumAttachment&)), this, SLOT(sltUpdateDetails())); connect(m_pMachineWindow->uisession(), SIGNAL(sigSharedFolderChange()), this, SLOT(sltUpdateDetails())); /* TODO_NEW_CORE: this is ofc not really right in the mm sense. There are more than one screens. */ connect(m_pMachineWindow->machineView(), SIGNAL(sigFrameBufferResize()), this, SLOT(sltProcessStatistics())); connect(m_pTabWidget, SIGNAL(currentChanged(int)), this, SLOT(sltHandlePageChanged(int))); connect(&vboxGlobal(), SIGNAL(sigMediumEnumerationFinished()), this, SLOT(sltUpdateDetails())); connect(m_pTimer, SIGNAL(timeout()), this, SLOT(sltProcessStatistics())); /* Retranslate: */ retranslateUi(); /* Details page update: */ sltUpdateDetails(); /* Statistics page update: */ sltProcessStatistics(); m_pTimer->start(5000); }