зеркало из https://github.com/mozilla/gecko-dev.git
Restore my previous changes with mach-o build fix,
bug 108029, r=pinkerton, sr=sfraser, a=asa.
This commit is contained in:
Родитель
707a6daf54
Коммит
6bfea72bc6
|
@ -86,6 +86,7 @@ CPPSRCS = nsAppShell.cpp \
|
||||||
nsWidgetFactory.cpp \
|
nsWidgetFactory.cpp \
|
||||||
nsWidgetSupport.cpp \
|
nsWidgetSupport.cpp \
|
||||||
nsWindow.cpp \
|
nsWindow.cpp \
|
||||||
|
nsMacNativeUnicodeConverter.cpp \
|
||||||
$(GFX_LCPPSRCS) \
|
$(GFX_LCPPSRCS) \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
|
|
|
@ -60,9 +60,13 @@
|
||||||
#include "nsPrimitiveHelpers.h"
|
#include "nsPrimitiveHelpers.h"
|
||||||
#include "nsIImageMac.h"
|
#include "nsIImageMac.h"
|
||||||
#include "nsMemory.h"
|
#include "nsMemory.h"
|
||||||
|
#include "nsMacNativeUnicodeConverter.h"
|
||||||
|
#include "nsICharsetConverterManager.h"
|
||||||
#include "nsCRT.h"
|
#include "nsCRT.h"
|
||||||
|
|
||||||
#include <Scrap.h>
|
#include <Scrap.h>
|
||||||
|
#include <Script.h>
|
||||||
|
#include <TextEdit.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -152,8 +156,22 @@ nsClipboard :: SetNativeClipboardData ( PRInt32 aWhichClipboard )
|
||||||
char* plainTextData = nsnull;
|
char* plainTextData = nsnull;
|
||||||
PRUnichar* castedUnicode = NS_REINTERPRET_CAST(PRUnichar*, data);
|
PRUnichar* castedUnicode = NS_REINTERPRET_CAST(PRUnichar*, data);
|
||||||
PRInt32 plainTextLen = 0;
|
PRInt32 plainTextLen = 0;
|
||||||
nsPrimitiveHelpers::ConvertUnicodeToPlatformPlainText ( castedUnicode, dataSize / 2, &plainTextData, &plainTextLen );
|
errCode = nsPrimitiveHelpers::ConvertUnicodeToPlatformPlainText ( castedUnicode, dataSize / 2, &plainTextData, &plainTextLen );
|
||||||
if ( plainTextData ) {
|
|
||||||
|
// if characters are not mapped from Unicode then try native API to convert to
|
||||||
|
// available script
|
||||||
|
if (errCode == NS_ERROR_UENC_NOMAPPING) {
|
||||||
|
if (plainTextData) {
|
||||||
|
nsMemory::Free(plainTextData);
|
||||||
|
plainTextData = nsnull;
|
||||||
|
}
|
||||||
|
errCode = nsMacNativeUnicodeConverter::ConvertUnicodetoScript(castedUnicode,
|
||||||
|
dataSize / 2,
|
||||||
|
&plainTextData,
|
||||||
|
&plainTextLen);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( NS_SUCCEEDED(errCode) && plainTextData ) {
|
||||||
errCode = PutOnClipboard ( 'TEXT', plainTextData, plainTextLen );
|
errCode = PutOnClipboard ( 'TEXT', plainTextData, plainTextLen );
|
||||||
nsMemory::Free ( plainTextData );
|
nsMemory::Free ( plainTextData );
|
||||||
}
|
}
|
||||||
|
@ -289,6 +307,39 @@ nsClipboard :: GetNativeClipboardData ( nsITransferable * aTransferable, PRInt32
|
||||||
// if we are looking for text/unicode and we fail to find it on the clipboard first,
|
// if we are looking for text/unicode and we fail to find it on the clipboard first,
|
||||||
// try again with text/plain. If that is present, convert it to unicode.
|
// try again with text/plain. If that is present, convert it to unicode.
|
||||||
if ( strcmp(flavorStr, kUnicodeMime) == 0 ) {
|
if ( strcmp(flavorStr, kUnicodeMime) == 0 ) {
|
||||||
|
|
||||||
|
// if 'styl' is available, we can get a script of the first run
|
||||||
|
// and use it for converting 'TEXT'
|
||||||
|
loadResult = GetDataOffClipboard ( 'styl', &clipboardData, &dataSize );
|
||||||
|
if (NS_SUCCEEDED(loadResult) &&
|
||||||
|
clipboardData &&
|
||||||
|
(dataSize >= (sizeof(ScrpSTElement) + 2))) {
|
||||||
|
StScrpRec *scrpRecP = (StScrpRec *) clipboardData;
|
||||||
|
ScrpSTElement *styl = scrpRecP->scrpStyleTab;
|
||||||
|
ScriptCode script = styl ? ::FontToScript(styl->scrpFont) : smCurrentScript;
|
||||||
|
|
||||||
|
// free 'styl' and get 'TEXT'
|
||||||
|
nsMemory::Free(clipboardData);
|
||||||
|
loadResult = GetDataOffClipboard ( 'TEXT', &clipboardData, &dataSize );
|
||||||
|
if ( NS_SUCCEEDED(loadResult) && clipboardData ) {
|
||||||
|
PRUnichar* convertedText = nsnull;
|
||||||
|
PRInt32 convertedTextLen = 0;
|
||||||
|
errCode = nsMacNativeUnicodeConverter::ConvertScripttoUnicode(
|
||||||
|
script,
|
||||||
|
(const char *) clipboardData,
|
||||||
|
dataSize,
|
||||||
|
&convertedText,
|
||||||
|
&convertedTextLen);
|
||||||
|
if (NS_SUCCEEDED(errCode) && convertedText) {
|
||||||
|
nsMemory::Free(clipboardData);
|
||||||
|
clipboardData = convertedText;
|
||||||
|
dataSize = convertedTextLen * sizeof(PRUnichar);
|
||||||
|
dataFound = PR_TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!dataFound) {
|
||||||
loadResult = GetDataOffClipboard ( 'TEXT', &clipboardData, &dataSize );
|
loadResult = GetDataOffClipboard ( 'TEXT', &clipboardData, &dataSize );
|
||||||
if ( NS_SUCCEEDED(loadResult) && clipboardData ) {
|
if ( NS_SUCCEEDED(loadResult) && clipboardData ) {
|
||||||
const char* castedText = NS_REINTERPRET_CAST(char*, clipboardData);
|
const char* castedText = NS_REINTERPRET_CAST(char*, clipboardData);
|
||||||
|
@ -304,6 +355,7 @@ nsClipboard :: GetNativeClipboardData ( nsITransferable * aTransferable, PRInt32
|
||||||
dataFound = PR_TRUE;
|
dataFound = PR_TRUE;
|
||||||
}
|
}
|
||||||
} // if plain text data on clipboard
|
} // if plain text data on clipboard
|
||||||
|
}
|
||||||
} // if looking for text/unicode
|
} // if looking for text/unicode
|
||||||
} // else we try one last ditch effort to find our data
|
} // else we try one last ditch effort to find our data
|
||||||
|
|
||||||
|
|
|
@ -80,6 +80,8 @@
|
||||||
#include "nsIDOMElement.h"
|
#include "nsIDOMElement.h"
|
||||||
#include "nsIImageMac.h"
|
#include "nsIImageMac.h"
|
||||||
#include "nsIImage.h"
|
#include "nsIImage.h"
|
||||||
|
#include "nsMacNativeUnicodeConverter.h"
|
||||||
|
#include "nsICharsetConverterManager.h"
|
||||||
|
|
||||||
|
|
||||||
// we need our own stuff for MacOS because of nsIDragSessionMac.
|
// we need our own stuff for MacOS because of nsIDragSessionMac.
|
||||||
|
@ -496,7 +498,39 @@ printf("looking for data in type %s, mac flavor %ld\n", NS_STATIC_CAST(const cha
|
||||||
// try again with text/plain. If that is present, convert it to unicode.
|
// try again with text/plain. If that is present, convert it to unicode.
|
||||||
if ( strcmp(flavorStr, kUnicodeMime) == 0 ) {
|
if ( strcmp(flavorStr, kUnicodeMime) == 0 ) {
|
||||||
if ( ::GetFlavorFlags(mDragRef, itemRef, 'TEXT', &unused) == noErr ) {
|
if ( ::GetFlavorFlags(mDragRef, itemRef, 'TEXT', &unused) == noErr ) {
|
||||||
nsresult loadResult = ExtractDataFromOS(mDragRef, itemRef, 'TEXT', &dataBuff, &dataSize);
|
|
||||||
|
// if 'styl' is available, we can get a script of the first run
|
||||||
|
// and use it for converting 'TEXT'
|
||||||
|
nsresult loadResult = ExtractDataFromOS(mDragRef, itemRef, 'styl', &dataBuff, &dataSize);
|
||||||
|
if (NS_SUCCEEDED(loadResult) &&
|
||||||
|
dataBuff &&
|
||||||
|
(dataSize >= (sizeof(ScrpSTElement) + 2))) {
|
||||||
|
StScrpRec *scrpRecP = (StScrpRec *) dataBuff;
|
||||||
|
ScrpSTElement *styl = scrpRecP->scrpStyleTab;
|
||||||
|
ScriptCode script = styl ? ::FontToScript(styl->scrpFont) : smCurrentScript;
|
||||||
|
|
||||||
|
// free 'styl' and get 'TEXT'
|
||||||
|
nsMemory::Free(dataBuff);
|
||||||
|
loadResult = ExtractDataFromOS(mDragRef, itemRef, 'TEXT', &dataBuff, &dataSize);
|
||||||
|
if ( NS_SUCCEEDED(loadResult) && dataBuff ) {
|
||||||
|
PRUnichar* convertedText = nsnull;
|
||||||
|
PRInt32 convertedTextLen = 0;
|
||||||
|
errCode = nsMacNativeUnicodeConverter::ConvertScripttoUnicode(script,
|
||||||
|
(const char *) dataBuff,
|
||||||
|
dataSize,
|
||||||
|
&convertedText,
|
||||||
|
&convertedTextLen);
|
||||||
|
if (NS_SUCCEEDED(errCode) && convertedText) {
|
||||||
|
nsMemory::Free(dataBuff);
|
||||||
|
dataBuff = convertedText;
|
||||||
|
dataSize = convertedTextLen * sizeof(PRUnichar);
|
||||||
|
dataFound = PR_TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!dataFound) {
|
||||||
|
loadResult = ExtractDataFromOS(mDragRef, itemRef, 'TEXT', &dataBuff, &dataSize);
|
||||||
if ( NS_SUCCEEDED(loadResult) && dataBuff ) {
|
if ( NS_SUCCEEDED(loadResult) && dataBuff ) {
|
||||||
const char* castedText = NS_REINTERPRET_CAST(char*, dataBuff);
|
const char* castedText = NS_REINTERPRET_CAST(char*, dataBuff);
|
||||||
PRUnichar* convertedText = nsnull;
|
PRUnichar* convertedText = nsnull;
|
||||||
|
@ -511,6 +545,7 @@ printf("looking for data in type %s, mac flavor %ld\n", NS_STATIC_CAST(const cha
|
||||||
dataFound = PR_TRUE;
|
dataFound = PR_TRUE;
|
||||||
}
|
}
|
||||||
} // if plain text data on clipboard
|
} // if plain text data on clipboard
|
||||||
|
}
|
||||||
} // if plain text flavor present
|
} // if plain text flavor present
|
||||||
} // if looking for text/unicode
|
} // if looking for text/unicode
|
||||||
} // else we try one last ditch effort to find our data
|
} // else we try one last ditch effort to find our data
|
||||||
|
@ -765,8 +800,22 @@ nsDragService :: GetDataForFlavor ( nsISupportsArray* inDragItems, DragReference
|
||||||
char* plainTextData = nsnull;
|
char* plainTextData = nsnull;
|
||||||
PRUnichar* castedUnicode = NS_REINTERPRET_CAST(PRUnichar*, *outData);
|
PRUnichar* castedUnicode = NS_REINTERPRET_CAST(PRUnichar*, *outData);
|
||||||
PRInt32 plainTextLen = 0;
|
PRInt32 plainTextLen = 0;
|
||||||
|
nsresult rv =
|
||||||
nsPrimitiveHelpers::ConvertUnicodeToPlatformPlainText ( castedUnicode, *outDataSize / 2, &plainTextData, &plainTextLen );
|
nsPrimitiveHelpers::ConvertUnicodeToPlatformPlainText ( castedUnicode, *outDataSize / 2, &plainTextData, &plainTextLen );
|
||||||
if ( *outData ) {
|
// if characters are not mapped from Unicode then try native API to convert to
|
||||||
|
// available script
|
||||||
|
if (rv == NS_ERROR_UENC_NOMAPPING) {
|
||||||
|
if (plainTextData) {
|
||||||
|
nsMemory::Free(plainTextData);
|
||||||
|
plainTextData = nsnull;
|
||||||
|
}
|
||||||
|
rv = nsMacNativeUnicodeConverter::ConvertUnicodetoScript(castedUnicode,
|
||||||
|
*outDataSize / sizeof(PRUnichar),
|
||||||
|
&plainTextData,
|
||||||
|
&plainTextLen);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( plainTextData && *outData ) {
|
||||||
nsMemory::Free(*outData);
|
nsMemory::Free(*outData);
|
||||||
*outData = plainTextData;
|
*outData = plainTextData;
|
||||||
*outDataSize = plainTextLen;
|
*outDataSize = plainTextLen;
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include "prtypes.h"
|
#include "prtypes.h"
|
||||||
#include "nsError.h"
|
#include "nsError.h"
|
||||||
#include "nscore.h"
|
#include "nscore.h"
|
||||||
|
#include <MacTypes.h>
|
||||||
|
|
||||||
class nsISupports;
|
class nsISupports;
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче