diff --git a/editor/base/nsEditorEventListeners.cpp b/editor/base/nsEditorEventListeners.cpp index d4bce17cff4..9a6b7313258 100644 --- a/editor/base/nsEditorEventListeners.cpp +++ b/editor/base/nsEditorEventListeners.cpp @@ -1165,8 +1165,8 @@ nsTextEditorDragListener::DragDrop(nsIDOMEvent* aMouseEvent) if ( NS_SUCCEEDED(rv) && trans ) { // Add the text Flavor to the transferable, // because that is the only type of data we are looking for at the moment - nsString* textMime = new nsString(kTextMime); - trans->AddDataFlavor(textMime); // transferable consumes flavor type + nsAutoString textMime (kTextMime); + trans->AddDataFlavor(&textMime); //trans->AddDataFlavor(mImageDataFlavor); // Fill the transferable with data for each drag item in succession @@ -1183,7 +1183,7 @@ nsTextEditorDragListener::DragDrop(nsIDOMEvent* aMouseEvent) // Note: the transferable owns the pointer to the data char *str = 0; PRUint32 len; - trans->GetAnyTransferData(textMime, (void **)&str, &len); + trans->GetAnyTransferData(&textMime, (void **)&str, &len); // If the string was not empty then paste it in if (str) { diff --git a/editor/libeditor/text/nsEditorEventListeners.cpp b/editor/libeditor/text/nsEditorEventListeners.cpp index d4bce17cff4..9a6b7313258 100644 --- a/editor/libeditor/text/nsEditorEventListeners.cpp +++ b/editor/libeditor/text/nsEditorEventListeners.cpp @@ -1165,8 +1165,8 @@ nsTextEditorDragListener::DragDrop(nsIDOMEvent* aMouseEvent) if ( NS_SUCCEEDED(rv) && trans ) { // Add the text Flavor to the transferable, // because that is the only type of data we are looking for at the moment - nsString* textMime = new nsString(kTextMime); - trans->AddDataFlavor(textMime); // transferable consumes flavor type + nsAutoString textMime (kTextMime); + trans->AddDataFlavor(&textMime); //trans->AddDataFlavor(mImageDataFlavor); // Fill the transferable with data for each drag item in succession @@ -1183,7 +1183,7 @@ nsTextEditorDragListener::DragDrop(nsIDOMEvent* aMouseEvent) // Note: the transferable owns the pointer to the data char *str = 0; PRUint32 len; - trans->GetAnyTransferData(textMime, (void **)&str, &len); + trans->GetAnyTransferData(&textMime, (void **)&str, &len); // If the string was not empty then paste it in if (str) { diff --git a/layout/generic/nsFrame.cpp b/layout/generic/nsFrame.cpp index 41992e317bc..8d4ac72b5ee 100644 --- a/layout/generic/nsFrame.cpp +++ b/layout/generic/nsFrame.cpp @@ -824,14 +824,13 @@ nsFrame::HandleEvent(nsIPresContext& aPresContext, rv = nsComponentManager::CreateInstance(kCTransferableCID, nsnull, nsITransferable::GetIID(), getter_AddRefs(trans2)); if ( trans && trans2 ) { - nsString* flavor = new nsString("text/plain"); - trans->AddDataFlavor(flavor); // transferable consumes the flavor + nsString textPlainFlavor ( "text/plain" ); + trans->AddDataFlavor(&textPlainFlavor); nsString dragText = "Drag Text"; PRUint32 len = 9; trans->SetTransferData(flavor, dragText.ToNewCString(), len); // transferable consumes the data - nsString* flavor2 = new nsString("text/plain"); - trans2->AddDataFlavor(flavor2); // transferable consumes the flavor + trans2->AddDataFlavor(&textPlainFlavor); nsString dragText2 = "More Drag Text"; len = 14; trans2->SetTransferData(flavor2, dragText2.ToNewCString(), len); // transferable consumes the data diff --git a/layout/html/base/src/nsFrame.cpp b/layout/html/base/src/nsFrame.cpp index 41992e317bc..8d4ac72b5ee 100644 --- a/layout/html/base/src/nsFrame.cpp +++ b/layout/html/base/src/nsFrame.cpp @@ -824,14 +824,13 @@ nsFrame::HandleEvent(nsIPresContext& aPresContext, rv = nsComponentManager::CreateInstance(kCTransferableCID, nsnull, nsITransferable::GetIID(), getter_AddRefs(trans2)); if ( trans && trans2 ) { - nsString* flavor = new nsString("text/plain"); - trans->AddDataFlavor(flavor); // transferable consumes the flavor + nsString textPlainFlavor ( "text/plain" ); + trans->AddDataFlavor(&textPlainFlavor); nsString dragText = "Drag Text"; PRUint32 len = 9; trans->SetTransferData(flavor, dragText.ToNewCString(), len); // transferable consumes the data - nsString* flavor2 = new nsString("text/plain"); - trans2->AddDataFlavor(flavor2); // transferable consumes the flavor + trans2->AddDataFlavor(&textPlainFlavor); nsString dragText2 = "More Drag Text"; len = 14; trans2->SetTransferData(flavor2, dragText2.ToNewCString(), len); // transferable consumes the data diff --git a/widget/src/xpwidgets/nsTransferable.cpp b/widget/src/xpwidgets/nsTransferable.cpp index 8f6037388cc..03b7e87c91e 100644 --- a/widget/src/xpwidgets/nsTransferable.cpp +++ b/widget/src/xpwidgets/nsTransferable.cpp @@ -26,17 +26,29 @@ #include "nsCOMPtr.h" -static NS_DEFINE_IID(kITransferableIID, NS_ITRANSFERABLE_IID); - - NS_IMPL_ADDREF(nsTransferable) NS_IMPL_RELEASE(nsTransferable) -typedef struct { - nsString * mFlavor; + +struct DataStruct { + DataStruct ( const nsString & aString ) + : mFlavor(aString), mData(nsnull), mDataLen(0) { } + ~DataStruct ( ) { if ( mData ) delete [] mData; } + + void SetData ( char* aData, size_t aDataLen ) + { + if ( mData ) + delete [] mData; + mData = aData; + mDataLen = aDataLen; + } + + nsString mFlavor; char * mData; PRUint32 mDataLen; -} DataStruct; + +}; + //------------------------------------------------------------------------- // @@ -59,13 +71,8 @@ nsTransferable::~nsTransferable() PRInt32 i; for (i=0;iCount();i++) { DataStruct * data = (DataStruct *)mDataArray->ElementAt(i); - if (data) { - delete data->mFlavor; - if (data->mData) { - delete[] data->mData; - } + if (data) delete data; - } } delete mDataArray; } @@ -85,7 +92,7 @@ nsresult nsTransferable::QueryInterface(const nsIID& aIID, void** aInstancePtr) nsresult rv = NS_NOINTERFACE; - if (aIID.Equals(kITransferableIID)) { + if (aIID.Equals(nsITransferable::GetIID())) { *aInstancePtr = (void*) ((nsITransferable*)this); NS_ADDREF_THIS(); return NS_OK; @@ -110,7 +117,7 @@ NS_IMETHODIMP nsTransferable::GetTransferDataFlavors(nsVoidArray ** aDataFlavorL PRInt32 i; for (i=0;iCount();i++) { DataStruct * data = (DataStruct *)mDataArray->ElementAt(i); - array->AppendElement(data->mFlavor); + array->AppendElement(&data->mFlavor); } *aDataFlavorList = array; } else { @@ -132,7 +139,7 @@ NS_IMETHODIMP nsTransferable::GetTransferData(nsString * aDataFlavor, void ** aD PRInt32 i; for (i=0;iCount();i++) { DataStruct * data = (DataStruct *)mDataArray->ElementAt(i); - if (aDataFlavor->Equals(*data->mFlavor)) { + if (aDataFlavor->Equals(data->mFlavor)) { *aData = data->mData; *aDataLen = data->mDataLen; if (nsnull != data->mData && data->mDataLen > 0) { @@ -144,8 +151,8 @@ NS_IMETHODIMP nsTransferable::GetTransferData(nsString * aDataFlavor, void ** aD if ( mFormatConv ) { for (i=0;iCount();i++) { DataStruct * data = (DataStruct *)mDataArray->ElementAt(i); - if (NS_OK == mFormatConv->CanConvert(data->mFlavor, aDataFlavor)) { - mFormatConv->Convert(data->mFlavor, data->mData, data->mDataLen, aDataFlavor, aData, aDataLen); + if (NS_OK == mFormatConv->CanConvert(&data->mFlavor, aDataFlavor)) { + mFormatConv->Convert(&data->mFlavor, data->mData, data->mDataLen, aDataFlavor, aData, aDataLen); return NS_OK; } } @@ -167,7 +174,7 @@ NS_IMETHODIMP nsTransferable::GetAnyTransferData(nsString * aDataFlavor, void ** for (i=0;iCount();i++) { DataStruct * data = (DataStruct *)mDataArray->ElementAt(i); if (nsnull != data->mData && data->mDataLen > 0) { - *aDataFlavor = *data->mFlavor; + *aDataFlavor = data->mFlavor; *aData = data->mData; *aDataLen = data->mDataLen; return NS_OK; @@ -190,12 +197,8 @@ NS_IMETHODIMP nsTransferable::SetTransferData(nsString * aDataFlavor, void * aDa PRInt32 i; for (i=0;iCount();i++) { DataStruct * data = (DataStruct *)mDataArray->ElementAt(i); - if (aDataFlavor->Equals(*data->mFlavor)) { - if (nsnull != data->mData) { - delete[] data->mData; - } - data->mData = (char *)aData; - data->mDataLen = aDataLen; + if (aDataFlavor->Equals(data->mFlavor)) { + data->SetData ( NS_STATIC_CAST(char*,aData), aDataLen ); return NS_OK; } } @@ -217,21 +220,18 @@ NS_IMETHODIMP nsTransferable::AddDataFlavor(nsString * aDataFlavor) PRInt32 i; for (i=0;iCount();i++) { DataStruct * data = (DataStruct *)mDataArray->ElementAt(i); - if (aDataFlavor->Equals(*data->mFlavor)) { + if (aDataFlavor->Equals(data->mFlavor)) { return NS_ERROR_FAILURE; } } // Create a new "slot" for the data - DataStruct * data = new DataStruct; - data->mFlavor = new nsString(*aDataFlavor); - data->mData = nsnull; - data->mDataLen = 0; - + DataStruct * data = new DataStruct ( *aDataFlavor ) ; mDataArray->AppendElement((void *)data); return NS_OK; } + /** * * @@ -246,12 +246,9 @@ NS_IMETHODIMP nsTransferable::RemoveDataFlavor(nsString * aDataFlavor) PRInt32 i; for (i=0;iCount();i++) { DataStruct * data = (DataStruct *)mDataArray->ElementAt(i); - if (aDataFlavor->Equals(*data->mFlavor)) { - delete data->mFlavor; - if (data->mData) { - delete[] data->mData; - } + if (aDataFlavor->Equals(data->mFlavor)) { mDataArray->RemoveElementAt(i); + delete data; return NS_OK; } }