Changeset 74439 in vbox
- Timestamp:
- Sep 24, 2018 12:30:47 PM (6 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/HostServices/DragAndDropSvc.h
r74411 r74439 67 67 #include <VBox/VMMDevCoreTypes.h> 68 68 #include <VBox/VBoxGuestCoreTypes.h> 69 70 /*71 * The mode of operations.72 */73 #define VBOX_DRAG_AND_DROP_MODE_OFF 074 #define VBOX_DRAG_AND_DROP_MODE_HOST_TO_GUEST 175 #define VBOX_DRAG_AND_DROP_MODE_GUEST_TO_HOST 276 #define VBOX_DRAG_AND_DROP_MODE_BIDIRECTIONAL 377 78 #define VBOX_DND_ACTION_IGNORE UINT32_C(0)79 #define VBOX_DND_ACTION_COPY RT_BIT_32(0)80 #define VBOX_DND_ACTION_MOVE RT_BIT_32(1)81 #define VBOX_DND_ACTION_LINK RT_BIT_32(2)82 83 /** A single DnD action. */84 typedef uint32_t VBOXDNDACTION;85 /** A list of (OR'ed) DnD actions. */86 typedef uint32_t VBOXDNDACTIONLIST;87 88 #define hasDnDCopyAction(a) ((a) & VBOX_DND_ACTION_COPY)89 #define hasDnDMoveAction(a) ((a) & VBOX_DND_ACTION_MOVE)90 #define hasDnDLinkAction(a) ((a) & VBOX_DND_ACTION_LINK)91 92 #define isDnDIgnoreAction(a) ((a) == VBOX_DND_ACTION_IGNORE)93 #define isDnDCopyAction(a) ((a) == VBOX_DND_ACTION_COPY)94 #define isDnDMoveAction(a) ((a) == VBOX_DND_ACTION_MOVE)95 #define isDnDLinkAction(a) ((a) == VBOX_DND_ACTION_LINK)96 97 /** @def VBOX_DND_FORMATS_DEFAULT98 * Default drag'n drop formats.99 * Note: If you add new entries here, make sure you test those100 * with all supported guest OSes!101 */102 #define VBOX_DND_FORMATS_DEFAULT \103 "text/uri-list", \104 /* Text. */ \105 "text/html", \106 "text/plain;charset=utf-8", \107 "text/plain;charset=utf-16", \108 "text/plain", \109 "text/richtext", \110 "UTF8_STRING", \111 "TEXT", \112 "STRING", \113 /* OpenOffice formats. */ \114 /* See: https://wiki.openoffice.org/wiki/Documentation/DevGuide/OfficeDev/Common_Application_Features#OpenOffice.org_Clipboard_Data_Formats */ \115 "application/x-openoffice-embed-source-xml;windows_formatname=\"Star Embed Source (XML)\"", \116 "application/x-openoffice;windows_formatname=\"Bitmap\""117 69 118 70 namespace DragAndDropSvc { -
trunk/include/VBox/VBoxGuestLib.h
r74380 r74439 34 34 #include <VBox/VMMDev.h> 35 35 #include <VBox/VBoxGuestCoreTypes.h> 36 # ifdef VBOX_WITH_DRAG_AND_DROP 37 # include <VBox/GuestHost/DragAndDropDefs.h> 38 # endif 36 39 37 40 /** @defgroup grp_vboxguest_lib VirtualBox Guest Additions Library … … 920 923 /** Size (in bytes) of pszFormats (\0 included). */ 921 924 uint32_t cbFormats; 922 /** Allowed DnD actions. */923 uint32_t uAllActions;925 /** List of allowed DnD actions. */ 926 VBOXDNDACTIONLIST dndLstActionsAllowed; 924 927 } HG_Enter; 925 928 struct … … 929 932 /** Absolute Y position of guest screen. */ 930 933 uint32_t uYpos; 931 /** ProposedDnD action. */932 uint32_t uDefAction;934 /** Default DnD action. */ 935 VBOXDNDACTION dndActionDefault; 933 936 } HG_Move; 934 937 struct … … 942 945 /** Absolute Y position of guest screen. */ 943 946 uint32_t uYpos; 944 /** ProposedDnD action. */945 uint32_t uDefAction;947 /** Default DnD action. */ 948 VBOXDNDACTION dndActionDefault; 946 949 } HG_Drop; 947 950 struct … … 968 971 uint32_t cbFormat; 969 972 /** Requested DnD action. */ 970 uint32_t uAction;973 VBOXDNDACTION dndActionRequested; 971 974 } GH_Drop; 972 975 # endif … … 982 985 VBGLR3DECL(void) VbglR3DnDEventFree(PVBGLR3DNDEVENT pEvent); 983 986 984 VBGLR3DECL(int) VbglR3DnDHGSendAckOp(PVBGLR3GUESTDNDCMDCTX pCtx, uint32_t uAction);987 VBGLR3DECL(int) VbglR3DnDHGSendAckOp(PVBGLR3GUESTDNDCMDCTX pCtx, VBOXDNDACTION dndAction); 985 988 VBGLR3DECL(int) VbglR3DnDHGSendReqData(PVBGLR3GUESTDNDCMDCTX pCtx, const char *pcszFormat); 986 989 VBGLR3DECL(int) VbglR3DnDHGSendProgress(PVBGLR3GUESTDNDCMDCTX pCtx, uint32_t uStatus, uint8_t uPercent, int rcErr); 987 990 # ifdef VBOX_WITH_DRAG_AND_DROP_GH 988 VBGLR3DECL(int) VbglR3DnDGHSendAckPending(PVBGLR3GUESTDNDCMDCTX pCtx, uint32_t uDefAction, uint32_t uAllActions, const char* pcszFormats, uint32_t cbFormats);991 VBGLR3DECL(int) VbglR3DnDGHSendAckPending(PVBGLR3GUESTDNDCMDCTX pCtx, VBOXDNDACTION dndActionDefault, VBOXDNDACTIONLIST dndLstActionsAllowed, const char* pcszFormats, uint32_t cbFormats); 989 992 VBGLR3DECL(int) VbglR3DnDGHSendData(PVBGLR3GUESTDNDCMDCTX pCtx, const char *pszFormat, void *pvData, uint32_t cbData); 990 993 VBGLR3DECL(int) VbglR3DnDGHSendError(PVBGLR3GUESTDNDCMDCTX pCtx, int rcOp); -
trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxDnD.cpp
r74411 r74439 94 94 mEventSem(NIL_RTSEMEVENT), 95 95 hWnd(NULL), 96 uAllActions(VBOX_DND_ACTION_IGNORE),96 dndLstActionsAllowed(VBOX_DND_ACTION_IGNORE), 97 97 mfMouseButtonDown(false), 98 98 #ifdef VBOX_WITH_DRAG_AND_DROP_GH … … 477 477 hide(); 478 478 479 LogFlowThisFunc(("Starting drag and drop: uAllActions=0x%x, dwOKEffects=0x%x ...\n",480 uAllActions, startupInfo.dwOKEffects));479 LogFlowThisFunc(("Starting drag and drop: dndLstActionsAllowed=0x%x, dwOKEffects=0x%x ...\n", 480 dndLstActionsAllowed, startupInfo.dwOKEffects)); 481 481 482 482 AssertPtr(startupInfo.pDataObject); … … 561 561 RTCList<RTCString> lstFormats = 562 562 RTCString(pVbglR3Event->u.HG_Enter.pszFormats, pVbglR3Event->u.HG_Enter.cbFormats - 1).split("\r\n"); 563 rc = OnHgEnter(lstFormats, pVbglR3Event->u.HG_Enter. uAllActions);563 rc = OnHgEnter(lstFormats, pVbglR3Event->u.HG_Enter.dndLstActionsAllowed); 564 564 if (RT_FAILURE(rc)) 565 565 break; … … 580 580 { 581 581 rc = OnHgMove(pVbglR3Event->u.HG_Move.uXpos, pVbglR3Event->u.HG_Move.uYpos, 582 pVbglR3Event->u.HG_Move. uDefAction);582 pVbglR3Event->u.HG_Move.dndActionDefault); 583 583 break; 584 584 } … … 628 628 case VBGLR3DNDEVENTTYPE_GH_DROP: 629 629 { 630 rc = OnGhDrop(pVbglR3Event->u.GH_Drop.pszFormat, pVbglR3Event->u.GH_Drop. uAction);630 rc = OnGhDrop(pVbglR3Event->u.GH_Drop.pszFormat, pVbglR3Event->u.GH_Drop.dndActionRequested); 631 631 break; 632 632 } … … 769 769 * @return IPRT status code. 770 770 * @param lstFormats Supported formats offered by the host. 771 * @param uAllActionsSupported actions offered by the host.772 */ 773 int VBoxDnDWnd::OnHgEnter(const RTCList<RTCString> &lstFormats, uint32_t uAllActions)771 * @param dndLstActionsAllowed Supported actions offered by the host. 772 */ 773 int VBoxDnDWnd::OnHgEnter(const RTCList<RTCString> &lstFormats, VBOXDNDACTIONLIST dndLstActionsAllowed) 774 774 { 775 775 if (mMode == GH) /* Wrong mode? Bail out. */ … … 777 777 778 778 #ifdef DEBUG 779 LogFlowThisFunc((" uActions=0x%x, lstFormats=%zu: ", uAllActions, lstFormats.size()));779 LogFlowThisFunc(("dndActionList=0x%x, lstFormats=%zu: ", dndLstActionsAllowed, lstFormats.size())); 780 780 for (size_t i = 0; i < lstFormats.size(); i++) 781 781 LogFlow(("'%s' ", lstFormats.at(i).c_str())); … … 791 791 { 792 792 /* Save all allowed actions. */ 793 this-> uAllActions = uAllActions;793 this->dndLstActionsAllowed = dndLstActionsAllowed; 794 794 795 795 /* … … 876 876 /* Translate our drop actions into allowed Windows drop effects. */ 877 877 startupInfo.dwOKEffects = DROPEFFECT_NONE; 878 if ( uAllActions)879 { 880 if ( uAllActions& VBOX_DND_ACTION_COPY)878 if (dndLstActionsAllowed) 879 { 880 if (dndLstActionsAllowed & VBOX_DND_ACTION_COPY) 881 881 startupInfo.dwOKEffects |= DROPEFFECT_COPY; 882 if ( uAllActions& VBOX_DND_ACTION_MOVE)882 if (dndLstActionsAllowed & VBOX_DND_ACTION_MOVE) 883 883 startupInfo.dwOKEffects |= DROPEFFECT_MOVE; 884 if ( uAllActions& VBOX_DND_ACTION_LINK)884 if (dndLstActionsAllowed & VBOX_DND_ACTION_LINK) 885 885 startupInfo.dwOKEffects |= DROPEFFECT_LINK; 886 886 } … … 1196 1196 if (RT_SUCCESS(rc)) 1197 1197 { 1198 uint32_t uDefAction= VBOX_DND_ACTION_IGNORE;1198 uint32_t dndActionDefault = VBOX_DND_ACTION_IGNORE; 1199 1199 1200 1200 AssertPtr(pDropTarget); … … 1202 1202 if (!strFormats.isEmpty()) 1203 1203 { 1204 uDefAction= VBOX_DND_ACTION_COPY;1205 1206 LogFlowFunc(("Acknowledging pDropTarget=0x%p, uDefAction=0x%x, uAllActions=0x%x, strFormats=%s\n",1207 pDropTarget, uDefAction, uAllActions, strFormats.c_str()));1204 dndActionDefault = VBOX_DND_ACTION_COPY; 1205 1206 LogFlowFunc(("Acknowledging pDropTarget=0x%p, dndActionDefault=0x%x, dndLstActionsAllowed=0x%x, strFormats=%s\n", 1207 pDropTarget, dndActionDefault, dndLstActionsAllowed, strFormats.c_str())); 1208 1208 } 1209 1209 else … … 1214 1214 1215 1215 /** @todo Support more than one action at a time. */ 1216 uAllActions = uDefAction;1216 dndLstActionsAllowed = dndActionDefault; 1217 1217 1218 1218 int rc2 = VbglR3DnDGHSendAckPending(&mDnDCtx, 1219 uDefAction, uAllActions,1219 dndActionDefault, dndLstActionsAllowed, 1220 1220 strFormats.c_str(), (uint32_t)strFormats.length() + 1 /* Include termination */); 1221 1221 if (RT_FAILURE(rc2)) … … 1550 1550 1551 1551 this->lstFmtActive.clear(); 1552 this-> uAllActions= VBOX_DND_ACTION_IGNORE;1552 this->dndLstActionsAllowed = VBOX_DND_ACTION_IGNORE; 1553 1553 1554 1554 int rc2 = setMode(Unknown); -
trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxDnD.h
r74380 r74439 380 380 * drag'n drop operation. */ 381 381 RTCList<RTCString> lstFmtActive; 382 /** Flags of all current drag'n drop 383 * actions allowed. */ 384 uint32_t uAllActions; 382 /** List of all current drag'n drop actions allowed. */ 383 VBOXDNDACTIONLIST dndLstActionsAllowed; 385 384 /** The startup information required 386 385 * for the actual DoDragDrop() call. */ -
trunk/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibDragAndDrop.cpp
r74383 r74439 1212 1212 NULL /* puYPos */, 1213 1213 NULL /* uDefAction */, 1214 &pEvent->u.HG_Enter. uAllActions,1214 &pEvent->u.HG_Enter.dndLstActionsAllowed, 1215 1215 &pEvent->u.HG_Enter.pszFormats, 1216 1216 &pEvent->u.HG_Enter.cbFormats); … … 1226 1226 &pEvent->u.HG_Move.uXpos, 1227 1227 &pEvent->u.HG_Move.uYpos, 1228 &pEvent->u.HG_Move. uDefAction,1228 &pEvent->u.HG_Move.dndActionDefault, 1229 1229 NULL /* puAllActions */, 1230 1230 NULL /* pszFormats */, … … 1241 1241 &pEvent->u.HG_Drop.uXpos, 1242 1242 &pEvent->u.HG_Drop.uYpos, 1243 &pEvent->u.HG_Drop. uDefAction,1243 &pEvent->u.HG_Drop.dndActionDefault, 1244 1244 NULL /* puAllActions */, 1245 1245 NULL /* pszFormats */, … … 1295 1295 &pEvent->u.GH_Drop.pszFormat, 1296 1296 &pEvent->u.GH_Drop.cbFormat, 1297 &pEvent->u.GH_Drop. uAction);1297 &pEvent->u.GH_Drop.dndActionRequested); 1298 1298 if (RT_SUCCESS(rc)) 1299 1299 pEvent->enmType = VBGLR3DNDEVENTTYPE_GH_DROP; … … 1369 1369 } 1370 1370 1371 VBGLR3DECL(int) VbglR3DnDHGSendAckOp(PVBGLR3GUESTDNDCMDCTX pCtx, uint32_t uAction)1371 VBGLR3DECL(int) VbglR3DnDHGSendAckOp(PVBGLR3GUESTDNDCMDCTX pCtx, VBOXDNDACTION dndAction) 1372 1372 { 1373 1373 AssertPtrReturn(pCtx, VERR_INVALID_POINTER); … … 1379 1379 /** @todo Context ID not used yet. */ 1380 1380 Msg.u.v3.uContext.SetUInt32(0); 1381 Msg.u.v3.uAction.SetUInt32( uAction);1381 Msg.u.v3.uAction.SetUInt32(dndAction); 1382 1382 1383 1383 return VbglR3HGCMCall(&Msg.hdr, sizeof(Msg)); … … 1448 1448 * 1449 1449 * @returns IPRT status code. 1450 * @param pCtx DnD context to use.1451 * @param uDefActionDefault action for the operation to report.1452 * @param uAllActionsAll available actions for the operation to report.1453 * @param pcszFormats Available formats for the operation to report.1454 * @param cbFormats Size (in bytes) of formats to report.1450 * @param pCtx DnD context to use. 1451 * @param dndActionDefault Default action for the operation to report. 1452 * @param dndLstActionsAllowed All available actions for the operation to report. 1453 * @param pcszFormats Available formats for the operation to report. 1454 * @param cbFormats Size (in bytes) of formats to report. 1455 1455 */ 1456 1456 VBGLR3DECL(int) VbglR3DnDGHSendAckPending(PVBGLR3GUESTDNDCMDCTX pCtx, 1457 uint32_t uDefAction, uint32_t uAllActions, const char* pcszFormats, uint32_t cbFormats) 1457 VBOXDNDACTION dndActionDefault, VBOXDNDACTIONLIST dndLstActionsAllowed, 1458 const char* pcszFormats, uint32_t cbFormats) 1458 1459 { 1459 1460 AssertPtrReturn(pCtx, VERR_INVALID_POINTER); … … 1470 1471 /** @todo Context ID not used yet. */ 1471 1472 Msg.u.v3.uContext.SetUInt32(0); 1472 Msg.u.v3.uDefAction.SetUInt32( uDefAction);1473 Msg.u.v3.uAllActions.SetUInt32( uAllActions);1473 Msg.u.v3.uDefAction.SetUInt32(dndActionDefault); 1474 Msg.u.v3.uAllActions.SetUInt32(dndLstActionsAllowed); 1474 1475 Msg.u.v3.pvFormats.SetPtr((void*)pcszFormats, cbFormats); 1475 1476 Msg.u.v3.cbFormats.SetUInt32(cbFormats); -
trunk/src/VBox/Additions/x11/VBoxClient/draganddrop.cpp
r74411 r74439 440 440 void destroy(); 441 441 442 int sendFinished(Window hWndSource, uint32_t uAction);442 int sendFinished(Window hWndSource, VBOXDNDACTION dndAction); 443 443 444 444 public: … … 504 504 505 505 /* Host -> Guest handling. */ 506 int hgEnter(const RTCList<RTCString> &formats, uint32_t actions);506 int hgEnter(const RTCList<RTCString> &formats, VBOXDNDACTIONLIST dndListActionsAllowed); 507 507 int hgLeave(void); 508 int hgMove(uint32_t uPosX, uint32_t uPosY, uint32_t uDefaultAction);509 int hgDrop(uint32_t uPosX, uint32_t uPosY, uint32_t uDefaultAction);508 int hgMove(uint32_t uPosX, uint32_t uPosY, VBOXDNDACTION dndActionDefault); 509 int hgDrop(uint32_t uPosX, uint32_t uPosY, VBOXDNDACTION dndActionDefault); 510 510 int hgDataReceive(PVBGLR3GUESTDNDMETADATA pMetaData); 511 511 … … 537 537 int toAtomList(const RTCList<RTCString> &lstFormats, VBoxDnDAtomList &lstAtoms) const; 538 538 int toAtomList(const void *pvData, uint32_t cbData, VBoxDnDAtomList &lstAtoms) const; 539 static Atom toAtomAction( uint32_t uAction);540 static int toAtomActions( uint32_t uActions, VBoxDnDAtomList &lstAtoms);539 static Atom toAtomAction(VBOXDNDACTION dndAction); 540 static int toAtomActions(VBOXDNDACTIONLIST dndActionList, VBoxDnDAtomList &lstAtoms); 541 541 static uint32_t toHGCMAction(Atom atom); 542 542 static uint32_t toHGCMActions(const VBoxDnDAtomList &actionsList); … … 950 950 LogFlowThisFunc(("\tReported dead area: x=%RU16, y=%RU16, cx=%RU16, cy=%RU16\n", x, y, cx, cy)); 951 951 #endif 952 953 uint32_t uAction = VBOX_DND_ACTION_IGNORE; /* Default is ignoring. */ 952 VBOXDNDACTION dndAction = VBOX_DND_ACTION_IGNORE; /* Default is ignoring. */ 954 953 /** @todo Compare this with the allowed actions. */ 955 954 if (fAcceptDrop) 956 uAction = toHGCMAction(static_cast<Atom>(e.xclient.data.l[XdndStatusAction]));957 958 rc = VbglR3DnDHGSendAckOp(&m_dndCtx, uAction);955 dndAction = toHGCMAction(static_cast<Atom>(e.xclient.data.l[XdndStatusAction])); 956 957 rc = VbglR3DnDHGSendAckOp(&m_dndCtx, dndAction); 959 958 } 960 959 else if (e.xclient.message_type == xAtom(XA_XdndFinished)) … … 1594 1593 * @returns IPRT status code. 1595 1594 * @param lstFormats List of supported formats from the host. 1596 * @param uActions(ORed) List of supported actions from the host.1597 */ 1598 int DragInstance::hgEnter(const RTCList<RTCString> &lstFormats, uint32_t uActions)1595 * @param dndListActionsAllowed (ORed) List of supported actions from the host. 1596 */ 1597 int DragInstance::hgEnter(const RTCList<RTCString> &lstFormats, uint32_t dndListActionsAllowed) 1599 1598 { 1600 1599 LogFlowThisFunc(("mode=%RU32, state=%RU32\n", m_enmMode, m_enmState)); … … 1606 1605 1607 1606 #ifdef DEBUG 1608 LogFlowThisFunc((" uActions=0x%x, lstFormats=%zu: ", uActions, lstFormats.size()));1607 LogFlowThisFunc(("dndListActionsAllowed=0x%x, lstFormats=%zu: ", dndListActionsAllowed, lstFormats.size())); 1609 1608 for (size_t i = 0; i < lstFormats.size(); ++i) 1610 1609 LogFlow(("'%s' ", lstFormats.at(i).c_str())); … … 1630 1629 /* Announce the possible actions. */ 1631 1630 VBoxDnDAtomList lstActions; 1632 rc = toAtomActions( uActions, lstActions);1631 rc = toAtomActions(dndListActionsAllowed, lstActions); 1633 1632 if (RT_FAILURE(rc)) 1634 1633 break; … … 1667 1666 * @param uPosX Relative X position within the guest's display area. 1668 1667 * @param uPosY Relative Y position within the guest's display area. 1669 * @param uDefaultActionDefault action the host wants to perform on the guest1668 * @param dndActionDefault Default action the host wants to perform on the guest 1670 1669 * as soon as the operation successfully finishes. 1671 1670 */ 1672 int DragInstance::hgMove(uint32_t uPosX, uint32_t uPosY, uint32_t uDefaultAction)1671 int DragInstance::hgMove(uint32_t uPosX, uint32_t uPosY, VBOXDNDACTION dndActionDefault) 1673 1672 { 1674 1673 LogFlowThisFunc(("mode=%RU32, state=%RU32\n", m_enmMode, m_enmState)); 1675 LogFlowThisFunc(("uPosX=%RU32, uPosY=%RU32, uAction=%RU32\n", uPosX, uPosY, uDefaultAction));1674 LogFlowThisFunc(("uPosX=%RU32, uPosY=%RU32, dndActionDefault=%RU32\n", uPosX, uPosY, dndActionDefault)); 1676 1675 1677 1676 if ( m_enmMode != HG … … 1820 1819 * Send a XdndPosition event with the proposed action to the guest. 1821 1820 */ 1822 Atom pa = toAtomAction( uDefaultAction);1821 Atom pa = toAtomAction(dndActionDefault); 1823 1822 LogFlowThisFunc(("strAction=%s\n", xAtomToString(pa).c_str())); 1824 1823 … … 1863 1862 * @param uPosX Relative X position within the guest's display area. 1864 1863 * @param uPosY Relative Y position within the guest's display area. 1865 * @param uDefaultActionDefault action the host wants to perform on the guest1864 * @param dndActionDefault Default action the host wants to perform on the guest 1866 1865 * as soon as the operation successfully finishes. 1867 1866 */ 1868 int DragInstance::hgDrop(uint32_t uPosX, uint32_t uPosY, uint32_t uDefaultAction)1869 { 1870 RT_NOREF3(uPosX, uPosY, uDefaultAction);1867 int DragInstance::hgDrop(uint32_t uPosX, uint32_t uPosY, VBOXDNDACTION dndActionDefault) 1868 { 1869 RT_NOREF3(uPosX, uPosY, dndActionDefault); 1871 1870 LogFlowThisFunc(("wndCur=%RU32, wndProxy=%RU32, mode=%RU32, state=%RU32\n", m_wndCur, m_wndProxy.hWnd, m_enmMode, m_enmState)); 1872 LogFlowThisFunc(("uPosX=%RU32, uPosY=%RU32, uAction=%RU32\n", uPosX, uPosY, uDefaultAction));1871 LogFlowThisFunc(("uPosX=%RU32, uPosY=%RU32, dndActionDefault=%RU32\n", uPosX, uPosY, dndActionDefault)); 1873 1872 1874 1873 if ( m_enmMode != HG … … 1995 1994 1996 1995 RTCString strFormats = "\r\n"; /** @todo If empty, IOCTL fails with VERR_ACCESS_DENIED. */ 1997 uint32_t uDefAction= VBOX_DND_ACTION_IGNORE;1998 uint32_t uAllActions= VBOX_DND_ACTION_IGNORE;1996 VBOXDNDACTION dndActionDefault = VBOX_DND_ACTION_IGNORE; 1997 VBOXDNDACTIONLIST dndActionList = VBOX_DND_ACTION_IGNORE; 1999 1998 2000 1999 /* Currently in wrong mode? Bail out. */ … … 2097 2096 { 2098 2097 strFormats = strFormatsCur; 2099 uDefAction= VBOX_DND_ACTION_COPY; /** @todo Handle default action! */2100 uAllActions= VBOX_DND_ACTION_COPY; /** @todo Ditto. */2101 uAllActions|= toHGCMActions(m_lstActions);2098 dndActionDefault = VBOX_DND_ACTION_COPY; /** @todo Handle default action! */ 2099 dndActionList = VBOX_DND_ACTION_COPY; /** @todo Ditto. */ 2100 dndActionList |= toHGCMActions(m_lstActions); 2102 2101 } 2103 2102 … … 2105 2104 } 2106 2105 2107 rc2 = VbglR3DnDGHSendAckPending(&m_dndCtx, uDefAction, uAllActions,2106 rc2 = VbglR3DnDGHSendAckPending(&m_dndCtx, dndActionDefault, dndActionList, 2108 2107 strFormats.c_str(), strFormats.length() + 1 /* Include termination */); 2109 LogFlowThisFunc(("uClientID=%RU32, uDefAction=0x%x, allActions=0x%x, strFormats=%s, rc=%Rrc\n",2110 m_dndCtx.uClientID, uDefAction, uAllActions, strFormats.c_str(), rc2));2108 LogFlowThisFunc(("uClientID=%RU32, uDefAction=0x%x, uLstActions=0x%x, strFormats=%s, rc=%Rrc\n", 2109 m_dndCtx.uClientID, dndActionDefault, dndActionList, strFormats.c_str(), rc2)); 2111 2110 if (RT_FAILURE(rc2)) 2112 2111 { … … 2822 2821 * 2823 2822 * @returns Converted Atom-based drag'n drop action. 2824 * @param uActionHGCM drag'n drop actions to convert.2823 * @param dndAction HGCM drag'n drop actions to convert. 2825 2824 */ 2826 2825 /* static */ 2827 Atom DragInstance::toAtomAction( uint32_t uAction)2826 Atom DragInstance::toAtomAction(VBOXDNDACTION dndAction) 2828 2827 { 2829 2828 /* Ignore is None. */ 2830 return (isDnDCopyAction( uAction) ? xAtom(XA_XdndActionCopy) :2831 isDnDMoveAction( uAction) ? xAtom(XA_XdndActionMove) :2832 isDnDLinkAction( uAction) ? xAtom(XA_XdndActionLink) :2829 return (isDnDCopyAction(dndAction) ? xAtom(XA_XdndActionCopy) : 2830 isDnDMoveAction(dndAction) ? xAtom(XA_XdndActionMove) : 2831 isDnDLinkAction(dndAction) ? xAtom(XA_XdndActionLink) : 2833 2832 None); 2834 2833 } … … 2838 2837 * 2839 2838 * @returns IPRT status code. 2840 * @param uActionsHGCM drag'n drop actions to convert.2839 * @param dndActionList HGCM drag'n drop actions to convert. 2841 2840 * @param lstAtoms Reference to VBoxDnDAtomList to store actions in. 2842 2841 */ 2843 2842 /* static */ 2844 int DragInstance::toAtomActions( uint32_t uActions, VBoxDnDAtomList &lstAtoms)2845 { 2846 if (hasDnDCopyAction( uActions))2843 int DragInstance::toAtomActions(VBOXDNDACTIONLIST dndActionList, VBoxDnDAtomList &lstAtoms) 2844 { 2845 if (hasDnDCopyAction(dndActionList)) 2847 2846 lstAtoms.append(xAtom(XA_XdndActionCopy)); 2848 if (hasDnDMoveAction( uActions))2847 if (hasDnDMoveAction(dndActionList)) 2849 2848 lstAtoms.append(xAtom(XA_XdndActionMove)); 2850 if (hasDnDLinkAction( uActions))2849 if (hasDnDLinkAction(dndActionList)) 2851 2850 lstAtoms.append(xAtom(XA_XdndActionLink)); 2852 2851 … … 2929 2928 } 2930 2929 2931 int VBoxDnDProxyWnd::sendFinished(Window hWndSource, uint32_t uAction)2930 int VBoxDnDProxyWnd::sendFinished(Window hWndSource, VBOXDNDACTION dndAction) 2932 2931 { 2933 2932 /* Was the drop accepted by the host? That is, anything than ignoring. */ 2934 bool fDropAccepted = uAction > VBOX_DND_ACTION_IGNORE;2935 2936 LogFlowFunc((" uAction=%RU32\n", uAction));2933 bool fDropAccepted = dndAction > VBOX_DND_ACTION_IGNORE; 2934 2935 LogFlowFunc(("dndAction=%RU32\n", dndAction)); 2937 2936 2938 2937 /* Confirm the result of the transfer to the target window. */ … … 2944 2943 m.message_type = xAtom(XA_XdndFinished); 2945 2944 m.format = 32; 2946 m.data.l[XdndFinishedWindow] = hWnd; /* Target window. */2947 m.data.l[XdndFinishedFlags] = fDropAccepted ? RT_BIT(0) : 0; /* Was the drop accepted? */2948 m.data.l[XdndFinishedAction] = fDropAccepted ? DragInstance::toAtomAction( uAction) : None; /* Action used on accept. */2945 m.data.l[XdndFinishedWindow] = hWnd; /* Target window. */ 2946 m.data.l[XdndFinishedFlags] = fDropAccepted ? RT_BIT(0) : 0; /* Was the drop accepted? */ 2947 m.data.l[XdndFinishedAction] = fDropAccepted ? DragInstance::toAtomAction(dndAction) : None; /* Action used on accept. */ 2949 2948 2950 2949 int xRc = XSendEvent(pDisp, hWndSource, True, NoEventMask, reinterpret_cast<XEvent*>(&m)); … … 3111 3110 RTCList<RTCString> lstFormats = 3112 3111 RTCString(pVbglR3Event->u.HG_Enter.pszFormats, pVbglR3Event->u.HG_Enter.cbFormats - 1).split("\r\n"); 3113 rc = m_pCurDnD->hgEnter(lstFormats, pVbglR3Event->u.HG_Enter. uAllActions);3112 rc = m_pCurDnD->hgEnter(lstFormats, pVbglR3Event->u.HG_Enter.dndLstActionsAllowed); 3114 3113 if (RT_FAILURE(rc)) 3115 3114 break; … … 3131 3130 { 3132 3131 rc = m_pCurDnD->hgMove(pVbglR3Event->u.HG_Move.uXpos, pVbglR3Event->u.HG_Move.uYpos, 3133 pVbglR3Event->u.HG_Move. uDefAction);3132 pVbglR3Event->u.HG_Move.dndActionDefault); 3134 3133 break; 3135 3134 } … … 3144 3143 { 3145 3144 rc = m_pCurDnD->hgDrop(pVbglR3Event->u.HG_Drop.uXpos, pVbglR3Event->u.HG_Drop.uYpos, 3146 pVbglR3Event->u.HG_Drop. uDefAction);3145 pVbglR3Event->u.HG_Drop.dndActionDefault); 3147 3146 break; 3148 3147 } … … 3184 3183 case VBGLR3DNDEVENTTYPE_GH_DROP: 3185 3184 { 3186 rc = m_pCurDnD->ghDropped(pVbglR3Event->u.GH_Drop.pszFormat, pVbglR3Event->u.GH_Drop. uAction);3185 rc = m_pCurDnD->ghDropped(pVbglR3Event->u.GH_Drop.pszFormat, pVbglR3Event->u.GH_Drop.dndActionRequested); 3187 3186 break; 3188 3187 } -
trunk/src/VBox/HostServices/DragAndDrop/service.cpp
r74213 r74439 35 35 36 36 #include <VBox/GuestHost/DragAndDrop.h> 37 #include <VBox/GuestHost/DragAndDropDefs.h> 37 38 #include <VBox/HostServices/Service.h> 38 39 #include <VBox/HostServices/DragAndDropSvc.h> -
trunk/src/VBox/Main/include/GuestDnDPrivate.h
r71398 r74439 26 26 #include <VBox/hgcmsvc.h> /* For PVBOXHGCMSVCPARM. */ 27 27 #include <VBox/GuestHost/DragAndDrop.h> 28 #include <VBox/GuestHost/DragAndDropDefs.h> 28 29 #include <VBox/HostServices/DragAndDropSvc.h> 29 30 … … 797 798 * Needed to tell the guest if data has to be 798 799 * deleted e.g. when moving instead of copying. */ 799 uint32_tmAction;800 VBOXDNDACTION mAction; 800 801 /** Drag'n drop received from the guest. 801 802 * This can be arbitrary data or an URI list. */ … … 986 987 int waitForGuestResponse(RTMSINTERVAL msTimeout = 500) const; 987 988 988 void setA llActions(uint32_t a) { m_allActions= a; }989 uint32_t allActions(void) const { return m_allActions; }990 991 void set DefAction(uint32_t a) { m_defAction= a; }992 uint32_t defAction(void) const { return m_defAction; }989 void setActionsAllowed(VBOXDNDACTIONLIST a) { m_dndLstActionsAllowed = a; } 990 VBOXDNDACTIONLIST getActionsAllowed(void) const { return m_dndLstActionsAllowed; } 991 992 void setActionDefault(VBOXDNDACTION a) { m_dndActionDefault = a; } 993 VBOXDNDACTION getActionDefault(void) const { return m_dndActionDefault; } 993 994 994 995 void setFormats(const GuestDnDMIMEList &lstFormats) { m_lstFormats = lstFormats; } … … 1018 1019 /** Default action to perform in case of a 1019 1020 * successful drop. */ 1020 uint32_t m_defAction; 1021 /** Actions supported by the guest in case of 1022 * a successful drop. */ 1023 uint32_t m_allActions; 1021 VBOXDNDACTION m_dndActionDefault; 1022 /** Actions supported by the guest in case of a successful drop. */ 1023 VBOXDNDACTIONLIST m_dndLstActionsAllowed; 1024 1024 /** Format(s) requested/supported from the guest. */ 1025 1025 GuestDnDMIMEList m_lstFormats; … … 1094 1094 static GuestDnDMIMEList toFilteredFormatList(const GuestDnDMIMEList &lstFormatsSupported, const GuestDnDMIMEList &lstFormatsWanted); 1095 1095 static GuestDnDMIMEList toFilteredFormatList(const GuestDnDMIMEList &lstFormatsSupported, const com::Utf8Str &strFormatsWanted); 1096 static DnDAction_T toMainAction( uint32_t uAction);1097 static std::vector<DnDAction_T> toMainActions( uint32_t uActions);1098 static uint32_ttoHGCMAction(DnDAction_T enmAction);1099 static void toHGCMActions(DnDAction_T enmDefAction, uint32_t *puDefAction, const std::vector<DnDAction_T> vecAllowedActions, uint32_t *puAllowedActions);1096 static DnDAction_T toMainAction(VBOXDNDACTION dndAction); 1097 static std::vector<DnDAction_T> toMainActions(VBOXDNDACTIONLIST dndActionList); 1098 static VBOXDNDACTION toHGCMAction(DnDAction_T enmAction); 1099 static void toHGCMActions(DnDAction_T enmDefAction, VBOXDNDACTION *pDefAction, const std::vector<DnDAction_T> vecAllowedActions, VBOXDNDACTIONLIST *pLstAllowedActions); 1100 1100 /** @} */ 1101 1101 -
trunk/src/VBox/Main/src-client/GuestDnDPrivate.cpp
r74411 r74439 188 188 GuestDnDResponse::GuestDnDResponse(const ComObjPtr<Guest>& pGuest) 189 189 : m_EventSem(NIL_RTSEMEVENT) 190 , m_d efAction(0)191 , m_ allActions(0)190 , m_dndActionDefault(0) 191 , m_dndLstActionsAllowed(0) 192 192 , m_pParent(pGuest) 193 193 { … … 214 214 LogFlowThisFuncEnter(); 215 215 216 m_d efAction= 0;217 m_ allActions= 0;216 m_dndActionDefault = 0; 217 m_dndLstActionsAllowed = 0; 218 218 219 219 m_lstFormats.clear(); … … 384 384 AssertReturn(DragAndDropSvc::CB_MAGIC_DND_HG_ACK_OP == pCBData->hdr.uMagic, VERR_INVALID_PARAMETER); 385 385 386 set DefAction(pCBData->uAction);386 setActionDefault(pCBData->uAction); 387 387 rc = notifyAboutGuestResponse(); 388 388 break; … … 453 453 { 454 454 setFormats (GuestDnD::toFormatList(pCBData->pszFormat)); 455 set DefAction(pCBData->uDefAction);456 setA llActions(pCBData->uAllActions);455 setActionDefault (pCBData->uDefAction); 456 setActionsAllowed(pCBData->uAllActions); 457 457 458 458 rc = VINF_SUCCESS; … … 671 671 672 672 /* static */ 673 uint32_tGuestDnD::toHGCMAction(DnDAction_T enmAction)674 { 675 uint32_t uAction = VBOX_DND_ACTION_IGNORE;673 VBOXDNDACTION GuestDnD::toHGCMAction(DnDAction_T enmAction) 674 { 675 VBOXDNDACTION dndAction = VBOX_DND_ACTION_IGNORE; 676 676 switch (enmAction) 677 677 { 678 678 case DnDAction_Copy: 679 uAction = VBOX_DND_ACTION_COPY;679 dndAction = VBOX_DND_ACTION_COPY; 680 680 break; 681 681 case DnDAction_Move: 682 uAction = VBOX_DND_ACTION_MOVE;682 dndAction = VBOX_DND_ACTION_MOVE; 683 683 break; 684 684 case DnDAction_Link: … … 693 693 } 694 694 695 return uAction;695 return dndAction; 696 696 } 697 697 698 698 /* static */ 699 void GuestDnD::toHGCMActions(DnDAction_T enmD efAction,700 uint32_t *puDefAction,701 const std::vector<DnDAction_T> vec AllowedActions,702 uint32_t *puAllowedActions)703 { 704 uint32_t uAllowedActions= VBOX_DND_ACTION_IGNORE;705 uint32_t uDefAction = toHGCMAction(enmDefAction);706 707 if (!vec AllowedActions.empty())699 void GuestDnD::toHGCMActions(DnDAction_T enmDnDActionDefault, 700 VBOXDNDACTION *pDnDActionDefault, 701 const std::vector<DnDAction_T> vecDnDActionsAllowed, 702 VBOXDNDACTIONLIST *pDnDLstActionsAllowed) 703 { 704 VBOXDNDACTIONLIST dndLstActionsAllowed = VBOX_DND_ACTION_IGNORE; 705 VBOXDNDACTION dndActionDefault = toHGCMAction(enmDnDActionDefault); 706 707 if (!vecDnDActionsAllowed.empty()) 708 708 { 709 709 /* First convert the allowed actions to a bit array. */ 710 for (size_t i = 0; i < vec AllowedActions.size(); i++)711 uAllowedActions |= toHGCMAction(vecAllowedActions[i]);710 for (size_t i = 0; i < vecDnDActionsAllowed.size(); i++) 711 dndLstActionsAllowed |= toHGCMAction(vecDnDActionsAllowed[i]); 712 712 713 713 /* … … 715 715 * set allowed actions, preferring copy, move (in that order). 716 716 */ 717 if (isDnDIgnoreAction( uDefAction))718 { 719 if (hasDnDCopyAction( uAllowedActions))720 uDefAction= VBOX_DND_ACTION_COPY;721 else if (hasDnDMoveAction( uAllowedActions))722 uDefAction= VBOX_DND_ACTION_MOVE;723 } 724 } 725 726 if (p uDefAction)727 *p uDefAction = uDefAction;728 if (p uAllowedActions)729 *p uAllowedActions = uAllowedActions;717 if (isDnDIgnoreAction(dndActionDefault)) 718 { 719 if (hasDnDCopyAction(dndLstActionsAllowed)) 720 dndActionDefault = VBOX_DND_ACTION_COPY; 721 else if (hasDnDMoveAction(dndLstActionsAllowed)) 722 dndActionDefault = VBOX_DND_ACTION_MOVE; 723 } 724 } 725 726 if (pDnDActionDefault) 727 *pDnDActionDefault = dndActionDefault; 728 if (pDnDLstActionsAllowed) 729 *pDnDLstActionsAllowed = dndLstActionsAllowed; 730 730 } 731 731 732 732 /* static */ 733 DnDAction_T GuestDnD::toMainAction( uint32_t uAction)733 DnDAction_T GuestDnD::toMainAction(VBOXDNDACTION dndAction) 734 734 { 735 735 /* For now it doesn't seems useful to allow a 736 736 * link action between host & guest. Maybe later! */ 737 return isDnDCopyAction( uAction) ? DnDAction_Copy738 : isDnDMoveAction( uAction) ? DnDAction_Move739 : DnDAction_Ignore;737 return isDnDCopyAction(dndAction) ? DnDAction_Copy 738 : isDnDMoveAction(dndAction) ? DnDAction_Move 739 : DnDAction_Ignore; 740 740 } 741 741 742 742 /* static */ 743 std::vector<DnDAction_T> GuestDnD::toMainActions( uint32_t uActions)743 std::vector<DnDAction_T> GuestDnD::toMainActions(VBOXDNDACTIONLIST dndActionList) 744 744 { 745 745 std::vector<DnDAction_T> vecActions; … … 748 748 * link action between host & guest. Maybe later! */ 749 749 RTCList<DnDAction_T> lstActions; 750 if (hasDnDCopyAction( uActions))750 if (hasDnDCopyAction(dndActionList)) 751 751 lstActions.append(DnDAction_Copy); 752 if (hasDnDMoveAction( uActions))752 if (hasDnDMoveAction(dndActionList)) 753 753 lstActions.append(DnDAction_Move); 754 754 -
trunk/src/VBox/Main/src-client/GuestDnDSourceImpl.cpp
r74361 r74439 279 279 280 280 if ( fFetchResult 281 && isDnDIgnoreAction(pResp-> defAction()))281 && isDnDIgnoreAction(pResp->getActionDefault())) 282 282 fFetchResult = false; 283 283 … … 299 299 300 300 aFormats = lstFiltered; 301 aAllowedActions = GuestDnD::toMainActions(pResp-> allActions());301 aAllowedActions = GuestDnD::toMainActions(pResp->getActionsAllowed()); 302 302 if (aDefaultAction) 303 *aDefaultAction = GuestDnD::toMainAction(pResp-> defAction());303 *aDefaultAction = GuestDnD::toMainAction(pResp->getActionDefault()); 304 304 305 305 /* Apply the (filtered) formats list. */ … … 310 310 } 311 311 312 LogFlowFunc(("fFetchResult=%RTbool, allActions=0x%x\n", fFetchResult, pResp->allActions()));312 LogFlowFunc(("fFetchResult=%RTbool, lstActionsAllowed=0x%x\n", fFetchResult, pResp->getActionsAllowed())); 313 313 } 314 314 … … 337 337 return setError(E_INVALIDARG, tr("Specified format '%s' is not supported"), aFormat.c_str()); 338 338 339 uint32_t uAction = GuestDnD::toHGCMAction(aAction);340 if (isDnDIgnoreAction( uAction)) /* If there is no usable action, ignore this request. */339 VBOXDNDACTION dndAction = GuestDnD::toHGCMAction(aAction); 340 if (isDnDIgnoreAction(dndAction)) /* If there is no usable action, ignore this request. */ 341 341 return S_OK; 342 342 -
trunk/src/VBox/Main/src-client/GuestDnDTargetImpl.cpp
r74411 r74439 274 274 DnDAction_T resAction = DnDAction_Ignore; 275 275 276 /* Check & convert the drag & drop actions */ 277 uint32_t uDefAction = 0; 278 uint32_t uAllowedActions = 0; 279 GuestDnD::toHGCMActions(aDefaultAction, &uDefAction, 280 aAllowedActions, &uAllowedActions); 276 /* Check & convert the drag & drop actions. */ 277 VBOXDNDACTION dndActionDefault = 0; 278 VBOXDNDACTIONLIST dndActionListAllowed = 0; 279 GuestDnD::toHGCMActions(aDefaultAction, &dndActionDefault, 280 aAllowedActions, &dndActionListAllowed); 281 281 282 /* If there is no usable action, ignore this request. */ 282 if (isDnDIgnoreAction( uDefAction))283 if (isDnDIgnoreAction(dndActionDefault)) 283 284 return S_OK; 284 285 … … 316 317 Msg.setNextUInt32(aX); 317 318 Msg.setNextUInt32(aY); 318 Msg.setNextUInt32( uDefAction);319 Msg.setNextUInt32( uAllowedActions);319 Msg.setNextUInt32(dndActionDefault); 320 Msg.setNextUInt32(dndActionListAllowed); 320 321 Msg.setNextPointer((void *)strFormats.c_str(), cbFormats); 321 322 Msg.setNextUInt32(cbFormats); … … 326 327 GuestDnDResponse *pResp = GuestDnDInst()->response(); 327 328 if (pResp && RT_SUCCESS(pResp->waitForGuestResponse())) 328 resAction = GuestDnD::toMainAction(pResp-> defAction());329 resAction = GuestDnD::toMainAction(pResp->getActionDefault()); 329 330 } 330 331 } … … 363 364 364 365 /* Check & convert the drag & drop actions. */ 365 uint32_t uDefAction = 0; 366 uint32_t uAllowedActions = 0; 367 GuestDnD::toHGCMActions(aDefaultAction, &uDefAction, 368 aAllowedActions, &uAllowedActions); 366 VBOXDNDACTION dndActionDefault = 0; 367 VBOXDNDACTIONLIST dndActionListAllowed = 0; 368 GuestDnD::toHGCMActions(aDefaultAction, &dndActionDefault, 369 aAllowedActions, &dndActionListAllowed); 370 369 371 /* If there is no usable action, ignore this request. */ 370 if (isDnDIgnoreAction( uDefAction))372 if (isDnDIgnoreAction(dndActionDefault)) 371 373 return S_OK; 372 374 … … 393 395 Msg.setNextUInt32(aX); 394 396 Msg.setNextUInt32(aY); 395 Msg.setNextUInt32( uDefAction);396 Msg.setNextUInt32( uAllowedActions);397 Msg.setNextUInt32(dndActionDefault); 398 Msg.setNextUInt32(dndActionListAllowed); 397 399 Msg.setNextPointer((void *)strFormats.c_str(), cbFormats); 398 400 Msg.setNextUInt32(cbFormats); … … 403 405 GuestDnDResponse *pResp = GuestDnDInst()->response(); 404 406 if (pResp && RT_SUCCESS(pResp->waitForGuestResponse())) 405 resAction = GuestDnD::toMainAction(pResp-> defAction());407 resAction = GuestDnD::toMainAction(pResp->getActionDefault()); 406 408 } 407 409 } … … 480 482 481 483 /* Check & convert the drag & drop actions to HGCM codes. */ 482 uint32_t uDefAction = VBOX_DND_ACTION_IGNORE; 483 uint32_t uAllowedActions = 0; 484 GuestDnD::toHGCMActions(aDefaultAction, &uDefAction, 485 aAllowedActions, &uAllowedActions); 484 VBOXDNDACTION dndActionDefault = VBOX_DND_ACTION_IGNORE; 485 VBOXDNDACTIONLIST dndActionListAllowed = 0; 486 GuestDnD::toHGCMActions(aDefaultAction, &dndActionDefault, 487 aAllowedActions, &dndActionListAllowed); 488 486 489 /* If there is no usable action, ignore this request. */ 487 if (isDnDIgnoreAction( uDefAction))490 if (isDnDIgnoreAction(dndActionDefault)) 488 491 { 489 492 aFormat = ""; … … 514 517 Msg.setNextUInt32(aX); 515 518 Msg.setNextUInt32(aY); 516 Msg.setNextUInt32( uDefAction);517 Msg.setNextUInt32( uAllowedActions);519 Msg.setNextUInt32(dndActionDefault); 520 Msg.setNextUInt32(dndActionListAllowed); 518 521 Msg.setNextPointer((void*)strFormats.c_str(), cbFormats); 519 522 Msg.setNextUInt32(cbFormats); … … 528 531 if (RT_SUCCESS(vrc)) 529 532 { 530 resAction = GuestDnD::toMainAction(pResp-> defAction());533 resAction = GuestDnD::toMainAction(pResp->getActionDefault()); 531 534 532 535 GuestDnDMIMEList lstFormats = pResp->formats(); … … 534 537 { 535 538 aFormat = lstFormats.at(0); 536 LogFlowFunc(("resFormat=%s, resAction=%RU32\n", aFormat.c_str(), pResp-> defAction()));539 LogFlowFunc(("resFormat=%s, resAction=%RU32\n", aFormat.c_str(), pResp->getActionDefault())); 537 540 } 538 541 else
Note:
See TracChangeset
for help on using the changeset viewer.