VirtualBox

Changeset 66435 in vbox


Ignore:
Timestamp:
Apr 5, 2017 1:07:06 PM (8 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
114405
Message:

FE/Qt: Machine settings: Display page: Proper loading, caching, saving.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsDisplay.cpp

    r66345 r66435  
    220220    m_pCache->clear();
    221221
    222     /* Prepare display data: */
    223     UIDataSettingsMachineDisplay displayData;
    224 
    225     /* Cache Screen data: */
    226     displayData.m_iCurrentVRAM = m_machine.GetVRAMSize();
    227     displayData.m_cGuestScreenCount = m_machine.GetMonitorCount();
    228     displayData.m_dScaleFactor = gEDataManager->scaleFactor(m_machine.GetId());
     222    /* Prepare old display data: */
     223    UIDataSettingsMachineDisplay oldDisplayData;
     224
     225    /* Gather old 'Screen' data: */
     226    oldDisplayData.m_iCurrentVRAM = m_machine.GetVRAMSize();
     227    oldDisplayData.m_cGuestScreenCount = m_machine.GetMonitorCount();
     228    oldDisplayData.m_dScaleFactor = gEDataManager->scaleFactor(m_machine.GetId());
    229229#ifdef VBOX_WS_MAC
    230     displayData.m_fUseUnscaledHiDPIOutput = gEDataManager->useUnscaledHiDPIOutput(m_machine.GetId());
    231 #endif /* VBOX_WS_MAC */
    232     displayData.m_f3dAccelerationEnabled = m_machine.GetAccelerate3DEnabled();
    233 #ifdef VBOX_WITH_VIDEOHWACCEL
    234     displayData.m_f2dAccelerationEnabled = m_machine.GetAccelerate2DVideoEnabled();
    235 #endif /* VBOX_WITH_VIDEOHWACCEL */
    236 
    237     /* Check if Remote Display server is valid: */
    238     CVRDEServer remoteDisplayServer = m_machine.GetVRDEServer();
    239     displayData.m_fRemoteDisplayServerSupported = !remoteDisplayServer.isNull();
    240     if (!remoteDisplayServer.isNull())
     230    oldDisplayData.m_fUseUnscaledHiDPIOutput = gEDataManager->useUnscaledHiDPIOutput(m_machine.GetId());
     231#endif
     232    oldDisplayData.m_f3dAccelerationEnabled = m_machine.GetAccelerate3DEnabled();
     233#ifdef VBOX_WITH_VIDEOHWACCEL
     234    oldDisplayData.m_f2dAccelerationEnabled = m_machine.GetAccelerate2DVideoEnabled();
     235#endif
     236
     237    /* Check whether remote display server is valid: */
     238    const CVRDEServer &comServer = m_machine.GetVRDEServer();
     239    oldDisplayData.m_fRemoteDisplayServerSupported = !comServer.isNull();
     240    if (!comServer.isNull())
    241241    {
    242         /* Cache Remote Display data: */
    243         displayData.m_fRemoteDisplayServerEnabled = remoteDisplayServer.GetEnabled();
    244         displayData.m_strRemoteDisplayPort = remoteDisplayServer.GetVRDEProperty("TCP/Ports");
    245         displayData.m_remoteDisplayAuthType = remoteDisplayServer.GetAuthType();
    246         displayData.m_uRemoteDisplayTimeout = remoteDisplayServer.GetAuthTimeout();
    247         displayData.m_fRemoteDisplayMultiConnAllowed = remoteDisplayServer.GetAllowMultiConnection();
     242        /* Gather old 'Remote Display' data: */
     243        oldDisplayData.m_fRemoteDisplayServerEnabled = comServer.GetEnabled();
     244        oldDisplayData.m_strRemoteDisplayPort = comServer.GetVRDEProperty("TCP/Ports");
     245        oldDisplayData.m_remoteDisplayAuthType = comServer.GetAuthType();
     246        oldDisplayData.m_uRemoteDisplayTimeout = comServer.GetAuthTimeout();
     247        oldDisplayData.m_fRemoteDisplayMultiConnAllowed = comServer.GetAllowMultiConnection();
    248248    }
    249249
    250     /* Cache Video Capture data: */
    251     displayData.m_fVideoCaptureEnabled = m_machine.GetVideoCaptureEnabled();
    252     displayData.m_strVideoCaptureFolder = QFileInfo(m_machine.GetSettingsFilePath()).absolutePath();
    253     displayData.m_strVideoCaptureFilePath = m_machine.GetVideoCaptureFile();
    254     displayData.m_iVideoCaptureFrameWidth = m_machine.GetVideoCaptureWidth();
    255     displayData.m_iVideoCaptureFrameHeight = m_machine.GetVideoCaptureHeight();
    256     displayData.m_iVideoCaptureFrameRate = m_machine.GetVideoCaptureFPS();
    257     displayData.m_iVideoCaptureBitRate = m_machine.GetVideoCaptureRate();
    258     displayData.m_screens = m_machine.GetVideoCaptureScreens();
    259 
    260     /* Initialize other variables: */
    261     m_iInitialVRAM = RT_MIN(displayData.m_iCurrentVRAM, m_iMaxVRAM);
    262 
    263     /* Cache display data: */
    264     m_pCache->cacheInitialData(displayData);
     250    /* Gather old 'Video Capture' data: */
     251    oldDisplayData.m_fVideoCaptureEnabled = m_machine.GetVideoCaptureEnabled();
     252    oldDisplayData.m_strVideoCaptureFolder = QFileInfo(m_machine.GetSettingsFilePath()).absolutePath();
     253    oldDisplayData.m_strVideoCaptureFilePath = m_machine.GetVideoCaptureFile();
     254    oldDisplayData.m_iVideoCaptureFrameWidth = m_machine.GetVideoCaptureWidth();
     255    oldDisplayData.m_iVideoCaptureFrameHeight = m_machine.GetVideoCaptureHeight();
     256    oldDisplayData.m_iVideoCaptureFrameRate = m_machine.GetVideoCaptureFPS();
     257    oldDisplayData.m_iVideoCaptureBitRate = m_machine.GetVideoCaptureRate();
     258    oldDisplayData.m_screens = m_machine.GetVideoCaptureScreens();
     259
     260    /* Gather other old display data: */
     261    m_iInitialVRAM = RT_MIN(oldDisplayData.m_iCurrentVRAM, m_iMaxVRAM);
     262
     263    /* Cache old display data: */
     264    m_pCache->cacheInitialData(oldDisplayData);
    265265
    266266    /* Upload machine to data: */
     
    270270void UIMachineSettingsDisplay::getFromCache()
    271271{
    272     /* Get display data from cache: */
    273     const UIDataSettingsMachineDisplay &displayData = m_pCache->base();
    274 
    275     /* Load Screen data to page: */
    276     m_pEditorVideoScreenCount->setValue(displayData.m_cGuestScreenCount);
    277     m_pEditorGuestScreenScale->setValue((int)(displayData.m_dScaleFactor * 100));
     272    /* Get old display data from the cache: */
     273    const UIDataSettingsMachineDisplay &oldDisplayData = m_pCache->base();
     274
     275    /* Load old 'Screen' data to the page: */
     276    m_pEditorVideoScreenCount->setValue(oldDisplayData.m_cGuestScreenCount);
     277    m_pEditorGuestScreenScale->setValue((int)(oldDisplayData.m_dScaleFactor * 100));
    278278#ifdef VBOX_WS_MAC
    279     m_pCheckBoxUnscaledHiDPIOutput->setChecked(displayData.m_fUseUnscaledHiDPIOutput);
    280 #endif /* VBOX_WS_MAC */
    281     m_pCheckbox3D->setChecked(displayData.m_f3dAccelerationEnabled);
    282 #ifdef VBOX_WITH_VIDEOHWACCEL
    283     m_pCheckbox2DVideo->setChecked(displayData.m_f2dAccelerationEnabled);
    284 #endif /* VBOX_WITH_VIDEOHWACCEL */
    285     /* Should be the last one from this tab: */
    286     m_pEditorVideoMemorySize->setValue(displayData.m_iCurrentVRAM);
    287 
    288     /* If Remote Display server is supported: */
    289     if (displayData.m_fRemoteDisplayServerSupported)
     279    m_pCheckBoxUnscaledHiDPIOutput->setChecked(oldDisplayData.m_fUseUnscaledHiDPIOutput);
     280#endif
     281    m_pCheckbox3D->setChecked(oldDisplayData.m_f3dAccelerationEnabled);
     282#ifdef VBOX_WITH_VIDEOHWACCEL
     283    m_pCheckbox2DVideo->setChecked(oldDisplayData.m_f2dAccelerationEnabled);
     284#endif
     285    // Should be the last one for this tab:
     286    m_pEditorVideoMemorySize->setValue(oldDisplayData.m_iCurrentVRAM);
     287
     288    /* If remote display server is supported: */
     289    if (oldDisplayData.m_fRemoteDisplayServerSupported)
    290290    {
    291         /* Load Remote Display data to page: */
    292         m_pCheckboxRemoteDisplay->setChecked(displayData.m_fRemoteDisplayServerEnabled);
    293         m_pEditorRemoteDisplayPort->setText(displayData.m_strRemoteDisplayPort);
    294         m_pComboRemoteDisplayAuthMethod->setCurrentIndex(m_pComboRemoteDisplayAuthMethod->findText(gpConverter->toString(displayData.m_remoteDisplayAuthType)));
    295         m_pEditorRemoteDisplayTimeout->setText(QString::number(displayData.m_uRemoteDisplayTimeout));
    296         m_pCheckboxMultipleConn->setChecked(displayData.m_fRemoteDisplayMultiConnAllowed);
     291        /* Load old 'Remote Display' data to the page: */
     292        m_pCheckboxRemoteDisplay->setChecked(oldDisplayData.m_fRemoteDisplayServerEnabled);
     293        m_pEditorRemoteDisplayPort->setText(oldDisplayData.m_strRemoteDisplayPort);
     294        m_pComboRemoteDisplayAuthMethod->setCurrentIndex(m_pComboRemoteDisplayAuthMethod->findText(gpConverter->toString(oldDisplayData.m_remoteDisplayAuthType)));
     295        m_pEditorRemoteDisplayTimeout->setText(QString::number(oldDisplayData.m_uRemoteDisplayTimeout));
     296        m_pCheckboxMultipleConn->setChecked(oldDisplayData.m_fRemoteDisplayMultiConnAllowed);
    297297    }
    298298
    299     /* Load Video Capture data to page: */
    300     m_pCheckboxVideoCapture->setChecked(displayData.m_fVideoCaptureEnabled);
    301     m_pEditorVideoCapturePath->setHomeDir(displayData.m_strVideoCaptureFolder);
    302     m_pEditorVideoCapturePath->setPath(displayData.m_strVideoCaptureFilePath);
    303     m_pEditorVideoCaptureWidth->setValue(displayData.m_iVideoCaptureFrameWidth);
    304     m_pEditorVideoCaptureHeight->setValue(displayData.m_iVideoCaptureFrameHeight);
    305     m_pEditorVideoCaptureFrameRate->setValue(displayData.m_iVideoCaptureFrameRate);
    306     m_pEditorVideoCaptureBitRate->setValue(displayData.m_iVideoCaptureBitRate);
    307     m_pScrollerVideoCaptureScreens->setValue(displayData.m_screens);
     299    /* Load old 'Video Capture' data to the page: */
     300    m_pCheckboxVideoCapture->setChecked(oldDisplayData.m_fVideoCaptureEnabled);
     301    m_pEditorVideoCapturePath->setHomeDir(oldDisplayData.m_strVideoCaptureFolder);
     302    m_pEditorVideoCapturePath->setPath(oldDisplayData.m_strVideoCaptureFilePath);
     303    m_pEditorVideoCaptureWidth->setValue(oldDisplayData.m_iVideoCaptureFrameWidth);
     304    m_pEditorVideoCaptureHeight->setValue(oldDisplayData.m_iVideoCaptureFrameHeight);
     305    m_pEditorVideoCaptureFrameRate->setValue(oldDisplayData.m_iVideoCaptureFrameRate);
     306    m_pEditorVideoCaptureBitRate->setValue(oldDisplayData.m_iVideoCaptureBitRate);
     307    m_pScrollerVideoCaptureScreens->setValue(oldDisplayData.m_screens);
    308308
    309309    /* Polish page finally: */
     
    316316void UIMachineSettingsDisplay::putToCache()
    317317{
    318     /* Prepare display data: */
    319     UIDataSettingsMachineDisplay displayData = m_pCache->base();
    320 
    321     /* Gather Screen data from page: */
    322     displayData.m_iCurrentVRAM = m_pEditorVideoMemorySize->value();
    323     displayData.m_cGuestScreenCount = m_pEditorVideoScreenCount->value();
    324     displayData.m_dScaleFactor = (double)m_pEditorGuestScreenScale->value() / 100;
     318    /* Prepare new display data: */
     319    UIDataSettingsMachineDisplay newDisplayData;
     320
     321    /* Gather new 'Screen' data from page: */
     322    newDisplayData.m_iCurrentVRAM = m_pEditorVideoMemorySize->value();
     323    newDisplayData.m_cGuestScreenCount = m_pEditorVideoScreenCount->value();
     324    newDisplayData.m_dScaleFactor = (double)m_pEditorGuestScreenScale->value() / 100;
    325325#ifdef VBOX_WS_MAC
    326     displayData.m_fUseUnscaledHiDPIOutput = m_pCheckBoxUnscaledHiDPIOutput->isChecked();
    327 #endif /* VBOX_WS_MAC */
    328     displayData.m_f3dAccelerationEnabled = m_pCheckbox3D->isChecked();
    329 #ifdef VBOX_WITH_VIDEOHWACCEL
    330     displayData.m_f2dAccelerationEnabled = m_pCheckbox2DVideo->isChecked();
    331 #endif /* VBOX_WITH_VIDEOHWACCEL */
    332 
    333     /* If Remote Display server is supported: */
    334     if (displayData.m_fRemoteDisplayServerSupported)
     326    newDisplayData.m_fUseUnscaledHiDPIOutput = m_pCheckBoxUnscaledHiDPIOutput->isChecked();
     327#endif
     328    newDisplayData.m_f3dAccelerationEnabled = m_pCheckbox3D->isChecked();
     329#ifdef VBOX_WITH_VIDEOHWACCEL
     330    newDisplayData.m_f2dAccelerationEnabled = m_pCheckbox2DVideo->isChecked();
     331#endif
     332
     333    /* If remote display server is supported: */
     334    newDisplayData.m_fRemoteDisplayServerSupported = m_pCache->base().m_fRemoteDisplayServerSupported;
     335    if (newDisplayData.m_fRemoteDisplayServerSupported)
    335336    {
    336         /* Gather Remote Display data from page: */
    337         displayData.m_fRemoteDisplayServerEnabled = m_pCheckboxRemoteDisplay->isChecked();
    338         displayData.m_strRemoteDisplayPort = m_pEditorRemoteDisplayPort->text();
    339         displayData.m_remoteDisplayAuthType = gpConverter->fromString<KAuthType>(m_pComboRemoteDisplayAuthMethod->currentText());
    340         displayData.m_uRemoteDisplayTimeout = m_pEditorRemoteDisplayTimeout->text().toULong();
    341         displayData.m_fRemoteDisplayMultiConnAllowed = m_pCheckboxMultipleConn->isChecked();
     337        /* Gather new 'Remote Display' data from page: */
     338        newDisplayData.m_fRemoteDisplayServerEnabled = m_pCheckboxRemoteDisplay->isChecked();
     339        newDisplayData.m_strRemoteDisplayPort = m_pEditorRemoteDisplayPort->text();
     340        newDisplayData.m_remoteDisplayAuthType = gpConverter->fromString<KAuthType>(m_pComboRemoteDisplayAuthMethod->currentText());
     341        newDisplayData.m_uRemoteDisplayTimeout = m_pEditorRemoteDisplayTimeout->text().toULong();
     342        newDisplayData.m_fRemoteDisplayMultiConnAllowed = m_pCheckboxMultipleConn->isChecked();
    342343    }
    343344
    344     /* Gather Video Capture data from page: */
    345     displayData.m_fVideoCaptureEnabled = m_pCheckboxVideoCapture->isChecked();
    346     displayData.m_strVideoCaptureFilePath = m_pEditorVideoCapturePath->path();
    347     displayData.m_iVideoCaptureFrameWidth = m_pEditorVideoCaptureWidth->value();
    348     displayData.m_iVideoCaptureFrameHeight = m_pEditorVideoCaptureHeight->value();
    349     displayData.m_iVideoCaptureFrameRate = m_pEditorVideoCaptureFrameRate->value();
    350     displayData.m_iVideoCaptureBitRate = m_pEditorVideoCaptureBitRate->value();
    351     displayData.m_screens = m_pScrollerVideoCaptureScreens->value();
    352 
    353     /* Cache display data: */
    354     m_pCache->cacheCurrentData(displayData);
     345    /* Gather new 'Video Capture' data from page: */
     346    newDisplayData.m_fVideoCaptureEnabled = m_pCheckboxVideoCapture->isChecked();
     347    newDisplayData.m_strVideoCaptureFolder = m_pCache->base().m_strVideoCaptureFolder;
     348    newDisplayData.m_strVideoCaptureFilePath = m_pEditorVideoCapturePath->path();
     349    newDisplayData.m_iVideoCaptureFrameWidth = m_pEditorVideoCaptureWidth->value();
     350    newDisplayData.m_iVideoCaptureFrameHeight = m_pEditorVideoCaptureHeight->value();
     351    newDisplayData.m_iVideoCaptureFrameRate = m_pEditorVideoCaptureFrameRate->value();
     352    newDisplayData.m_iVideoCaptureBitRate = m_pEditorVideoCaptureBitRate->value();
     353    newDisplayData.m_screens = m_pScrollerVideoCaptureScreens->value();
     354
     355    /* Cache new display data: */
     356    m_pCache->cacheCurrentData(newDisplayData);
    355357}
    356358
     
    363365    if (isMachineInValidMode() && m_pCache->wasChanged())
    364366    {
    365         /* Get display data from cache: */
    366         const UIDataSettingsMachineDisplay &displayData = m_pCache->data();
    367 
    368         /* Store Screen data: */
    369         if (isMachineOffline())
    370         {
    371             m_machine.SetVRAMSize(displayData.m_iCurrentVRAM);
    372             m_machine.SetMonitorCount(displayData.m_cGuestScreenCount);
    373             m_machine.SetAccelerate3DEnabled(displayData.m_f3dAccelerationEnabled);
    374 #ifdef VBOX_WITH_VIDEOHWACCEL
    375             m_machine.SetAccelerate2DVideoEnabled(displayData.m_f2dAccelerationEnabled);
    376 #endif /* VBOX_WITH_VIDEOHWACCEL */
    377         }
    378         if (isMachineInValidMode())
    379         {
    380             gEDataManager->setScaleFactor(displayData.m_dScaleFactor, m_machine.GetId());
     367        /* Get old display data from the cache: */
     368        const UIDataSettingsMachineDisplay &oldDisplayData = m_pCache->base();
     369        /* Get new display data from the cache: */
     370        const UIDataSettingsMachineDisplay &newDisplayData = m_pCache->data();
     371
     372        /* Store video RAM size: */
     373        if (isMachineOffline() && newDisplayData.m_iCurrentVRAM != oldDisplayData.m_iCurrentVRAM)
     374            m_machine.SetVRAMSize(newDisplayData.m_iCurrentVRAM);
     375        /* Store guest screen count: */
     376        if (isMachineOffline() && newDisplayData.m_cGuestScreenCount != oldDisplayData.m_cGuestScreenCount)
     377            m_machine.SetMonitorCount(newDisplayData.m_cGuestScreenCount);
     378        /* Store whether 3D acceleration is enabled: */
     379        if (isMachineOffline() && newDisplayData.m_f3dAccelerationEnabled != oldDisplayData.m_f3dAccelerationEnabled)
     380            m_machine.SetAccelerate3DEnabled(newDisplayData.m_f3dAccelerationEnabled);
     381#ifdef VBOX_WITH_VIDEOHWACCEL
     382        /* Store whether 2D video acceleration is enabled: */
     383        if (isMachineOffline() && newDisplayData.m_f2dAccelerationEnabled != oldDisplayData.m_f2dAccelerationEnabled)
     384            m_machine.SetAccelerate2DVideoEnabled(newDisplayData.m_f2dAccelerationEnabled);
     385#endif
     386        /* Store guest-screen scale-factor: */
     387        if (newDisplayData.m_dScaleFactor != oldDisplayData.m_dScaleFactor)
     388            gEDataManager->setScaleFactor(newDisplayData.m_dScaleFactor, m_machine.GetId());
    381389#ifdef VBOX_WS_MAC
    382             gEDataManager->setUseUnscaledHiDPIOutput(displayData.m_fUseUnscaledHiDPIOutput, m_machine.GetId());
    383 #endif /* VBOX_WS_MAC */
    384         }
    385 
    386         /* Check if Remote Display server still valid: */
    387         CVRDEServer remoteDisplayServer = m_machine.GetVRDEServer();
    388         if (!remoteDisplayServer.isNull())
    389         {
    390             /* Store Remote Display data: */
    391             remoteDisplayServer.SetEnabled(displayData.m_fRemoteDisplayServerEnabled);
    392             remoteDisplayServer.SetVRDEProperty("TCP/Ports", displayData.m_strRemoteDisplayPort);
    393             remoteDisplayServer.SetAuthType(displayData.m_remoteDisplayAuthType);
    394             remoteDisplayServer.SetAuthTimeout(displayData.m_uRemoteDisplayTimeout);
    395             /* Make sure machine is 'offline' or 'saved': */
    396             if (isMachineOffline() || isMachineSaved())
    397                 remoteDisplayServer.SetAllowMultiConnection(displayData.m_fRemoteDisplayMultiConnAllowed);
    398         }
    399 
    400         /* Store Video Capture data: */
     390        /* Store whether Unscaled HiDPI Output is enabled: : */
     391        if (newDisplayData.m_fUseUnscaledHiDPIOutput != oldDisplayData.m_fUseUnscaledHiDPIOutput)
     392            gEDataManager->setUseUnscaledHiDPIOutput(newDisplayData.m_fUseUnscaledHiDPIOutput, m_machine.GetId());
     393#endif
     394
     395        /* Check whether remote display server still valid: */
     396        CVRDEServer server = m_machine.GetVRDEServer();
     397        if (!server.isNull())
     398        {
     399            /* Store whether remote display server is enabled: */
     400            if (newDisplayData.m_fRemoteDisplayServerEnabled != oldDisplayData.m_fRemoteDisplayServerEnabled)
     401                server.SetEnabled(newDisplayData.m_fRemoteDisplayServerEnabled);
     402            /* Store remote display server port: */
     403            if (newDisplayData.m_strRemoteDisplayPort != oldDisplayData.m_strRemoteDisplayPort)
     404                server.SetVRDEProperty("TCP/Ports", newDisplayData.m_strRemoteDisplayPort);
     405            /* Store remote display server auth type: */
     406            if (newDisplayData.m_remoteDisplayAuthType != oldDisplayData.m_remoteDisplayAuthType)
     407                server.SetAuthType(newDisplayData.m_remoteDisplayAuthType);
     408            /* Store remote display server timeout: */
     409            if (newDisplayData.m_uRemoteDisplayTimeout != oldDisplayData.m_uRemoteDisplayTimeout)
     410                server.SetAuthTimeout(newDisplayData.m_uRemoteDisplayTimeout);
     411            /* Store whether remote display server allows multiple connections: */
     412            if (   (isMachineOffline() || isMachineSaved())
     413                && (newDisplayData.m_fRemoteDisplayMultiConnAllowed != oldDisplayData.m_fRemoteDisplayMultiConnAllowed))
     414                server.SetAllowMultiConnection(newDisplayData.m_fRemoteDisplayMultiConnAllowed);
     415        }
     416
     417        /* Store new 'Video Capture' data for online case: */
    401418        if (isMachineOnline())
    402419        {
    403             /* If Video Capture is *enabled* now: */
    404             if (m_pCache->base().m_fVideoCaptureEnabled)
     420            /* If 'Video Capture' was *enabled*: */
     421            if (oldDisplayData.m_fVideoCaptureEnabled)
    405422            {
    406                 /* We can still save the *screens* option: */
    407                 m_machine.SetVideoCaptureScreens(displayData.m_screens);
    408                 /* Finally we should *disable* Video Capture if necessary: */
    409                 if (!displayData.m_fVideoCaptureEnabled)
    410                     m_machine.SetVideoCaptureEnabled(displayData.m_fVideoCaptureEnabled);
     423                // We can still save the *screens* option.
     424                // And finally we should *disable* 'Video Capture' if necessary.
     425                /* Store video capture recording screens: */
     426                if (newDisplayData.m_screens != oldDisplayData.m_screens)
     427                    m_machine.SetVideoCaptureScreens(newDisplayData.m_screens);
     428                /* Store whether video capture is enabled: */
     429                if (newDisplayData.m_fVideoCaptureEnabled != oldDisplayData.m_fVideoCaptureEnabled)
     430                    m_machine.SetVideoCaptureEnabled(newDisplayData.m_fVideoCaptureEnabled);
    411431            }
    412             /* If Video Capture is *disabled* now: */
     432            /* If 'Video Capture' was *disabled*: */
    413433            else
    414434            {
    415                 /* We should save all the options *before* Video Capture activation: */
    416                 m_machine.SetVideoCaptureFile(displayData.m_strVideoCaptureFilePath);
    417                 m_machine.SetVideoCaptureWidth(displayData.m_iVideoCaptureFrameWidth);
    418                 m_machine.SetVideoCaptureHeight(displayData.m_iVideoCaptureFrameHeight);
    419                 m_machine.SetVideoCaptureFPS(displayData.m_iVideoCaptureFrameRate);
    420                 m_machine.SetVideoCaptureRate(displayData.m_iVideoCaptureBitRate);
    421                 m_machine.SetVideoCaptureScreens(displayData.m_screens);
    422                 /* Finally we should *enable* Video Capture if necessary: */
    423                 if (displayData.m_fVideoCaptureEnabled)
    424                     m_machine.SetVideoCaptureEnabled(displayData.m_fVideoCaptureEnabled);
     435                // We should save all the options *before* 'Video Capture' activation.
     436                // And finally we should *enable* Video Capture if necessary.
     437                /* Store video capture file path: */
     438                if (newDisplayData.m_strVideoCaptureFilePath != oldDisplayData.m_strVideoCaptureFilePath)
     439                    m_machine.SetVideoCaptureFile(newDisplayData.m_strVideoCaptureFilePath);
     440                /* Store video capture frame width: */
     441                if (newDisplayData.m_iVideoCaptureFrameWidth != oldDisplayData.m_iVideoCaptureFrameWidth)
     442                    m_machine.SetVideoCaptureWidth(newDisplayData.m_iVideoCaptureFrameWidth);
     443                /* Store video capture frame height: */
     444                if (newDisplayData.m_iVideoCaptureFrameHeight != oldDisplayData.m_iVideoCaptureFrameHeight)
     445                    m_machine.SetVideoCaptureHeight(newDisplayData.m_iVideoCaptureFrameHeight);
     446                /* Store video capture frame rate: */
     447                if (newDisplayData.m_iVideoCaptureFrameRate != oldDisplayData.m_iVideoCaptureFrameRate)
     448                    m_machine.SetVideoCaptureFPS(newDisplayData.m_iVideoCaptureFrameRate);
     449                /* Store video capture frame bit rate: */
     450                if (newDisplayData.m_iVideoCaptureBitRate != oldDisplayData.m_iVideoCaptureBitRate)
     451                    m_machine.SetVideoCaptureRate(newDisplayData.m_iVideoCaptureBitRate);
     452                /* Store video capture recording screens: */
     453                if (newDisplayData.m_screens != oldDisplayData.m_screens)
     454                    m_machine.SetVideoCaptureScreens(newDisplayData.m_screens);
     455                /* Store whether video capture is enabled: */
     456                if (newDisplayData.m_fVideoCaptureEnabled != oldDisplayData.m_fVideoCaptureEnabled)
     457                    m_machine.SetVideoCaptureEnabled(newDisplayData.m_fVideoCaptureEnabled);
    425458            }
    426459        }
     460        /* Store new 'Video Capture' data for offline case: */
    427461        else
    428462        {
    429             /* For 'offline' and 'saved' states the order is irrelevant: */
    430             m_machine.SetVideoCaptureEnabled(displayData.m_fVideoCaptureEnabled);
    431             m_machine.SetVideoCaptureFile(displayData.m_strVideoCaptureFilePath);
    432             m_machine.SetVideoCaptureWidth(displayData.m_iVideoCaptureFrameWidth);
    433             m_machine.SetVideoCaptureHeight(displayData.m_iVideoCaptureFrameHeight);
    434             m_machine.SetVideoCaptureFPS(displayData.m_iVideoCaptureFrameRate);
    435             m_machine.SetVideoCaptureRate(displayData.m_iVideoCaptureBitRate);
    436             m_machine.SetVideoCaptureScreens(displayData.m_screens);
     463            // For 'offline', 'powered off' and 'saved' states the order is irrelevant.
     464            /* Store whether video capture is enabled: */
     465            if (newDisplayData.m_fVideoCaptureEnabled != oldDisplayData.m_fVideoCaptureEnabled)
     466                m_machine.SetVideoCaptureEnabled(newDisplayData.m_fVideoCaptureEnabled);
     467            /* Store video capture file path: */
     468            if (newDisplayData.m_strVideoCaptureFilePath != oldDisplayData.m_strVideoCaptureFilePath)
     469                m_machine.SetVideoCaptureFile(newDisplayData.m_strVideoCaptureFilePath);
     470            /* Store video capture frame width: */
     471            if (newDisplayData.m_iVideoCaptureFrameWidth != oldDisplayData.m_iVideoCaptureFrameWidth)
     472                m_machine.SetVideoCaptureWidth(newDisplayData.m_iVideoCaptureFrameWidth);
     473            /* Store video capture frame height: */
     474            if (newDisplayData.m_iVideoCaptureFrameHeight != oldDisplayData.m_iVideoCaptureFrameHeight)
     475                m_machine.SetVideoCaptureHeight(newDisplayData.m_iVideoCaptureFrameHeight);
     476            /* Store video capture frame rate: */
     477            if (newDisplayData.m_iVideoCaptureFrameRate != oldDisplayData.m_iVideoCaptureFrameRate)
     478                m_machine.SetVideoCaptureFPS(newDisplayData.m_iVideoCaptureFrameRate);
     479            /* Store video capture frame bit rate: */
     480            if (newDisplayData.m_iVideoCaptureBitRate != oldDisplayData.m_iVideoCaptureBitRate)
     481                m_machine.SetVideoCaptureRate(newDisplayData.m_iVideoCaptureBitRate);
     482            /* Store video capture recording screens: */
     483            if (newDisplayData.m_screens != oldDisplayData.m_screens)
     484                m_machine.SetVideoCaptureScreens(newDisplayData.m_screens);
    437485        }
    438486    }
     
    633681void UIMachineSettingsDisplay::polishPage()
    634682{
    635     /* Get system data from cache: */
     683    /* Get system data from the cache: */
    636684    const UIDataSettingsMachineDisplay &displayData = m_pCache->base();
    637685
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette