Ticket #9039: control_clipboard.patch
| File control_clipboard.patch, 7.1 KB (added by , 13 years ago) |
|---|
-
src/VBox/Main/include/GuestImpl.h
81 81 STDMETHOD(COMSETTER(MemoryBalloonSize)) (ULONG aMemoryBalloonSize); 82 82 STDMETHOD(COMGETTER(StatisticsUpdateInterval)) (ULONG *aUpdateInterval); 83 83 STDMETHOD(COMSETTER(StatisticsUpdateInterval)) (ULONG aUpdateInterval); 84 STDMETHOD(COMGETTER(ClipboardMode)) (ClipboardMode_T *aClipboardMode); 85 STDMETHOD(COMSETTER(ClipboardMode)) (ClipboardMode_T aClipboardMode); 84 86 85 87 // IGuest methods 86 88 STDMETHOD(GetFacilityStatus)(AdditionsFacilityType_T aType, LONG64 *aTimestamp, AdditionsFacilityStatus_T *aStatus); … … 200 202 ULONG mStatUpdateInterval; 201 203 ULONG mCurrentGuestStat[GUESTSTATTYPE_MAX]; 202 204 BOOL mfPageFusionEnabled; 205 ClipboardMode_T mClipboardMode; 203 206 204 207 Console *mParent; 205 208 Data mData; -
src/VBox/Main/src-client/GuestImpl.cpp
26 26 #include "Logging.h" 27 27 28 28 #include <VBox/VMMDev.h> 29 #include <VBox/HostServices/VBoxClipboardSvc.h> 29 30 #ifdef VBOX_WITH_GUEST_CONTROL 30 31 # include <VBox/com/array.h> 31 32 # include <VBox/com/ErrorInfo.h> … … 80 81 else 81 82 mMemoryBalloonSize = 0; /* Default is no ballooning */ 82 83 84 ClipboardMode_T aClipboardMode; 85 ret = mParent->machine()->COMGETTER(ClipboardMode)(&aClipboardMode); 86 if (ret == S_OK) 87 mClipboardMode = aClipboardMode; 88 else 89 mClipboardMode = ClipboardMode_Disabled; 90 83 91 BOOL fPageFusionEnabled; 84 92 ret = mParent->machine()->COMGETTER(PageFusionEnabled)(&fPageFusionEnabled); 85 93 if (ret == S_OK) … … 304 312 return ret; 305 313 } 306 314 315 STDMETHODIMP Guest::COMGETTER(ClipboardMode)(ClipboardMode_T *aClipboardMode) 316 { 317 CheckComArgOutPointerValid(aClipboardMode); 318 319 AutoCaller autoCaller(this); 320 if (FAILED(autoCaller.rc())) return autoCaller.rc(); 321 322 AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS); 323 324 *aClipboardMode = mClipboardMode; 325 326 return S_OK; 327 } 328 329 STDMETHODIMP Guest::COMSETTER(ClipboardMode)(ClipboardMode_T aClipboardMode) 330 { 331 AutoCaller autoCaller(this); 332 if (FAILED(autoCaller.rc())) return autoCaller.rc(); 333 334 AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); 335 336 /* We must be 100% sure that IMachine::COMSETTER(ClipboardMode) 337 * does not call us back in any way! */ 338 HRESULT ret = mParent->machine()->COMSETTER(ClipboardMode)(aClipboardMode); 339 if (ret == S_OK) 340 { 341 mClipboardMode = aClipboardMode; 342 /* forward the information to the VMM device */ 343 VMMDev *pVMMDev = mParent->getVMMDev(); 344 /* MUST release all locks before calling VMM device as its critsect 345 * has higher lock order than anything in Main. */ 346 alock.release(); 347 if (pVMMDev) 348 { 349 VBOXHGCMSVCPARM parm; 350 parm.type = VBOX_HGCM_SVC_PARM_32BIT; 351 parm.u.uint32 = mClipboardMode; 352 pVMMDev->hgcmHostCall("VBoxSharedClipboard", VBOX_SHARED_CLIPBOARD_HOST_FN_SET_MODE, 1, &parm); 353 } 354 } 355 356 return ret; 357 } 358 307 359 STDMETHODIMP Guest::COMGETTER(StatisticsUpdateInterval)(ULONG *aUpdateInterval) 308 360 { 309 361 CheckComArgOutPointerValid(aUpdateInterval); -
src/VBox/Main/idl/VirtualBox.xidl
8305 8305 <desc>Guest system memory balloon size in megabytes (transient property).</desc> 8306 8306 </attribute> 8307 8307 8308 <attribute name="clipboardMode" type="unsigned long"> 8309 <desc> 8310 Synchronization mode between the host OS clipboard 8311 and the guest OS clipboard 8312 </desc> 8313 </attribute> 8314 8308 8315 <attribute name="statisticsUpdateInterval" type="unsigned long"> 8309 8316 <desc>Interval to update guest statistics in seconds.</desc> 8310 8317 </attribute> -
src/VBox/Main/src-server/MachineImpl.cpp
2438 2438 return S_OK; 2439 2439 } 2440 2440 2441 /** 2442 * Set the clipboard mode. 2443 * 2444 * This method is also called from IGuest::COMSETTER(ClipboardMode) so 2445 * we have to make sure that we never call IGuest from here. 2446 */ 2441 2447 STDMETHODIMP 2442 2448 Machine::COMSETTER(ClipboardMode)(ClipboardMode_T aClipboardMode) 2443 2449 { -
src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp
415 415 " plugcpu <id>\n" 416 416 " unplugcpu <id>\n" 417 417 " cpuexecutioncap <1-100>\n" 418 " clipboard disabled|hosttoguest|guesttohost|\n" 419 " bidirectional\n" 418 420 "\n"); 419 421 } 420 422 -
src/VBox/Frontends/VBoxManage/VBoxManageControlVM.cpp
1149 1149 } 1150 1150 RTFileClose(pngFile); 1151 1151 } 1152 else if (!strcmp(a->argv[1], "clipboard")) 1153 { 1154 if (a->argc != 3) 1155 { 1156 errorSyntax(USAGE_CONTROLVM, "Incorrect number of parameters"); 1157 rc = E_FAIL; 1158 break; 1159 } 1160 ClipboardMode_T aClipboardMode; 1161 const char* value = a->argv[2]; 1162 if (!strcmp(value, "disabled")) 1163 { 1164 aClipboardMode = ClipboardMode_Disabled; 1165 } 1166 else if (!strcmp(value, "hosttoguest")) 1167 { 1168 aClipboardMode = ClipboardMode_HostToGuest; 1169 } 1170 else if (!strcmp(value, "guesttohost")) 1171 { 1172 aClipboardMode = ClipboardMode_GuestToHost; 1173 } 1174 else if (!strcmp(value, "bidirectional")) 1175 { 1176 aClipboardMode = ClipboardMode_Bidirectional; 1177 } 1178 else 1179 { 1180 errorArgument("Invalid --clipboard argument '%s'", value); 1181 rc = E_FAIL; 1182 break; 1183 } 1184 1185 ComPtr <IGuest> guest; 1186 rc = console->COMGETTER(Guest)(guest.asOutParam()); 1187 if (SUCCEEDED(rc)) 1188 CHECK_ERROR(guest, COMSETTER(ClipboardMode)(aClipboardMode)); 1189 } 1152 1190 else 1153 1191 { 1154 1192 errorSyntax(USAGE_CONTROLVM, "Invalid parameter '%s'", a->argv[1]);

