From 7a714d4942e31a9ac161623ca4f42e668ac80736 Mon Sep 17 00:00:00 2001 From: "rods%netscape.com" Date: Sat, 17 Apr 1999 13:49:39 +0000 Subject: [PATCH] Changed over to nsIGenericTransferable for setting transferables Added Drag & Drag Support ifdef'ed out with NEW_DRAG_AND_DROP --- widget/public/nsIDragService.h | 58 ++++-- widget/public/nsITransferable.h | 40 ---- widget/public/nsWidgetsCID.h | 18 +- widget/src/build/nsWinWidgetFactory.cpp | 26 +-- widget/src/mac/nsClipboard.cpp | 10 +- widget/src/windows/makefile.win | 6 - widget/src/windows/nsClipboard.cpp | 122 +++++++---- widget/src/windows/nsClipboard.h | 15 +- widget/src/windows/nsDataObj.cpp | 27 ++- widget/src/windows/nsDragService.cpp | 106 ++++++---- widget/src/windows/nsDragService.h | 36 ++-- widget/src/windows/nsDragSource.cpp | 107 ---------- widget/src/windows/nsDragSource.h | 60 ------ widget/src/windows/nsDragTarget.cpp | 90 --------- widget/src/windows/nsDragTarget.h | 58 ------ widget/src/windows/nsDraggedObject.cpp | 96 --------- widget/src/windows/nsDraggedObject.h | 58 ------ widget/src/windows/nsDropTarget.cpp | 234 ---------------------- widget/src/windows/nsDropTarget.h | 39 ---- widget/src/windows/nsNativeDragSource.cpp | 7 +- widget/src/windows/nsNativeDragTarget.cpp | 119 ++++++++--- widget/src/windows/nsNativeDragTarget.h | 3 +- widget/src/xpwidgets/makefile.win | 8 +- widget/src/xpwidgets/nsBaseClipboard.cpp | 4 +- widget/src/xpwidgets/nsTransferable.cpp | 19 +- widget/src/xpwidgets/nsTransferable.h | 13 +- 26 files changed, 382 insertions(+), 997 deletions(-) delete mode 100644 widget/src/windows/nsDragSource.cpp delete mode 100644 widget/src/windows/nsDragSource.h delete mode 100644 widget/src/windows/nsDragTarget.cpp delete mode 100644 widget/src/windows/nsDragTarget.h delete mode 100644 widget/src/windows/nsDraggedObject.cpp delete mode 100644 widget/src/windows/nsDraggedObject.h delete mode 100644 widget/src/windows/nsDropTarget.cpp delete mode 100644 widget/src/windows/nsDropTarget.h diff --git a/widget/public/nsIDragService.h b/widget/public/nsIDragService.h index 937dcf48d130..7b848a2bbaa5 100644 --- a/widget/public/nsIDragService.h +++ b/widget/public/nsIDragService.h @@ -20,34 +20,66 @@ #define nsIDragService_h__ #include "nsISupports.h" -#include "nsPoint.h" -class nsIDragSource; -class nsIImage; +class nsITransferable; +struct nsSize; // {8B5314BB-DB01-11d2-96CE-0060B0FB9956} #define NS_IDRAGSERVICE_IID \ { 0x8b5314bb, 0xdb01, 0x11d2, { 0x96, 0xce, 0x0, 0x60, 0xb0, 0xfb, 0x99, 0x56 } } +#define DRAGDROP_ACTION_COPY 1 +#define DRAGDROP_ACTION_MOVE 2 +#define DRAGDROP_ACTION_LINK 4 class nsIDragService : public nsISupports { public: + /** + * Set the current state of the drag whether it can be dropped or not. + * usually the target "frame" sets this so the native system can render the correct feedback + * + * @param aCanDrop indicates whether it can be dropped here + */ + NS_IMETHOD SetCanDrop (PRBool aCanDrop) = 0; + + /** + * Retrieves whether the drag can be dropped at this location + * + * @param aCanDrop indicates whether it can be dropped here + */ + NS_IMETHOD GetCanDrop (PRBool * aCanDrop) = 0; + + /** + * Sets the current width and height if the drag target area. + * It will contain the current size of the Frame that the drag is currently in + * + * @param aDragTargetSize contains width/height of the current target + */ + NS_IMETHOD SetTargetSize (nsSize aDragTargetSize) = 0; + + /** + * Gets the current width and height if the drag target area. + * It will contain the current size of the Frame that the drag is currently in + * + * @param aCanDrop indicates whether it can be dropped here + */ + NS_IMETHOD GetTargetSize (nsSize * aDragTargetSize) = 0; + /** * Starts a modal drag session. * - * @param aDragSrc the object being dragged - * @param aStartLocation start location of drag - * @param aImageOffset the offset the image should be from the cursor - * @param aImage image to be dragged - * @param aDoFlyback indicates image flys back + * @param aTransferable the transferable to be dragged */ - NS_IMETHOD StartDragSession (nsIDragSource * aDragSrc, - nsPoint * aStartLocation, - nsPoint * aImageOffset, - nsIImage * aImage, - PRBool aDoFlyback) = 0; + NS_IMETHOD StartDragSession (nsITransferable * aTransferable, PRUint32 aActionType) = 0; + + /** + * Get data from a Drag->Drop + * + * @param aTransferable the transferable for the data to be put into + */ + NS_IMETHOD GetData (nsITransferable * aTransferable) = 0; }; #endif diff --git a/widget/public/nsITransferable.h b/widget/public/nsITransferable.h index cf84e63b9018..91cfaf47a82f 100644 --- a/widget/public/nsITransferable.h +++ b/widget/public/nsITransferable.h @@ -36,15 +36,6 @@ class nsITransferable : public nsISupports { static const nsIID& GetIID() { static nsIID iid = NS_ITRANSFERABLE_IID; return iid; } - /** - * Computes a list of flavors that the transferable can accept into it, either through - * intrinsic knowledge or input data converters. - * - * @param outFlavorList fills list with supported flavors. This is a copy of - * the internal list, so it may be edited w/out affecting the transferable. - */ - NS_IMETHOD FlavorsTransferableCanImport ( nsISupportsArray** outFlavorList ) = 0; - /** * Computes a list of flavors that the transferable can export, either through * intrinsic knowledge or output data converters. @@ -81,43 +72,12 @@ class nsITransferable : public nsISupports { */ NS_IMETHOD GetTransferData(nsIDataFlavor * aFlavor, void ** aData, PRUint32 * aDataLen) = 0; - /** - * Set Data into the transferable as a specified DataFlavor. The transferable now - * owns the data, so the caller must not delete it. - * - * @param aFlavor the flavor of data that is being set - * @param aData the data - * @param aDataLen the length of the data (it may or may not be meaningful) - */ - NS_IMETHOD SetTransferData(nsIDataFlavor * aFlavor, void * aData, PRUint32 aDataLen) = 0; - - /** - * Add the data flavor, indicating that this transferable - * can receive this type of flavor - * - * @param aDataFlavor a new data flavor to handle - * @param aHumanPresentableName human readable string for mime - */ - NS_IMETHOD AddDataFlavor(nsIDataFlavor * aDataFlavor) = 0; - /** * Returns PR_TRUE if the data is large. * */ NS_IMETHOD_(PRBool) IsLargeDataSet() = 0; - /** - * Sets the converter for this transferable - * - */ - NS_IMETHOD SetConverter(nsIFormatConverter * aConverter) = 0; - - /** - * Gets the converter for this transferable - * - */ - NS_IMETHOD GetConverter(nsIFormatConverter ** aConverter) = 0; - }; #endif diff --git a/widget/public/nsWidgetsCID.h b/widget/public/nsWidgetsCID.h index a13e0df73537..793511ec34f8 100644 --- a/widget/public/nsWidgetsCID.h +++ b/widget/public/nsWidgetsCID.h @@ -175,30 +175,18 @@ //----------------------------------------------------------- //Drag & Drop & Clipboard //----------------------------------------------------------- -// {8B5314B9-DB01-11d2-96CE-0060B0FB9956} -#define NS_DRAGGEDOBJECT_CID \ -{ 0x8b5314b9, 0xdb01, 0x11d2, { 0x96, 0xce, 0x0, 0x60, 0xb0, 0xfb, 0x99, 0x56 } } - // {8B5314BB-DB01-11d2-96CE-0060B0FB9956} #define NS_DRAGSERVICE_CID \ { 0x8b5314bb, 0xdb01, 0x11d2, { 0x96, 0xce, 0x0, 0x60, 0xb0, 0xfb, 0x99, 0x56 } } -// {8B5314BC-DB01-11d2-96CE-0060B0FB9956} -#define NS_TRANSFERABLE_CID \ -{ 0x8b5314bc, 0xdb01, 0x11d2, { 0x96, 0xce, 0x0, 0x60, 0xb0, 0xfb, 0x99, 0x56 } } +// {867AF703-F360-11D2-96D2-0060B0FB9956} +#define NS_GENERICTRANSFERABLE_CID \ +{ 0x867af703, 0xf360, 0x11d2, { 0x96, 0xd2, 0x0, 0x60, 0xb0, 0xfb, 0x99, 0x56 } } // {8B5314BA-DB01-11d2-96CE-0060B0FB9956} #define NS_CLIPBOARD_CID \ { 0x8b5314ba, 0xdb01, 0x11d2, { 0x96, 0xce, 0x0, 0x60, 0xb0, 0xfb, 0x99, 0x56 } } -// {8B5314B7-DB01-11d2-96CE-0060B0FB9956} -#define NS_DRAGSOURCE_CID \ -{ 0x8b5314b7, 0xdb01, 0x11d2, { 0x96, 0xce, 0x0, 0x60, 0xb0, 0xfb, 0x99, 0x56 } } - -// {8B5314B8-DB01-11d2-96CE-0060B0FB9956} -#define NS_DRAGTARGET_CID \ -{ 0x8b5314b8, 0xdb01, 0x11d2, { 0x96, 0xce, 0x0, 0x60, 0xb0, 0xfb, 0x99, 0x56 } } - // {8B5314BD-DB01-11d2-96CE-0060B0FB9956} #define NS_DATAFLAVOR_CID \ { 0x8b5314bd, 0xdb01, 0x11d2, { 0x96, 0xce, 0x0, 0x60, 0xb0, 0xfb, 0x99, 0x56 } } diff --git a/widget/src/build/nsWinWidgetFactory.cpp b/widget/src/build/nsWinWidgetFactory.cpp index 19ab803fd88e..244e14f952a2 100644 --- a/widget/src/build/nsWinWidgetFactory.cpp +++ b/widget/src/build/nsWinWidgetFactory.cpp @@ -54,9 +54,6 @@ #include "nsXIFFormatConverter.h" #include "nsDataFlavor.h" #include "nsDragService.h" -#include "nsDragSource.h" -#include "nsDragTarget.h" -#include "nsDraggedObject.h" static NS_DEFINE_IID(kCWindow, NS_WINDOW_CID); static NS_DEFINE_IID(kCChild, NS_CHILD_CID); @@ -87,13 +84,10 @@ static NS_DEFINE_IID(kCMenuButton, NS_MENUBUTTON_CID); // Drag & Drop, Clipboard static NS_DEFINE_IID(kCDataObj, NS_DATAOBJ_CID); static NS_DEFINE_IID(kCClipboard, NS_CLIPBOARD_CID); -static NS_DEFINE_IID(kCTransferable, NS_TRANSFERABLE_CID); +static NS_DEFINE_IID(kCGenericTransferable, NS_GENERICTRANSFERABLE_CID); static NS_DEFINE_IID(kCXIFFormatConverter, NS_XIFFORMATCONVERTER_CID); static NS_DEFINE_IID(kCDataFlavor, NS_DATAFLAVOR_CID); static NS_DEFINE_IID(kCDragService, NS_DRAGSERVICE_CID); -static NS_DEFINE_IID(kCDragSource, NS_DRAGSOURCE_CID); -static NS_DEFINE_IID(kCDragTarget, NS_DRAGTARGET_CID); -static NS_DEFINE_IID(kCDraggedObject, NS_DRAGGEDOBJECT_CID); static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID); static NS_DEFINE_IID(kIFactoryIID, NS_IFACTORY_IID); @@ -249,8 +243,8 @@ nsresult nsWidgetFactory::CreateInstance( nsISupports* aOuter, else if (mClassID.Equals(kCDataFlavor)) { inst = (nsISupports*)new nsDataFlavor(); } - else if (mClassID.Equals(kCTransferable)) { - inst = (nsISupports*)new nsTransferable(); + else if (mClassID.Equals(kCGenericTransferable)) { + inst = (nsISupports*)(nsIGenericTransferable *)new nsTransferable(); } else if (mClassID.Equals(kCXIFFormatConverter)) { inst = (nsISupports*)new nsXIFFormatConverter(); @@ -261,20 +255,6 @@ nsresult nsWidgetFactory::CreateInstance( nsISupports* aOuter, else if (mClassID.Equals(kCDragService)) { inst = (nsISupports*)new nsDragService(); } - else if (mClassID.Equals(kCDragSource)) { - inst = (nsISupports*)new nsDragSource(); - } - else if (mClassID.Equals(kCDragTarget)) { - inst = (nsISupports*)new nsDragTarget(); - } - else if (mClassID.Equals(kCDraggedObject)) { - inst = (nsISupports*)new nsDraggedObject(); - } -#ifdef DRAG_DROP - //else if (mClassID.Equals(kCDataObj)) { - //inst = (nsISupports*)new CfDataObj(); - //} -#endif /* */ if (inst == NULL) { diff --git a/widget/src/mac/nsClipboard.cpp b/widget/src/mac/nsClipboard.cpp index 308a502c656f..297601064658 100644 --- a/widget/src/mac/nsClipboard.cpp +++ b/widget/src/mac/nsClipboard.cpp @@ -34,6 +34,7 @@ #include "nsIClipboardOwner.h" #include "nsIDataFlavor.h" #include "nsIFormatConverter.h" +#include "nsIGenericTransferable.h" #include "nsIComponentManager.h" #include "nsWidgetsCID.h" @@ -202,10 +203,15 @@ nsClipboard :: GetNativeClipboardData(nsITransferable * aTransferable) if ( !aTransferable ) return NS_ERROR_INVALID_ARG; + nsCOMPtr genericTrans = do_QueryInterface(aTransferable); + if (!genericTrans) { + return NS_ERROR_FAILURE; + } + // get flavor list that includes all acceptable flavors (including ones obtained through // conversion) nsCOMPtr flavorList; - errCode = aTransferable->FlavorsTransferableCanImport ( getter_AddRefs(flavorList) ); + errCode = genericTrans->FlavorsTransferableCanImport ( getter_AddRefs(flavorList) ); if ( errCode != NS_OK ) return NS_ERROR_FAILURE; @@ -240,7 +246,7 @@ nsClipboard :: GetNativeClipboardData(nsITransferable * aTransferable) ::HUnlock(dataHand); // put it into the transferable - errCode = aTransferable->SetTransferData ( currentFlavor, dataBuff, dataSize ); + errCode = genericTrans->SetTransferData ( currentFlavor, dataBuff, dataSize ); #ifdef NS_DEBUG if ( errCode != NS_OK ) printf("nsClipboard:: Error setting data into transferable\n"); #endif diff --git a/widget/src/windows/makefile.win b/widget/src/windows/makefile.win index fd864b91dfb7..b33f4af6feea 100644 --- a/widget/src/windows/makefile.win +++ b/widget/src/windows/makefile.win @@ -25,9 +25,6 @@ DEFINES =-D_IMPL_NS_WIDGET CPPSRCS = \ nsNativeDragTarget.cpp \ nsNativeDragSource.cpp \ - nsDraggedObject.cpp \ - nsDragTarget.cpp \ - nsDragSource.cpp \ nsDragService.cpp \ Ienumfe.cpp \ nsDataObj.cpp \ @@ -64,9 +61,6 @@ MODULE=raptor OBJS = \ .\$(OBJDIR)\nsNativeDragTarget.obj \ .\$(OBJDIR)\nsNativeDragSource.obj \ - .\$(OBJDIR)\nsDraggedObject.obj \ - .\$(OBJDIR)\nsDragSource.obj \ - .\$(OBJDIR)\nsDragTarget.obj \ .\$(OBJDIR)\nsDragService.obj \ .\$(OBJDIR)\Ienumfe.obj \ .\$(OBJDIR)\nsDataObj.obj \ diff --git a/widget/src/windows/nsClipboard.cpp b/widget/src/windows/nsClipboard.cpp index 651897262356..ad7e5bdeb8f5 100644 --- a/widget/src/windows/nsClipboard.cpp +++ b/widget/src/windows/nsClipboard.cpp @@ -20,11 +20,14 @@ #include #include +#include "nsCOMPtr.h" #include "nsDataObj.h" #include "nsISupportsArray.h" #include "nsIClipboardOwner.h" #include "nsIDataFlavor.h" #include "nsIFormatConverter.h" +#include "nsIGenericTransferable.h" +#include "nsITransferable.h" #include "nsIWidget.h" #include "nsIComponentManager.h" @@ -127,7 +130,7 @@ static UINT GetFormat(const nsString & aMimeStr) * * */ -NS_IMETHODIMP nsClipboard::CreateNativeDataObject(nsITransferable * aTransferable, IDataObject ** aDataObj) +nsresult nsClipboard::CreateNativeDataObject(nsITransferable * aTransferable, IDataObject ** aDataObj) { if (nsnull == aTransferable) { return NS_ERROR_FAILURE; @@ -158,7 +161,7 @@ NS_IMETHODIMP nsClipboard::CreateNativeDataObject(nsITransferable * aTransferabl UINT format = GetFormat(mime); FORMATETC fe; - SET_FORMATETC(fe, format, 0, DVASPECT_CONTENT, 0, TYMED_HGLOBAL); + SET_FORMATETC(fe, format, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL); // Now tell the native IDataObject about both the DataFlavor and // the native data format @@ -173,33 +176,36 @@ NS_IMETHODIMP nsClipboard::CreateNativeDataObject(nsITransferable * aTransferabl // Now check to see if there is a converter for the transferable // and then register any of it's output formats // Get the transferable list of data flavors - nsIFormatConverter * converter = nsnull; - aTransferable->GetConverter(&converter); - if (nsnull != converter) { - // Get list of output flavors - converter->GetOutputDataFlavors(&dfList); - if (nsnull != dfList) { - for (i=0;iCount();i++) { - nsIDataFlavor * df; - nsISupports * supports = dfList->ElementAt(i); - if (NS_OK == supports->QueryInterface(kIDataFlavorIID, (void **)&df)) { - nsString mime; - df->GetMimeType(mime); - UINT format = GetFormat(mime); + nsCOMPtr genericTrans = do_QueryInterface(aTransferable); + if (genericTrans) { + nsIFormatConverter * converter = nsnull; + genericTrans->GetConverter(&converter); + if (nsnull != converter) { + // Get list of output flavors + converter->GetOutputDataFlavors(&dfList); + if (nsnull != dfList) { + for (i=0;iCount();i++) { + nsIDataFlavor * df; + nsISupports * supports = dfList->ElementAt(i); + if (NS_OK == supports->QueryInterface(kIDataFlavorIID, (void **)&df)) { + nsString mime; + df->GetMimeType(mime); + UINT format = GetFormat(mime); - FORMATETC fe; - SET_FORMATETC(fe, format, 0, DVASPECT_CONTENT, 0, TYMED_HGLOBAL); + FORMATETC fe; + SET_FORMATETC(fe, format, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL); - // Now tell the native IDataObject about both the DataFlavor and - // the native data format - dataObj->AddDataFlavor(df, &fe); - NS_RELEASE(df); + // Now tell the native IDataObject about both the DataFlavor and + // the native data format + dataObj->AddDataFlavor(df, &fe); + NS_RELEASE(df); + } + NS_RELEASE(supports); } - NS_RELEASE(supports); + NS_RELEASE(dfList); } - NS_RELEASE(dfList); + NS_RELEASE(converter); } - NS_RELEASE(converter); } *aDataObj = dataObj; @@ -247,7 +253,7 @@ NS_IMETHODIMP nsClipboard::SetNativeClipboardData() * * */ -static nsresult GetGlobalData(HGLOBAL aHGBL, void ** aData, PRUint32 * aLen) +nsresult nsClipboard::GetGlobalData(HGLOBAL aHGBL, void ** aData, PRUint32 * aLen) { nsresult result = NS_ERROR_FAILURE; LPSTR lpStr; @@ -296,7 +302,7 @@ static nsresult GetGlobalData(HGLOBAL aHGBL, void ** aData, PRUint32 * aLen) * * */ -static nsresult GetNativeDataOffClipboard(nsIWidget * aWindow, UINT aFormat, void ** aData, PRUint32 * aLen) +nsresult nsClipboard::GetNativeDataOffClipboard(nsIWidget * aWindow, UINT aFormat, void ** aData, PRUint32 * aLen) { HGLOBAL hglb; nsresult result = NS_ERROR_FAILURE; @@ -314,7 +320,7 @@ static nsresult GetNativeDataOffClipboard(nsIWidget * aWindow, UINT aFormat, voi * * */ -static nsresult GetNativeDataOffClipboard(IDataObject * aDataObject, UINT aFormat, void ** aData, PRUint32 * aLen) +nsresult nsClipboard::GetNativeDataOffClipboard(IDataObject * aDataObject, UINT aFormat, void ** aData, PRUint32 * aLen) { nsresult result = NS_ERROR_FAILURE; @@ -323,7 +329,7 @@ static nsresult GetNativeDataOffClipboard(IDataObject * aDataObject, UINT aForma } FORMATETC fe; - SET_FORMATETC(fe, aFormat, 0, DVASPECT_CONTENT, 0, TYMED_HGLOBAL); + SET_FORMATETC(fe, aFormat, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL); if (S_OK == aDataObject->QueryGetData(&fe)) { LPSTGMEDIUM stm; @@ -380,17 +386,19 @@ static nsresult GetNativeDataOffClipboard(IDataObject * aDataObject, UINT aForma * * */ -NS_IMETHODIMP nsClipboard::GetNativeClipboardData(nsITransferable * aTransferable) +nsresult nsClipboard::GetDataFromDataObject(IDataObject * aDataObject, + nsIWidget * aWindow, + nsITransferable * aTransferable) { + nsresult res = NS_ERROR_FAILURE; + // make sure we have a good transferable if (nsnull == aTransferable) { - return NS_ERROR_FAILURE; + return res; } - - PRBool useOLE = PR_FALSE; - IDataObject * dataObj; - if (S_OK == ::OleGetClipboard(&dataObj)) { - useOLE = PR_TRUE; + nsCOMPtr genericTrans = do_QueryInterface(aTransferable); + if (!genericTrans) { + return res; } // Get the transferable list of data flavors @@ -410,21 +418,47 @@ NS_IMETHODIMP nsClipboard::GetNativeClipboardData(nsITransferable * aTransferabl void * data; PRUint32 dataLen; - if (useOLE) { - if (NS_OK == GetNativeDataOffClipboard(dataObj, format, &data, &dataLen)) { - aTransferable->SetTransferData(df, data, dataLen); + if (nsnull != aDataObject) { + res = GetNativeDataOffClipboard(aDataObject, format, &data, &dataLen); + if (NS_OK == res) { + genericTrans->SetTransferData(df, data, dataLen); } - } else { - if (NS_OK == GetNativeDataOffClipboard(mWindow, format, &data, &dataLen)) { - aTransferable->SetTransferData(df, data, dataLen); + } else if (nsnull != aWindow) { + res = GetNativeDataOffClipboard(aWindow, format, &data, &dataLen); + if (NS_OK == res) { + genericTrans->SetTransferData(df, data, dataLen); } - } - NS_RELEASE(df); + } + NS_IF_RELEASE(df); } NS_RELEASE(supports); } - return NS_OK; + return res; + +} + +/** + * + * + */ +NS_IMETHODIMP nsClipboard::GetNativeClipboardData(nsITransferable * aTransferable) +{ + // make sure we have a good transferable + if (nsnull == aTransferable) { + return NS_ERROR_FAILURE; + } + + nsresult res; + + IDataObject * dataObj; + if (S_OK == ::OleGetClipboard(&dataObj)) { + res = GetDataFromDataObject(dataObj, nsnull, aTransferable); + } else { + res = GetDataFromDataObject(nsnull, mWindow, aTransferable); + } + return res; + } diff --git a/widget/src/windows/nsClipboard.h b/widget/src/windows/nsClipboard.h index 46c995c2b64e..1d1572637ecc 100644 --- a/widget/src/windows/nsClipboard.h +++ b/widget/src/windows/nsClipboard.h @@ -20,6 +20,7 @@ #define nsClipboard_h__ #include "nsBaseClipboard.h" +#include class nsITransferable; //class nsDataObj; @@ -46,7 +47,19 @@ public: NS_IMETHOD ForceDataToClipboard(); // Internal Native Routines - NS_IMETHODIMP CreateNativeDataObject(nsITransferable * aTransferable, IDataObject ** aDataObj); + static nsresult CreateNativeDataObject(nsITransferable * aTransferable, + IDataObject ** aDataObj); + + static nsresult GetDataFromDataObject(IDataObject * aDataObject, + nsIWidget * aWindow, + nsITransferable * aTransferable); + + static nsresult GetNativeDataOffClipboard(nsIWidget * aWindow, UINT aFormat, void ** aData, PRUint32 * aLen); + + static nsresult GetNativeDataOffClipboard(IDataObject * aDataObject, UINT aFormat, void ** aData, PRUint32 * aLen); + + static nsresult GetGlobalData(HGLOBAL aHGBL, void ** aData, PRUint32 * aLen); + protected: diff --git a/widget/src/windows/nsDataObj.cpp b/widget/src/windows/nsDataObj.cpp index 025ae1ac3b48..c90aa5ba2aca 100644 --- a/widget/src/windows/nsDataObj.cpp +++ b/widget/src/windows/nsDataObj.cpp @@ -203,6 +203,7 @@ BOOL nsDataObj::FormatsMatch(const FORMATETC& source, const FORMATETC& target) c STDMETHODIMP nsDataObj::GetData(LPFORMATETC pFE, LPSTGMEDIUM pSTM) { + printf("nsDataObj::GetData\n"); if (nsnull == mTransferable) { return ResultFromScode(DATA_E_FORMATETC); } @@ -244,6 +245,7 @@ STDMETHODIMP nsDataObj::GetData(LPFORMATETC pFE, LPSTGMEDIUM pSTM) STDMETHODIMP nsDataObj::GetDataHere(LPFORMATETC pFE, LPSTGMEDIUM pSTM) { + printf("nsDataObj::GetDataHere\n"); //if (m_dragDrop) { // return m_dragDrop->GetDataHere(pFE, pSTM); //} else { @@ -254,16 +256,26 @@ STDMETHODIMP nsDataObj::GetDataHere(LPFORMATETC pFE, LPSTGMEDIUM pSTM) STDMETHODIMP nsDataObj::QueryGetData(LPFORMATETC pFE) { - //if (m_dragDrop) { - // return m_dragDrop->QueryGetData(pFE); - //} else { - return ResultFromScode(E_FAIL); - //} + printf("nsDataObj::QueryGetData "); + printf("format: %d Text: %d\n", pFE->cfFormat, CF_TEXT); + + PRUint32 dfInx = 0; + + ULONG count; + FORMATETC fe; + m_enumFE->Reset(); + while (NOERROR == m_enumFE->Next(1, &fe, &count)) { + if (fe.cfFormat == pFE->cfFormat) { + return S_OK; + } + } + return ResultFromScode(E_FAIL); } STDMETHODIMP nsDataObj::GetCanonicalFormatEtc (LPFORMATETC pFEIn, LPFORMATETC pFEOut) { + printf("nsDataObj::GetCanonicalFormatEtc\n"); //if (m_dragDrop) { // return m_dragDrop->GetCanonicalFormatEtc(pFEIn, pFEOut); //} else { @@ -274,6 +286,7 @@ STDMETHODIMP nsDataObj::GetCanonicalFormatEtc STDMETHODIMP nsDataObj::SetData(LPFORMATETC pFE, LPSTGMEDIUM pSTM, BOOL fRelease) { + printf("nsDataObj::SetData\n"); return ResultFromScode(E_FAIL); //return m_dragDrop->SetData(pFE, pSTM, fRelease); } @@ -281,6 +294,7 @@ STDMETHODIMP nsDataObj::SetData(LPFORMATETC pFE, LPSTGMEDIUM pSTM, BOOL fRelease STDMETHODIMP nsDataObj::EnumFormatEtc(DWORD dwDir, LPENUMFORMATETC *ppEnum) { + printf("nsDataObj::EnumFormatEtc\n"); switch (dwDir) { case DATADIR_GET: { @@ -305,17 +319,20 @@ STDMETHODIMP nsDataObj::EnumFormatEtc(DWORD dwDir, LPENUMFORMATETC *ppEnum) STDMETHODIMP nsDataObj::DAdvise(LPFORMATETC pFE, DWORD dwFlags, LPADVISESINK pIAdviseSink, DWORD* pdwConn) { + printf("nsDataObj::DAdvise\n"); return ResultFromScode(E_FAIL); } STDMETHODIMP nsDataObj::DUnadvise(DWORD dwConn) { + printf("nsDataObj::DUnadvise\n"); return ResultFromScode(E_FAIL); } STDMETHODIMP nsDataObj::EnumDAdvise(LPENUMSTATDATA *ppEnum) { + printf("nsDataObj::EnumDAdvise\n"); return ResultFromScode(E_FAIL); } diff --git a/widget/src/windows/nsDragService.cpp b/widget/src/windows/nsDragService.cpp index c61742d63315..465d57a78d01 100644 --- a/widget/src/windows/nsDragService.cpp +++ b/widget/src/windows/nsDragService.cpp @@ -17,26 +17,25 @@ */ #include "nsDragService.h" -#include "nsIDragSource.h" #include "nsITransferable.h" -#include "nsDragSource.h" #include "nsDataObj.h" -#include "nsTransferable.h" -#include "nsIServiceManager.h" #include "nsWidgetsCID.h" -#include "nsIClipboard.h" +#include "nsNativeDragTarget.h" +#include "nsNativeDragSource.h" #include "nsClipboard.h" -#include "OLEIDL.h" -#include "OLE2.h" +#include +#include "OLEIDL.H" + static NS_DEFINE_IID(kIDragServiceIID, NS_IDRAGSERVICE_IID); -static NS_DEFINE_IID(kIClipboardIID, NS_ICLIPBOARD_IID); -static NS_DEFINE_CID(kCClipboardCID, NS_CLIPBOARD_CID); +//static NS_DEFINE_IID(kIClipboardIID, NS_ICLIPBOARD_IID); -NS_IMPL_ADDREF(nsDragService) -NS_IMPL_RELEASE(nsDragService) +//static NS_DEFINE_CID(kCClipboardCID, NS_CLIPBOARD_CID); + +NS_IMPL_ADDREF_INHERITED(nsDragService, nsBaseDragService) +NS_IMPL_RELEASE_INHERITED(nsDragService, nsBaseDragService) //------------------------------------------------------------------------- // @@ -46,8 +45,9 @@ NS_IMPL_RELEASE(nsDragService) nsDragService::nsDragService() { NS_INIT_REFCNT(); - mDragSource = nsnull; - + mNativeDragTarget = nsnull; + mNativeDragSrc = nsnull; + mDataObject = nsnull; } //------------------------------------------------------------------------- @@ -57,7 +57,9 @@ nsDragService::nsDragService() //------------------------------------------------------------------------- nsDragService::~nsDragService() { - NS_IF_RELEASE(mDragSource); + NS_IF_RELEASE(mNativeDragSrc); + NS_IF_RELEASE(mNativeDragTarget); + NS_IF_RELEASE(mDataObject); } /** @@ -84,34 +86,60 @@ nsresult nsDragService::QueryInterface(const nsIID& aIID, void** aInstancePtr) return rv; } - -NS_IMETHODIMP nsDragService::StartDragSession (nsIDragSource * aDragSrc, - nsPoint * aStartLocation, - nsPoint * aImageOffset, - nsIImage * aImage, - PRBool aDoFlyback) +//--------------------------------------------------------- +NS_IMETHODIMP nsDragService::StartDragSession (nsITransferable * aTransferable, PRUint32 aActionType) { - NS_IF_RELEASE(mDragSource); - mDragSource = aDragSrc; - NS_ADDREF(mDragSource); - nsIClipboard* clipboard; - nsresult rv = nsServiceManager::GetService(kCClipboardCID, - kIClipboardIID, - (nsISupports **)&clipboard); - if (NS_OK == rv) { - nsITransferable * trans; - mDragSource->GetTransferable(&trans); - IDataObject * dataObj; - ((nsClipboard *)clipboard)->CreateNativeDataObject(trans, &dataObj); - - DWORD dropRes; - HRESULT res = 0; - res = ::DoDragDrop(dataObj, - (IDropSource *)((nsDragSource *)mDragSource)->GetNativeDragSrc(), - DROPEFFECT_COPY | DROPEFFECT_MOVE | DROPEFFECT_SCROLL, &dropRes); + // To do the drag we need to create an object that + // mplements the IDataObject interface (for OLE) + // + // We start by getting the clipboard object, + // casting it our known class and using utility + + NS_IF_RELEASE(mNativeDragSrc); + mNativeDragSrc = (IDropSource *)new nsNativeDragSource(); + if (nsnull != mNativeDragSrc) { + mNativeDragSrc->AddRef(); } - return NS_OK; + + mTransferable = dont_QueryInterface(aTransferable); + + IDataObject * dataObj; + nsClipboard::CreateNativeDataObject(mTransferable, &dataObj); + + nsresult result = NS_ERROR_FAILURE; + DWORD dropRes; + DWORD effects = DROPEFFECT_SCROLL; + if (aActionType & DRAGDROP_ACTION_COPY) { + effects |= DROPEFFECT_COPY; + } + if (aActionType & DRAGDROP_ACTION_MOVE) { + effects |= DROPEFFECT_MOVE; + } + if (aActionType & DRAGDROP_ACTION_LINK) { + effects |= DROPEFFECT_LINK; + } + + HRESULT res = ::DoDragDrop(dataObj, mNativeDragSrc, effects, &dropRes); + + return (DRAGDROP_S_DROP == res?NS_OK:NS_ERROR_FAILURE); } +//------------------------------------------------------------------------- +NS_IMETHODIMP nsDragService::GetData (nsITransferable * aTransferable) +{ + if (nsnull != mDataObject) { + return nsClipboard::GetDataFromDataObject(mDataObject, nsnull, aTransferable); + } + return NS_ERROR_FAILURE; +} + +//--------------------------------------------------------- +NS_IMETHODIMP nsDragService::SetIDataObject (IDataObject * aDataObj) +{ + NS_IF_RELEASE(mDataObject); + mDataObject = aDataObj; + NS_ADDREF(mDataObject); + return NS_OK; +} diff --git a/widget/src/windows/nsDragService.h b/widget/src/windows/nsDragService.h index ddec400fc293..a6be8c0dfdc9 100644 --- a/widget/src/windows/nsDragService.h +++ b/widget/src/windows/nsDragService.h @@ -19,23 +19,17 @@ #ifndef nsDragService_h__ #define nsDragService_h__ -#include "nsIDragService.h" -#include "nsPoint.h" -#include "nsIImage.h" +#include "nsBaseDragService.h" -#include -#include "OLEIDL.H" - -class nsIDragSource; -class nsDataObj; - -#define MAX_FORMATS 32 +struct IDropSource; +struct IDataObject; +class nsNativeDragTarget; /** * Native Win32 DragService wrapper */ -class nsDragService : public nsIDragService +class nsDragService : public nsBaseDragService { public: @@ -43,22 +37,20 @@ public: virtual ~nsDragService(); //nsISupports - NS_DECL_ISUPPORTS + NS_DECL_ISUPPORTS_INHERITED + //nsIDragService - NS_IMETHOD StartDragSession (nsIDragSource * aDragSrc, - nsPoint * aStartLocation, - nsPoint * aImageOffset, - nsIImage * aImage, - PRBool aDoFlyback); - + NS_IMETHOD StartDragSession (nsITransferable * aTransferable, PRUint32 aActionType); + // Native Impl. + NS_IMETHOD SetIDataObject (IDataObject * aDataObj); + NS_IMETHOD GetData (nsITransferable * aTransferable); protected: - - nsIDragSource * mDragSource; - //nsDataObj * mDataObj; - + IDropSource * mNativeDragSrc; + nsNativeDragTarget * mNativeDragTarget; + IDataObject * mDataObject; }; #endif // nsDragService_h__ diff --git a/widget/src/windows/nsDragSource.cpp b/widget/src/windows/nsDragSource.cpp deleted file mode 100644 index 2beb1e879663..000000000000 --- a/widget/src/windows/nsDragSource.cpp +++ /dev/null @@ -1,107 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * - * The contents of this file are subject to the Netscape Public License - * Version 1.0 (the "NPL"); you may not use this file except in - * compliance with the NPL. You may obtain a copy of the NPL at - * http://www.mozilla.org/NPL/ - * - * Software distributed under the NPL is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL - * for the specific language governing rights and limitations under the - * NPL. - * - * The Initial Developer of this code under the NPL is Netscape - * Communications Corporation. Portions created by Netscape are - * Copyright (C) 1998 Netscape Communications Corporation. All Rights - * Reserved. - */ - -#include "nsDragSource.h" -#include "nsITransferable.h" -#include "nsNativeDragSource.h" - - -static NS_DEFINE_IID(kIDragSourceIID, NS_IDRAGSOURCE_IID); - -NS_IMPL_ADDREF(nsDragSource) -NS_IMPL_RELEASE(nsDragSource) - -//------------------------------------------------------------------------- -// -// DragSource constructor -// -//------------------------------------------------------------------------- -nsDragSource::nsDragSource() -{ - NS_INIT_REFCNT(); - - mNativeDragSrc = (IDropSource *)new nsNativeDragSource(); - if (mNativeDragSrc) { - mNativeDragSrc->AddRef(); - } - - mTransferable = nsnull; - -} - -//------------------------------------------------------------------------- -// -// DragSource destructor -// -//------------------------------------------------------------------------- -nsDragSource::~nsDragSource() -{ - if (mNativeDragSrc) { - mNativeDragSrc->Release(); - } -} - -/** - * @param aIID The name of the class implementing the method - * @param _classiiddef The name of the #define symbol that defines the IID - * for the class (e.g. NS_ISUPPORTS_IID) - * -*/ -nsresult nsDragSource::QueryInterface(const nsIID& aIID, void** aInstancePtr) -{ - - if (NULL == aInstancePtr) { - return NS_ERROR_NULL_POINTER; - } - - nsresult rv = NS_NOINTERFACE; - - if (aIID.Equals(kIDragSourceIID)) { - *aInstancePtr = (void*) ((nsIDragSource*)this); - NS_ADDREF_THIS(); - return NS_OK; - } - - return rv; -} - - -NS_IMETHODIMP nsDragSource::GetTransferable(nsITransferable ** aTransferable) -{ - if (nsnull != mTransferable) { - *aTransferable = mTransferable; - NS_ADDREF(mTransferable); - } else { - aTransferable = nsnull; - } - return NS_OK; -} - -NS_IMETHODIMP nsDragSource::SetTransferable(nsITransferable * aTransferable) -{ - NS_IF_RELEASE(mTransferable); - mTransferable = aTransferable; - NS_ADDREF(mTransferable); - return NS_OK; -} - -NS_IMETHODIMP nsDragSource:: DragStopped(nsIDraggedObject * aDraggedObj, PRInt32 anAction) -{ - return NS_OK; -} - diff --git a/widget/src/windows/nsDragSource.h b/widget/src/windows/nsDragSource.h deleted file mode 100644 index b04cdc075cc4..000000000000 --- a/widget/src/windows/nsDragSource.h +++ /dev/null @@ -1,60 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * - * The contents of this file are subject to the Netscape Public License - * Version 1.0 (the "NPL"); you may not use this file except in - * compliance with the NPL. You may obtain a copy of the NPL at - * http://www.mozilla.org/NPL/ - * - * Software distributed under the NPL is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL - * for the specific language governing rights and limitations under the - * NPL. - * - * The Initial Developer of this code under the NPL is Netscape - * Communications Corporation. Portions created by Netscape are - * Copyright (C) 1998 Netscape Communications Corporation. All Rights - * Reserved. - */ - -#ifndef nsDragSource_h__ -#define nsDragSource_h__ - -#include "nsIDragSource.h" - -//#include -//#include "OLEIDL.H" - -class nsITransferable; -struct IDropSource; - -/** - * Native Win32 DragSource wrapper - */ - -class nsDragSource : public nsIDragSource -{ - -public: - nsDragSource(); - virtual ~nsDragSource(); - - //nsISupports - NS_DECL_ISUPPORTS - - //nsIDragSource - NS_IMETHOD GetTransferable(nsITransferable ** aTransferable); - NS_IMETHOD SetTransferable(nsITransferable * aTransferable); - NS_IMETHOD DragStopped(nsIDraggedObject * aDraggedObj, PRInt32 anAction); - - - IDropSource * GetNativeDragSrc() { return mNativeDragSrc; } // XXX this needs to be moved into impl - -protected: - - nsITransferable * mTransferable; - - IDropSource * mNativeDragSrc; - -}; - -#endif // nsDragSource_h__ diff --git a/widget/src/windows/nsDragTarget.cpp b/widget/src/windows/nsDragTarget.cpp deleted file mode 100644 index efdd1ed781c2..000000000000 --- a/widget/src/windows/nsDragTarget.cpp +++ /dev/null @@ -1,90 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * - * The contents of this file are subject to the Netscape Public License - * Version 1.0 (the "NPL"); you may not use this file except in - * compliance with the NPL. You may obtain a copy of the NPL at - * http://www.mozilla.org/NPL/ - * - * Software distributed under the NPL is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL - * for the specific language governing rights and limitations under the - * NPL. - * - * The Initial Developer of this code under the NPL is Netscape - * Communications Corporation. Portions created by Netscape are - * Copyright (C) 1998 Netscape Communications Corporation. All Rights - * Reserved. - */ - -#include "nsDragTarget.h" -#include "nsIDraggedObject.h" - -static NS_DEFINE_IID(kIDragTargetIID, NS_IDRAGTARGET_IID); - -NS_IMPL_ADDREF(nsDragTarget) -NS_IMPL_RELEASE(nsDragTarget) - -//------------------------------------------------------------------------- -// -// DragTarget constructor -// -//------------------------------------------------------------------------- -nsDragTarget::nsDragTarget() -{ - NS_INIT_REFCNT(); - -} - -//------------------------------------------------------------------------- -// -// DragTarget destructor -// -//------------------------------------------------------------------------- -nsDragTarget::~nsDragTarget() -{ -} - -/** - * @param aIID The name of the class implementing the method - * @param _classiiddef The name of the #define symbol that defines the IID - * for the class (e.g. NS_ISUPPORTS_IID) - * -*/ -nsresult nsDragTarget::QueryInterface(const nsIID& aIID, void** aInstancePtr) -{ - - if (NULL == aInstancePtr) { - return NS_ERROR_NULL_POINTER; - } - - nsresult rv = NS_NOINTERFACE; - - if (aIID.Equals(kIDragTargetIID)) { - *aInstancePtr = (void*) ((nsIDragTarget*)this); - NS_ADDREF_THIS(); - return NS_OK; - } - - return rv; -} - - -NS_IMETHODIMP nsDragTarget::DragEnter(nsIDraggedObject * aDraggedObj, nsPoint * aLocation) -{ - return NS_OK; -} - -NS_IMETHODIMP nsDragTarget::DragOver(nsIDraggedObject * aDraggedObj, nsPoint * aLocation) -{ - return NS_OK; -} - -NS_IMETHODIMP nsDragTarget::DragExit(nsIDraggedObject * aDraggedObj, nsPoint * aLocation) -{ - return NS_OK; -} - -NS_IMETHODIMP nsDragTarget::DragDrop(nsIDraggedObject * aDraggedObj, PRInt32 aActions) -{ - return NS_OK; -} diff --git a/widget/src/windows/nsDragTarget.h b/widget/src/windows/nsDragTarget.h deleted file mode 100644 index e4147fc344ba..000000000000 --- a/widget/src/windows/nsDragTarget.h +++ /dev/null @@ -1,58 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * - * The contents of this file are subject to the Netscape Public License - * Version 1.0 (the "NPL"); you may not use this file except in - * compliance with the NPL. You may obtain a copy of the NPL at - * http://www.mozilla.org/NPL/ - * - * Software distributed under the NPL is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL - * for the specific language governing rights and limitations under the - * NPL. - * - * The Initial Developer of this code under the NPL is Netscape - * Communications Corporation. Portions created by Netscape are - * Copyright (C) 1998 Netscape Communications Corporation. All Rights - * Reserved. - */ - -#ifndef nsDragTarget_h__ -#define nsDragTarget_h__ - -#include "nsIDragTarget.h" -#include "nsPoint.h" - -#include -#include "OLEIDL.H" - -class nsIDraggedObject; - -/** - * Native Win32 DragTarget wrapper - */ - -class nsDragTarget : public nsIDragTarget -{ - -public: - nsDragTarget(); - virtual ~nsDragTarget(); - - //nsISupports - NS_DECL_ISUPPORTS - - //nsIDragTarget - NS_IMETHOD DragEnter(nsIDraggedObject * aDraggedObj, nsPoint * aLocation); - - NS_IMETHOD DragOver(nsIDraggedObject * aDraggedObj, nsPoint * aLocation); - NS_IMETHOD DragExit(nsIDraggedObject * aDraggedObj, nsPoint * aLocation); - NS_IMETHOD DragDrop(nsIDraggedObject * aDraggedObj, PRInt32 aActions); - - - -protected: - - -}; - -#endif // nsDragTarget_h__ diff --git a/widget/src/windows/nsDraggedObject.cpp b/widget/src/windows/nsDraggedObject.cpp deleted file mode 100644 index c9d9ba229461..000000000000 --- a/widget/src/windows/nsDraggedObject.cpp +++ /dev/null @@ -1,96 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * - * The contents of this file are subject to the Netscape Public License - * Version 1.0 (the "NPL"); you may not use this file except in - * compliance with the NPL. You may obtain a copy of the NPL at - * http://www.mozilla.org/NPL/ - * - * Software distributed under the NPL is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL - * for the specific language governing rights and limitations under the - * NPL. - * - * The Initial Developer of this code under the NPL is Netscape - * Communications Corporation. Portions created by Netscape are - * Copyright (C) 1998 Netscape Communications Corporation. All Rights - * Reserved. - */ - -#include "nsDraggedObject.h" -#include "nsIDraggedObject.h" - -static NS_DEFINE_IID(kIDraggedObjectIID, NS_IDRAGGEDOBJECT_IID); - -NS_IMPL_ADDREF(nsDraggedObject) -NS_IMPL_RELEASE(nsDraggedObject) - -//------------------------------------------------------------------------- -// -// DraggedObject constructor -// -//------------------------------------------------------------------------- -nsDraggedObject::nsDraggedObject() -{ - NS_INIT_REFCNT(); - -} - -//------------------------------------------------------------------------- -// -// DraggedObject destructor -// -//------------------------------------------------------------------------- -nsDraggedObject::~nsDraggedObject() -{ -} - -/** - * @param aIID The name of the class implementing the method - * @param _classiiddef The name of the #define symbol that defines the IID - * for the class (e.g. NS_ISUPPORTS_IID) - * -*/ -nsresult nsDraggedObject::QueryInterface(const nsIID& aIID, void** aInstancePtr) -{ - - if (NULL == aInstancePtr) { - return NS_ERROR_NULL_POINTER; - } - - nsresult rv = NS_NOINTERFACE; - - if (aIID.Equals(kIDraggedObjectIID)) { - *aInstancePtr = (void*) ((nsIDraggedObject*)this); - NS_ADDREF_THIS(); - return NS_OK; - } - - return rv; -} - - -NS_IMETHODIMP nsDraggedObject::GetDragOffset(nscoord * aX, nscoord * aY) -{ - return NS_OK; -} - -NS_IMETHODIMP nsDraggedObject::GetTransferable(nsITransferable ** aTransferable) -{ - return NS_OK; -} - -NS_IMETHODIMP nsDraggedObject::GetSource(nsIDragSource ** aDragSrc) -{ - return NS_OK; -} - -NS_IMETHODIMP nsDraggedObject::GetTarget(nsIDragTarget ** aTarget) -{ - return NS_OK; -} - -NS_IMETHODIMP nsDraggedObject::GetTargetnFrame(nsIFrame ** aFrame) -{ - return NS_OK; -} - diff --git a/widget/src/windows/nsDraggedObject.h b/widget/src/windows/nsDraggedObject.h deleted file mode 100644 index 6118b750ae94..000000000000 --- a/widget/src/windows/nsDraggedObject.h +++ /dev/null @@ -1,58 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * - * The contents of this file are subject to the Netscape Public License - * Version 1.0 (the "NPL"); you may not use this file except in - * compliance with the NPL. You may obtain a copy of the NPL at - * http://www.mozilla.org/NPL/ - * - * Software distributed under the NPL is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL - * for the specific language governing rights and limitations under the - * NPL. - * - * The Initial Developer of this code under the NPL is Netscape - * Communications Corporation. Portions created by Netscape are - * Copyright (C) 1998 Netscape Communications Corporation. All Rights - * Reserved. - */ - -#ifndef nsDraggedObject_h__ -#define nsDraggedObject_h__ - -#include "nsIDraggedObject.h" -#include "nsPoint.h" - -#include -#include "OLEIDL.H" - -class nsIDraggedObject; - -/** - * Native Win32 DraggedObject wrapper - */ - -class nsDraggedObject : public nsIDraggedObject -{ - -public: - nsDraggedObject(); - virtual ~nsDraggedObject(); - - //nsISupports - NS_DECL_ISUPPORTS - - //nsIDraggedObject - NS_IMETHOD GetDragOffset(nscoord * aX, nscoord * aY); - NS_IMETHOD GetTransferable(nsITransferable ** aTransferable); - NS_IMETHOD GetSource(nsIDragSource ** aDragSrc); - NS_IMETHOD GetTarget(nsIDragTarget ** aTarget); - NS_IMETHOD GetTargetnFrame(nsIFrame ** aFrame); - - - -protected: - - -}; - -#endif // nsDraggedObject_h__ diff --git a/widget/src/windows/nsDropTarget.cpp b/widget/src/windows/nsDropTarget.cpp deleted file mode 100644 index c9534e041e34..000000000000 --- a/widget/src/windows/nsDropTarget.cpp +++ /dev/null @@ -1,234 +0,0 @@ -//#include "stdafx.h" -//#include "olebase.h" -//#include "idropsrc.h" -#include "nsDropTarget.h" -//#include "contndoc.h" -#include "stdio.h" -#include "nsIWidget.h" - -#include "nsWindow.h" -//Don't forget to RegisterDragDrop and to -//CoLockObjectExternal. -//You must RevokeDragDrop before destroying this object -// -nsDropTarget::nsDropTarget(nsIWidget * aWindow) -{ - printf("nsDropTarget::nsDropTarget\n"); - m_refs = 0; - m_pWin = aWindow; - NS_ADDREF(aWindow); -} - -//Destructor for nsDropTarget -//Doesn't do a whole lot! -// -nsDropTarget::~nsDropTarget() -{ - printf("nsDropTarget::Drop\n"); - ; -} - -//QueryInterface for IDropTarget -//Notice that this QueryInterface does not refer to another object's QueryInterface, -//this is a totally stand-alone separate object -// -STDMETHODIMP nsDropTarget::QueryInterface(REFIID riid, LPVOID FAR* ppv) -{ - printf("nsDropTarget::QueryInterface\n"); - if (riid == IID_IUnknown) - *ppv = this; - else if (riid == IID_IDropTarget) - *ppv = this; - else{ - *ppv = NULL; - } - if (*ppv != NULL){ - ((LPUNKNOWN)(*ppv))->AddRef(); - return NOERROR; - } - -//If for some reason our constructor did not create the requested interface -//don't pass the NULL interface without telling the caller that we don't support -//the requested interface. - return ResultFromScode(E_NOINTERFACE); -} - -//A private AddRef for IDropTarget -// -STDMETHODIMP_(ULONG) nsDropTarget::AddRef(void) -{ - printf("nsDropTarget::AddRef\n"); - return ++m_refs; -} - -//A private Release for IDropTarget -// -STDMETHODIMP_(ULONG) nsDropTarget::Release(void) -{ - printf("nsDropTarget::Release\n"); - if(--m_refs == 0){ - //And now we can delete this object - delete this; - } - - return m_refs; -} - -// -//This helper function tells us what the drag/drop effect would be at -//the point pointl. Since our object accepts being a drop target anywhere -//in the window, we will ignore pointl -// -DWORD nsDropTarget::FindDragDropEffect(DWORD grfKeyState, POINTL /* pointl */) -{ - printf("nsDropTarget::FindDragDropEffect\n"); - DWORD dwRet; - - // no modifier -- DROPEFFECT_MOVE or source default - // SHIFT -- DROPEFFECT_MOVE - // CTRL -- DROPEFFECT_COPY - // CTRL-SHIFT -- DROPEFFECT_LINK - - dwRet = 0;//OleStdGetDropEffect(grfKeyState); - if (dwRet == 0) - dwRet = DROPEFFECT_COPY; - - return dwRet; -} - - -//Notification that a DropSource is over the current DropTarget -// -STDMETHODIMP nsDropTarget::DragEnter (LPDATAOBJECT pDataObj, - DWORD grfKeyState, - POINTL pointl, - LPDWORD pdwEffect) -{ - printf("nsDropTarget::DragEnter\n"); - *pdwEffect = FindDragDropEffect(grfKeyState, pointl); - return NOERROR; -} - -//Provides user feedback when a DropSource is over a DropTarget -// -STDMETHODIMP nsDropTarget::DragOver (DWORD grfKeyState, - POINTL pointl, - LPDWORD pdwEffect) -{ - printf("nsDropTarget::DragOver\n"); - *pdwEffect = FindDragDropEffect(grfKeyState, pointl); - return NOERROR; -} - - -//The DropSource is leaving our target window -//so its cleanup time!!! -// -STDMETHODIMP nsDropTarget::DragLeave (void) -{ - printf("nsDropTarget::DragLeave\n"); - return NOERROR; -} - -//Drops the DropSource -// -STDMETHODIMP nsDropTarget::Drop (LPDATAOBJECT pIDataObject, - DWORD grfKeyState, - POINTL pointl, - LPDWORD pdwEffect) -{ - printf("nsDropTarget::Drop\n"); - printf("pIDataObject 0x%x\n", pIDataObject); - pIDataObject->AddRef(); - if (nsnull != m_pWin) { - nsEventStatus status; - nsDragDropEvent event; - ((nsWindow *)m_pWin)->InitEvent(event, NS_DRAGDROP_EVENT); - event.mType = nsDragDropEventStatus_eDrop; - event.mIsFileURL = PR_FALSE; - event.mURL = nsnull; - m_pWin->DispatchEvent(&event, status); - } - - //pdwEffect = FindDragDropEffect(grfKeyState, pointl); - - - if (pIDataObject != NULL) { - IDataObject * presistStorage; - //printf("QueryInterface for persist\n"); - pIDataObject->QueryInterface(IID_IDataObject,(LPVOID *)&presistStorage); - //printf("Done QueryInterface for persist\n"); - if (presistStorage != NULL) { - printf("$$$$$$$$$$$$$$$ Got it!\n"); - FORMATETC pFE; - presistStorage->QueryGetData(&pFE); - - pFE.tymed = TYMED_FILE; - - STGMEDIUM pSTM; - HRESULT st = presistStorage->GetDataHere(&pFE, &pSTM); - printf("st 0x%X\n", st); - if (NOERROR != st) { - return FALSE; - } -//TYMED_STORAGE, TYMED_STREAM, TYMED_HGLOBAL, or TYMED_FILE - //printf("%s\n", pSTM.lpszFileName); - { - - //HRESULT hr = pIDataObject->GetData(&pFE, &pSTM); - //printf("hr 0x%X\n", hr); - //if (NOERROR != hr) { - // return FALSE; - //} - - const CLIPFORMAT format = pFE.cfFormat; - switch(format) { - case CF_BITMAP: - //hr = SetBitmap(*pFE, stm); - break; - case CF_DIB: - //hr = SetDib(*pFE, stm); - break; - case CF_TEXT: - //hr = SetText(*pFE, stm); - break; - case CF_METAFILEPICT: - //hr = SetMetafilePict(*pFE, stm); - break; - default: - //if (format == GetRcfFormat()) { - // hr = SetRcf(*pFE, stm); - //} - break; - } - - //return (SUCCEEDED(hr)); - - } - - - } else { - printf("^^^^^^^^^^^^^^^^^ Didn't!\n"); - } - } - - -/* if (m_pContainDoc->m_pOleSiteObject) - delete m_pContainDoc->m_pOleSiteObject; - m_pContainDoc->m_pOleSiteObject = new COleSiteObject(m_pContainDoc); - FORMATETC fmtetc; - fmtetc.cfFormat = NULL; - fmtetc.ptd = NULL; - fmtetc.lindex = -1; - fmtetc.dwAspect = DVASPECT_CONTENT; - fmtetc.tymed = TYMED_NULL; - m_pContainDoc->m_pOleSiteObject->AddSiteFromData(m_pContainDoc, - pIDataObject, - &fmtetc); -*/ - pIDataObject->Release(); - - DragLeave(); - - return NOERROR; -} diff --git a/widget/src/windows/nsDropTarget.h b/widget/src/windows/nsDropTarget.h deleted file mode 100644 index c98b164d5bdb..000000000000 --- a/widget/src/windows/nsDropTarget.h +++ /dev/null @@ -1,39 +0,0 @@ -//IDropTarget.h - -#ifndef __IDROPTARGET_H__ -#define __IDROPTARGET_H__ - -#include "OLEIDL.H" - -//forward declaration -//CLASS CContainDoc; - -class nsIWidget; - -class nsDropTarget : public IDropTarget -{ -public: - - STDMETHODIMP QueryInterface (REFIID riid, LPVOID FAR* ppv); - STDMETHODIMP_(ULONG) AddRef (void); - STDMETHODIMP_(ULONG) Release (void); - - STDMETHODIMP DragEnter (LPDATAOBJECT pDataObj, DWORD grfKeyState,POINTL pt, LPDWORD pdwEffect); - STDMETHODIMP DragOver (DWORD grfKeyState, POINTL pt, LPDWORD pdwEffect); - STDMETHODIMP DragLeave (); - STDMETHODIMP Drop (LPDATAOBJECT pDataObj, DWORD grfKeyState, POINTL pt,LPDWORD pdwEffect); - - nsDropTarget(nsIWidget * aWindow); - ~nsDropTarget(); - -protected: - USHORT nsDropTarget::GetFormats(DWORD direction, USHORT maxFormats, FORMATETC* formats); - -private: - nsIWidget * m_pWin; - long m_refs; - - DWORD FindDragDropEffect(DWORD grfKeyState, POINTL pointl); -}; - -#endif diff --git a/widget/src/windows/nsNativeDragSource.cpp b/widget/src/windows/nsNativeDragSource.cpp index 28930b31daa5..93c06207af5c 100644 --- a/widget/src/windows/nsNativeDragSource.cpp +++ b/widget/src/windows/nsNativeDragSource.cpp @@ -20,7 +20,6 @@ #include "nsNativeDragSource.h" #include -#include "nsIDragSource.h" /* * class nsNativeDragSource @@ -70,18 +69,18 @@ STDMETHODIMP_(ULONG) nsNativeDragSource::Release(void) STDMETHODIMP nsNativeDragSource::QueryContinueDrag(BOOL fEsc, DWORD grfKeyState) { - printf("QueryContinueDrag\n"); + //printf("QueryContinueDrag\n"); if (fEsc) { //printf("QueryContinueDrag: fEsc\n"); return ResultFromScode(DRAGDROP_S_CANCEL); } if (!(grfKeyState & MK_LBUTTON)) { - printf("QueryContinueDrag: grfKeyState & MK_LBUTTON\n"); + //printf("QueryContinueDrag: grfKeyState & MK_LBUTTON\n"); return ResultFromScode(DRAGDROP_S_DROP); } - printf("QueryContinueDrag: NOERROR\n"); + //printf("QueryContinueDrag: NOERROR\n"); return NOERROR; } diff --git a/widget/src/windows/nsNativeDragTarget.cpp b/widget/src/windows/nsNativeDragTarget.cpp index c99101ac02dc..63f20e37aa0b 100644 --- a/widget/src/windows/nsNativeDragTarget.cpp +++ b/widget/src/windows/nsNativeDragTarget.cpp @@ -22,46 +22,56 @@ #include "nsIDragService.h" #include "nsWidgetsCID.h" #include "nsNativeDragTarget.h" +#include "nsDragService.h" #include "nsIServiceManager.h" #include "nsIWidget.h" #include "nsWindow.h" +#define DRAG_DEBUG 0 + /* Define Class IDs */ -static NS_DEFINE_IID(kDragServiceCID, NS_DRAGSERVICE_CID); +static NS_DEFINE_IID(kCDragServiceCID, NS_DRAGSERVICE_CID); /* Define Interface IDs */ static NS_DEFINE_IID(kIDragServiceIID, NS_IDRAGSERVICE_IID); +// This is cached for Leave notification +static POINTL gDragLastPoint; /* * class nsNativeDragTarget */ -// construction, destruction - +//----------------------------------------------------- +// construction +//----------------------------------------------------- nsNativeDragTarget::nsNativeDragTarget(nsIWidget * aWnd) { m_cRef = 0; mWindow = aWnd; - NS_ADDREF(mWindow); + mHWnd = (HWND)mWindow->GetNativeData(NS_NATIVE_WINDOW); + /* * Get the DragService */ - nsresult rv = nsServiceManager::GetService(kDragServiceCID, + nsresult rv = nsServiceManager::GetService(kCDragServiceCID, kIDragServiceIID, (nsISupports**)&mDragService); } +//----------------------------------------------------- +// destruction +//----------------------------------------------------- nsNativeDragTarget::~nsNativeDragTarget() { - NS_IF_RELEASE(mWindow); } +//----------------------------------------------------- // IUnknown methods - see iunknown.h for documentation - +//----------------------------------------------------- STDMETHODIMP nsNativeDragTarget::QueryInterface(REFIID riid, void** ppv) { *ppv=NULL; @@ -78,11 +88,13 @@ STDMETHODIMP nsNativeDragTarget::QueryInterface(REFIID riid, void** ppv) } +//----------------------------------------------------- STDMETHODIMP_(ULONG) nsNativeDragTarget::AddRef(void) { return ++m_cRef; } +//----------------------------------------------------- STDMETHODIMP_(ULONG) nsNativeDragTarget::Release(void) { if (0 != --m_cRef) @@ -92,22 +104,54 @@ STDMETHODIMP_(ULONG) nsNativeDragTarget::Release(void) return 0; } -void nsNativeDragTarget::DispatchDragDropEvent(PRUint32 aEventType) +//----------------------------------------------------- +void nsNativeDragTarget::DispatchDragDropEvent(PRUint32 aEventType, + POINTL aPT) { nsEventStatus status; nsGUIEvent event; ((nsWindow *)mWindow)->InitEvent(event, aEventType); + + //DWORD pos = ::GetMessagePos(); + POINT cpos; + + cpos.x = aPT.x; + cpos.y = aPT.y; + + //cpos.x = LOWORD(pos); + //cpos.y = HIWORD(pos); + + if (mHWnd != NULL) { + ::ScreenToClient(mHWnd, &cpos); + event.point.x = cpos.x; + event.point.y = cpos.y; + } else { + event.point.x = 0; + event.point.y = 0; + } + + //event.point.x = aPT.x; + //event.point.y = aPT.y; mWindow->DispatchEvent(&event, status); } +//----------------------------------------------------- // IDropTarget methods - -STDMETHODIMP nsNativeDragTarget::DragEnter(LPDATAOBJECT pIDataSource, DWORD grfKeyState, - POINTL pt, DWORD* pdwEffect) +//----------------------------------------------------- +STDMETHODIMP nsNativeDragTarget::DragEnter(LPDATAOBJECT pIDataSource, + DWORD grfKeyState, + POINTL pt, + DWORD* pdwEffect) { - printf("DragEnter\n"); + if (DRAG_DEBUG) printf("DragEnter\n"); if (mDragService) { - DispatchDragDropEvent(NS_DRAGDROP_ENTER); + DispatchDragDropEvent(NS_DRAGDROP_ENTER, pt); + PRBool canDrop; + mDragService->GetCanDrop(&canDrop); + if (!canDrop) { + *pdwEffect = DROPEFFECT_NONE; + } + mDragService->SetCanDrop(PR_FALSE); return NOERROR; } else { return ResultFromScode(E_FAIL); @@ -115,22 +159,33 @@ STDMETHODIMP nsNativeDragTarget::DragEnter(LPDATAOBJECT pIDataSource, DWORD grfK } -STDMETHODIMP nsNativeDragTarget::DragOver(DWORD grfKeyState, POINTL pt, LPDWORD pdwEffect) +//----------------------------------------------------- +STDMETHODIMP nsNativeDragTarget::DragOver(DWORD grfKeyState, + POINTL pt, + LPDWORD pdwEffect) { - printf("DragOver\n"); + if (DRAG_DEBUG) printf("DragOver\n"); if (mDragService) { - DispatchDragDropEvent(NS_DRAGDROP_OVER); + DispatchDragDropEvent(NS_DRAGDROP_OVER, pt); + gDragLastPoint = pt; + PRBool canDrop; + mDragService->GetCanDrop(&canDrop); + printf("Can Drop %d\n", canDrop); + if (!canDrop) { + *pdwEffect = DROPEFFECT_NONE; + } + mDragService->SetCanDrop(PR_FALSE); return NOERROR; } else { return ResultFromScode(E_FAIL); } } - +//----------------------------------------------------- STDMETHODIMP nsNativeDragTarget::DragLeave() { - printf("DragLeave\n"); + if (DRAG_DEBUG) printf("DragLeave\n"); if (mDragService) { - DispatchDragDropEvent(NS_DRAGDROP_EXIT); + DispatchDragDropEvent(NS_DRAGDROP_EXIT, gDragLastPoint); return NOERROR; } else { return ResultFromScode(E_FAIL); @@ -138,18 +193,30 @@ STDMETHODIMP nsNativeDragTarget::DragLeave() { } -STDMETHODIMP nsNativeDragTarget::Drop(LPDATAOBJECT pIDataSource, DWORD grfKeyState, - POINTL pt, LPDWORD pdwEffect) +//----------------------------------------------------- +STDMETHODIMP nsNativeDragTarget::Drop(LPDATAOBJECT pIDataSource, + DWORD grfKeyState, + POINTL aPT, + LPDWORD pdwEffect) { - printf("Drop\n"); + if (DRAG_DEBUG) printf("Drop\n"); + if (mDragService) { - // Clear the native clipboard - ::OleFlushClipboard(); + //::OleFlushClipboard(); - ::OleSetClipboard(pIDataSource); + //::OleSetClipboard(pIDataSource); + nsDragService * dragService = (nsDragService *)mDragService; + dragService->SetIDataObject(pIDataSource); - DispatchDragDropEvent(NS_DRAGDROP_DROP); + + DispatchDragDropEvent(NS_DRAGDROP_DROP, aPT); + PRBool canDrop; + mDragService->GetCanDrop(&canDrop); + if (!canDrop) { + *pdwEffect = DROPEFFECT_NONE; + } + mDragService->SetCanDrop(PR_FALSE); return NOERROR; } else { return ResultFromScode(E_FAIL); diff --git a/widget/src/windows/nsNativeDragTarget.h b/widget/src/windows/nsNativeDragTarget.h index 15a9579c044f..07b41fb50317 100644 --- a/widget/src/windows/nsNativeDragTarget.h +++ b/widget/src/windows/nsNativeDragTarget.h @@ -69,11 +69,12 @@ class nsNativeDragTarget : public IDropTarget POINTL point, DWORD* pEffect); protected: - void DispatchDragDropEvent(PRUint32 aType); + void DispatchDragDropEvent(PRUint32 aType, POINTL pt); ULONG m_cRef; // reference count nsIDragService* mDragService; // adapter nsIWidget * mWindow; + HWND mHWnd; }; #endif // _nsNativeDragTarget_h_ diff --git a/widget/src/xpwidgets/makefile.win b/widget/src/xpwidgets/makefile.win index 120c68e778c9..47c8d24e1087 100644 --- a/widget/src/xpwidgets/makefile.win +++ b/widget/src/xpwidgets/makefile.win @@ -22,7 +22,9 @@ LIBRARY_NAME = raptorbasewidget_s REQUIRES=xpcom gfxwin raptor dom js network netlib DEFINES =-D_IMPL_NS_WIDGET -CPPSRCS =nsBaseWidget.cpp \ +CPPSRCS = \ + nsBaseDragService.cpp \ + nsBaseWidget.cpp \ nsMenuButton.cpp \ nsImageButton.cpp \ nsBaseClipboard.cpp \ @@ -33,7 +35,9 @@ CPPSRCS =nsBaseWidget.cpp \ MODULE=raptor -OBJS=.\$(OBJDIR)\nsBaseWidget.obj \ +OBJS= \ + .\$(OBJDIR)\nsBaseDragService.obj \ + .\$(OBJDIR)\nsBaseWidget.obj \ .\$(OBJDIR)\nsMenuButton.obj \ .\$(OBJDIR)\nsImageButton.obj \ .\$(OBJDIR)\nsBaseClipboard.obj \ diff --git a/widget/src/xpwidgets/nsBaseClipboard.cpp b/widget/src/xpwidgets/nsBaseClipboard.cpp index 6275fce319c6..bac65e7105c2 100644 --- a/widget/src/xpwidgets/nsBaseClipboard.cpp +++ b/widget/src/xpwidgets/nsBaseClipboard.cpp @@ -123,12 +123,12 @@ NS_IMETHODIMP nsBaseClipboard::SetData(nsITransferable * aTransferable, nsIClipb NS_IMETHODIMP nsBaseClipboard::GetData(nsITransferable * aTransferable) { if (nsnull != aTransferable) { - GetNativeClipboardData(aTransferable); + return GetNativeClipboardData(aTransferable); } else { printf(" nsBaseClipboard::GetData(), aTransferable is NULL.\n"); } - return NS_OK; + return NS_ERROR_FAILURE; } diff --git a/widget/src/xpwidgets/nsTransferable.cpp b/widget/src/xpwidgets/nsTransferable.cpp index 93a1a9bdeba9..66b2ae2f3b29 100644 --- a/widget/src/xpwidgets/nsTransferable.cpp +++ b/widget/src/xpwidgets/nsTransferable.cpp @@ -25,11 +25,12 @@ #include "nsVoidArray.h" #include "nsIComponentManager.h" #include "nsCOMPtr.h" + - -static NS_DEFINE_IID(kITransferableIID, NS_ITRANSFERABLE_IID); -static NS_DEFINE_IID(kIDataFlavorIID, NS_IDATAFLAVOR_IID); -static NS_DEFINE_IID(kCDataFlavorCID, NS_DATAFLAVOR_CID); +static NS_DEFINE_IID(kITransferableIID, NS_ITRANSFERABLE_IID); +static NS_DEFINE_IID(kIGenericTransferableIID, NS_IGENERICTRANSFERABLE_IID); +static NS_DEFINE_IID(kIDataFlavorIID, NS_IDATAFLAVOR_IID); +static NS_DEFINE_IID(kCDataFlavorCID, NS_DATAFLAVOR_CID); NS_IMPL_ADDREF(nsTransferable) @@ -37,7 +38,7 @@ NS_IMPL_RELEASE(nsTransferable) typedef struct { nsIDataFlavor * mFlavor; - void * mData; + char * mData; PRUint32 mDataLen; } DataStruct; @@ -91,6 +92,12 @@ nsresult nsTransferable::QueryInterface(const nsIID& aIID, void** aInstancePtr) return NS_OK; } + if (aIID.Equals(kIGenericTransferableIID)) { + *aInstancePtr = (void*) ((nsIGenericTransferable*)this); + NS_ADDREF_THIS(); + return NS_OK; + } + return rv; } @@ -190,7 +197,7 @@ NS_IMETHODIMP nsTransferable::SetTransferData(nsIDataFlavor * aDataFlavor, void if (nsnull != data->mData) { delete[] data->mData; } - data->mData = aData; + data->mData = (char *)aData; data->mDataLen = aDataLen; return NS_OK; } diff --git a/widget/src/xpwidgets/nsTransferable.h b/widget/src/xpwidgets/nsTransferable.h index 02d0d3bfc720..6021931046c2 100644 --- a/widget/src/xpwidgets/nsTransferable.h +++ b/widget/src/xpwidgets/nsTransferable.h @@ -21,6 +21,7 @@ #include "nsIFormatConverter.h" #include "nsITransferable.h" +#include "nsIGenericTransferable.h" #include "nsCOMPtr.h" @@ -34,7 +35,7 @@ class nsVoidArray; * XP Transferable wrapper */ -class nsTransferable : public nsITransferable +class nsTransferable : public nsITransferable, public nsIGenericTransferable { public: @@ -44,19 +45,23 @@ public: //nsISupports NS_DECL_ISUPPORTS + //nsITransferable - NS_IMETHOD FlavorsTransferableCanImport ( nsISupportsArray** outFlavorList ) ; NS_IMETHOD FlavorsTransferableCanExport ( nsISupportsArray** outFlavorList ) ; NS_IMETHOD GetTransferDataFlavors(nsISupportsArray ** aDataFlavorList); NS_IMETHOD IsDataFlavorSupported(nsIDataFlavor * aFlavor); // Transferable still owns |aData|. Do not delete it. NS_IMETHOD GetTransferData(nsIDataFlavor * aFlavor, void ** aData, PRUint32 * aDataLen); - // Transferable consumes |aData|. Do not delete it. + NS_IMETHOD_(PRBool) IsLargeDataSet(); + + //nsIGenericTransferable + NS_IMETHOD FlavorsTransferableCanImport ( nsISupportsArray** outFlavorList ) ; + + // Transferable consumes |aData|. Do not delete it. NS_IMETHOD SetTransferData(nsIDataFlavor * aFlavor, void * aData, PRUint32 aDataLen); NS_IMETHOD AddDataFlavor(nsIDataFlavor * aDataFlavor); - NS_IMETHOD_(PRBool) IsLargeDataSet(); NS_IMETHOD SetConverter(nsIFormatConverter * aConverter); NS_IMETHOD GetConverter(nsIFormatConverter ** aConverter);