VirtualBox

Ignore:
Timestamp:
Oct 13, 2014 5:26:09 PM (10 years ago)
Author:
vboxsync
Message:

FE/Qt: Runtime UI rework/cleanup for 7115 (part #17): Better encapsulation for UISession (part #2): Snapshot restoring should take into account separately started VM.

Location:
trunk/src/VBox/Frontends/VirtualBox/src/runtime
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp

    r53046 r53047  
    349349            /* Discard the current state if requested: */
    350350            if (fIncludingDiscard)
    351             {
    352                 /* Prepare the snapshot-discard progress: */
    353                 CSnapshot snapshot = machine().GetCurrentSnapshot();
    354                 CProgress progress = console().RestoreSnapshot(snapshot);
    355                 if (!console().isOk())
    356                     return msgCenter().cannotRestoreSnapshot(console(), snapshot.GetName(), machineName());
    357 
    358                 /* Show the snapshot-discard progress: */
    359                 msgCenter().showModalProgressDialog(progress, machineName(), ":/progress_snapshot_discard_90px.png");
    360                 if (progress.GetResultCode() != 0)
    361                     return msgCenter().cannotRestoreSnapshot(progress, snapshot.GetName(), machineName());
    362             }
     351                return restoreCurrentSnapshot();
    363352        }
    364353        else
     
    386375    /* Passed: */
    387376    return true;
     377}
     378
     379bool UISession::restoreCurrentSnapshot()
     380{
     381    /* Search for corresponding VM: */
     382    CVirtualBox vbox = vboxGlobal().virtualBox();
     383    const QString strMachineID = vboxGlobal().managedVMUuid();
     384    const CMachine mach = vbox.FindMachine(strMachineID);
     385    if (vbox.isOk() && !mach.isNull())
     386    {
     387        /* Open a direct session to modify that VM: */
     388        CSession sess = vboxGlobal().openSession(vboxGlobal().managedVMUuid(),
     389                                                 vboxGlobal().isSeparateProcess()
     390                                                 ? KLockType_Write : KLockType_Shared);
     391        if (!sess.isNull())
     392        {
     393            /* Acquire console for this session: */
     394            CConsole cons = sess.GetConsole();
     395            if (!cons.isNull())
     396            {
     397                /* Prepare the snapshot-discard progress: */
     398                const CSnapshot snap = mach.GetCurrentSnapshot();
     399                CProgress prog = cons.RestoreSnapshot(snap);
     400                if (cons.isOk())
     401                {
     402                    /* Show snapshot restoration progress: */
     403                    msgCenter().showModalProgressDialog(prog, mach.GetName(), ":/progress_snapshot_discard_90px.png");
     404                    if (prog.GetResultCode() != 0)
     405                    {
     406                        /* Unable to restore snapshot: */
     407                        msgCenter().cannotRestoreSnapshot(prog, snap.GetName(), mach.GetName());
     408                    }
     409                }
     410                else
     411                {
     412                    /* Unable to restore snapshot: */
     413                    return msgCenter().cannotRestoreSnapshot(cons, snap.GetName(), machineName());
     414                }
     415            }
     416            /* Unlock machine finally: */
     417            sess.UnlockMachine();
     418        }
     419        else
     420        {
     421            /* Unable to open session to modify VM: */
     422            return false;
     423        }
     424    }
     425    else
     426    {
     427        /* Unable to find VM: */
     428        msgCenter().cannotFindMachineById(vbox, strMachineID);
     429        return false;
     430    }
    388431}
    389432
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.h

    r53046 r53047  
    9595    bool shutdown();
    9696    bool powerOff(bool fIncludingDiscard, bool &fServerCrashed);
     97    bool restoreCurrentSnapshot();
    9798    void closeRuntimeUI();
    9899
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