Changeset 26980 in vbox for trunk/src/VBox/Frontends
- Timestamp:
- Mar 2, 2010 11:30:00 PM (15 years ago)
- Location:
- trunk/src/VBox/Frontends/VBoxBFE
- Files:
-
- 11 edited
- 1 copied
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VBoxBFE/AutoCaller.h
r26930 r26980 1 1 /** @file 2 2 * 3 * VirtualBox COM base classes definition 3 * VBox frontends: Basic Frontend (BFE): 4 * VirtualBox COM base class stubs 4 5 */ 5 6 … … 23 24 #define ____H_AUTOCALLER 24 25 25 //////////////////////////////////////////////////////////////////////////////// 26 // 27 // AutoCaller* classes 28 // 29 //////////////////////////////////////////////////////////////////////////////// 26 #define COMMA_LOCKVAL_SRC_POS 30 27 31 /**32 * Smart class that automatically increases the number of callers of the33 * given VirtualBoxBase object when an instance is constructed and decreases34 * it back when the created instance goes out of scope (i.e. gets destroyed).35 *36 * If #rc() returns a failure after the instance creation, it means that37 * the managed VirtualBoxBase object is not Ready, or in any other invalid38 * state, so that the caller must not use the object and can return this39 * failed result code to the upper level.40 *41 * See VirtualBoxBase::addCaller(), VirtualBoxBase::addLimitedCaller() and42 * VirtualBoxBase::releaseCaller() for more details about object callers.43 *44 * @param aLimited |false| if this template should use45 * VirtualiBoxBase::addCaller() calls to add callers, or46 * |true| if VirtualiBoxBase::addLimitedCaller() should be47 * used.48 *49 * @note It is preferable to use the AutoCaller and AutoLimitedCaller50 * classes than specify the @a aLimited argument, for better51 * self-descriptiveness.52 */53 template<bool aLimited>54 class AutoCallerBase55 {56 public:57 58 /**59 * Increases the number of callers of the given object by calling60 * VirtualBoxBase::addCaller().61 *62 * @param aObj Object to add a caller to. If NULL, this63 * instance is effectively turned to no-op (where64 * rc() will return S_OK and state() will be65 * NotReady).66 */67 AutoCallerBase(VirtualBoxBase *aObj)68 : mObj(aObj), mRC(S_OK), mState(VirtualBoxBase::NotReady)69 {70 if (mObj)71 mRC = mObj->addCaller(&mState, aLimited);72 }73 74 /**75 * If the number of callers was successfully increased, decreases it76 * using VirtualBoxBase::releaseCaller(), otherwise does nothing.77 */78 ~AutoCallerBase()79 {80 if (mObj && SUCCEEDED(mRC))81 mObj->releaseCaller();82 }83 84 /**85 * Stores the result code returned by VirtualBoxBase::addCaller() after86 * instance creation or after the last #add() call. A successful result87 * code means the number of callers was successfully increased.88 */89 HRESULT rc() const { return mRC; }90 91 /**92 * Returns |true| if |SUCCEEDED(rc())| is |true|, for convenience.93 * |true| means the number of callers was successfully increased.94 */95 bool isOk() const { return SUCCEEDED(mRC); }96 97 /**98 * Stores the object state returned by VirtualBoxBase::addCaller() after99 * instance creation or after the last #add() call.100 */101 VirtualBoxBase::State state() const { return mState; }102 103 /**104 * Temporarily decreases the number of callers of the managed object.105 * May only be called if #isOk() returns |true|. Note that #rc() will106 * return E_FAIL after this method succeeds.107 */108 void release()109 {110 Assert(SUCCEEDED(mRC));111 if (SUCCEEDED(mRC))112 {113 if (mObj)114 mObj->releaseCaller();115 mRC = E_FAIL;116 }117 }118 119 /**120 * Restores the number of callers decreased by #release(). May only be121 * called after #release().122 */123 void add()124 {125 Assert(!SUCCEEDED(mRC));126 if (mObj && !SUCCEEDED(mRC))127 mRC = mObj->addCaller(&mState, aLimited);128 }129 130 /**131 * Attaches another object to this caller instance.132 * The previous object's caller is released before the new one is added.133 *134 * @param aObj New object to attach, may be @c NULL.135 */136 void attach(VirtualBoxBase *aObj)137 {138 /* detect simple self-reattachment */139 if (mObj != aObj)140 {141 if (mObj && SUCCEEDED(mRC))142 release();143 mObj = aObj;144 add();145 }146 }147 148 /** Verbose equivalent to <tt>attach (NULL)</tt>. */149 void detach() { attach(NULL); }150 151 private:152 153 DECLARE_CLS_COPY_CTOR_ASSIGN_NOOP(AutoCallerBase)154 DECLARE_CLS_NEW_DELETE_NOOP(AutoCallerBase)155 156 VirtualBoxBase *mObj;157 HRESULT mRC;158 VirtualBoxBase::State mState;159 };160 161 /**162 * Smart class that automatically increases the number of normal163 * (non-limited) callers of the given VirtualBoxBase object when an instance164 * is constructed and decreases it back when the created instance goes out165 * of scope (i.e. gets destroyed).166 *167 * A typical usage pattern to declare a normal method of some object (i.e. a168 * method that is valid only when the object provides its full169 * functionality) is:170 * <code>171 * STDMETHODIMP Component::Foo()172 * {173 * AutoCaller autoCaller(this);174 * if (FAILED(autoCaller.rc())) return autoCaller.rc();175 * ...176 * </code>177 *178 * Using this class is equivalent to using the AutoCallerBase template with179 * the @a aLimited argument set to |false|, but this class is preferred180 * because provides better self-descriptiveness.181 *182 * See AutoCallerBase for more information about auto caller functionality.183 */184 typedef AutoCallerBase<false> AutoCaller;185 186 /**187 * Smart class that automatically increases the number of limited callers of188 * the given VirtualBoxBase object when an instance is constructed and189 * decreases it back when the created instance goes out of scope (i.e. gets190 * destroyed).191 *192 * A typical usage pattern to declare a limited method of some object (i.e.193 * a method that is valid even if the object doesn't provide its full194 * functionality) is:195 * <code>196 * STDMETHODIMP Component::Bar()197 * {198 * AutoLimitedCaller autoCaller(this);199 * if (FAILED(autoCaller.rc())) return autoCaller.rc();200 * ...201 * </code>202 *203 * Using this class is equivalent to using the AutoCallerBase template with204 * the @a aLimited argument set to |true|, but this class is preferred205 * because provides better self-descriptiveness.206 *207 * See AutoCallerBase for more information about auto caller functionality.208 */209 typedef AutoCallerBase<true> AutoLimitedCaller;210 211 /**212 * Smart class to enclose the state transition NotReady->InInit->Ready.213 *214 * The purpose of this span is to protect object initialization.215 *216 * Instances must be created as a stack-based variable taking |this| pointer217 * as the argument at the beginning of init() methods of VirtualBoxBase218 * subclasses. When this variable is created it automatically places the219 * object to the InInit state.220 *221 * When the created variable goes out of scope (i.e. gets destroyed) then,222 * depending on the result status of this initialization span, it either223 * places the object to Ready or Limited state or calls the object's224 * VirtualBoxBase::uninit() method which is supposed to place the object225 * back to the NotReady state using the AutoUninitSpan class.226 *227 * The initial result status of the initialization span is determined by the228 * @a aResult argument of the AutoInitSpan constructor (Result::Failed by229 * default). Inside the initialization span, the success status can be set230 * to Result::Succeeded using #setSucceeded(), to to Result::Limited using231 * #setLimited() or to Result::Failed using #setFailed(). Please don't232 * forget to set the correct success status before getting the AutoInitSpan233 * variable destroyed (for example, by performing an early return from234 * the init() method)!235 *236 * Note that if an instance of this class gets constructed when the object237 * is in the state other than NotReady, #isOk() returns |false| and methods238 * of this class do nothing: the state transition is not performed.239 *240 * A typical usage pattern is:241 * <code>242 * HRESULT Component::init()243 * {244 * AutoInitSpan autoInitSpan (this);245 * AssertReturn (autoInitSpan.isOk(), E_FAIL);246 * ...247 * if (FAILED(rc))248 * return rc;249 * ...250 * if (SUCCEEDED(rc))251 * autoInitSpan.setSucceeded();252 * return rc;253 * }254 * </code>255 *256 * @note Never create instances of this class outside init() methods of257 * VirtualBoxBase subclasses and never pass anything other than |this|258 * as the argument to the constructor!259 */260 28 class AutoInitSpan 261 29 { 262 30 public: 263 264 enum Result { Failed = 0x0, Succeeded = 0x1, Limited = 0x2 }; 265 266 AutoInitSpan(VirtualBoxBase *aObj, Result aResult = Failed); 267 ~AutoInitSpan(); 268 269 /** 270 * Returns |true| if this instance has been created at the right moment 271 * (when the object was in the NotReady state) and |false| otherwise. 272 */ 273 bool isOk() const { return mOk; } 274 275 /** 276 * Sets the initialization status to Succeeded to indicates successful 277 * initialization. The AutoInitSpan destructor will place the managed 278 * VirtualBoxBase object to the Ready state. 279 */ 280 void setSucceeded() { mResult = Succeeded; } 281 282 /** 283 * Sets the initialization status to Succeeded to indicate limited 284 * (partly successful) initialization. The AutoInitSpan destructor will 285 * place the managed VirtualBoxBase object to the Limited state. 286 */ 287 void setLimited() { mResult = Limited; } 288 289 /** 290 * Sets the initialization status to Failure to indicates failed 291 * initialization. The AutoInitSpan destructor will place the managed 292 * VirtualBoxBase object to the InitFailed state and will automatically 293 * call its uninit() method which is supposed to place the object back 294 * to the NotReady state using AutoUninitSpan. 295 */ 296 void setFailed() { mResult = Failed; } 297 298 /** Returns the current initialization result. */ 299 Result result() { return mResult; } 300 301 private: 302 303 DECLARE_CLS_COPY_CTOR_ASSIGN_NOOP(AutoInitSpan) 304 DECLARE_CLS_NEW_DELETE_NOOP(AutoInitSpan) 305 306 VirtualBoxBase *mObj; 307 Result mResult : 3; // must be at least total number of bits + 1 (sign) 308 bool mOk : 1; 31 AutoInitSpan(VirtualBoxBase *) {} 32 bool isOk() { return true; } 33 void setSucceeded() {} 309 34 }; 310 35 311 /**312 * Smart class to enclose the state transition Limited->InInit->Ready.313 *314 * The purpose of this span is to protect object re-initialization.315 *316 * Instances must be created as a stack-based variable taking |this| pointer317 * as the argument at the beginning of methods of VirtualBoxBase318 * subclasses that try to re-initialize the object to bring it to the Ready319 * state (full functionality) after partial initialization (limited320 * functionality). When this variable is created, it automatically places321 * the object to the InInit state.322 *323 * When the created variable goes out of scope (i.e. gets destroyed),324 * depending on the success status of this initialization span, it either325 * places the object to the Ready state or brings it back to the Limited326 * state.327 *328 * The initial success status of the re-initialization span is |false|. In329 * order to make it successful, #setSucceeded() must be called before the330 * instance is destroyed.331 *332 * Note that if an instance of this class gets constructed when the object333 * is in the state other than Limited, #isOk() returns |false| and methods334 * of this class do nothing: the state transition is not performed.335 *336 * A typical usage pattern is:337 * <code>338 * HRESULT Component::reinit()339 * {340 * AutoReinitSpan autoReinitSpan (this);341 * AssertReturn (autoReinitSpan.isOk(), E_FAIL);342 * ...343 * if (FAILED(rc))344 * return rc;345 * ...346 * if (SUCCEEDED(rc))347 * autoReinitSpan.setSucceeded();348 * return rc;349 * }350 * </code>351 *352 * @note Never create instances of this class outside re-initialization353 * methods of VirtualBoxBase subclasses and never pass anything other than354 * |this| as the argument to the constructor!355 */356 class AutoReinitSpan357 {358 public:359 360 AutoReinitSpan(VirtualBoxBase *aObj);361 ~AutoReinitSpan();362 363 /**364 * Returns |true| if this instance has been created at the right moment365 * (when the object was in the Limited state) and |false| otherwise.366 */367 bool isOk() const { return mOk; }368 369 /**370 * Sets the re-initialization status to Succeeded to indicates371 * successful re-initialization. The AutoReinitSpan destructor will place372 * the managed VirtualBoxBase object to the Ready state.373 */374 void setSucceeded() { mSucceeded = true; }375 376 private:377 378 DECLARE_CLS_COPY_CTOR_ASSIGN_NOOP(AutoReinitSpan)379 DECLARE_CLS_NEW_DELETE_NOOP(AutoReinitSpan)380 381 VirtualBoxBase *mObj;382 bool mSucceeded : 1;383 bool mOk : 1;384 };385 386 /**387 * Smart class to enclose the state transition Ready->InUnnit->NotReady,388 * InitFailed->InUnnit->NotReady or WillUninit->InUnnit->NotReady.389 *390 * The purpose of this span is to protect object uninitialization.391 *392 * Instances must be created as a stack-based variable taking |this| pointer393 * as the argument at the beginning of uninit() methods of VirtualBoxBase394 * subclasses. When this variable is created it automatically places the395 * object to the InUninit state, unless it is already in the NotReady state396 * as indicated by #uninitDone() returning |true|. In the latter case, the397 * uninit() method must immediately return because there should be nothing398 * to uninitialize.399 *400 * When this variable goes out of scope (i.e. gets destroyed), it places the401 * object to NotReady state.402 *403 * A typical usage pattern is:404 * <code>405 * void Component::uninit()406 * {407 * AutoUninitSpan autoUninitSpan (this);408 * if (autoUninitSpan.uninitDone())409 * return;410 * ...411 * }412 * </code>413 *414 * @note The constructor of this class blocks the current thread execution415 * until the number of callers added to the object using #addCaller()416 * or AutoCaller drops to zero. For this reason, it is forbidden to417 * create instances of this class (or call uninit()) within the418 * AutoCaller or #addCaller() scope because it is a guaranteed419 * deadlock.420 *421 * @note Never create instances of this class outside uninit() methods and422 * never pass anything other than |this| as the argument to the423 * constructor!424 */425 36 class AutoUninitSpan 426 37 { 427 38 public: 428 429 AutoUninitSpan(VirtualBoxBase *aObj); 430 ~AutoUninitSpan(); 431 432 /** |true| when uninit() is called as a result of init() failure */ 433 bool initFailed() { return mInitFailed; } 434 435 /** |true| when uninit() has already been called (so the object is NotReady) */ 436 bool uninitDone() { return mUninitDone; } 437 438 private: 439 440 DECLARE_CLS_COPY_CTOR_ASSIGN_NOOP(AutoUninitSpan) 441 DECLARE_CLS_NEW_DELETE_NOOP(AutoUninitSpan) 442 443 VirtualBoxBase *mObj; 444 bool mInitFailed : 1; 445 bool mUninitDone : 1; 39 AutoUninitSpan(VirtualBoxBase *) {} 40 bool uninitDone() { return false; } 446 41 }; 447 42 448 /** 449 * Smart class to enclose the state transition Ready->MayUninit->NotReady or 450 * Ready->MayUninit->WillUninit. 451 * 452 * The purpose of this span is to safely check if unintialization is 453 * possible at the given moment and seamlessly perform it if so. 454 * 455 * Instances must be created as a stack-based variable taking |this| pointer 456 * as the argument at the beginning of methods of VirtualBoxBase 457 * subclasses that want to uninitialize the object if a necessary set of 458 * criteria is met and leave it Ready otherwise. 459 * 460 * When this variable is created it automatically places the object to the 461 * MayUninit state if it is Ready, does nothing but returns |true| in 462 * response to #alreadyInProgress() if it is already in MayUninit, or 463 * returns a failure in response to #rc() in any other case. The example 464 * below shows how the user must react in latter two cases. 465 * 466 * When this variable goes out of scope (i.e. gets destroyed), it places the 467 * object back to Ready state unless #acceptUninit() is called in which case 468 * the object is placed to WillUninit state and uninit() is immediately 469 * called after that. 470 * 471 * A typical usage pattern is: 472 * <code> 473 * void Component::uninit() 474 * { 475 * AutoMayUninitSpan mayUninitSpan (this); 476 * if (FAILED(mayUninitSpan.rc())) return mayUninitSpan.rc(); 477 * if (mayUninitSpan.alreadyInProgress()) 478 * return S_OK; 479 * ... 480 * if (FAILED(rc)) 481 * return rc; // will go back to Ready 482 * ... 483 * if (SUCCEEDED(rc)) 484 * mayUninitSpan.acceptUninit(); // will call uninit() 485 * return rc; 486 * } 487 * </code> 488 * 489 * @note The constructor of this class blocks the current thread execution 490 * until the number of callers added to the object using #addCaller() 491 * or AutoCaller drops to zero. For this reason, it is forbidden to 492 * create instances of this class (or call uninit()) within the 493 * AutoCaller or #addCaller() scope because it is a guaranteed 494 * deadlock. 495 */ 496 class AutoMayUninitSpan 43 class AutoCaller 497 44 { 498 45 public: 46 AutoCaller(VirtualBoxBase *) {} 47 int rc() { return S_OK; } 48 }; 499 49 500 AutoMayUninitSpan(VirtualBoxBase *aObj); 501 ~AutoMayUninitSpan(); 502 503 /** 504 * Returns a failure if the AutoMayUninitSpan variable was constructed 505 * at an improper time. If there is a failure, do nothing but return 506 * it to the caller. 507 */ 508 HRESULT rc() { return mRC; } 509 510 /** 511 * Returns |true| if AutoMayUninitSpan is already in progress on some 512 * other thread. If it's the case, do nothing but return S_OK to 513 * the caller. 514 */ 515 bool alreadyInProgress() { return mAlreadyInProgress; } 516 517 /* 518 * Accepts uninitialization and causes the destructor to go to 519 * WillUninit state and call uninit() afterwards. 520 */ 521 void acceptUninit() { mAcceptUninit = true; } 522 523 private: 524 525 DECLARE_CLS_COPY_CTOR_ASSIGN_NOOP(AutoMayUninitSpan) 526 DECLARE_CLS_NEW_DELETE_NOOP(AutoMayUninitSpan) 527 528 VirtualBoxBase *mObj; 529 530 HRESULT mRC; 531 bool mAlreadyInProgress : 1; 532 bool mAcceptUninit : 1; 50 class AutoWriteLock 51 { 52 public: 53 AutoWriteLock(VirtualBoxBase *) {} 533 54 }; 534 55 -
trunk/src/VBox/Frontends/VBoxBFE/COMDefs.h
r26834 r26980 42 42 43 43 #define ATL_NO_VTABLE 44 #define DECLARE_CLASSFACTORY(a) 45 #define DECLARE_CLASSFACTORY_SINGLETON(a) 46 #define DECLARE_REGISTRY_RESOURCEID(a) 47 #define DECLARE_NOT_AGGREGATABLE(a) 48 #define DECLARE_PROTECT_FINAL_CONSTRUCT() 49 #define BEGIN_COM_MAP(a) 50 #define COM_INTERFACE_ENTRY(a) 51 #define COM_INTERFACE_ENTRY2(a,b) 52 #define END_COM_MAP() 44 53 45 54 #ifndef RT_OS_WINDOWS … … 62 71 # define E_INVALIDARG ((unsigned long) 0x80070057L) 63 72 #define E_ACCESSDENIED ((unsigned long) 0x80070005L) 64 #define VBOX_E_IPRT_ERROR ((unsigned long) 0x80BB0005L)65 73 66 74 # if ! defined(FALSE) … … 102 110 }; 103 111 } 112 113 #define unconst(val) val 104 114 #endif -
trunk/src/VBox/Frontends/VBoxBFE/ConsoleImpl.h
r26834 r26980 119 119 } while (0) 120 120 121 class VMMDev; 122 class Display; 123 121 124 class Console 122 125 { … … 143 146 uint32_t yHot, uint32_t width, 144 147 uint32_t height, void *pShape) = 0; 148 virtual void onMouseCapabilityChange(bool fAbs, bool fRel, 149 bool fNeedsHostCursor) {} 145 150 146 151 virtual CONEVENT eventWait() = 0; … … 149 154 virtual void progressInfo(PVM pVM, unsigned uPercent, void *pvUser) = 0; 150 155 virtual void resetKeys(void) = 0; 156 virtual VMMDev *getVMMDev() = 0; 157 virtual Display *getDisplay() = 0; 151 158 152 159 protected: -
trunk/src/VBox/Frontends/VBoxBFE/DisplayImpl.cpp
r26173 r26980 2 2 /** @file 3 3 * VBox frontends: Basic Frontend (BFE): 4 * Implementation of VMDisplay class4 * Implementation of Display class 5 5 */ 6 6 … … 50 50 #include "DisplayImpl.h" 51 51 #include "Framebuffer.h" 52 #include "VMMDev Interface.h"52 #include "VMMDev.h" 53 53 54 54 … … 58 58 59 59 /** 60 * VMDisplay driver instance data.60 * Display driver instance data. 61 61 */ 62 62 typedef struct DRVMAINDISPLAY 63 63 { 64 64 /** Pointer to the display object. */ 65 VMDisplay *pDisplay;65 Display *pDisplay; 66 66 /** Pointer to the driver instance structure. */ 67 67 PPDMDRVINS pDrvIns; … … 79 79 ///////////////////////////////////////////////////////////////////////////// 80 80 81 VMDisplay::VMDisplay()81 Display::Display() 82 82 { 83 83 mpDrv = NULL; … … 102 102 } 103 103 104 VMDisplay::~VMDisplay()104 Display::~Display() 105 105 { 106 106 mFramebuffer = 0; … … 117 117 * @param h New display height 118 118 */ 119 int VMDisplay::handleDisplayResize (int w, int h)120 { 121 LogFlow((" VMDisplay::handleDisplayResize(): w=%d, h=%d\n", w, h));119 int Display::handleDisplayResize (int w, int h) 120 { 121 LogFlow(("Display::handleDisplayResize(): w=%d, h=%d\n", w, h)); 122 122 123 123 // if there is no Framebuffer, this call is not interesting … … 140 140 if (!finished) 141 141 { 142 LogFlow((" VMDisplay::handleDisplayResize: external framebuffer wants us to wait!\n"));142 LogFlow(("Display::handleDisplayResize: external framebuffer wants us to wait!\n")); 143 143 144 144 /* Note: The previously obtained framebuffer lock must be preserved. … … 165 165 * @thread EMT 166 166 */ 167 void VMDisplay::handleResizeCompletedEMT (void)167 void Display::handleResizeCompletedEMT (void) 168 168 { 169 169 LogFlowFunc(("\n")); … … 190 190 * @returns COM status code 191 191 */ 192 STDMETHODIMP VMDisplay::ResizeCompleted()193 { 194 LogFlow((" VMDisplay::ResizeCompleted\n"));192 STDMETHODIMP Display::ResizeCompleted() 193 { 194 LogFlow(("Display::ResizeCompleted\n")); 195 195 196 196 // this is only valid for external framebuffers … … 205 205 } 206 206 207 STDMETHODIMP Display::COMGETTER(Width)(ULONG *pWidth) 208 { 209 *pWidth = getWidth(); 210 return S_OK; 211 } 212 213 STDMETHODIMP Display::COMGETTER(Height)(ULONG *pHeight) 214 { 215 *pHeight = getHeight(); 216 return S_OK; 217 } 218 207 219 static void checkCoordBounds (int *px, int *py, int *pw, int *ph, int cx, int cy) 208 220 { … … 237 249 * @param h New display height 238 250 */ 239 void VMDisplay::handleDisplayUpdate (int x, int y, int w, int h)251 void Display::handleDisplayUpdate (int x, int y, int w, int h) 240 252 { 241 253 // if there is no Framebuffer, this call is not interesting … … 266 278 * @param width Address of result variable. 267 279 */ 268 uint32_t VMDisplay::getWidth()280 uint32_t Display::getWidth() 269 281 { 270 282 Assert(mpDrv); … … 278 290 * @param height Address of result variable. 279 291 */ 280 uint32_t VMDisplay::getHeight()292 uint32_t Display::getHeight() 281 293 { 282 294 Assert(mpDrv); … … 290 302 * @param bitsPerPixel Address of result variable. 291 303 */ 292 uint32_t VMDisplay::getBitsPerPixel()304 uint32_t Display::getBitsPerPixel() 293 305 { 294 306 Assert(mpDrv); … … 296 308 } 297 309 298 void VMDisplay::updatePointerShape(bool fVisible, bool fAlpha, uint32_t xHot, uint32_t yHot, uint32_t width, uint32_t height, void *pShape)310 void Display::updatePointerShape(bool fVisible, bool fAlpha, uint32_t xHot, uint32_t yHot, uint32_t width, uint32_t height, void *pShape) 299 311 { 300 312 } … … 310 322 * @param Framebuffer external Framebuffer object 311 323 */ 312 STDMETHODIMP VMDisplay::SetFramebuffer(unsigned iScreenID, Framebuffer *Framebuffer)324 STDMETHODIMP Display::SetFramebuffer(unsigned iScreenID, Framebuffer *Framebuffer) 313 325 { 314 326 if (!Framebuffer) … … 327 339 /* related activities this call needs to be framed by Lock/Unlock. */ 328 340 void 329 VMDisplay::doInvalidateAndUpdate(struct DRVMAINDISPLAY *mpDrv)341 Display::doInvalidateAndUpdate(struct DRVMAINDISPLAY *mpDrv) 330 342 { 331 343 mpDrv->pDisplay->mFramebuffer->Lock(); … … 340 352 * @returns COM status code 341 353 */ 342 STDMETHODIMP VMDisplay::InvalidateAndUpdate()343 { 344 LogFlow ((" VMDisplay::InvalidateAndUpdate(): BEGIN\n"));354 STDMETHODIMP Display::InvalidateAndUpdate() 355 { 356 LogFlow (("Display::InvalidateAndUpdate(): BEGIN\n")); 345 357 346 358 HRESULT rc = S_OK; 347 359 348 LogFlow ((" VMDisplay::InvalidateAndUpdate(): sending DPYUPDATE request\n"));360 LogFlow (("Display::InvalidateAndUpdate(): sending DPYUPDATE request\n")); 349 361 350 362 Assert(gpVM); 351 363 /* pdm.h says that this has to be called from the EMT thread */ 352 364 int rcVBox = VMR3ReqCallVoidWait(gpVM, VMCPUID_ANY, 353 (PFNRT) VMDisplay::doInvalidateAndUpdate, 1, mpDrv);365 (PFNRT)Display::doInvalidateAndUpdate, 1, mpDrv); 354 366 if (RT_FAILURE(rcVBox)) 355 367 rc = E_FAIL; 356 368 357 LogFlow ((" VMDisplay::InvalidateAndUpdate(): END: rc=%08X\n", rc));369 LogFlow (("Display::InvalidateAndUpdate(): END: rc=%08X\n", rc)); 358 370 return rc; 359 371 } … … 366 378 * 367 379 */ 368 void VMDisplay::updateDisplayData()380 void Display::updateDisplayData() 369 381 { 370 382 … … 392 404 } 393 405 394 void VMDisplay::resetFramebuffer()406 void Display::resetFramebuffer() 395 407 { 396 408 if (!mFramebuffer) … … 410 422 * Handle display resize event 411 423 * 412 * @param pInterface VMDisplay connector.424 * @param pInterface Display connector. 413 425 * @param cx New width in pixels. 414 426 * @param cy New height in pixels. 415 427 */ 416 DECLCALLBACK(int) VMDisplay::displayResizeCallback(PPDMIDISPLAYCONNECTOR pInterface, uint32_t bpp, void *pvVRAM, uint32_t cbLine, uint32_t cx, uint32_t cy)428 DECLCALLBACK(int) Display::displayResizeCallback(PPDMIDISPLAYCONNECTOR pInterface, uint32_t bpp, void *pvVRAM, uint32_t cbLine, uint32_t cx, uint32_t cy) 417 429 { 418 430 PDRVMAINDISPLAY pDrv = PDMIDISPLAYCONNECTOR_2_MAINDISPLAY(pInterface); … … 425 437 * Handle display update 426 438 * 427 * @param pInterface VMDisplay connector.439 * @param pInterface Display connector. 428 440 * @param x Left upper boundary x. 429 441 * @param y Left upper boundary y. … … 431 443 * @param cy Update rect height. 432 444 */ 433 DECLCALLBACK(void) VMDisplay::displayUpdateCallback(PPDMIDISPLAYCONNECTOR pInterface,445 DECLCALLBACK(void) Display::displayUpdateCallback(PPDMIDISPLAYCONNECTOR pInterface, 434 446 uint32_t x, uint32_t y, uint32_t cx, uint32_t cy) 435 447 { … … 443 455 * Periodic display refresh callback. 444 456 * 445 * @param pInterface VMDisplay connector.446 */ 447 DECLCALLBACK(void) VMDisplay::displayRefreshCallback(PPDMIDISPLAYCONNECTOR pInterface)457 * @param pInterface Display connector. 458 */ 459 DECLCALLBACK(void) Display::displayRefreshCallback(PPDMIDISPLAYCONNECTOR pInterface) 448 460 { 449 461 PDRVMAINDISPLAY pDrv = PDMIDISPLAYCONNECTOR_2_MAINDISPLAY(pInterface); … … 455 467 * of any locking issues. */ 456 468 457 VMDisplay *pDisplay = pDrv->pDisplay;469 Display *pDisplay = pDrv->pDisplay; 458 470 459 471 uint32_t u32ResizeStatus = pDisplay->mu32ResizeStatus; … … 527 539 * @param pInterface Display connector. 528 540 */ 529 DECLCALLBACK(void) VMDisplay::displayResetCallback(PPDMIDISPLAYCONNECTOR pInterface)541 DECLCALLBACK(void) Display::displayResetCallback(PPDMIDISPLAYCONNECTOR pInterface) 530 542 { 531 543 PDRVMAINDISPLAY pDrv = PDMIDISPLAYCONNECTOR_2_MAINDISPLAY(pInterface); … … 542 554 * @see PDMIDISPLAYCONNECTOR::pfnLFBModeChange 543 555 */ 544 DECLCALLBACK(void) VMDisplay::displayLFBModeChangeCallback(PPDMIDISPLAYCONNECTOR pInterface, bool fEnabled)556 DECLCALLBACK(void) Display::displayLFBModeChangeCallback(PPDMIDISPLAYCONNECTOR pInterface, bool fEnabled) 545 557 { 546 558 PDRVMAINDISPLAY pDrv = PDMIDISPLAYCONNECTOR_2_MAINDISPLAY(pInterface); … … 560 572 } 561 573 562 DECLCALLBACK(void) VMDisplay::displayProcessAdapterDataCallback(PPDMIDISPLAYCONNECTOR pInterface, void *pvVRAM, uint32_t u32VRAMSize)574 DECLCALLBACK(void) Display::displayProcessAdapterDataCallback(PPDMIDISPLAYCONNECTOR pInterface, void *pvVRAM, uint32_t u32VRAMSize) 563 575 { 564 576 NOREF(pInterface); … … 567 579 } 568 580 569 DECLCALLBACK(void) VMDisplay::displayProcessDisplayDataCallback(PPDMIDISPLAYCONNECTOR pInterface, void *pvVRAM, unsigned uScreenId)581 DECLCALLBACK(void) Display::displayProcessDisplayDataCallback(PPDMIDISPLAYCONNECTOR pInterface, void *pvVRAM, unsigned uScreenId) 570 582 { 571 583 NOREF(pInterface); … … 579 591 /* Copies of object's pointers used by vbvaRgn functions. */ 580 592 Framebuffer *pFramebuffer; 581 VMDisplay *pDisplay;593 Display *pDisplay; 582 594 PPDMIDISPLAYPORT pPort; 583 595 … … 590 602 } VBVADIRTYREGION; 591 603 592 void vbvaRgnInit (VBVADIRTYREGION *prgn, Framebuffer *pfb, VMDisplay *pd, PPDMIDISPLAYPORT pp)604 void vbvaRgnInit (VBVADIRTYREGION *prgn, Framebuffer *pfb, Display *pd, PPDMIDISPLAYPORT pp) 593 605 { 594 606 memset (prgn, 0, sizeof (VBVADIRTYREGION)); … … 677 689 } 678 690 679 bool VMDisplay::VideoAccelAllowed (void)691 bool Display::VideoAccelAllowed (void) 680 692 { 681 693 return true; … … 685 697 * @thread EMT 686 698 */ 687 int VMDisplay::VideoAccelEnable (bool fEnable, VBVAMEMORY *pVbvaMemory)699 int Display::VideoAccelEnable (bool fEnable, VBVAMEMORY *pVbvaMemory) 688 700 { 689 701 int rc = VINF_SUCCESS; … … 818 830 } 819 831 820 void VMDisplay::SetVideoModeHint(ULONG aWidth, ULONG aHeight, ULONG aBitsPerPixel, ULONG aDisplay)832 void Display::SetVideoModeHint(ULONG aWidth, ULONG aHeight, ULONG aBitsPerPixel, ULONG aDisplay) 821 833 { 822 834 PPDMIVMMDEVPORT pVMMDevPort = gVMMDev->getVMMDevPort (); … … 871 883 * For crossing boundary - allocate a buffer from heap. 872 884 */ 873 bool VMDisplay::vbvaFetchCmd (VBVACMDHDR **ppHdr, uint32_t *pcbCmd)885 bool Display::vbvaFetchCmd (VBVACMDHDR **ppHdr, uint32_t *pcbCmd) 874 886 { 875 887 uint32_t indexRecordFirst = mpVbvaMemory->indexRecordFirst; … … 1009 1021 } 1010 1022 1011 void VMDisplay::vbvaReleaseCmd (VBVACMDHDR *pHdr, int32_t cbCmd)1023 void Display::vbvaReleaseCmd (VBVACMDHDR *pHdr, int32_t cbCmd) 1012 1024 { 1013 1025 uint8_t *au8RingBuffer = mpVbvaMemory->au8RingBuffer; … … 1053 1065 * @thread EMT 1054 1066 */ 1055 void VMDisplay::VideoAccelFlush (void)1067 void Display::VideoAccelFlush (void) 1056 1068 { 1057 1069 #ifdef DEBUG_sunlover … … 1149 1161 * @interface_method_impl{PDMIBASE,pfnQueryInterface} 1150 1162 */ 1151 DECLCALLBACK(void *) VMDisplay::drvQueryInterface(PPDMIBASE pInterface, const char *pszIID)1163 DECLCALLBACK(void *) Display::drvQueryInterface(PPDMIBASE pInterface, const char *pszIID) 1152 1164 { 1153 1165 PPDMDRVINS pDrvIns = PDMIBASE_2_PDMDRV(pInterface); … … 1167 1179 * @copydoc FNPDMDRVCONSTRUCT 1168 1180 */ 1169 DECLCALLBACK(int) VMDisplay::drvConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pCfg, uint32_t fFlags)1181 DECLCALLBACK(int) Display::drvConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pCfg, uint32_t fFlags) 1170 1182 { 1171 1183 PDRVMAINDISPLAY pData = PDMINS_2_DATA(pDrvIns, PDRVMAINDISPLAY); 1172 LogFlow((" VMDisplay::drvConstruct: iInstance=%d\n", pDrvIns->iInstance));1184 LogFlow(("Display::drvConstruct: iInstance=%d\n", pDrvIns->iInstance)); 1173 1185 PDMDRV_CHECK_VERSIONS_RETURN(pDrvIns); 1174 1186 … … 1185 1197 * Init Interfaces. 1186 1198 */ 1187 pDrvIns->IBase.pfnQueryInterface = VMDisplay::drvQueryInterface;1188 1189 pData->Connector.pfnResize = VMDisplay::displayResizeCallback;1190 pData->Connector.pfnUpdateRect = VMDisplay::displayUpdateCallback;1191 pData->Connector.pfnRefresh = VMDisplay::displayRefreshCallback;1192 pData->Connector.pfnReset = VMDisplay::displayResetCallback;1193 pData->Connector.pfnLFBModeChange = VMDisplay::displayLFBModeChangeCallback;1194 pData->Connector.pfnProcessAdapterData = VMDisplay::displayProcessAdapterDataCallback;1195 pData->Connector.pfnProcessDisplayData = VMDisplay::displayProcessDisplayDataCallback;1199 pDrvIns->IBase.pfnQueryInterface = Display::drvQueryInterface; 1200 1201 pData->Connector.pfnResize = Display::displayResizeCallback; 1202 pData->Connector.pfnUpdateRect = Display::displayUpdateCallback; 1203 pData->Connector.pfnRefresh = Display::displayRefreshCallback; 1204 pData->Connector.pfnReset = Display::displayResetCallback; 1205 pData->Connector.pfnLFBModeChange = Display::displayLFBModeChangeCallback; 1206 pData->Connector.pfnProcessAdapterData = Display::displayProcessAdapterDataCallback; 1207 pData->Connector.pfnProcessDisplayData = Display::displayProcessDisplayDataCallback; 1196 1208 1197 1209 /* … … 1206 1218 1207 1219 /* 1208 * Get the VMDisplay object pointer and update the mpDrv member.1220 * Get the Display object pointer and update the mpDrv member. 1209 1221 */ 1210 1222 void *pv; … … 1215 1227 return rc; 1216 1228 } 1217 pData->pDisplay = ( VMDisplay *)pv; /** @todo Check this cast! */1229 pData->pDisplay = (Display *)pv; /** @todo Check this cast! */ 1218 1230 pData->pDisplay->mpDrv = pData; 1219 1231 … … 1234 1246 1235 1247 /** 1236 * VMDisplay driver registration record.1237 */ 1238 const PDMDRVREG VMDisplay::DrvReg =1248 * Display driver registration record. 1249 */ 1250 const PDMDRVREG Display::DrvReg = 1239 1251 { 1240 1252 /* u32Version */ … … 1257 1269 sizeof(DRVMAINDISPLAY), 1258 1270 /* pfnConstruct */ 1259 VMDisplay::drvConstruct,1271 Display::drvConstruct, 1260 1272 /* pfnDestruct */ 1261 1273 NULL, -
trunk/src/VBox/Frontends/VBoxBFE/DisplayImpl.h
r26173 r26980 2 2 /** @file 3 3 * VBox frontends: Basic Frontend (BFE): 4 * Declaration of VMDisplay class4 * Declaration of Display class 5 5 */ 6 6 … … 30 30 struct VBVACMDHDR; 31 31 32 class VMDisplay32 class Display 33 33 { 34 34 35 35 public: 36 36 37 VMDisplay();38 ~ VMDisplay();37 Display(); 38 ~Display(); 39 39 40 40 // public methods only for internal purposes … … 58 58 STDMETHODIMP InvalidateAndUpdate(); 59 59 STDMETHODIMP ResizeCompleted(); 60 STDMETHODIMP COMGETTER(Width)(ULONG *pWidth); 61 STDMETHODIMP COMGETTER(Height)(ULONG *pHeight); 60 62 61 63 void resetFramebuffer(); … … 111 113 }; 112 114 113 extern VMDisplay *gDisplay;115 extern Display *gDisplay; 114 116 115 117 #endif // !____H_DISPLAYIMPL -
trunk/src/VBox/Frontends/VBoxBFE/MouseImpl.cpp
r26935 r26980 22 22 #include "MouseImpl.h" 23 23 #include "DisplayImpl.h" 24 #ifdef VBOXBFE_WITHOUT_COM 25 # include "VMMDevInterface.h" 26 # include <iprt/uuid.h> 27 class AutoInitSpan 28 { 29 public: 30 AutoInitSpan(VirtualBoxBase *) {} 31 bool isOk() { return true; } 32 void setSucceeded() {} 33 }; 34 35 class AutoUninitSpan 36 { 37 public: 38 AutoUninitSpan(VirtualBoxBase *) {} 39 bool uninitDone() { return false; } 40 }; 41 42 class AutoCaller 43 { 44 public: 45 AutoCaller(VirtualBoxBase *) {} 46 int rc() { return S_OK; } 47 }; 48 49 class AutoWriteLock 50 { 51 public: 52 AutoWriteLock(VirtualBoxBase *) {} 53 }; 54 #define COMMA_LOCKVAL_SRC_POS 55 enum 56 { 57 MouseButtonState_LeftButton = 1, 58 MouseButtonState_RightButton = 2, 59 MouseButtonState_MiddleButton = 4, 60 MouseButtonState_XButton1 = 8, 61 MouseButtonState_XButton2 = 16, 62 }; 63 #else 64 # include "VMMDev.h" 65 66 # include "AutoCaller.h" 67 #endif 24 #include "VMMDev.h" 25 26 #include "AutoCaller.h" 68 27 #include "Logging.h" 69 28 … … 129 88 AssertReturn(autoInitSpan.isOk(), E_FAIL); 130 89 131 #ifdef VBOXBFE_WITHOUT_COM132 mParent = parent;133 #else134 90 unconst(mParent) = parent; 135 #endif136 91 137 92 #ifdef RT_OS_L4 … … 141 96 uHostCaps = 0; 142 97 #endif 143 uDevCaps = 0;144 98 145 99 /* Confirm a successful initialization */ … … 177 131 ///////////////////////////////////////////////////////////////////////////// 178 132 179 #ifdef VBOXBFE_WITHOUT_COM180 int Mouse::getVMMDevMouseCaps(uint32_t *pfCaps)181 {182 gVMMDev->QueryMouseCapabilities(pfCaps);183 return S_OK;184 }185 186 int Mouse::setVMMDevMouseCaps(uint32_t fCaps)187 {188 gVMMDev->SetMouseCapabilities(fCaps);189 return S_OK;190 }191 #else192 133 int Mouse::getVMMDevMouseCaps(uint32_t *pfCaps) 193 134 { … … 212 153 return RT_SUCCESS(rc) ? S_OK : E_FAIL; 213 154 } 214 #endif /* !VBOXBFE_WITHOUT_COM */215 155 216 156 /** … … 364 304 int Mouse::reportAbsEventToVMMDev(uint32_t mouseXAbs, uint32_t mouseYAbs) 365 305 { 366 #ifdef VBOXBFE_WITHOUT_COM367 VMMDev *pVMMDev = gVMMDev;368 #else369 306 VMMDev *pVMMDev = mParent->getVMMDev(); 370 #endif371 307 ComAssertRet(pVMMDev, E_FAIL); 372 308 PPDMIVMMDEVPORT pVMMDevPort = pVMMDev->getVMMDevPort(); … … 439 375 { 440 376 AssertPtrReturn(pcX, E_POINTER); 441 #ifndef VBOXBFE_WITHOUT_COM442 377 Display *pDisplay = mParent->getDisplay(); 443 378 ComAssertRet(pDisplay, E_FAIL); 444 #endif445 379 446 380 ULONG displayWidth; 447 #ifdef VBOXBFE_WITHOUT_COM448 381 displayWidth = gDisplay->getWidth(); 449 #else450 int rc = pDisplay->COMGETTER(Width)(&displayWidth);451 ComAssertComRCRet(rc, rc);452 #endif453 382 454 383 *pcX = displayWidth ? (x * 0xFFFF) / displayWidth: 0; … … 464 393 { 465 394 AssertPtrReturn(pcY, E_POINTER); 466 #ifndef VBOXBFE_WITHOUT_COM467 395 Display *pDisplay = mParent->getDisplay(); 468 396 ComAssertRet(pDisplay, E_FAIL); 469 #endif470 397 471 398 ULONG displayHeight; 472 #ifdef VBOXBFE_WITHOUT_COM473 displayHeight = gDisplay->getHeight();474 #else475 399 int rc = pDisplay->COMGETTER(Height)(&displayHeight); 476 400 ComAssertComRCRet(rc, rc); 477 #endif478 401 479 402 *pcY = displayHeight ? (y * 0xFFFF) / displayHeight: 0; … … 508 431 HRESULT rc = convertDisplayWidth(x, &mouseXAbs); 509 432 ComAssertComRCRet(rc, rc); 510 if (mouseXAbs > 0xffff)511 mouseXAbs = mLastAbsX; 433 /* if (mouseXAbs > 0xffff) 434 mouseXAbs = mLastAbsX; */ 512 435 513 436 uint32_t mouseYAbs; 514 437 rc = convertDisplayHeight(y, &mouseYAbs); 515 438 ComAssertComRCRet(rc, rc); 516 if (mouseYAbs > 0xffff)517 mouseYAbs = mLastAbsY; 439 /* if (mouseYAbs > 0xffff) 440 mouseYAbs = mLastAbsY; */ 518 441 519 442 uint32_t fButtons = mouseButtonsToPDM(buttonState); … … 576 499 bool fAbsSupported = uDevCaps & MOUSE_DEVCAP_ABSOLUTE 577 500 ? true : fVMMDevCanAbs; 578 #ifndef VBOXBFE_WITHOUT_COM579 501 mParent->onMouseCapabilityChange(fAbsSupported, uDevCaps & MOUSE_DEVCAP_RELATIVE, fVMMDevNeedsHostCursor); 580 #endif581 502 } 582 503 -
trunk/src/VBox/Frontends/VBoxBFE/MouseImpl.h
r26935 r26980 67 67 public: 68 68 69 #ifndef VBOXBFE_WITHOUT_COM70 69 VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT (Mouse) 71 70 … … 79 78 COM_INTERFACE_ENTRY2 (IDispatch, IMouse) 80 79 END_COM_MAP() 81 #endif82 80 83 81 DECLARE_EMPTY_CTOR_DTOR (Mouse) … … 106 104 static const PDMDRVREG DrvReg; 107 105 108 #ifndef VBOXBFE_WITHOUT_COM109 106 Console *getParent() const 110 107 { 111 108 return mParent; 112 109 } 113 #endif114 110 115 111 // for VMMDevInterface … … 164 160 #ifdef VBOXBFE_WITHOUT_COM 165 161 extern Mouse *gMouse; 162 163 enum 164 { 165 MouseButtonState_LeftButton = 1, 166 MouseButtonState_RightButton = 2, 167 MouseButtonState_MiddleButton = 4, 168 MouseButtonState_XButton1 = 8, 169 MouseButtonState_XButton2 = 16, 170 }; 166 171 #endif 167 172 -
trunk/src/VBox/Frontends/VBoxBFE/SDLConsole.cpp
r26853 r26980 67 67 #include "MouseImpl.h" 68 68 #include "KeyboardImpl.h" 69 #include "VMMDev Interface.h"69 #include "VMMDev.h" 70 70 #include "Framebuffer.h" 71 71 #include "MachineDebuggerImpl.h" … … 927 927 } 928 928 929 VMMDev *SDLConsole::getVMMDev() 930 { 931 return gVMMDev; 932 } 933 934 Display *SDLConsole::getDisplay() 935 { 936 return gDisplay; 937 } 938 929 939 /** 930 940 * Keyboard event handler. … … 1218 1228 if (state & SDL_BUTTON(SDL_BUTTON_MIDDLE)) 1219 1229 buttons |= PDMIMOUSEPORT_BUTTON_MIDDLE; 1230 #ifdef SDL_BUTTON_X1 1231 if (state & SDL_BUTTON(SDL_BUTTON_X1)) 1232 buttons |= PDMIMOUSEPORT_BUTTON_X1; 1233 #endif 1234 #ifdef SDL_BUTTON_X2 1235 if (state & SDL_BUTTON(SDL_BUTTON_X2)) 1236 buttons |= PDMIMOUSEPORT_BUTTON_X2; 1237 #endif 1220 1238 1221 1239 // now send the mouse event -
trunk/src/VBox/Frontends/VBoxBFE/SDLConsole.h
r26502 r26980 27 27 #include <SDL.h> 28 28 #ifndef RT_OS_DARWIN 29 # define Display Display_ /* Xlib defines "Display" and so do we... */ 29 30 # include <SDL_syswm.h> 31 # undef Display 30 32 #endif 31 33 #if defined(RT_OS_WINDOWS) /// @todo someone please explain why this is necessary. This breaks darwin solid. … … 115 117 virtual void resetCursor(); 116 118 virtual void resetKeys(void); 119 virtual VMMDev *getVMMDev(); 120 virtual Display *getDisplay(); 117 121 118 122 private: -
trunk/src/VBox/Frontends/VBoxBFE/VBoxBFE.cpp
r26835 r26980 79 79 #include "MouseImpl.h" 80 80 #include "KeyboardImpl.h" 81 #include "VMMDev Interface.h"81 #include "VMMDev.h" 82 82 #include "StatusImpl.h" 83 83 #include "Framebuffer.h" … … 127 127 PVM gpVM = NULL; 128 128 Mouse *gMouse = NULL; 129 VMDisplay *gDisplay = NULL;129 Display *gDisplay = NULL; 130 130 Keyboard *gKeyboard = NULL; 131 131 VMMDev *gVMMDev = NULL; … … 793 793 goto leave; 794 794 gVMMDev = new VMMDev(); 795 gDisplay = new VMDisplay();795 gDisplay = new Display(); 796 796 #if defined(USE_SDL) 797 797 /* First console, then framebuffer!! */ … … 1334 1334 return rc; 1335 1335 1336 rc = pCallbacks->pfnRegister(pCallbacks, & VMDisplay::DrvReg);1336 rc = pCallbacks->pfnRegister(pCallbacks, &Display::DrvReg); 1337 1337 AssertRC(rc); 1338 1338 if (RT_FAILURE(rc)) -
trunk/src/VBox/Frontends/VBoxBFE/VMMDevInterface.cpp
r26834 r26980 38 38 39 39 #include "VBoxBFE.h" 40 #include "VMMDev Interface.h"40 #include "VMMDev.h" 41 41 #include "MouseImpl.h" 42 42 #include "DisplayImpl.h" -
trunk/src/VBox/Frontends/VBoxBFE/VirtualBoxBase.h
r26853 r26980 26 26 #ifdef VBOXBFE_WITHOUT_COM 27 27 # include "COMDefs.h" // Our wrapper for COM definitions left in the code 28 # include <iprt/uuid.h> 28 29 #else 29 30 # include <VBox/com/defs.h> … … 280 281 cls::cls () {}; cls::~cls () {}; 281 282 283 #define VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(cls) 284 282 285 //////////////////////////////////////////////////////////////////////////////// 283 286
Note:
See TracChangeset
for help on using the changeset viewer.