Changeset 94770 in vbox for trunk/src/VBox/Additions/x11/VBoxClient/display-svga-x11.cpp
- Timestamp:
- May 2, 2022 10:06:55 AM (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/x11/VBoxClient/display-svga-x11.cpp
r94306 r94770 84 84 static bool g_fMonitorThreadShutdown = false; 85 85 86 #define X_VMwareCtrlSetRes 1 87 88 typedef struct 89 { 90 CARD8 reqType; 91 CARD8 VMwareCtrlReqType; 92 CARD16 length B16; 93 CARD32 screen B32; 94 CARD32 x B32; 95 CARD32 y B32; 96 } xVMwareCtrlSetResReq; 97 #define sz_xVMwareCtrlSetResReq 16 98 99 typedef struct 100 { 101 BYTE type; 102 BYTE pad1; 103 CARD16 sequenceNumber B16; 104 CARD32 length B32; 105 CARD32 screen B32; 106 CARD32 x B32; 107 CARD32 y B32; 108 CARD32 pad2 B32; 109 CARD32 pad3 B32; 110 CARD32 pad4 B32; 111 } xVMwareCtrlSetResReply; 112 #define sz_xVMwareCtrlSetResReply 32 86 113 87 114 typedef struct { … … 439 466 } 440 467 468 #ifdef RT_OS_SOLARIS 469 static bool VMwareCtrlSetRes( 470 Display *dpy, int hExtensionMajorOpcode, int screen, int x, int y) 471 { 472 xVMwareCtrlSetResReply rep; 473 xVMwareCtrlSetResReq *pReq; 474 bool fResult = false; 475 476 LockDisplay(dpy); 477 478 GetReq(VMwareCtrlSetRes, pReq); 479 AssertPtrReturn(pReq, false); 480 481 pReq->reqType = hExtensionMajorOpcode; 482 pReq->VMwareCtrlReqType = X_VMwareCtrlSetRes; 483 pReq->screen = screen; 484 pReq->x = x; 485 pReq->y = y; 486 487 fResult = !!_XReply(dpy, (xReply *)&rep, (SIZEOF(xVMwareCtrlSetResReply) - SIZEOF(xReply)) >> 2, xFalse); 488 489 UnlockDisplay(dpy); 490 491 return fResult; 492 } 493 #endif /* RT_OS_SOLARIS */ 494 441 495 /** Makes a call to vmwarectrl extension. This updates the 442 496 * connection information and possible resolutions (modes) … … 482 536 if (!sMonitorName) 483 537 return -1; 538 #ifdef RT_OS_SOLARIS 539 if (!strcmp(sMonitorName, "default")) 540 return 1; 541 #endif 484 542 int iLen = strlen(sMonitorName); 485 543 if (iLen <= 0) … … 664 722 int hHeight = 600; 665 723 int hWidth = 800; 724 bool fResult = false; 725 int idxDefaultScreen = DefaultScreen(x11Context.pDisplay); 726 727 AssertReturn(idxDefaultScreen >= 0, false); 728 AssertReturn(idxDefaultScreen < x11Context.hOutputCount, false); 666 729 667 730 xXineramaScreenInfo *extents = (xXineramaScreenInfo *)malloc(x11Context.hOutputCount * sizeof(xXineramaScreenInfo)); … … 687 750 hRunningOffset += hWidth; 688 751 } 689 bool fResult = VMwareCtrlSetTopology(x11Context.pDisplay, x11Context.hVMWCtrlMajorOpCode, 690 DefaultScreen(x11Context.pDisplay), 691 extents, x11Context.hOutputCount); 752 #ifdef RT_OS_SOLARIS 753 fResult = VMwareCtrlSetRes(x11Context.pDisplay, x11Context.hVMWCtrlMajorOpCode, 754 idxDefaultScreen, extents[idxDefaultScreen].width, 755 extents[idxDefaultScreen].height); 756 #else 757 fResult = VMwareCtrlSetTopology(x11Context.pDisplay, x11Context.hVMWCtrlMajorOpCode, 758 idxDefaultScreen, extents, x11Context.hOutputCount); 759 #endif 692 760 free(extents); 693 761 return fResult; … … 1139 1207 XRRScreenSize newSize = currentSize(); 1140 1208 1141 if (!event || newSize.width != (int)iXRes || newSize.height != (int)iYRes) 1209 /* On Solaris guest, new screen size is not reported properly despite 1210 * RRScreenChangeNotify event arrives. Hense, only check for event here. 1211 * Linux guests do report new size correctly. */ 1212 if ( !event 1213 #ifndef RT_OS_SOLARIS 1214 || newSize.width != (int)iXRes || newSize.height != (int)iYRes 1215 #endif 1216 ) 1142 1217 { 1143 1218 VBClLogError("Resizing frame buffer to %d %d has failed, current mode %d %d\n",
Note:
See TracChangeset
for help on using the changeset viewer.