bool UIMachineViewSeamless::event(QEvent *pEvent) { switch (pEvent->type()) { case SetRegionEventType: { /* Get region-update event: */ UISetRegionEvent *pSetRegionEvent = static_cast<UISetRegionEvent*>(pEvent); /* Apply new region: */ if (pSetRegionEvent->region() != m_lastVisibleRegion) { m_lastVisibleRegion = pSetRegionEvent->region(); machineWindow()->setMask(m_lastVisibleRegion); } return true; } case ResizeEventType: { return guestResizeEvent(pEvent, true); } default: break; } return UIMachineView::event(pEvent); }
bool UIMachineViewSeamless::event(QEvent *pEvent) { switch (pEvent->type()) { case VBoxDefs::SetRegionEventType: { /* Get region-update event: */ UISetRegionEvent *pSetRegionEvent = static_cast<UISetRegionEvent*>(pEvent); /* Apply new region: */ if (pSetRegionEvent->region() != m_lastVisibleRegion) { m_lastVisibleRegion = pSetRegionEvent->region(); machineWindowWrapper()->setMask(m_lastVisibleRegion); } return true; } case VBoxDefs::ResizeEventType: { /* Some situations require framebuffer resize events to be ignored at all, * leaving machine-window, machine-view and framebuffer sizes preserved: */ if (uisession()->isGuestResizeIgnored()) return true; /* We are starting to perform machine-view resize, * we should temporary ignore other if they are trying to be: */ bool fWasMachineWindowResizeIgnored = isMachineWindowResizeIgnored(); setMachineWindowResizeIgnored(true); /* Get guest resize-event: */ UIResizeEvent *pResizeEvent = static_cast<UIResizeEvent*>(pEvent); /* Perform framebuffer resize: */ frameBuffer()->resizeEvent(pResizeEvent); /* Reapply maximum size restriction for machine-view: */ setMaximumSize(sizeHint()); /* Store the new size to prevent unwanted resize hints being sent back: */ storeConsoleSize(pResizeEvent->width(), pResizeEvent->height()); /* Perform machine-view resize: */ resize(pResizeEvent->width(), pResizeEvent->height()); /* Let our toplevel widget calculate its sizeHint properly: */ QCoreApplication::sendPostedEvents(0, QEvent::LayoutRequest); #ifdef Q_WS_MAC machineLogic()->updateDockIconSize(screenId(), pResizeEvent->width(), pResizeEvent->height()); #endif /* Q_WS_MAC */ /* Update machine-view sliders: */ updateSliders(); /* Report to the VM thread that we finished resizing: */ session().GetConsole().GetDisplay().ResizeCompleted(screenId()); /* We are finishing to perform machine-view resize: */ setMachineWindowResizeIgnored(fWasMachineWindowResizeIgnored); /* We also recalculate the desktop geometry if this is determined * automatically. In fact, we only need this on the first resize, * but it is done every time to keep the code simpler. */ calculateDesktopGeometry(); /* Emit a signal about guest was resized: */ emit resizeHintDone(); /* Unlock after processing guest resize event: */ if (m_pSyncBlocker && m_pSyncBlocker->isRunning()) m_pSyncBlocker->quit(); pEvent->accept(); return true; } default: break; } return UIMachineView::event(pEvent); }