VirtualBox

Changeset 41925 in vbox


Ignore:
Timestamp:
Jun 27, 2012 2:04:09 PM (13 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
78790
Message:

allow to change the clipboard mode during runtime (API change including 'VBoxManage controlvm' change)

Location:
trunk/src/VBox
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageControlVM.cpp

    r41885 r41925  
    162162
    163163            CHECK_ERROR_BREAK(sessionMachine, COMSETTER(CPUExecutionCap)(n));
     164        }
     165        else if (!strcmp(a->argv[1], "clipboard"))
     166        {
     167            if (a->argc <= 1 + 1)
     168            {
     169                errorArgument("Missing argument to '%s'. Expected clipboard mode.", a->argv[1]);
     170                rc = E_FAIL;
     171                break;
     172            }
     173
     174            ClipboardMode_T mode;
     175            if (!strcmp(a->argv[2], "disabled"))
     176                mode = ClipboardMode_Disabled;
     177            else if (!strcmp(a->argv[2], "hosttoguest"))
     178                mode = ClipboardMode_HostToGuest;
     179            else if (!strcmp(a->argv[2], "guesttohost"))
     180                mode = ClipboardMode_GuestToHost;
     181            else if (!strcmp(a->argv[2], "bidirectional"))
     182                mode = ClipboardMode_Bidirectional;
     183            else
     184            {
     185                errorArgument("Invalid '%s' argument '%s'.", a->argv[1], a->argv[2]);
     186                rc = E_FAIL;
     187            }
     188            if (SUCCEEDED(rc))
     189            {
     190                CHECK_ERROR_BREAK(sessionMachine, COMSETTER(ClipboardMode)(mode));
     191            }
    164192        }
    165193        else if (!strcmp(a->argv[1], "poweroff"))
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp

    r41915 r41925  
    420420                     "                            gueststatisticsinterval <seconds>]\n"
    421421                     "                            usbattach <uuid>|<address> |\n"
    422                      "                            usbdetach <uuid>|<address> |\n");
    423         RTStrmPrintf(pStrm,
    424                      "                            vrde on|off |\n");
    425         RTStrmPrintf(pStrm,
     422                     "                            usbdetach <uuid>|<address> |\n"
     423                     "                            clipboard disabled|hosttoguest|guesttohost|\n"
     424                     "                                         bidirectional]\n"
     425                     "                            vrde on|off |\n"
    426426                     "                            vrdeport <port> |\n"
    427427                     "                            vrdeproperty <name=[value]> |\n"
    428                      "                            vrdevideochannelquality <percent>\n");
    429         RTStrmPrintf(pStrm,
     428                     "                            vrdevideochannelquality <percent>\n"
    430429                     "                            setvideomodehint <xres> <yres> <bpp> [display] |\n"
    431430                     "                            screenshotpng <file> [display] |\n"
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp

    r41916 r41925  
    19541954            case MODIFYVM_CLIPBOARD:
    19551955            {
     1956                ClipboardMode_T mode;
    19561957                if (!strcmp(ValueUnion.psz, "disabled"))
    1957                 {
    1958                     CHECK_ERROR(machine, COMSETTER(ClipboardMode)(ClipboardMode_Disabled));
    1959                 }
     1958                    mode = ClipboardMode_Disabled;
    19601959                else if (!strcmp(ValueUnion.psz, "hosttoguest"))
    1961                 {
    1962                     CHECK_ERROR(machine, COMSETTER(ClipboardMode)(ClipboardMode_HostToGuest));
    1963                 }
     1960                    mode = ClipboardMode_HostToGuest;
    19641961                else if (!strcmp(ValueUnion.psz, "guesttohost"))
    1965                 {
    1966                     CHECK_ERROR(machine, COMSETTER(ClipboardMode)(ClipboardMode_GuestToHost));
    1967                 }
     1962                    mode = ClipboardMode_GuestToHost;
    19681963                else if (!strcmp(ValueUnion.psz, "bidirectional"))
    1969                 {
    1970                     CHECK_ERROR(machine, COMSETTER(ClipboardMode)(ClipboardMode_Bidirectional));
    1971                 }
     1964                    mode = ClipboardMode_Bidirectional;
    19721965                else
    19731966                {
    19741967                    errorArgument("Invalid --clipboard argument '%s'", ValueUnion.psz);
    19751968                    rc = E_FAIL;
     1969                }
     1970                if (SUCCEEDED(rc))
     1971                {
     1972                    CHECK_ERROR(machine, COMSETTER(ClipboardMode)(mode));
    19761973                }
    19771974                break;
  • trunk/src/VBox/Main/idl/VirtualBox.xidl

    r41914 r41925  
    1472214722  <interface
    1472314723    name="IInternalSessionControl" extends="$unknown"
    14724     uuid="c2b4cd5f-d3ce-4dd6-b915-123272163ef5"
     14724    uuid="9ddb5449-f463-47cb-a717-d6f22da3b3a2"
    1472514725    internal="yes"
    1472614726    wsmap="suppress"
     
    1491314913      <param name="remove" type="boolean" dir="in">
    1491414914        <desc>TRUE if the device is removed, FALSE if it was added.</desc>
     14915      </param>
     14916    </method>
     14917   
     14918    <method name="onClipboardModeChange">
     14919      <desc>
     14920        Notification when the shared clipboard mode changes.
     14921      </desc>
     14922      <param name="clipboardMode" type="ClipboardMode" dir="in">
     14923        <desc>The new shared clipboard mode.</desc>
    1491514924      </param>
    1491614925    </method>
     
    1666516674  <enum
    1666616675    name="VBoxEventType"
    16667     uuid="cce48db6-8561-479d-8d46-1358bab45d4e"
     16676    uuid="100cf5c8-7dd4-4600-8d75-636d211479c9"
    1666816677    >
    1666916678
     
    1692316932      </desc>
    1692416933    </const>
     16934    <const name="OnClipboardModeChanged" value="72">
     16935      <desc>
     16936        See <link to="IClipboardModeChangedEvent">IClipboardModeChangedEvent</link>.
     16937      </desc>
     16938    </const>
    1692516939
    1692616940    <!-- Last event marker -->
    16927     <const name="Last" value="72">
     16941    <const name="Last" value="73">
    1692816942      <desc>
    1692916943        Must be last event, used for iterations and structures relying on numerical event values.
     
    1766617680      <desc>
    1766717681        Medium attachment that is subject to change.
     17682      </desc>
     17683    </attribute>
     17684  </interface>
     17685
     17686  <interface
     17687    name="IClipboardModeChangedEvent" extends="IEvent"
     17688    uuid="cac21692-7997-4595-a731-3a509db604e5"
     17689    wsmap="managed" autogen="VBoxEvent" id="OnClipboardModeChanged"
     17690    >
     17691    <desc>
     17692      Notification when the shared clipboard mode changes.
     17693    </desc>
     17694    <attribute name="clipboardMode" type="ClipboardMode" readonly="yes">
     17695      <desc>
     17696        The new clipboard mode.
    1766817697      </desc>
    1766917698    </attribute>
  • trunk/src/VBox/Main/include/ConsoleImpl.h

    r41528 r41925  
    197197    HRESULT onCPUChange(ULONG aCPU, BOOL aRemove);
    198198    HRESULT onCPUExecutionCapChange(ULONG aExecutionCap);
     199    HRESULT onClipboardModeChange(ClipboardMode_T aClipboardMode);
    199200    HRESULT onVRDEServerChange(BOOL aRestart);
    200201    HRESULT onUSBControllerChange();
     
    600601                                                     INetworkAdapter *aNetworkAdapter);
    601602
     603    void changeClipboardMode(ClipboardMode_T aClipboardMode);
     604
    602605#ifdef VBOX_WITH_USB
    603606    HRESULT attachUSBDevice(IUSBDevice *aHostDevice, ULONG aMaskedIfs);
  • trunk/src/VBox/Main/include/MachineImpl.h

    r41914 r41925  
    687687    virtual HRESULT onMediumChange(IMediumAttachment * /* mediumAttachment */, BOOL /* force */) { return S_OK; }
    688688    virtual HRESULT onSharedFolderChange() { return S_OK; }
     689    virtual HRESULT onClipboardModeChange(ClipboardMode_T /* aClipboardMode */) { return S_OK; }
    689690    virtual HRESULT onBandwidthGroupChange(IBandwidthGroup * /* aBandwidthGroup */) { return S_OK; }
    690691    virtual HRESULT onStorageDeviceChange(IMediumAttachment * /* mediumAttachment */, BOOL /* remove */) { return S_OK; }
     
    10721073                              IVirtualBoxErrorInfo *aError);
    10731074    HRESULT onSharedFolderChange();
     1075    HRESULT onClipboardModeChange(ClipboardMode_T aClipboardMode);
    10741076    HRESULT onBandwidthGroupChange(IBandwidthGroup *aBandwidthGroup);
    10751077    HRESULT onStorageDeviceChange(IMediumAttachment *aMediumAttachment, BOOL aRemove);
  • trunk/src/VBox/Main/include/SessionImpl.h

    r40084 r41925  
    9595    STDMETHOD(OnUSBControllerChange)();
    9696    STDMETHOD(OnSharedFolderChange)(BOOL aGlobal);
     97    STDMETHOD(OnClipboardModeChange)(ClipboardMode_T aClipboardMode);
    9798    STDMETHOD(OnUSBDeviceAttach)(IUSBDevice *aDevice, IVirtualBoxErrorInfo *aError, ULONG aMaskedIfs);
    9899    STDMETHOD(OnUSBDeviceDetach)(IN_BSTR aId, IVirtualBoxErrorInfo *aError);
  • trunk/src/VBox/Main/src-client/ConsoleImpl.cpp

    r41842 r41925  
    48474847        alock.release();
    48484848        fireCPUExecutionCapChangedEvent(mEventSource, aExecutionCap);
     4849    }
     4850
     4851    LogFlowThisFunc(("Leaving rc=%#x\n", rc));
     4852    return rc;
     4853}
     4854
     4855/**
     4856 * Called by IInternalSessionControl::OnClipboardModeChange().
     4857 *
     4858 * @note Locks this object for writing.
     4859 */
     4860HRESULT Console::onClipboardModeChange(ClipboardMode_T aClipboardMode)
     4861{
     4862    LogFlowThisFunc(("\n"));
     4863
     4864    AutoCaller autoCaller(this);
     4865    AssertComRCReturnRC(autoCaller.rc());
     4866
     4867    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
     4868
     4869    HRESULT rc = S_OK;
     4870
     4871    /* don't trigger the Clipboard mode change if the VM isn't running */
     4872    SafeVMPtrQuiet ptrVM(this);
     4873    if (ptrVM.isOk())
     4874    {
     4875        if (   mMachineState == MachineState_Running
     4876            || mMachineState == MachineState_Teleporting
     4877            || mMachineState == MachineState_LiveSnapshotting)
     4878            changeClipboardMode(aClipboardMode);
     4879        else
     4880            rc = setInvalidMachineStateError();
     4881        ptrVM.release();
     4882    }
     4883
     4884    /* notify console callbacks on success */
     4885    if (SUCCEEDED(rc))
     4886    {
     4887        alock.release();
     4888        fireClipboardModeChangedEvent(mEventSource, aClipboardMode);
    48494889    }
    48504890
     
    76277667            break;
    76287668    }
     7669}
     7670
     7671/**
     7672 * Changes the clipboard mode.
     7673 *
     7674 * @param aClipboardMode  new clipboard mode.
     7675 */
     7676void Console::changeClipboardMode(ClipboardMode_T aClipboardMode)
     7677{
     7678    VMMDev *pVMMDev = m_pVMMDev;
     7679    Assert(pVMMDev);
     7680
     7681    VBOXHGCMSVCPARM parm;
     7682    parm.type = VBOX_HGCM_SVC_PARM_32BIT;
     7683
     7684    switch (aClipboardMode)
     7685    {
     7686        default:
     7687        case ClipboardMode_Disabled:
     7688            LogRel(("VBoxSharedClipboard mode: Off\n"));
     7689            parm.u.uint32 = VBOX_SHARED_CLIPBOARD_MODE_OFF;
     7690            break;
     7691        case ClipboardMode_GuestToHost:
     7692            LogRel(("VBoxSharedClipboard mode: Guest to Host\n"));
     7693            parm.u.uint32 = VBOX_SHARED_CLIPBOARD_MODE_GUEST_TO_HOST;
     7694            break;
     7695        case ClipboardMode_HostToGuest:
     7696            LogRel(("VBoxSharedClipboard mode: Host to Guest\n"));
     7697            parm.u.uint32 = VBOX_SHARED_CLIPBOARD_MODE_HOST_TO_GUEST;
     7698            break;
     7699        case ClipboardMode_Bidirectional:
     7700            LogRel(("VBoxSharedClipboard mode: Bidirectional\n"));
     7701            parm.u.uint32 = VBOX_SHARED_CLIPBOARD_MODE_BIDIRECTIONAL;
     7702            break;
     7703    }
     7704
     7705    pVMMDev->hgcmHostCall("VBoxSharedClipboard", VBOX_SHARED_CLIPBOARD_HOST_FN_SET_MODE, 1, &parm);
    76297706}
    76307707
  • trunk/src/VBox/Main/src-client/ConsoleImpl2.cpp

    r41842 r41925  
    24382438            hrc = pMachine->COMGETTER(ClipboardMode)(&mode);                                H();
    24392439
    2440             if (mode != ClipboardMode_Disabled)
     2440            if (/* mode != ClipboardMode_Disabled */ true)
    24412441            {
    24422442                /* Load the service */
     
    24512451                else
    24522452                {
     2453                    changeClipboardMode(mode);
     2454
    24532455                    /* Setup the service. */
    24542456                    VBOXHGCMSVCPARM parm;
    2455 
    24562457                    parm.type = VBOX_HGCM_SVC_PARM_32BIT;
    2457 
    2458                     switch (mode)
    2459                     {
    2460                         default:
    2461                         case ClipboardMode_Disabled:
    2462                         {
    2463                             LogRel(("VBoxSharedClipboard mode: Off\n"));
    2464                             parm.u.uint32 = VBOX_SHARED_CLIPBOARD_MODE_OFF;
    2465                             break;
    2466                         }
    2467                         case ClipboardMode_GuestToHost:
    2468                         {
    2469                             LogRel(("VBoxSharedClipboard mode: Guest to Host\n"));
    2470                             parm.u.uint32 = VBOX_SHARED_CLIPBOARD_MODE_GUEST_TO_HOST;
    2471                             break;
    2472                         }
    2473                         case ClipboardMode_HostToGuest:
    2474                         {
    2475                             LogRel(("VBoxSharedClipboard mode: Host to Guest\n"));
    2476                             parm.u.uint32 = VBOX_SHARED_CLIPBOARD_MODE_HOST_TO_GUEST;
    2477                             break;
    2478                         }
    2479                         case ClipboardMode_Bidirectional:
    2480                         {
    2481                             LogRel(("VBoxSharedClipboard mode: Bidirectional\n"));
    2482                             parm.u.uint32 = VBOX_SHARED_CLIPBOARD_MODE_BIDIRECTIONAL;
    2483                             break;
    2484                         }
    2485                     }
    2486 
    2487                     pVMMDev->hgcmHostCall("VBoxSharedClipboard", VBOX_SHARED_CLIPBOARD_HOST_FN_SET_MODE, 1, &parm);
    2488 
    24892458                    parm.setUInt32(!useHostClipboard());
    2490 
    24912459                    pVMMDev->hgcmHostCall("VBoxSharedClipboard", VBOX_SHARED_CLIPBOARD_HOST_FN_SET_HEADLESS, 1, &parm);
    24922460
  • trunk/src/VBox/Main/src-client/SessionImpl.cpp

    r40748 r41925  
    657657
    658658    return mConsole->onSharedFolderChange(aGlobal);
     659}
     660
     661STDMETHODIMP Session::OnClipboardModeChange(ClipboardMode_T aClipboardMode)
     662{
     663    LogFlowThisFunc(("\n"));
     664
     665    AutoCaller autoCaller(this);
     666    AssertComRCReturn(autoCaller.rc(), autoCaller.rc());
     667
     668    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
     669    AssertReturn(mState == SessionState_Locked, VBOX_E_INVALID_VM_STATE);
     670    AssertReturn(mType == SessionType_WriteLock, VBOX_E_INVALID_OBJECT_STATE);
     671
     672    return mConsole->onClipboardModeChange(aClipboardMode);
    659673}
    660674
  • trunk/src/VBox/Main/src-server/MachineImpl.cpp

    r41921 r41925  
    25622562    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
    25632563
    2564     HRESULT rc = checkStateDependency(MutableStateDep);
    2565     if (FAILED(rc)) return rc;
    2566 
    25672564    setModified(IsModified_MachineData);
    25682565    mHWData.backup();
    25692566    mHWData->mClipboardMode = aClipboardMode;
     2567
     2568    alock.release();
     2569    onClipboardModeChange(aClipboardMode);
    25702570
    25712571    return S_OK;
     
    83608360            uint32_t fFlags = guestProp::NILFLAG;
    83618361            guestProp::validateFlags(prop.strFlags.c_str(), &fFlags);
    8362             HWData::GuestProperty property = { prop.strName, prop.strValue, prop.timestamp, fFlags };
     8362            HWData::GuestProperty property = { prop.strName, prop.strValue, (LONG64) prop.timestamp, fFlags };
    83638363            mHWData->mGuestProperties.push_back(property);
    83648364        }
     
    1274612746
    1274712747/**
     12748 * @note Locks this object for reading.
     12749 */
     12750HRESULT SessionMachine::onClipboardModeChange(ClipboardMode_T aClipboardMode)
     12751{
     12752    LogFlowThisFunc(("\n"));
     12753
     12754    AutoCaller autoCaller(this);
     12755    AssertComRCReturnRC(autoCaller.rc());
     12756
     12757    ComPtr<IInternalSessionControl> directControl;
     12758    {
     12759        AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
     12760        directControl = mData->mSession.mDirectControl;
     12761    }
     12762
     12763    /* ignore notifications sent after #OnSessionEnd() is called */
     12764    if (!directControl)
     12765        return S_OK;
     12766
     12767    return directControl->OnClipboardModeChange(aClipboardMode);
     12768}
     12769
     12770/**
    1274812771 *  @note Locks this object for reading.
    1274912772 */
Note: See TracChangeset for help on using the changeset viewer.

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