зеркало из https://github.com/mozilla/pjs.git
Changes for the photon platform - it should not affect ( building/runtime ) other platforms.
This commit is contained in:
Родитель
729718e938
Коммит
2051637dd0
|
@ -27,10 +27,6 @@ include $(DEPTH)/config/autoconf.mk
|
||||||
|
|
||||||
DIRS=webBrowser build chrome
|
DIRS=webBrowser build chrome
|
||||||
|
|
||||||
ifdef MOZ_ENABLE_PHOTON
|
|
||||||
DIRS += photon
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(OS_ARCH),WINNT)
|
ifeq ($(OS_ARCH),WINNT)
|
||||||
ifndef MOZ_NO_ACTIVEX_SUPPORT
|
ifndef MOZ_NO_ACTIVEX_SUPPORT
|
||||||
DIRS += activex/src
|
DIRS += activex/src
|
||||||
|
|
|
@ -25,7 +25,7 @@ VPATH = @srcdir@
|
||||||
|
|
||||||
include $(DEPTH)/config/autoconf.mk
|
include $(DEPTH)/config/autoconf.mk
|
||||||
|
|
||||||
DIRS=src webserver
|
DIRS=src mozserver
|
||||||
|
|
||||||
ifdef ENABLE_TESTS
|
ifdef ENABLE_TESTS
|
||||||
DIRS += tests
|
DIRS += tests
|
||||||
|
|
|
@ -348,7 +348,7 @@ EmbedPrivate::LoadCurrentURI(void)
|
||||||
if (mURI.Length())
|
if (mURI.Length())
|
||||||
mNavigation->LoadURI(mURI.get(), // URI string
|
mNavigation->LoadURI(mURI.get(), // URI string
|
||||||
nsIWebNavigation::LOAD_FLAGS_NONE, // Load flags
|
nsIWebNavigation::LOAD_FLAGS_NONE, // Load flags
|
||||||
nsnull, // Referring URI
|
nsnull, // Refering URI
|
||||||
nsnull, // Post data
|
nsnull, // Post data
|
||||||
nsnull); // extra headers
|
nsnull); // extra headers
|
||||||
}
|
}
|
||||||
|
@ -627,7 +627,7 @@ EmbedPrivate::SaveURI(char *aURI, char *fname)
|
||||||
if (mWindow && mFixup)
|
if (mWindow && mFixup)
|
||||||
{
|
{
|
||||||
nsIURI* uri;
|
nsIURI* uri;
|
||||||
mFixup->CreateFixupURI( NS_LITERAL_STRING(aURI), 0, &(uri));
|
mFixup->CreateFixupURI( NS_LITERAL_CSTRING(aURI), 0, &(uri));
|
||||||
return (mWindow->SaveURI(uri, fname));
|
return (mWindow->SaveURI(uri, fname));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -544,8 +544,11 @@ EmbedWindow::OnHideTooltip(void)
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// nsIDNSListener
|
// nsIDNSListener
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
|
||||||
/* void OnStartLookup (in nsISupports ctxt, in string hostname); */
|
/* void OnStartLookup (in nsISupports ctxt, in string hostname); */
|
||||||
NS_IMETHODIMP EmbedWindow::OnStartLookup(nsISupports *ctxt, const char *hostname)
|
NS_IMETHODIMP EmbedWindow::OnStartLookup(nsISupports *ctxt, const char *hostname)
|
||||||
{
|
{
|
||||||
|
@ -586,9 +589,10 @@ NS_IMETHODIMP EmbedWindow::OnFound(nsISupports *ctxt, const char *hostname, nsHo
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* void OnStopLookup (in nsISupports ctxt, in string hostname, in nsresult status); */
|
/* void OnStopLookup (in nsISupports ctxt, in string hostname, in nsresult status); */
|
||||||
NS_IMETHODIMP EmbedWindow::OnStopLookup(nsISupports *ctxt, const char *hostname, nsresult status)
|
NS_IMETHODIMP EmbedWindow::OnLookupComplete(nsIDNSRequest *aRequest, nsIDNSRecord *aRecord, nsresult aStatus)
|
||||||
{
|
{
|
||||||
return NS_ERROR_NOT_IMPLEMENTED;
|
return NS_ERROR_NOT_IMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
|
|
@ -114,14 +114,20 @@ ifdef BUILD_STATIC_LIBS
|
||||||
# This is so sick! We'll work backwards from the embedding manifest to
|
# This is so sick! We'll work backwards from the embedding manifest to
|
||||||
# produce the set of components that we need to link in to a
|
# produce the set of components that we need to link in to a
|
||||||
# ``minimal'' embedding harness.
|
# ``minimal'' embedding harness.
|
||||||
|
ifdef MINIMO
|
||||||
|
EMBED_MANIFEST=$(topsrcdir)/embedding/config/minimo-unix
|
||||||
|
else
|
||||||
EMBED_MANIFEST=$(topsrcdir)/embedding/config/basebrowser-qnx
|
EMBED_MANIFEST=$(topsrcdir)/embedding/config/basebrowser-qnx
|
||||||
|
endif
|
||||||
|
|
||||||
ifdef MOZ_FAT_EMBED
|
ifdef MOZ_FAT_EMBED
|
||||||
EMBED_LINK_COMPS=$(FINAL_LINK_COMPS)
|
EMBED_LINK_COMPS=$(FINAL_LINK_COMPS)
|
||||||
EMBED_LINK_COMP_NAMES=$(FINAL_LINK_COMP_NAMES)
|
EMBED_LINK_COMP_NAMES=$(FINAL_LINK_COMP_NAMES)
|
||||||
|
EMBED_LINK_COMP_MODULES = $(FINAL_LINK_COMP_NAMES)
|
||||||
else
|
else
|
||||||
EMBED_LINK_COMPS=embed-link-comps
|
EMBED_LINK_COMPS=embed-link-comps
|
||||||
EMBED_LINK_COMP_NAMES=embed-link-comp-names
|
EMBED_LINK_COMP_NAMES=embed-link-comp-names
|
||||||
|
EMBED_LINK_COMP_MODULES = embed-link-comp-modules
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Create a map that we can use to go from library name to component
|
# Create a map that we can use to go from library name to component
|
||||||
|
@ -149,6 +155,7 @@ embed-link-comps: $(EMBED_MANIFEST) components
|
||||||
sed -e 's.^components/lib..' -e 's/\.so//' | \
|
sed -e 's.^components/lib..' -e 's/\.so//' | \
|
||||||
sort | \
|
sort | \
|
||||||
join -o 1.1 - components > $@
|
join -o 1.1 - components > $@
|
||||||
|
sort -u -o $@ $@
|
||||||
|
|
||||||
# Compute the symbols we'll need for the ``minimal embedding client''
|
# Compute the symbols we'll need for the ``minimal embedding client''
|
||||||
# by joining the compoent list with the sorted list of embedding
|
# by joining the compoent list with the sorted list of embedding
|
||||||
|
@ -156,13 +163,26 @@ embed-link-comps: $(EMBED_MANIFEST) components
|
||||||
embed-link-comp-names: embed-link-comps components
|
embed-link-comp-names: embed-link-comps components
|
||||||
sort embed-link-comps | join -o 1.1 - components > $@
|
sort embed-link-comps | join -o 1.1 - components > $@
|
||||||
#sort embed-link-comps | join -o 2.2 - components > $@
|
#sort embed-link-comps | join -o 2.2 - components > $@
|
||||||
|
sort -u -o $@ $@
|
||||||
|
|
||||||
EmbedComponents.cpp: EmbedComponents.cpp.in Makefile Makefile.in $(EMBED_LINK_COMP_NAMES)
|
# since embed-link-comp-names is filled with the static library names, we cannot use them - we need something
|
||||||
cat $< | \
|
# filled with the modules names ( foe instance nsCookieModule instead of cookie
|
||||||
sed -e "s|%DECL_NSGETMODULES%|$(foreach m,$(shell cat $(EMBED_LINK_COMP_NAMES)),DECL_NSGETMODULE($(m)))|" | \
|
embed-link-comp-modules: embed-link-comp-names
|
||||||
sed -e "s|%MODULE_LIST%|$(foreach m, $(shell cat $(EMBED_LINK_COMP_NAMES)),MODULE($(m)),)|" \
|
for i in `cat embed-link-comp-names` ; \
|
||||||
|
do ( \
|
||||||
|
objdump -x ../../../../dist/lib/components/lib$$i.a | \
|
||||||
|
grep _gModuleInfo | \
|
||||||
|
awk '{ print $$6; }' | \
|
||||||
|
sed -e "s/_gModuleInfo//" ) ; \
|
||||||
|
done \
|
||||||
> $@
|
> $@
|
||||||
|
|
||||||
GARBAGE += EmbedComponents.cpp embed-link-comp-names embed-link-comps components
|
EmbedComponents.cpp: EmbedComponents.cpp.in Makefile Makefile.in $(EMBED_LINK_COMP_MODULES)
|
||||||
|
cat $< | \
|
||||||
|
sed -e "s|%DECL_NSGETMODULES%|$(foreach m,$(shell cat $(EMBED_LINK_COMP_MODULES)),DECL_NSGETMODULE($(m)))|" | \
|
||||||
|
sed -e "s|%MODULE_LIST%|$(foreach m, $(shell cat $(EMBED_LINK_COMP_MODULES)),MODULE($(m)),)|" \
|
||||||
|
> $@
|
||||||
|
|
||||||
|
GARBAGE += EmbedComponents.cpp embed-link-comp-names embed-link-comps components embed-link-comp-modules
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
|
@ -77,7 +77,7 @@ nsDeviceContextPh :: nsDeviceContextPh( )
|
||||||
mSpec = nsnull;
|
mSpec = nsnull;
|
||||||
mDC = nsnull;
|
mDC = nsnull;
|
||||||
|
|
||||||
mIsPrinting = 0;
|
mIsPrintingStart = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
nsDeviceContextPh :: ~nsDeviceContextPh( ) {
|
nsDeviceContextPh :: ~nsDeviceContextPh( ) {
|
||||||
|
@ -132,17 +132,11 @@ nsresult nsDeviceContextPh :: Init( nsNativeDeviceContext aContext, nsIDeviceCon
|
||||||
mAppUnitsToDevUnits = (a2d / t2d) * mTwipsToPixels;
|
mAppUnitsToDevUnits = (a2d / t2d) * mTwipsToPixels;
|
||||||
mDevUnitsToAppUnits = 1.0f / mAppUnitsToDevUnits;
|
mDevUnitsToAppUnits = 1.0f / mAppUnitsToDevUnits;
|
||||||
|
|
||||||
// for printers
|
int w, h;
|
||||||
const PhDim_t *psize;
|
GetPrinterRect( &w, &h );
|
||||||
PhDim_t dim;
|
mWidthFloat = w;
|
||||||
PpPrintContext_t *pc = ((nsDeviceContextSpecPh *)mSpec)->GetPrintContext();
|
mHeightFloat = h;
|
||||||
|
|
||||||
PpPrintGetPC(pc, Pp_PC_PAPER_SIZE, (const void **)&psize );
|
|
||||||
mWidthFloat = (float)(psize->w / 10);
|
|
||||||
mHeightFloat = (float)(psize->h / 10);
|
|
||||||
dim.w = psize->w / 10;
|
|
||||||
dim.h = psize->h / 10;
|
|
||||||
PpPrintSetPC(pc, INITIAL_PC, 0 , Pp_PC_SOURCE_SIZE, &dim );
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -226,6 +220,14 @@ void nsDeviceContextPh :: CommonInit( nsNativeDeviceContext aDC ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP nsDeviceContextPh :: CreateRenderingContext( nsIRenderingContext *&aContext ) {
|
NS_IMETHODIMP nsDeviceContextPh :: CreateRenderingContext( nsIRenderingContext *&aContext ) {
|
||||||
|
|
||||||
|
#ifdef NS_PRINT_PREVIEW
|
||||||
|
// Defer to Alt when there is one
|
||||||
|
if(mAltDC && ((mUseAltDC & kUseAltDCFor_CREATERC_PAINT) || (mUseAltDC & kUseAltDCFor_CREATERC_REFLOW))) {
|
||||||
|
return mAltDC->CreateRenderingContext(aContext);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
nsIRenderingContext *pContext;
|
nsIRenderingContext *pContext;
|
||||||
nsresult rv;
|
nsresult rv;
|
||||||
nsDrawingSurfacePh *surf;
|
nsDrawingSurfacePh *surf;
|
||||||
|
@ -419,19 +421,6 @@ NS_IMETHODIMP nsDeviceContextPh :: GetSystemFont( nsSystemFontID aID, nsFont *aF
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
NS_IMETHODIMP nsDeviceContextPh :: GetClientRect( nsRect &aRect ) {
|
|
||||||
nsresult rv = NS_OK;
|
|
||||||
if( mIsPrinting ) { //( mSpec )
|
|
||||||
// we have a printer device
|
|
||||||
aRect.x = 0;
|
|
||||||
aRect.y = 0;
|
|
||||||
aRect.width = NSToIntRound(mWidth * mDevUnitsToAppUnits);
|
|
||||||
aRect.height = NSToIntRound(mHeight * mDevUnitsToAppUnits);
|
|
||||||
}
|
|
||||||
else rv = GetRect ( aRect );
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
|
|
||||||
NS_IMETHODIMP nsDeviceContextPh :: CheckFontExistence( const nsString& aFontName ) {
|
NS_IMETHODIMP nsDeviceContextPh :: CheckFontExistence( const nsString& aFontName ) {
|
||||||
char *fontName = ToNewCString(aFontName);
|
char *fontName = ToNewCString(aFontName);
|
||||||
|
|
||||||
|
@ -485,11 +474,13 @@ printf( "\t\t Not Found in cache\n" );
|
||||||
|
|
||||||
|
|
||||||
NS_IMETHODIMP nsDeviceContextPh :: GetDeviceSurfaceDimensions( PRInt32 &aWidth, PRInt32 &aHeight ) {
|
NS_IMETHODIMP nsDeviceContextPh :: GetDeviceSurfaceDimensions( PRInt32 &aWidth, PRInt32 &aHeight ) {
|
||||||
if( mIsPrinting ) { //(mSpec)
|
|
||||||
aWidth = NSToIntRound(mWidthFloat * mDevUnitsToAppUnits);
|
#ifdef NS_PRINT_PREVIEW
|
||||||
aHeight = NSToIntRound(mHeightFloat * mDevUnitsToAppUnits);
|
// Defer to Alt when there is one
|
||||||
return NS_OK;
|
if (mAltDC && (mUseAltDC & kUseAltDCFor_SURFACE_DIM)) {
|
||||||
|
return mAltDC->GetDeviceSurfaceDimensions(aWidth, aHeight);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if( mWidth == -1 ) mWidth = NSToIntRound(mWidthFloat * mDevUnitsToAppUnits);
|
if( mWidth == -1 ) mWidth = NSToIntRound(mWidthFloat * mDevUnitsToAppUnits);
|
||||||
if( mHeight == -1 ) mHeight = NSToIntRound(mHeightFloat * mDevUnitsToAppUnits);
|
if( mHeight == -1 ) mHeight = NSToIntRound(mHeightFloat * mDevUnitsToAppUnits);
|
||||||
|
@ -565,7 +556,6 @@ NS_IMETHODIMP nsDeviceContextPh :: BeginDocument(PRUnichar *t, PRUnichar* aPrint
|
||||||
if( mSpec ) {
|
if( mSpec ) {
|
||||||
PpPrintContext_t *pc = ((nsDeviceContextSpecPh *)mSpec)->GetPrintContext();
|
PpPrintContext_t *pc = ((nsDeviceContextSpecPh *)mSpec)->GetPrintContext();
|
||||||
PpStartJob(pc);
|
PpStartJob(pc);
|
||||||
mIsPrinting = 1;
|
|
||||||
mIsPrintingStart = 1;
|
mIsPrintingStart = 1;
|
||||||
}
|
}
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
@ -575,7 +565,6 @@ NS_IMETHODIMP nsDeviceContextPh :: EndDocument( void ) {
|
||||||
if( mSpec ) {
|
if( mSpec ) {
|
||||||
PpPrintContext_t *pc = ((nsDeviceContextSpecPh *)mSpec)->GetPrintContext();
|
PpPrintContext_t *pc = ((nsDeviceContextSpecPh *)mSpec)->GetPrintContext();
|
||||||
PpEndJob(pc);
|
PpEndJob(pc);
|
||||||
mIsPrinting = 0;
|
|
||||||
}
|
}
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
@ -587,10 +576,12 @@ NS_IMETHODIMP nsDeviceContextPh :: AbortDocument( void ) {
|
||||||
NS_IMETHODIMP nsDeviceContextPh :: BeginPage( void ) {
|
NS_IMETHODIMP nsDeviceContextPh :: BeginPage( void ) {
|
||||||
if( mSpec ) {
|
if( mSpec ) {
|
||||||
PpPrintContext_t *pc = ((nsDeviceContextSpecPh *)mSpec)->GetPrintContext();
|
PpPrintContext_t *pc = ((nsDeviceContextSpecPh *)mSpec)->GetPrintContext();
|
||||||
if( !mIsPrintingStart ) PpPrintNewPage( pc );
|
if( mIsPrintingStart ) {
|
||||||
PpContinueJob( pc );
|
PpPrintNewPage( pc );
|
||||||
mIsPrintingStart = 0;
|
mIsPrintingStart = 0;
|
||||||
}
|
}
|
||||||
|
PpContinueJob( pc );
|
||||||
|
}
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -602,8 +593,6 @@ NS_IMETHODIMP nsDeviceContextPh :: EndPage( void ) {
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int nsDeviceContextPh :: IsPrinting( void ) { return mIsPrinting ? 1 : 0; }
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Get the size and color depth of the display
|
Get the size and color depth of the display
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -108,7 +108,7 @@ public:
|
||||||
NS_IMETHOD CheckFontExistence(const nsString& aFontName);
|
NS_IMETHOD CheckFontExistence(const nsString& aFontName);
|
||||||
|
|
||||||
NS_IMETHOD GetDeviceSurfaceDimensions(PRInt32 &aWidth, PRInt32 &aHeight);
|
NS_IMETHOD GetDeviceSurfaceDimensions(PRInt32 &aWidth, PRInt32 &aHeight);
|
||||||
NS_IMETHOD GetClientRect(nsRect &aRect);
|
inline NS_IMETHOD GetClientRect(nsRect &aRect) { return GetRect ( aRect ); }
|
||||||
NS_IMETHOD GetRect(nsRect &aRect);
|
NS_IMETHOD GetRect(nsRect &aRect);
|
||||||
|
|
||||||
NS_IMETHOD GetDeviceContextFor(nsIDeviceContextSpec *aDevice,
|
NS_IMETHOD GetDeviceContextFor(nsIDeviceContextSpec *aDevice,
|
||||||
|
@ -130,7 +130,6 @@ public:
|
||||||
|
|
||||||
static int prefChanged(const char *aPref, void *aClosure);
|
static int prefChanged(const char *aPref, void *aClosure);
|
||||||
nsresult SetDPI(PRInt32 dpi);
|
nsresult SetDPI(PRInt32 dpi);
|
||||||
int IsPrinting(void);
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
@ -155,7 +154,7 @@ protected:
|
||||||
|
|
||||||
static nscoord mDpi;
|
static nscoord mDpi;
|
||||||
|
|
||||||
PRBool mIsPrinting, mIsPrintingStart;
|
PRBool mIsPrintingStart;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
nsCOMPtr<nsIScreenManager> mScreenManager;
|
nsCOMPtr<nsIScreenManager> mScreenManager;
|
||||||
|
|
|
@ -127,6 +127,13 @@ NS_IMETHODIMP nsDeviceContextSpecPh :: Init(nsIWidget* aWidget,
|
||||||
char rev = reversed == PR_TRUE ? 1 : 0;
|
char rev = reversed == PR_TRUE ? 1 : 0;
|
||||||
PpSetPC( mPC, Pp_PC_REVERSED, &rev, 0 );
|
PpSetPC( mPC, Pp_PC_REVERSED, &rev, 0 );
|
||||||
|
|
||||||
|
double margin_top, margin_left, margin_right, margin_bottom;
|
||||||
|
PhRect_t rmargin = { { 0, 0 }, { 0, 0 } };
|
||||||
|
aPS->GetMarginTop( &margin_top );
|
||||||
|
aPS->GetMarginLeft( &margin_left );
|
||||||
|
aPS->GetMarginRight( &margin_right );
|
||||||
|
aPS->GetMarginBottom( &margin_bottom );
|
||||||
|
|
||||||
|
|
||||||
PRInt16 unit;
|
PRInt16 unit;
|
||||||
double width, height;
|
double width, height;
|
||||||
|
@ -140,13 +147,24 @@ NS_IMETHODIMP nsDeviceContextSpecPh :: Init(nsIWidget* aWidget,
|
||||||
if( unit == nsIPrintSettings::kPaperSizeInches ) {
|
if( unit == nsIPrintSettings::kPaperSizeInches ) {
|
||||||
dim.w = width * 1000;
|
dim.w = width * 1000;
|
||||||
dim.h = height * 1000;
|
dim.h = height * 1000;
|
||||||
|
|
||||||
|
rmargin.ul.x = margin_left * 1000;
|
||||||
|
rmargin.ul.y = margin_top * 1000;
|
||||||
|
rmargin.lr.x = margin_right * 1000;
|
||||||
|
rmargin.lr.y = margin_bottom * 1000;
|
||||||
}
|
}
|
||||||
else if( unit == nsIPrintSettings::kPaperSizeMillimeters ) {
|
else if( unit == nsIPrintSettings::kPaperSizeMillimeters ) {
|
||||||
dim.w = short(NS_TWIPS_TO_INCHES(NS_MILLIMETERS_TO_TWIPS(float(width*1000))));
|
dim.w = short(NS_TWIPS_TO_INCHES(NS_MILLIMETERS_TO_TWIPS(float(width*1000))));
|
||||||
dim.h = short(NS_TWIPS_TO_INCHES(NS_MILLIMETERS_TO_TWIPS(float(height*1000))));
|
dim.h = short(NS_TWIPS_TO_INCHES(NS_MILLIMETERS_TO_TWIPS(float(height*1000))));
|
||||||
|
|
||||||
|
rmargin.ul.x = short(NS_TWIPS_TO_INCHES(NS_MILLIMETERS_TO_TWIPS(float(margin_left*1000))));
|
||||||
|
rmargin.ul.y = short(NS_TWIPS_TO_INCHES(NS_MILLIMETERS_TO_TWIPS(float(margin_top*1000))));
|
||||||
|
rmargin.lr.x = short(NS_TWIPS_TO_INCHES(NS_MILLIMETERS_TO_TWIPS(float(margin_right*1000))));
|
||||||
|
rmargin.lr.y = short(NS_TWIPS_TO_INCHES(NS_MILLIMETERS_TO_TWIPS(float(margin_bottom*1000))));
|
||||||
}
|
}
|
||||||
|
|
||||||
PpSetPC( mPC, Pp_PC_PAPER_SIZE, &dim, 0 );
|
PpSetPC( mPC, Pp_PC_PAPER_SIZE, &dim, 0 );
|
||||||
|
PpSetPC( mPC, Pp_PC_NONPRINT_MARGINS, &rmargin, 0 );
|
||||||
}
|
}
|
||||||
else { /* silent is set - used when the call is comming from the embedded version */
|
else { /* silent is set - used when the call is comming from the embedded version */
|
||||||
PRInt32 p;
|
PRInt32 p;
|
||||||
|
|
|
@ -222,6 +222,9 @@ NS_IMETHODIMP nsDrawingSurfacePh :: Init( PRUint32 aWidth, PRUint32 aHeight, PRU
|
||||||
mDrawContext = (PhDrawContext_t *)PdCreateOffscreenContext(0, mWidth, mHeight, 0);
|
mDrawContext = (PhDrawContext_t *)PdCreateOffscreenContext(0, mWidth, mHeight, 0);
|
||||||
if( !mDrawContext ) return NS_ERROR_FAILURE;
|
if( !mDrawContext ) return NS_ERROR_FAILURE;
|
||||||
|
|
||||||
|
PhDCSetCurrent( mDrawContext );
|
||||||
|
PgSetDrawBufferSize( 0xffff );
|
||||||
|
|
||||||
nsresult rv;
|
nsresult rv;
|
||||||
nsCOMPtr<nsIPref> prefs(do_GetService(kPrefCID, &rv));
|
nsCOMPtr<nsIPref> prefs(do_GetService(kPrefCID, &rv));
|
||||||
if (NS_SUCCEEDED(rv)) {
|
if (NS_SUCCEEDED(rv)) {
|
||||||
|
@ -246,6 +249,9 @@ int nsDrawingSurfacePh::prefChanged(const char *aPref, void *aClosure)
|
||||||
surface->mDrawContext = (PhDrawContext_t *)PdCreateOffscreenContext(0, surface->mWidth, surface->mHeight, 0);
|
surface->mDrawContext = (PhDrawContext_t *)PdCreateOffscreenContext(0, surface->mWidth, surface->mHeight, 0);
|
||||||
if( !surface->mDrawContext ) return NS_ERROR_FAILURE;
|
if( !surface->mDrawContext ) return NS_ERROR_FAILURE;
|
||||||
|
|
||||||
|
PhDCSetCurrent( surface->mDrawContext );
|
||||||
|
PgSetDrawBufferSize( 0xffff );
|
||||||
|
|
||||||
PgDestroyGC(surface->mDrawContext->gc);
|
PgDestroyGC(surface->mDrawContext->gc);
|
||||||
surface->mDrawContext->gc = surface->mGC;
|
surface->mDrawContext->gc = surface->mGC;
|
||||||
/* use the gc provided */
|
/* use the gc provided */
|
||||||
|
|
|
@ -233,7 +233,6 @@ printf( "\tCall PfLoadMetrics for NSFullFontName=%s\n", NSFullFontName );
|
||||||
|
|
||||||
gFontMetricsCache->Put(&key, node);
|
gFontMetricsCache->Put(&key, node);
|
||||||
|
|
||||||
PfLoadFont( NSFullFontName, PHFONT_LOAD_METRICS, nsnull );
|
|
||||||
PfLoadMetrics( NSFullFontName );
|
PfLoadMetrics( NSFullFontName );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -339,33 +339,44 @@ nsresult nsImagePh :: Init(PRInt32 aWidth, PRInt32 aHeight, PRInt32 aDepth,nsMas
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case nsMaskRequirements_kNeeds1Bit:
|
case nsMaskRequirements_kNeeds1Bit:
|
||||||
|
{
|
||||||
mAlphaRowBytes = (aWidth + 7) / 8;
|
mAlphaRowBytes = (aWidth + 7) / 8;
|
||||||
mAlphaDepth = 1;
|
mAlphaDepth = 1;
|
||||||
|
|
||||||
// 32-bit align each row
|
// 32-bit align each row
|
||||||
mAlphaRowBytes = (mAlphaRowBytes + 3) & ~0x3;
|
mAlphaRowBytes = (mAlphaRowBytes + 3) & ~0x3;
|
||||||
|
|
||||||
mAlphaBits = new PRUint8[mAlphaRowBytes * aHeight];
|
int alphasize = mAlphaRowBytes * aHeight;
|
||||||
|
mAlphaBits = new PRUint8[ alphasize ];
|
||||||
|
memset( mAlphaBits, 0, alphasize );
|
||||||
|
|
||||||
mAlphaWidth = aWidth;
|
mAlphaWidth = aWidth;
|
||||||
mAlphaHeight = aHeight;
|
mAlphaHeight = aHeight;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case nsMaskRequirements_kNeeds8Bit:
|
case nsMaskRequirements_kNeeds8Bit:
|
||||||
|
{
|
||||||
mAlphaRowBytes = aWidth;
|
mAlphaRowBytes = aWidth;
|
||||||
mAlphaDepth = 8;
|
mAlphaDepth = 8;
|
||||||
|
|
||||||
// 32-bit align each row
|
// 32-bit align each row
|
||||||
mAlphaRowBytes = (mAlphaRowBytes + 3) & ~0x3;
|
mAlphaRowBytes = (mAlphaRowBytes + 3) & ~0x3;
|
||||||
mAlphaBits = new PRUint8[mAlphaRowBytes * aHeight];
|
|
||||||
|
int alphasize = mAlphaRowBytes * aHeight;
|
||||||
|
mAlphaBits = new PRUint8[ alphasize ];
|
||||||
|
memset( mAlphaBits, 0, alphasize );
|
||||||
|
|
||||||
mAlphaWidth = aWidth;
|
mAlphaWidth = aWidth;
|
||||||
mAlphaHeight = aHeight;
|
mAlphaHeight = aHeight;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
mPhImage.image_tag = PtCRC((char *)mImageBits, mSizeImage);
|
mPhImage.image_tag = PtCRC((char *)mImageBits, mSizeImage);
|
||||||
mPhImage.image = (char *)mImageBits;
|
mPhImage.image = (char *)mImageBits;
|
||||||
mPhImage.size.w = mWidth;
|
mPhImage.size.w = mWidth;
|
||||||
mPhImage.size.h = mHeight;
|
mPhImage.size.h = 0;
|
||||||
mRowBytes = mPhImage.bpl = mNumBytesPixel * mWidth;
|
mRowBytes = mPhImage.bpl = mNumBytesPixel * mWidth;
|
||||||
mPhImage.type = type;
|
mPhImage.type = type;
|
||||||
if (aMaskRequirements == nsMaskRequirements_kNeeds1Bit)
|
if (aMaskRequirements == nsMaskRequirements_kNeeds1Bit)
|
||||||
|
@ -449,16 +460,19 @@ NS_IMETHODIMP nsImagePh :: Draw(nsIRenderingContext &aContext, nsDrawingSurface
|
||||||
map.bpp = mAlphaDepth;
|
map.bpp = mAlphaDepth;
|
||||||
map.map = (char *)mAlphaBits;
|
map.map = (char *)mAlphaBits;
|
||||||
PgSetAlphaBlend(&map, 0);
|
PgSetAlphaBlend(&map, 0);
|
||||||
|
|
||||||
PgAlphaOn();
|
PgAlphaOn();
|
||||||
PgDrawRepPhImagemx( &mPhImage, 0, &pos, &rep, &space );
|
PgDrawRepPhImagemx( &mPhImage, 0, &pos, &rep, &space );
|
||||||
PgAlphaOff();
|
PgAlphaOff();
|
||||||
|
|
||||||
|
PgSetAlphaBlend( NULL, 0 ); /* this shouldn't be necessary, but the ph lib's gc is holding onto our mAlphaBits */
|
||||||
}
|
}
|
||||||
PgSetMultiClip( 0, NULL );
|
PgSetMultiClip( 0, NULL );
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
else {
|
else if( mPhImage.size.h > 0 ) {
|
||||||
|
|
||||||
/* keeping the proportions, what is the size of mPhImageZoom that can give use the aDWidth and aDHeight? */
|
/* keeping the proportions, what is the size of mPhImageZoom that can give use the aDWidth and aDHeight? */
|
||||||
PRInt32 scaled_w = aDWidth * mPhImage.size.w / aSWidth;
|
PRInt32 scaled_w = aDWidth * mPhImage.size.w / aSWidth;
|
||||||
|
@ -503,10 +517,12 @@ NS_IMETHODIMP nsImagePh :: Draw(nsIRenderingContext &aContext, nsDrawingSurface
|
||||||
map.bpp = mAlphaDepth;
|
map.bpp = mAlphaDepth;
|
||||||
map.map = (char *)mAlphaBits;
|
map.map = (char *)mAlphaBits;
|
||||||
PgSetAlphaBlend(&map, 0);
|
PgSetAlphaBlend(&map, 0);
|
||||||
|
|
||||||
PgAlphaOn();
|
PgAlphaOn();
|
||||||
PgDrawPhImagemx( &pos, use_zoom ? mPhImageZoom : &mPhImage, 0 );
|
PgDrawPhImagemx( &pos, use_zoom ? mPhImageZoom : &mPhImage, 0 );
|
||||||
PgAlphaOff();
|
PgAlphaOff();
|
||||||
|
|
||||||
|
PgSetAlphaBlend( NULL, 0 ); /* this shouldn't be necessary, but the ph lib's gc is holding onto our mAlphaBits */
|
||||||
}
|
}
|
||||||
PgSetMultiClip( 0, NULL );
|
PgSetMultiClip( 0, NULL );
|
||||||
}
|
}
|
||||||
|
@ -557,9 +573,12 @@ NS_IMETHODIMP nsImagePh :: Draw(nsIRenderingContext &aContext, nsDrawingSurface
|
||||||
map.bpp = mAlphaDepth;
|
map.bpp = mAlphaDepth;
|
||||||
map.map = (char *)mAlphaBits;
|
map.map = (char *)mAlphaBits;
|
||||||
PgSetAlphaBlend(&map, 0);
|
PgSetAlphaBlend(&map, 0);
|
||||||
|
|
||||||
PgAlphaOn();
|
PgAlphaOn();
|
||||||
PgDrawPhImagemx( &pos, &mPhImage, 0 );
|
PgDrawPhImagemx( &pos, &mPhImage, 0 );
|
||||||
PgAlphaOff();
|
PgAlphaOff();
|
||||||
|
|
||||||
|
PgSetAlphaBlend( NULL, 0 ); /* this shouldn't be necessary, but the ph lib's gc is holding onto our mAlphaBits */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -767,7 +786,7 @@ NS_IMETHODIMP nsImagePh::DrawToImage(nsIImage* aDstImage,
|
||||||
darea.size.w = sarea.size.w = aDWidth;
|
darea.size.w = sarea.size.w = aDWidth;
|
||||||
darea.size.h = sarea.size.h = aDHeight;
|
darea.size.h = sarea.size.h = aDHeight;
|
||||||
|
|
||||||
if ((aDWidth != mPhImage.size.w) || (aDHeight != mPhImage.size.h))
|
if( mPhImage.size.h > 0 && ( aDWidth != mPhImage.size.w || aDHeight != mPhImage.size.h ) )
|
||||||
{
|
{
|
||||||
release = 1;
|
release = 1;
|
||||||
if ((aDHeight * mPhImage.bpl) < IMAGE_SHMEM_THRESHOLD)
|
if ((aDHeight * mPhImage.bpl) < IMAGE_SHMEM_THRESHOLD)
|
||||||
|
|
|
@ -107,6 +107,7 @@ public:
|
||||||
if( y > mDecodedY2 ) mDecodedY2 = y;
|
if( y > mDecodedY2 ) mDecodedY2 = y;
|
||||||
if( x > mDecodedX2 ) mDecodedX2 = x;
|
if( x > mDecodedX2 ) mDecodedX2 = x;
|
||||||
mDirtyFlags = aFlags;
|
mDirtyFlags = aFlags;
|
||||||
|
mPhImage.size.h = mDecodedY2;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual nsresult Init(PRInt32 aWidth, PRInt32 aHeight, PRInt32 aDepth, nsMaskRequirements aMaskRequirements);
|
virtual nsresult Init(PRInt32 aWidth, PRInt32 aHeight, PRInt32 aDepth, nsMaskRequirements aMaskRequirements);
|
||||||
|
|
|
@ -464,7 +464,6 @@ NS_IMETHODIMP nsRenderingContextPh :: DrawLine( nscoord aX0, nscoord aY0, nscoor
|
||||||
|
|
||||||
NS_IMETHODIMP nsRenderingContextPh :: DrawStdLine( nscoord aX0, nscoord aY0, nscoord aX1, nscoord aY1 )
|
NS_IMETHODIMP nsRenderingContextPh :: DrawStdLine( nscoord aX0, nscoord aY0, nscoord aX1, nscoord aY1 )
|
||||||
{
|
{
|
||||||
|
|
||||||
if( aY0 != aY1 ) aY1--;
|
if( aY0 != aY1 ) aY1--;
|
||||||
if( aX0 != aX1 ) aX1--;
|
if( aX0 != aX1 ) aX1--;
|
||||||
|
|
||||||
|
@ -555,7 +554,33 @@ NS_IMETHODIMP nsRenderingContextPh :: DrawPolygon( const nsPoint aPoints[], PRIn
|
||||||
pts[i].x = x;
|
pts[i].x = x;
|
||||||
pts[i].y = y;
|
pts[i].y = y;
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdateGC();
|
UpdateGC();
|
||||||
|
|
||||||
|
|
||||||
|
if( aNumPoints == 4 ) {
|
||||||
|
/* this code makes the edges of the controls like buttons, texts etc appear less heavy */
|
||||||
|
int dx = pts[1].x - pts[0].x;
|
||||||
|
int dy = pts[1].y - pts[0].y;
|
||||||
|
if( !dx ) {
|
||||||
|
/* the edge is vertical - move us (0,1) closer to the other 2 points (2,3) */
|
||||||
|
pts[0].y++;
|
||||||
|
pts[1].y--;
|
||||||
|
int diff = pts[3].x > pts[0].x ? 1 : -1;
|
||||||
|
pts[0].x += diff;
|
||||||
|
pts[1].x += diff;
|
||||||
|
}
|
||||||
|
if( !dy ) {
|
||||||
|
/* the edge is horizontal - move the other 2 points (2,3) closer to us (0,1) */
|
||||||
|
pts[2].x++;
|
||||||
|
pts[3].x--;
|
||||||
|
int diff = pts[3].y > pts[0].y ? -1 : 1;
|
||||||
|
pts[2].y += diff;
|
||||||
|
pts[3].y += diff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
PgDrawPolygon( pts, aNumPoints, &pos, Pg_DRAW_STROKE );
|
PgDrawPolygon( pts, aNumPoints, &pos, Pg_DRAW_STROKE );
|
||||||
delete [] pts;
|
delete [] pts;
|
||||||
}
|
}
|
||||||
|
@ -581,7 +606,33 @@ NS_IMETHODIMP nsRenderingContextPh :: FillPolygon( const nsPoint aPoints[], PRIn
|
||||||
pts[i].x = x;
|
pts[i].x = x;
|
||||||
pts[i].y = y;
|
pts[i].y = y;
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdateGC();
|
UpdateGC();
|
||||||
|
|
||||||
|
|
||||||
|
if( aNumPoints == 4 ) {
|
||||||
|
/* this code makes the edges of the controls like buttons, texts etc appear less heavy */
|
||||||
|
int dx = pts[1].x - pts[0].x;
|
||||||
|
int dy = pts[1].y - pts[0].y;
|
||||||
|
if( !dx ) {
|
||||||
|
/* the edge is vertical - move us (0,1) closer to the other 2 points (2,3) */
|
||||||
|
pts[0].y++;
|
||||||
|
pts[1].y--;
|
||||||
|
int diff = pts[3].x > pts[0].x ? 1 : -1;
|
||||||
|
pts[0].x += diff;
|
||||||
|
pts[1].x += diff;
|
||||||
|
}
|
||||||
|
if( !dy ) {
|
||||||
|
/* the edge is horizontal - move the other 2 points (2,3) closer to us (0,1) */
|
||||||
|
pts[2].x++;
|
||||||
|
pts[3].x--;
|
||||||
|
int diff = pts[3].y > pts[0].y ? -1 : 1;
|
||||||
|
pts[2].y += diff;
|
||||||
|
pts[3].y += diff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
PgDrawPolygon( pts, aNumPoints, &pos, Pg_DRAW_FILL );
|
PgDrawPolygon( pts, aNumPoints, &pos, Pg_DRAW_FILL );
|
||||||
delete [] pts;
|
delete [] pts;
|
||||||
}
|
}
|
||||||
|
@ -680,54 +731,37 @@ NS_IMETHODIMP nsRenderingContextPh :: FillArc( nscoord aX, nscoord aY, nscoord a
|
||||||
NS_IMETHODIMP nsRenderingContextPh :: GetWidth(const char* aString, PRUint32 aLength, nscoord& aWidth )
|
NS_IMETHODIMP nsRenderingContextPh :: GetWidth(const char* aString, PRUint32 aLength, nscoord& aWidth )
|
||||||
{
|
{
|
||||||
PhRect_t extent;
|
PhRect_t extent;
|
||||||
nsresult ret_code = NS_ERROR_FAILURE;
|
|
||||||
|
|
||||||
aWidth = 0; // Initialize to zero in case we fail.
|
/* Check for the very common case of trying to get the width of a single space */
|
||||||
|
if( aString[0] == ' ' && aLength == 1 )
|
||||||
|
return mFontMetrics->GetSpaceWidth(aWidth);
|
||||||
|
|
||||||
if( nsnull != mFontMetrics )
|
|
||||||
{
|
|
||||||
if( PfExtentText( &extent, NULL, mPhotonFontName, aString, aLength ) )
|
if( PfExtentText( &extent, NULL, mPhotonFontName, aString, aLength ) )
|
||||||
{
|
{
|
||||||
aWidth = NSToCoordRound((int) ((extent.lr.x - extent.ul.x + 1) * mP2T));
|
aWidth = NSToCoordRound((int) ((extent.lr.x - extent.ul.x + 1) * mP2T));
|
||||||
ret_code = NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
|
||||||
ret_code = NS_ERROR_FAILURE;
|
|
||||||
|
|
||||||
return ret_code;
|
aWidth = 0;
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP nsRenderingContextPh :: GetWidth( const PRUnichar *aString, PRUint32 aLength, nscoord &aWidth, PRInt32 *aFontID )
|
NS_IMETHODIMP nsRenderingContextPh :: GetWidth( const PRUnichar *aString, PRUint32 aLength, nscoord &aWidth, PRInt32 *aFontID )
|
||||||
{
|
{
|
||||||
nsresult ret_code = NS_ERROR_FAILURE;
|
|
||||||
|
|
||||||
aWidth = 0; // Initialize to zero in case we fail.
|
|
||||||
if( nsnull != mFontMetrics ) {
|
|
||||||
NS_ConvertUCS2toUTF8 theUnicodeString (aString, aLength);
|
NS_ConvertUCS2toUTF8 theUnicodeString (aString, aLength);
|
||||||
ret_code = GetWidth( theUnicodeString.get(), strlen(theUnicodeString.get()), aWidth );
|
const char *s = theUnicodeString.get();
|
||||||
}
|
return GetWidth( s, strlen(s), aWidth );
|
||||||
if( nsnull != aFontID )
|
|
||||||
*aFontID = 0;
|
|
||||||
return ret_code;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP nsRenderingContextPh::GetTextDimensions(const PRUnichar* aString, PRUint32 aLength,
|
NS_IMETHODIMP nsRenderingContextPh::GetTextDimensions(const PRUnichar* aString, PRUint32 aLength,
|
||||||
nsTextDimensions& aDimensions, PRInt32* aFontID)
|
nsTextDimensions& aDimensions, PRInt32* aFontID)
|
||||||
{
|
{
|
||||||
nsresult ret_code = NS_ERROR_FAILURE;
|
|
||||||
|
|
||||||
aDimensions.Clear();
|
|
||||||
if( nsnull != mFontMetrics ) {
|
|
||||||
mFontMetrics->GetMaxAscent(aDimensions.ascent);
|
mFontMetrics->GetMaxAscent(aDimensions.ascent);
|
||||||
mFontMetrics->GetMaxDescent(aDimensions.descent);
|
mFontMetrics->GetMaxDescent(aDimensions.descent);
|
||||||
|
|
||||||
NS_ConvertUCS2toUTF8 theUnicodeString (aString, aLength);
|
NS_ConvertUCS2toUTF8 theUnicodeString (aString, aLength);
|
||||||
ret_code = GetWidth( theUnicodeString.get(), strlen(theUnicodeString.get()), aDimensions.width );
|
const char *s = theUnicodeString.get();
|
||||||
}
|
return GetWidth( s, strlen(s), aDimensions.width );
|
||||||
if (nsnull != aFontID)
|
|
||||||
*aFontID = 0;
|
|
||||||
return NS_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP nsRenderingContextPh::DrawString(const char *aString, PRUint32 aLength,
|
NS_IMETHODIMP nsRenderingContextPh::DrawString(const char *aString, PRUint32 aLength,
|
||||||
|
@ -742,25 +776,39 @@ NS_IMETHODIMP nsRenderingContextPh::DrawString(const char *aString, PRUint32 aLe
|
||||||
PgSetFont( mPhotonFontName );
|
PgSetFont( mPhotonFontName );
|
||||||
|
|
||||||
|
|
||||||
|
#if 0 /* turn this feature off since it has problems */
|
||||||
if( !aSpacing ) {
|
if( !aSpacing ) {
|
||||||
|
#endif
|
||||||
mTranMatrix->TransformCoord( &aX, &aY );
|
mTranMatrix->TransformCoord( &aX, &aY );
|
||||||
PhPoint_t pos = { aX, aY };
|
PhPoint_t pos = { aX, aY };
|
||||||
PgDrawTextChars( aString, aLength, &pos, Pg_TEXT_LEFT);
|
PgDrawTextChars( aString, aLength, &pos, Pg_TEXT_LEFT);
|
||||||
|
#if 0 /* turn this feature off since it has problems */
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
nscoord* trSpacing;
|
||||||
|
nscoord trSpacingArray[500];
|
||||||
|
if( aLength > 500 )
|
||||||
|
trSpacing = new nscoord[aLength];
|
||||||
|
else trSpacing = trSpacingArray;
|
||||||
|
|
||||||
|
mTranMatrix->ScaleXCoords(aSpacing, aLength, trSpacing);
|
||||||
|
|
||||||
nscoord x = aX;
|
nscoord x = aX;
|
||||||
nscoord y = aY;
|
nscoord y = aY;
|
||||||
const char* end = aString + aLength;
|
mTranMatrix->TransformCoord(&x, &y);
|
||||||
while( aString < end ) {
|
PhPoint_t pos = { x, y };
|
||||||
char ch = *aString++;
|
|
||||||
nscoord xx = x;
|
const char *current = aString;
|
||||||
nscoord yy = y;
|
for( int i=0; i<aLength; i++ ) {
|
||||||
mTranMatrix->TransformCoord(&xx, &yy);
|
PgDrawText( current++, 1, &pos, Pg_TEXT_LEFT);
|
||||||
PhPoint_t pos = { xx, yy };
|
pos.x += trSpacing[i];
|
||||||
PgDrawText( &ch, 1, &pos, Pg_TEXT_LEFT);
|
|
||||||
x += *aSpacing++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( trSpacing != trSpacingArray )
|
||||||
|
delete [] trSpacing;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -256,7 +256,7 @@ public:
|
||||||
inline
|
inline
|
||||||
NS_IMETHODIMP GetWidth(char aC, nscoord& aWidth)
|
NS_IMETHODIMP GetWidth(char aC, nscoord& aWidth)
|
||||||
{ // Check for the very common case of trying to get the width of a single space
|
{ // Check for the very common case of trying to get the width of a single space
|
||||||
if(aC == ' ' && nsnull != mFontMetrics )
|
if(aC == ' ')
|
||||||
return mFontMetrics->GetSpaceWidth(aWidth);
|
return mFontMetrics->GetSpaceWidth(aWidth);
|
||||||
return GetWidth( &aC, 1, aWidth );
|
return GetWidth( &aC, 1, aWidth );
|
||||||
}
|
}
|
||||||
|
@ -306,7 +306,6 @@ public:
|
||||||
inline
|
inline
|
||||||
NS_IMETHODIMP GetTextDimensions(const char* aString, PRUint32 aLength, nsTextDimensions& aDimensions)
|
NS_IMETHODIMP GetTextDimensions(const char* aString, PRUint32 aLength, nsTextDimensions& aDimensions)
|
||||||
{
|
{
|
||||||
aDimensions.Clear();
|
|
||||||
mFontMetrics->GetMaxAscent(aDimensions.ascent);
|
mFontMetrics->GetMaxAscent(aDimensions.ascent);
|
||||||
mFontMetrics->GetMaxDescent(aDimensions.descent);
|
mFontMetrics->GetMaxDescent(aDimensions.descent);
|
||||||
return GetWidth(aString, aLength, aDimensions.width);
|
return GetWidth(aString, aLength, aDimensions.width);
|
||||||
|
|
|
@ -62,6 +62,11 @@ CPPSRCS = \
|
||||||
nsSound.cpp \
|
nsSound.cpp \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
|
ifdef MOZ_ENABLE_XREMOTE
|
||||||
|
REQUIRES += xremoteservice
|
||||||
|
CPPSRCS += nsPhMozRemoteHelper.cpp
|
||||||
|
endif
|
||||||
|
|
||||||
SHARED_LIBRARY_LIBS = $(DIST)/lib/libxpwidgets_s.a
|
SHARED_LIBRARY_LIBS = $(DIST)/lib/libxpwidgets_s.a
|
||||||
|
|
||||||
EXTRA_DSO_LDOPTS = $(MOZ_COMPONENT_LIBS) \
|
EXTRA_DSO_LDOPTS = $(MOZ_COMPONENT_LIBS) \
|
||||||
|
|
|
@ -43,11 +43,16 @@
|
||||||
#include "nsIEventQueueService.h"
|
#include "nsIEventQueueService.h"
|
||||||
#include "nsICmdLineService.h"
|
#include "nsICmdLineService.h"
|
||||||
|
|
||||||
|
#ifdef MOZ_ENABLE_XREMOTE
|
||||||
|
#include <nsIXRemoteService.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include "nsIWidget.h"
|
#include "nsIWidget.h"
|
||||||
#include "nsIPref.h"
|
#include "nsIPref.h"
|
||||||
#include "nsPhWidgetLog.h"
|
#include "nsPhWidgetLog.h"
|
||||||
|
#include "nsCRT.h"
|
||||||
|
|
||||||
#include <Pt.h>
|
#include <Pt.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
@ -58,6 +63,9 @@ PRBool nsAppShell::gExitMainLoop = PR_FALSE;
|
||||||
static PLHashTable *sQueueHashTable = nsnull;
|
static PLHashTable *sQueueHashTable = nsnull;
|
||||||
static PLHashTable *sCountHashTable = nsnull;
|
static PLHashTable *sCountHashTable = nsnull;
|
||||||
|
|
||||||
|
// Set our static member
|
||||||
|
PRBool nsAppShell::mPtInited = PR_FALSE;
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// XPCOM CIDs
|
// XPCOM CIDs
|
||||||
|
@ -125,6 +133,55 @@ static int event_processor_callback(int fd, void *data, unsigned mode)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// A client has connected and probably will want to xremote control us
|
||||||
|
//
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifdef MOZ_ENABLE_XREMOTE
|
||||||
|
|
||||||
|
/* the connector name that a client can use to remote control this instance of mozilla */
|
||||||
|
#define BrowserRemoteServerName "MozillaBrowserRemoteServer"
|
||||||
|
#define MailRemoteServerName "MozillaMailRemoteServer"
|
||||||
|
|
||||||
|
#define MOZ_REMOTE_MSG_TYPE 100
|
||||||
|
|
||||||
|
static void const * RemoteMsgHandler( PtConnectionServer_t *connection, void *user_data,
|
||||||
|
unsigned long type, void const *msg, unsigned len, unsigned *reply_len )
|
||||||
|
{
|
||||||
|
if( type != MOZ_REMOTE_MSG_TYPE ) return NULL;
|
||||||
|
|
||||||
|
/* we are given strings and we reply with strings */
|
||||||
|
char *command = ( char * ) msg, *response = NULL;
|
||||||
|
|
||||||
|
// parse the command
|
||||||
|
nsCOMPtr<nsIXRemoteService> remoteService;
|
||||||
|
remoteService = do_GetService(NS_IXREMOTESERVICE_CONTRACTID);
|
||||||
|
|
||||||
|
if( remoteService ) {
|
||||||
|
command[len] = 0;
|
||||||
|
/* it seems we can pass any non-null value as the first argument - if this changes, pass a valid nsWidget* and move this code to nsWidget.cpp */
|
||||||
|
remoteService->ParseCommand( (nsIWidget*)0x1, command, &response );
|
||||||
|
}
|
||||||
|
|
||||||
|
PtConnectionReply( connection, response ? strlen( response ) : 0, response );
|
||||||
|
|
||||||
|
if( response ) nsCRT::free( response );
|
||||||
|
|
||||||
|
return ( void * ) 1; /* return any non NULL value to indicate we handled the message */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void client_connect( PtConnector_t *cntr, PtConnectionServer_t *csrvr, void *data )
|
||||||
|
{
|
||||||
|
PtConnectionMsgHandler_t handlers[] = { { 0, RemoteMsgHandler } };
|
||||||
|
PtConnectionAddMsgHandlers( csrvr, handlers, sizeof(handlers)/sizeof(handlers[0]) );
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// Create the application shell
|
// Create the application shell
|
||||||
|
@ -154,6 +211,38 @@ NS_IMETHODIMP nsAppShell::Create(int *bac, char **bav)
|
||||||
argv = bav;
|
argv = bav;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
This used to be done in the init function of nsToolkit. It was moved here because the phoenix
|
||||||
|
browser may ( when -ProfileManager is used ) create/ListenToEventQueue of an nsAppShell before
|
||||||
|
the toolkit is initialized and ListenToEventQueue relies on the Pt being already initialized
|
||||||
|
*/
|
||||||
|
if( !mPtInited )
|
||||||
|
{
|
||||||
|
PtInit( NULL );
|
||||||
|
PtChannelCreate(); // Force use of pulses
|
||||||
|
mPtInited = PR_TRUE;
|
||||||
|
|
||||||
|
#ifdef MOZ_ENABLE_XREMOTE
|
||||||
|
|
||||||
|
char *RemoteServerName = BrowserRemoteServerName;
|
||||||
|
char *RemoteServerNameExtra = nsnull;
|
||||||
|
|
||||||
|
if( argc > 0 && argv && argv[0] ) {
|
||||||
|
if( PL_strstr( argv[0], "Firebird" ) ) RemoteServerName = BrowserRemoteServerName;
|
||||||
|
else if( PL_strstr( argv[0], "thunderbird" ) ) RemoteServerName = MailRemoteServerName;
|
||||||
|
else {
|
||||||
|
/* full mozilla creates 2 connectors one for the browser side and another one for the mail side */
|
||||||
|
RemoteServerName = BrowserRemoteServerName;
|
||||||
|
RemoteServerNameExtra = MailRemoteServerName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* create a connector for the xremote control */
|
||||||
|
PtConnectorCreate( RemoteServerName, client_connect, NULL );
|
||||||
|
if( RemoteServerNameExtra ) PtConnectorCreate( RemoteServerNameExtra, client_connect, NULL );
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -278,6 +367,7 @@ IntHashKey(PRInt32 key)
|
||||||
NS_IMETHODIMP nsAppShell::ListenToEventQueue(nsIEventQueue *aQueue,
|
NS_IMETHODIMP nsAppShell::ListenToEventQueue(nsIEventQueue *aQueue,
|
||||||
PRBool aListen)
|
PRBool aListen)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (!sQueueHashTable) {
|
if (!sQueueHashTable) {
|
||||||
sQueueHashTable = PL_NewHashTable(3, (PLHashFunction)IntHashKey,
|
sQueueHashTable = PL_NewHashTable(3, (PLHashFunction)IntHashKey,
|
||||||
PL_CompareValues, PL_CompareValues, 0, 0);
|
PL_CompareValues, PL_CompareValues, 0, 0);
|
||||||
|
|
|
@ -81,6 +81,7 @@ public:
|
||||||
private:
|
private:
|
||||||
nsIEventQueue* mEventQueue;
|
nsIEventQueue* mEventQueue;
|
||||||
int mFD;
|
int mFD;
|
||||||
|
static PRBool mPtInited;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -51,8 +51,9 @@
|
||||||
|
|
||||||
// unicode conversion
|
// unicode conversion
|
||||||
#include "nsIPlatformCharset.h"
|
#include "nsIPlatformCharset.h"
|
||||||
|
#include "nsICharsetConverterManager.h"
|
||||||
|
|
||||||
#define DEBUG_CLIPBOARD
|
//#define DEBUG_CLIPBOARD
|
||||||
|
|
||||||
|
|
||||||
// Define this to enable the obsolete X cut buffer mechanism
|
// Define this to enable the obsolete X cut buffer mechanism
|
||||||
|
@ -65,6 +66,8 @@ NS_IMPL_ISUPPORTS1(nsClipboard, nsIClipboard)
|
||||||
#define Ph_CLIPBOARD_TYPE_IMAGE "IMAG"
|
#define Ph_CLIPBOARD_TYPE_IMAGE "IMAG"
|
||||||
#define Ph_CLIPBOARD_TYPE_HTML "HTML"
|
#define Ph_CLIPBOARD_TYPE_HTML "HTML"
|
||||||
|
|
||||||
|
static unsigned long get_flavour_timestamp( char *type );
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// nsClipboard constructor
|
// nsClipboard constructor
|
||||||
|
@ -73,7 +76,7 @@ NS_IMPL_ISUPPORTS1(nsClipboard, nsIClipboard)
|
||||||
nsClipboard::nsClipboard()
|
nsClipboard::nsClipboard()
|
||||||
{
|
{
|
||||||
#ifdef DEBUG_CLIPBOARD
|
#ifdef DEBUG_CLIPBOARD
|
||||||
//printf("nsClipboard::nsClipboard()\n");
|
printf("nsClipboard::nsClipboard()\n");
|
||||||
#endif /* DEBUG_CLIPBOARD */
|
#endif /* DEBUG_CLIPBOARD */
|
||||||
|
|
||||||
NS_INIT_ISUPPORTS();
|
NS_INIT_ISUPPORTS();
|
||||||
|
@ -92,7 +95,7 @@ nsClipboard::nsClipboard()
|
||||||
nsClipboard::~nsClipboard()
|
nsClipboard::~nsClipboard()
|
||||||
{
|
{
|
||||||
#ifdef DEBUG_CLIPBOARD
|
#ifdef DEBUG_CLIPBOARD
|
||||||
// printf("nsClipboard::~nsClipboard()\n");
|
printf("nsClipboard::~nsClipboard()\n");
|
||||||
#endif /* DEBUG_CLIPBOARD */
|
#endif /* DEBUG_CLIPBOARD */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -144,7 +147,7 @@ NS_IMETHODIMP nsClipboard::GetData(nsITransferable * aTransferable, PRInt32 aWhi
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#ifdef DEBUG_CLIPBOARD
|
#ifdef DEBUG_CLIPBOARD
|
||||||
//printf(" nsClipboard::GetData(), aTransferable is NULL.\n");
|
printf(" nsClipboard::GetData(), aTransferable is NULL.\n");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -204,7 +207,7 @@ NS_IMETHODIMP nsClipboard::SetNativeClipboardData(PRInt32 aWhichClipboard)
|
||||||
return (NS_ERROR_FAILURE);
|
return (NS_ERROR_FAILURE);
|
||||||
|
|
||||||
#ifdef DEBUG_CLIPBOARD
|
#ifdef DEBUG_CLIPBOARD
|
||||||
//printf(" nsClipboard::SetNativeClipboardData(%i)\n", aWhichClipboard);
|
printf(" nsClipboard::SetNativeClipboardData(%i)\n", aWhichClipboard);
|
||||||
#endif /* DEBUG_CLIPBOARD */
|
#endif /* DEBUG_CLIPBOARD */
|
||||||
|
|
||||||
nsCOMPtr<nsITransferable> transferable(GetTransferable(aWhichClipboard));
|
nsCOMPtr<nsITransferable> transferable(GetTransferable(aWhichClipboard));
|
||||||
|
@ -213,7 +216,7 @@ NS_IMETHODIMP nsClipboard::SetNativeClipboardData(PRInt32 aWhichClipboard)
|
||||||
if (nsnull == transferable)
|
if (nsnull == transferable)
|
||||||
{
|
{
|
||||||
#ifdef DEBUG_CLIPBOARD
|
#ifdef DEBUG_CLIPBOARD
|
||||||
//printf("nsClipboard::SetNativeClipboardData(): no transferable!\n");
|
printf("nsClipboard::SetNativeClipboardData(): no transferable!\n");
|
||||||
#endif
|
#endif
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
}
|
}
|
||||||
|
@ -243,7 +246,7 @@ NS_IMETHODIMP nsClipboard::SetNativeClipboardData(PRInt32 aWhichClipboard)
|
||||||
nsXPIDLCString flavorStr;
|
nsXPIDLCString flavorStr;
|
||||||
currentFlavor->ToString(getter_Copies(flavorStr));
|
currentFlavor->ToString(getter_Copies(flavorStr));
|
||||||
|
|
||||||
nsresult err = GetFormat( flavorStr, &cliphdr[index] );
|
nsresult err = GetFormat( flavorStr, cliphdr[index].type );
|
||||||
if( err != NS_OK )
|
if( err != NS_OK )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -252,18 +255,33 @@ NS_IMETHODIMP nsClipboard::SetNativeClipboardData(PRInt32 aWhichClipboard)
|
||||||
transferable->GetTransferData( flavorStr, getter_AddRefs(genericDataWrapper), &dataLen );
|
transferable->GetTransferData( flavorStr, getter_AddRefs(genericDataWrapper), &dataLen );
|
||||||
nsPrimitiveHelpers::CreateDataFromPrimitive ( flavorStr, genericDataWrapper, &data, dataLen );
|
nsPrimitiveHelpers::CreateDataFromPrimitive ( flavorStr, genericDataWrapper, &data, dataLen );
|
||||||
|
|
||||||
if (strcmp(cliphdr[index].type, Ph_CLIPBOARD_TYPE_MOZ_BOOKMARK) == 0)
|
if( !strcmp(cliphdr[index].type, Ph_CLIPBOARD_TYPE_TEXT) ||
|
||||||
|
!strcmp(cliphdr[index].type, Ph_CLIPBOARD_TYPE_HTML) ||
|
||||||
|
!strcmp(cliphdr[index].type, Ph_CLIPBOARD_TYPE_MOZ_BOOKMARK) )
|
||||||
{
|
{
|
||||||
cliphdr[index].length = dataLen;
|
PRUnichar* castedUnicode = NS_REINTERPRET_CAST(PRUnichar*, data);
|
||||||
cliphdr[index].data = data;
|
char *utf8String = ToNewUTF8String(nsDependentString(castedUnicode, dataLen/2));
|
||||||
}
|
nsMemory::Free(NS_REINTERPRET_CAST(char*, data));
|
||||||
else if (strcmp(cliphdr[index].type, Ph_CLIPBOARD_TYPE_TEXT) == 0)
|
|
||||||
|
if( !strcmp(cliphdr[index].type, Ph_CLIPBOARD_TYPE_TEXT) )
|
||||||
{
|
{
|
||||||
int len = 0;
|
/* we have to create a null terminated string, because
|
||||||
char *plain;
|
PhClipboardCopyString does that and some other applications
|
||||||
nsPrimitiveHelpers::ConvertUnicodeToPlatformPlainText( (PRUnichar*)data, dataLen/2, &plain, &len );
|
rely on the null terminated thing
|
||||||
|
*/
|
||||||
|
PRInt32 len = strlen(utf8String);
|
||||||
|
char *temp = ( char * ) nsMemory::Alloc( len + 1 );
|
||||||
|
memcpy( temp, utf8String, len );
|
||||||
|
temp[len] = 0;
|
||||||
|
nsMemory::Free(NS_REINTERPRET_CAST(char*, utf8String));
|
||||||
|
|
||||||
cliphdr[index].length = len+1;
|
cliphdr[index].length = len+1;
|
||||||
cliphdr[index].data = plain;
|
cliphdr[index].data = temp;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
cliphdr[index].length = strlen(utf8String);
|
||||||
|
cliphdr[index].data = utf8String;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
|
@ -271,7 +289,7 @@ NS_IMETHODIMP nsClipboard::SetNativeClipboardData(PRInt32 aWhichClipboard)
|
||||||
|
|
||||||
PhClipboardCopy( 1, index, cliphdr );
|
PhClipboardCopy( 1, index, cliphdr );
|
||||||
for( PRUint32 k=0; k<index; k++)
|
for( PRUint32 k=0; k<index; k++)
|
||||||
nsCRT::free ( NS_REINTERPRET_CAST(char*, cliphdr[k].data) );
|
nsMemory::Free(NS_REINTERPRET_CAST(char*, cliphdr[k].data));
|
||||||
|
|
||||||
free( cliphdr );
|
free( cliphdr );
|
||||||
|
|
||||||
|
@ -292,15 +310,16 @@ nsClipboard::GetNativeClipboardData(nsITransferable * aTransferable,
|
||||||
{
|
{
|
||||||
if (aWhichClipboard == kSelectionClipboard)
|
if (aWhichClipboard == kSelectionClipboard)
|
||||||
return (NS_ERROR_FAILURE);
|
return (NS_ERROR_FAILURE);
|
||||||
|
|
||||||
#ifdef DEBUG_CLIPBOARD
|
#ifdef DEBUG_CLIPBOARD
|
||||||
//printf("nsClipboard::GetNativeClipboardData(%i)\n", aWhichClipboard);
|
printf("nsClipboard::GetNativeClipboardData(%i)\n", aWhichClipboard);
|
||||||
#endif /* DEBUG_CLIPBOARD */
|
#endif /* DEBUG_CLIPBOARD */
|
||||||
|
|
||||||
// make sure we have a good transferable
|
// make sure we have a good transferable
|
||||||
if (nsnull == aTransferable)
|
if (nsnull == aTransferable)
|
||||||
{
|
{
|
||||||
#ifdef DEBUG_CLIPBOARD
|
#ifdef DEBUG_CLIPBOARD
|
||||||
// printf(" GetNativeClipboardData: Transferable is null!\n");
|
printf(" GetNativeClipboardData: Transferable is null!\n");
|
||||||
#endif
|
#endif
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
}
|
}
|
||||||
|
@ -320,16 +339,28 @@ nsClipboard::GetNativeClipboardData(nsITransferable * aTransferable,
|
||||||
if (cnt > 0)
|
if (cnt > 0)
|
||||||
{
|
{
|
||||||
void *clipPtr;
|
void *clipPtr;
|
||||||
PhClipHeader cliptype;
|
|
||||||
PhClipHeader *cliphdr;
|
PhClipHeader *cliphdr;
|
||||||
void *data = nsnull;
|
char *data = nsnull, type[8];
|
||||||
PRUint32 dataLen;
|
PRUint32 dataLen;
|
||||||
|
|
||||||
clipPtr = PhClipboardPasteStart( 1 );
|
clipPtr = PhClipboardPasteStart( 1 );
|
||||||
if(!clipPtr)
|
if(!clipPtr) return NS_ERROR_FAILURE;
|
||||||
return NS_ERROR_FAILURE;
|
|
||||||
|
|
||||||
for ( PRUint32 i = 0; i < cnt; ++i )
|
/*
|
||||||
|
Look at the timestamps of the data in the clipboard and eliminate the flavours if they are not synchronized.
|
||||||
|
We can have a HTML flavour from a previous copy and a TEXT flavour from a more recent copy from another application
|
||||||
|
( from instance from ped or pterm ). The HTML flavour and TEXT flavour are desynchronized and we have
|
||||||
|
to use only the most recent one */
|
||||||
|
unsigned long *dont_use_flavour = ( unsigned long * ) calloc( 1, cnt );
|
||||||
|
if( !dont_use_flavour ) {
|
||||||
|
PhClipboardPasteFinish( clipPtr );
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long max_time = 0;
|
||||||
|
PRUint32 i;
|
||||||
|
|
||||||
|
for ( i = 0; i < cnt; ++i )
|
||||||
{
|
{
|
||||||
nsCOMPtr<nsISupports> genericFlavor;
|
nsCOMPtr<nsISupports> genericFlavor;
|
||||||
flavorList->GetElementAt ( i, getter_AddRefs(genericFlavor) );
|
flavorList->GetElementAt ( i, getter_AddRefs(genericFlavor) );
|
||||||
|
@ -338,65 +369,102 @@ nsClipboard::GetNativeClipboardData(nsITransferable * aTransferable,
|
||||||
{
|
{
|
||||||
nsXPIDLCString flavorStr;
|
nsXPIDLCString flavorStr;
|
||||||
currentFlavor->ToString ( getter_Copies(flavorStr) );
|
currentFlavor->ToString ( getter_Copies(flavorStr) );
|
||||||
nsresult err = GetFormat( flavorStr, &cliptype);
|
|
||||||
|
nsresult err = GetFormat( flavorStr, type );
|
||||||
if (err != NS_OK)
|
if (err != NS_OK)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
cliphdr = PhClipboardPasteType( clipPtr, cliptype.type );
|
dont_use_flavour[i] = get_flavour_timestamp( type );
|
||||||
|
if( dont_use_flavour[i] > max_time ) max_time = dont_use_flavour[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( i = 0; i < cnt; ++i )
|
||||||
|
{
|
||||||
|
if( abs( dont_use_flavour[i] - max_time ) >= 4 )
|
||||||
|
dont_use_flavour[i] = 1; /* this flavour is desynchronized */
|
||||||
|
else dont_use_flavour[i] = 0; /* this flavour is ok */
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( i = 0; i < cnt; ++i )
|
||||||
|
{
|
||||||
|
if( dont_use_flavour[i] ) continue; /* this flavour is desynchronized */
|
||||||
|
nsCOMPtr<nsISupports> genericFlavor;
|
||||||
|
flavorList->GetElementAt ( i, getter_AddRefs(genericFlavor) );
|
||||||
|
nsCOMPtr<nsISupportsCString> currentFlavor ( do_QueryInterface(genericFlavor) );
|
||||||
|
if ( currentFlavor )
|
||||||
|
{
|
||||||
|
nsXPIDLCString flavorStr;
|
||||||
|
currentFlavor->ToString ( getter_Copies(flavorStr) );
|
||||||
|
|
||||||
|
nsresult err = GetFormat( flavorStr, type );
|
||||||
|
if (err != NS_OK)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
cliphdr = PhClipboardPasteType( clipPtr, type );
|
||||||
if (cliphdr)
|
if (cliphdr)
|
||||||
{
|
{
|
||||||
int len_unicode;
|
data = (char*)cliphdr->data;
|
||||||
PRUnichar *unicode;
|
|
||||||
|
|
||||||
data = cliphdr->data;
|
if( !strcmp(type, Ph_CLIPBOARD_TYPE_TEXT) )
|
||||||
dataLen = cliphdr->length;
|
/* for the Ph_CLIPBOARD_TYPE_TEXT, we null terminate the data, since PhClipboardCopyString() does that */
|
||||||
|
dataLen = cliphdr->length - 1;
|
||||||
|
else dataLen = cliphdr->length;
|
||||||
|
|
||||||
|
|
||||||
|
if( !strcmp(type, Ph_CLIPBOARD_TYPE_TEXT) ||
|
||||||
|
!strcmp(type, Ph_CLIPBOARD_TYPE_HTML) ||
|
||||||
|
!strcmp(type, Ph_CLIPBOARD_TYPE_MOZ_BOOKMARK) )
|
||||||
|
{
|
||||||
|
nsresult rv;
|
||||||
|
PRInt32 outUnicodeLen;
|
||||||
|
PRUnichar *unicodeData = nsnull;
|
||||||
|
|
||||||
|
// get the decoder
|
||||||
|
nsCOMPtr<nsIUnicodeDecoder> decoder;
|
||||||
|
nsCOMPtr<nsICharsetConverterManager> ccm = do_GetService(NS_CHARSETCONVERTERMANAGER_CONTRACTID, &rv);
|
||||||
|
rv = ccm->GetUnicodeDecoderRaw("UTF-8", getter_AddRefs(decoder));
|
||||||
|
|
||||||
|
if( NS_SUCCEEDED(rv) )
|
||||||
|
{
|
||||||
|
|
||||||
|
decoder->GetMaxLength(data, dataLen, &outUnicodeLen); // |outUnicodeLen| is number of chars
|
||||||
|
if (outUnicodeLen) {
|
||||||
|
unicodeData = NS_REINTERPRET_CAST(PRUnichar*, nsMemory::Alloc((outUnicodeLen + 1) * sizeof(PRUnichar)));
|
||||||
|
if ( unicodeData ) {
|
||||||
|
PRInt32 numberTmp = dataLen;
|
||||||
|
rv = decoder->Convert(data, &numberTmp, unicodeData, &outUnicodeLen);
|
||||||
|
#ifdef DEBUG_CLIPBOARD
|
||||||
|
if (numberTmp != dataLen)
|
||||||
|
printf("didn't consume all the bytes\n");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
(unicodeData)[outUnicodeLen] = '\0'; // null terminate. Convert() doesn't do it for us
|
||||||
|
}
|
||||||
|
} // if valid length
|
||||||
|
|
||||||
|
|
||||||
|
data = NS_REINTERPRET_CAST(char*,unicodeData);
|
||||||
|
dataLen = outUnicodeLen * 2;
|
||||||
|
|
||||||
nsCOMPtr<nsISupports> genericDataWrapper;
|
nsCOMPtr<nsISupports> genericDataWrapper;
|
||||||
if (strcmp(cliptype.type, Ph_CLIPBOARD_TYPE_MOZ_BOOKMARK) == 0)
|
nsPrimitiveHelpers::CreatePrimitiveForData( flavorStr, data, dataLen, getter_AddRefs(genericDataWrapper) );
|
||||||
{
|
aTransferable->SetTransferData( flavorStr, genericDataWrapper, dataLen );
|
||||||
len_unicode = cliphdr->length;
|
|
||||||
nsPrimitiveHelpers::CreatePrimitiveForData ( flavorStr, cliphdr->data, len_unicode, getter_AddRefs(genericDataWrapper) );
|
/* free the allocated memory */
|
||||||
}
|
nsMemory::Free( unicodeData );
|
||||||
else if ((strcmp(cliptype.type, Ph_CLIPBOARD_TYPE_TEXT) == 0) || (strcmp(cliptype.type, Ph_CLIPBOARD_TYPE_HTML) == 0))
|
|
||||||
{
|
|
||||||
nsPrimitiveHelpers::ConvertPlatformPlainTextToUnicode( (char*) data, dataLen, &unicode, &len_unicode );
|
|
||||||
len_unicode--;
|
|
||||||
len_unicode *= 2;
|
|
||||||
nsPrimitiveHelpers::CreatePrimitiveForData ( flavorStr, unicode, len_unicode, getter_AddRefs(genericDataWrapper) );
|
|
||||||
}
|
|
||||||
|
|
||||||
aTransferable->SetTransferData(flavorStr, genericDataWrapper, len_unicode );
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
free( dont_use_flavour );
|
||||||
PhClipboardPasteFinish( clipPtr );
|
PhClipboardPasteFinish( clipPtr );
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
// We're back from the callback, no longer blocking:
|
|
||||||
mBlocking = PR_FALSE;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Now we have data in mSelectionData.data.
|
|
||||||
// We just have to copy it to the transferable.
|
|
||||||
//
|
|
||||||
|
|
||||||
if ( foundData ) {
|
|
||||||
nsCOMPtr<nsISupports> genericDataWrapper;
|
|
||||||
nsPrimitiveHelpers::CreatePrimitiveForData(foundFlavor.get(), mSelectionData.data,
|
|
||||||
mSelectionData.length, getter_AddRefs(genericDataWrapper));
|
|
||||||
aTransferable->SetTransferData(foundFlavor.get(),
|
|
||||||
genericDataWrapper,
|
|
||||||
mSelectionData.length);
|
|
||||||
}
|
|
||||||
|
|
||||||
// transferable is now owning the data, so we can free it.
|
|
||||||
nsMemory::Free(mSelectionData.data);
|
|
||||||
mSelectionData.data = nsnull;
|
|
||||||
mSelectionData.length = 0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -412,7 +480,7 @@ NS_IMETHODIMP nsClipboard::ForceDataToClipboard(PRInt32 aWhichClipboard)
|
||||||
if (aWhichClipboard == kSelectionClipboard)
|
if (aWhichClipboard == kSelectionClipboard)
|
||||||
return (NS_ERROR_FAILURE);
|
return (NS_ERROR_FAILURE);
|
||||||
#ifdef DEBUG_CLIPBOARD
|
#ifdef DEBUG_CLIPBOARD
|
||||||
//printf(" nsClipboard::ForceDataToClipboard()\n");
|
printf(" nsClipboard::ForceDataToClipboard()\n");
|
||||||
#endif /* DEBUG_CLIPBOARD */
|
#endif /* DEBUG_CLIPBOARD */
|
||||||
|
|
||||||
// make sure we have a good transferable
|
// make sure we have a good transferable
|
||||||
|
@ -440,7 +508,7 @@ nsClipboard::HasDataMatchingFlavors(nsISupportsArray* aFlavorList,
|
||||||
// in GetNativeClipboardData(). From this point on, no client will
|
// in GetNativeClipboardData(). From this point on, no client will
|
||||||
// ever ask for text/plain explicitly. If they do, you must ASSERT!
|
// ever ask for text/plain explicitly. If they do, you must ASSERT!
|
||||||
#ifdef DEBUG_CLIPBOARD
|
#ifdef DEBUG_CLIPBOARD
|
||||||
// printf(" nsClipboard::HasDataMatchingFlavors()\n {\n");
|
printf(" nsClipboard::HasDataMatchingFlavors()\n {\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
nsresult res = NS_OK;
|
nsresult res = NS_OK;
|
||||||
|
@ -453,7 +521,7 @@ nsClipboard::HasDataMatchingFlavors(nsISupportsArray* aFlavorList,
|
||||||
nsCAutoString foundFlavor;
|
nsCAutoString foundFlavor;
|
||||||
if (cnt > 0) {
|
if (cnt > 0) {
|
||||||
void *clipPtr;
|
void *clipPtr;
|
||||||
PhClipHeader cliptype;
|
char type[8];
|
||||||
PhClipHeader *cliphdr;
|
PhClipHeader *cliphdr;
|
||||||
|
|
||||||
clipPtr = PhClipboardPasteStart( 1 );
|
clipPtr = PhClipboardPasteStart( 1 );
|
||||||
|
@ -470,10 +538,10 @@ nsClipboard::HasDataMatchingFlavors(nsISupportsArray* aFlavorList,
|
||||||
nsXPIDLCString flavorStr;
|
nsXPIDLCString flavorStr;
|
||||||
currentFlavor->ToString ( getter_Copies(flavorStr) );
|
currentFlavor->ToString ( getter_Copies(flavorStr) );
|
||||||
|
|
||||||
nsresult err = GetFormat( flavorStr, &cliptype);
|
nsresult err = GetFormat( flavorStr, type );
|
||||||
if (err != NS_OK) continue;
|
if (err != NS_OK) continue;
|
||||||
|
|
||||||
cliphdr = PhClipboardPasteType( clipPtr, cliptype.type );
|
cliphdr = PhClipboardPasteType( clipPtr, type );
|
||||||
if (cliphdr)
|
if (cliphdr)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -491,24 +559,19 @@ nsClipboard::HasDataMatchingFlavors(nsISupportsArray* aFlavorList,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
nsresult nsClipboard::GetFormat(const char* aMimeStr, PhClipHeader *cliphdr )
|
nsresult nsClipboard::GetFormat(const char* aMimeStr, char *format )
|
||||||
{
|
{
|
||||||
nsCAutoString mimeStr ( CBufDescriptor(NS_CONST_CAST(char*,aMimeStr), PR_TRUE, PL_strlen(aMimeStr)+1) );
|
nsCAutoString mimeStr ( CBufDescriptor(NS_CONST_CAST(char*,aMimeStr), PR_TRUE, PL_strlen(aMimeStr)+1) );
|
||||||
|
int ret = NS_OK;
|
||||||
|
|
||||||
cliphdr->type[0]=0;
|
if( mimeStr.Equals(kUnicodeMime) || mimeStr.Equals(kTextMime) )
|
||||||
if (mimeStr.Equals(kUnicodeMime) || mimeStr.Equals(kHTMLMime) || mimeStr.Equals(kTextMime))
|
strcpy( format, Ph_CLIPBOARD_TYPE_TEXT );
|
||||||
strcpy( cliphdr->type, Ph_CLIPBOARD_TYPE_TEXT );
|
|
||||||
else if( mimeStr.Equals(kHTMLMime) )
|
else if( mimeStr.Equals(kHTMLMime) )
|
||||||
strcpy( cliphdr->type, Ph_CLIPBOARD_TYPE_HTML );
|
strcpy( format, Ph_CLIPBOARD_TYPE_HTML );
|
||||||
else if (mimeStr.Equals("moz/bookmarkclipboarditem"))
|
else if (mimeStr.Equals("moz/bookmarkclipboarditem"))
|
||||||
strcpy( cliphdr->type, Ph_CLIPBOARD_TYPE_MOZ_BOOKMARK );
|
strcpy( format, Ph_CLIPBOARD_TYPE_MOZ_BOOKMARK );
|
||||||
// else if (mimeStr.Equals(kPNGImageMime) || mimeStr.Equals(kJPEGImageMime) || mimeStr.Equals(kGIFImageMime))
|
else ret = NS_ERROR_FAILURE;
|
||||||
// strcpy( cliphdr->type, Ph_CLIPBOARD_TYPE_IMAGE);
|
return ret;
|
||||||
|
|
||||||
if (cliphdr->type[0] == 0)
|
|
||||||
return NS_ERROR_FAILURE;
|
|
||||||
else
|
|
||||||
return NS_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* inline */
|
/* inline */
|
||||||
|
@ -526,4 +589,27 @@ nsITransferable *nsClipboard::GetTransferable(PRInt32 aWhichClipboard)
|
||||||
return transferable;
|
return transferable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static unsigned long get_flavour_timestamp( char *type )
|
||||||
|
{
|
||||||
|
int ig = 1; /* we always use input group 1 in mozilla */
|
||||||
|
char fname[512];
|
||||||
|
extern struct _Ph_ctrl *_Ph_;
|
||||||
|
|
||||||
|
strcpy( fname, "/var/clipboard/" );
|
||||||
|
if( access( fname, X_OK ) != 0 )
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
struct stat buf;
|
||||||
|
if( fstat( _Ph_->fd, &buf ) != 0 )
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if(gethostname(&fname[strlen(fname)],PATH_MAX-40)!=0)
|
||||||
|
strcpy(&fname[strlen(fname)],"localhost");
|
||||||
|
|
||||||
|
sprintf( &fname[strlen(fname)], "/%08x/%d.%s",buf.st_uid, ig, type );
|
||||||
|
struct stat st;
|
||||||
|
if( stat( fname, &st ) != 0 )
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return st.st_mtime;
|
||||||
|
}
|
||||||
|
|
|
@ -57,7 +57,7 @@ protected:
|
||||||
NS_IMETHOD SetNativeClipboardData(PRInt32 aWhichClipboard);
|
NS_IMETHOD SetNativeClipboardData(PRInt32 aWhichClipboard);
|
||||||
NS_IMETHOD GetNativeClipboardData(nsITransferable * aTransferable,
|
NS_IMETHOD GetNativeClipboardData(nsITransferable * aTransferable,
|
||||||
PRInt32 aWhichClipboard );
|
PRInt32 aWhichClipboard );
|
||||||
nsresult GetFormat(const char* aMimeStr, PhClipHeader *cliphdr );
|
nsresult GetFormat(const char* aMimeStr, char *format );
|
||||||
|
|
||||||
PRBool mIgnoreEmptyNotification;
|
PRBool mIgnoreEmptyNotification;
|
||||||
inline nsITransferable *GetTransferable(PRInt32 aWhichClipboard);
|
inline nsITransferable *GetTransferable(PRInt32 aWhichClipboard);
|
||||||
|
|
|
@ -79,12 +79,13 @@ nsFilePicker::~nsFilePicker()
|
||||||
// Show - Display the file dialog
|
// Show - Display the file dialog
|
||||||
//
|
//
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
NS_IMETHODIMP nsFilePicker::Show(PRInt16 *retval)
|
NS_IMETHODIMP nsFilePicker::Show(PRInt16 *aReturnVal)
|
||||||
{
|
{
|
||||||
PRBool result = PR_TRUE;
|
|
||||||
PRInt32 flags = 0;
|
PRInt32 flags = 0;
|
||||||
char *btn1;
|
char *btn1;
|
||||||
|
|
||||||
|
NS_ENSURE_ARG_POINTER(aReturnVal);
|
||||||
|
|
||||||
if (mMode == modeGetFolder) {
|
if (mMode == modeGetFolder) {
|
||||||
flags |= Pt_FSR_SELECT_DIRS|Pt_FSR_NO_SELECT_FILES;
|
flags |= Pt_FSR_SELECT_DIRS|Pt_FSR_NO_SELECT_FILES;
|
||||||
btn1 = "&Select";
|
btn1 = "&Select";
|
||||||
|
@ -163,12 +164,26 @@ NS_IMETHODIMP nsFilePicker::Show(PRInt16 *retval)
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*aReturnVal = returnOK;
|
||||||
|
|
||||||
if( info.ret == Pt_FSDIALOG_BTN2 ) {
|
if( info.ret == Pt_FSDIALOG_BTN2 ) {
|
||||||
result = PR_FALSE;
|
*aReturnVal = returnCancel;
|
||||||
}
|
}
|
||||||
else if( mMode != modeOpenMultiple ) {
|
else if( mMode != modeOpenMultiple ) {
|
||||||
mFile.SetLength(0);
|
mFile.SetLength(0);
|
||||||
mFile.Append( info.path );
|
mFile.Append( info.path );
|
||||||
|
|
||||||
|
if( mMode == modeSave ) {
|
||||||
|
nsCOMPtr<nsILocalFile> file(do_CreateInstance("@mozilla.org/file/local;1"));
|
||||||
|
NS_ENSURE_TRUE(file, NS_ERROR_FAILURE);
|
||||||
|
|
||||||
|
file->InitWithNativePath( mFile );
|
||||||
|
|
||||||
|
PRBool exists = PR_FALSE;
|
||||||
|
file->Exists(&exists);
|
||||||
|
if (exists)
|
||||||
|
*aReturnVal = returnReplace;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else { /* here mMode is modeOpenMultiple */
|
else { /* here mMode is modeOpenMultiple */
|
||||||
PtFileSelectorInfo_t *minfo = info.minfo;
|
PtFileSelectorInfo_t *minfo = info.minfo;
|
||||||
|
|
|
@ -40,9 +40,6 @@
|
||||||
|
|
||||||
#include "nsPhWidgetLog.h"
|
#include "nsPhWidgetLog.h"
|
||||||
|
|
||||||
// Set our static member to NULL
|
|
||||||
PhDrawContext_t *nsToolkit::mDefaultPhotonDrawContext = nsnull;
|
|
||||||
PRBool nsToolkit::mPtInited = PR_FALSE;
|
|
||||||
//
|
//
|
||||||
// Static thread local storage index of the Toolkit
|
// Static thread local storage index of the Toolkit
|
||||||
// object associated with a given thread...
|
// object associated with a given thread...
|
||||||
|
@ -80,33 +77,9 @@ nsToolkit::~nsToolkit()
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
NS_METHOD nsToolkit::Init(PRThread *aThread)
|
NS_METHOD nsToolkit::Init(PRThread *aThread)
|
||||||
{
|
{
|
||||||
/* Run this only once per application startup */
|
|
||||||
if( !mPtInited )
|
|
||||||
{
|
|
||||||
PtInit( NULL );
|
|
||||||
PtChannelCreate(); // Force use of pulses
|
|
||||||
mPtInited = PR_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mDefaultPhotonDrawContext == nsnull)
|
|
||||||
{
|
|
||||||
mDefaultPhotonDrawContext = PhDCGetCurrent();
|
|
||||||
}
|
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
PhDrawContext_t *nsToolkit::GetDefaultPhotonDrawContext()
|
|
||||||
{
|
|
||||||
if (mDefaultPhotonDrawContext == NULL)
|
|
||||||
{
|
|
||||||
NS_ASSERTION(mDefaultPhotonDrawContext, "nsToolkit::GetDefaultPhotonDrawContext mDefaultPhotonDrawContext is NULL");
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
|
|
||||||
return nsToolkit::mDefaultPhotonDrawContext;
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// Return the nsIToolkit for the current thread. If a toolkit does not
|
// Return the nsIToolkit for the current thread. If a toolkit does not
|
||||||
|
|
|
@ -51,12 +51,6 @@ public:
|
||||||
NS_DECL_ISUPPORTS
|
NS_DECL_ISUPPORTS
|
||||||
|
|
||||||
NS_IMETHOD Init( PRThread *aThread );
|
NS_IMETHOD Init( PRThread *aThread );
|
||||||
|
|
||||||
static PhDrawContext_t *GetDefaultPhotonDrawContext();
|
|
||||||
|
|
||||||
private:
|
|
||||||
static PRBool mPtInited;
|
|
||||||
static PhDrawContext_t *mDefaultPhotonDrawContext;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -429,7 +429,7 @@ NS_METHOD nsWidget::SetCursor( nsCursor aCursor ) {
|
||||||
// Only change cursor if it's changing
|
// Only change cursor if it's changing
|
||||||
if( aCursor != mCursor ) {
|
if( aCursor != mCursor ) {
|
||||||
|
|
||||||
unsigned short curs = 0;
|
unsigned short curs = Ph_CURSOR_POINTER;
|
||||||
PgColor_t color = Ph_CURSOR_DEFAULT_COLOR;
|
PgColor_t color = Ph_CURSOR_DEFAULT_COLOR;
|
||||||
|
|
||||||
switch( aCursor ) {
|
switch( aCursor ) {
|
||||||
|
@ -534,7 +534,7 @@ NS_METHOD nsWidget::SetCursor( nsCursor aCursor ) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( mWidget && curs ) {
|
if( mWidget ) {
|
||||||
PtArg_t args[2];
|
PtArg_t args[2];
|
||||||
|
|
||||||
PtSetArg( &args[0], Pt_ARG_CURSOR_TYPE, curs, 0 );
|
PtSetArg( &args[0], Pt_ARG_CURSOR_TYPE, curs, 0 );
|
||||||
|
@ -797,6 +797,7 @@ static struct nsKeyConverter nsKeycodes[] = {
|
||||||
{ NS_VK_CANCEL, Pk_Cancel, PR_FALSE },
|
{ NS_VK_CANCEL, Pk_Cancel, PR_FALSE },
|
||||||
{ NS_VK_BACK, Pk_BackSpace, PR_FALSE },
|
{ NS_VK_BACK, Pk_BackSpace, PR_FALSE },
|
||||||
{ NS_VK_TAB, Pk_Tab, PR_FALSE },
|
{ NS_VK_TAB, Pk_Tab, PR_FALSE },
|
||||||
|
{ NS_VK_TAB, Pk_KP_Tab, PR_FALSE },
|
||||||
{ NS_VK_CLEAR, Pk_Clear, PR_FALSE },
|
{ NS_VK_CLEAR, Pk_Clear, PR_FALSE },
|
||||||
{ NS_VK_RETURN, Pk_Return, PR_FALSE },
|
{ NS_VK_RETURN, Pk_Return, PR_FALSE },
|
||||||
{ NS_VK_SHIFT, Pk_Shift_L, PR_FALSE },
|
{ NS_VK_SHIFT, Pk_Shift_L, PR_FALSE },
|
||||||
|
@ -898,11 +899,10 @@ inline void nsWidget::InitKeyEvent(PhKeyEvent_t *aPhKeyEvent,
|
||||||
anEvent.point.y = 0;
|
anEvent.point.y = 0;
|
||||||
|
|
||||||
PRBool IsChar;
|
PRBool IsChar;
|
||||||
unsigned long keysym;
|
unsigned long vkey;
|
||||||
if (Pk_KF_Cap_Valid & aPhKeyEvent->key_flags)
|
if (Pk_KF_Cap_Valid & aPhKeyEvent->key_flags)
|
||||||
keysym = nsConvertKey(aPhKeyEvent->key_sym, &IsChar);
|
vkey = nsConvertKey(aPhKeyEvent->key_cap, &IsChar);
|
||||||
else
|
else vkey = nsConvertKey(aPhKeyEvent->key_sym, &IsChar);
|
||||||
keysym = nsConvertKey(aPhKeyEvent->key_cap, &IsChar);
|
|
||||||
|
|
||||||
anEvent.isShift = ( aPhKeyEvent->key_mods & Pk_KM_Shift ) ? PR_TRUE : PR_FALSE;
|
anEvent.isShift = ( aPhKeyEvent->key_mods & Pk_KM_Shift ) ? PR_TRUE : PR_FALSE;
|
||||||
anEvent.isControl = ( aPhKeyEvent->key_mods & Pk_KM_Ctrl ) ? PR_TRUE : PR_FALSE;
|
anEvent.isControl = ( aPhKeyEvent->key_mods & Pk_KM_Ctrl ) ? PR_TRUE : PR_FALSE;
|
||||||
|
@ -915,12 +915,11 @@ inline void nsWidget::InitKeyEvent(PhKeyEvent_t *aPhKeyEvent,
|
||||||
|
|
||||||
if ((anEvent.isControl) || (anEvent.isAlt))
|
if ((anEvent.isControl) || (anEvent.isAlt))
|
||||||
anEvent.charCode = aPhKeyEvent->key_cap;
|
anEvent.charCode = aPhKeyEvent->key_cap;
|
||||||
else
|
else anEvent.isShift = anEvent.isControl = anEvent.isAlt = anEvent.isMeta = PR_FALSE;
|
||||||
anEvent.isShift = anEvent.isControl = anEvent.isAlt = anEvent.isMeta = PR_FALSE;
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
anEvent.charCode = 0;
|
anEvent.charCode = 0;
|
||||||
anEvent.keyCode = (keysym & 0x00FF);
|
anEvent.keyCode = vkey;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1191,14 +1190,13 @@ int nsWidget::GotFocusCallback( PtWidget_t *widget, void *data, PtCallbackInfo_t
|
||||||
pWidget->DispatchWindowEvent(&event);
|
pWidget->DispatchWindowEvent(&event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
|
pWidget->DispatchStandardEvent(NS_GOTFOCUS);
|
||||||
|
|
||||||
if( sJustGotActivated ) {
|
if( sJustGotActivated ) {
|
||||||
sJustGotActivated = PR_FALSE;
|
sJustGotActivated = PR_FALSE;
|
||||||
pWidget->DispatchStandardEvent(NS_ACTIVATE);
|
pWidget->DispatchStandardEvent(NS_ACTIVATE);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
pWidget->DispatchStandardEvent(NS_GOTFOCUS);
|
|
||||||
|
|
||||||
return Pt_CONTINUE;
|
return Pt_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,12 +48,18 @@
|
||||||
#include "nsLookAndFeel.h"
|
#include "nsLookAndFeel.h"
|
||||||
#include "nsTransferable.h"
|
#include "nsTransferable.h"
|
||||||
#include "nsClipboard.h"
|
#include "nsClipboard.h"
|
||||||
|
#include "nsClipboardHelper.h"
|
||||||
#include "nsHTMLFormatConverter.h"
|
#include "nsHTMLFormatConverter.h"
|
||||||
#include "nsDragService.h"
|
#include "nsDragService.h"
|
||||||
#include "nsSound.h"
|
#include "nsSound.h"
|
||||||
#ifdef IBMBIDI
|
#ifdef IBMBIDI
|
||||||
#include "nsBidiKeyboard.h"
|
#include "nsBidiKeyboard.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef MOZ_ENABLE_XREMOTE
|
||||||
|
#include "nsPhMozRemoteHelper.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "nsFilePicker.h"
|
#include "nsFilePicker.h"
|
||||||
|
|
||||||
#include <prlog.h>
|
#include <prlog.h>
|
||||||
|
@ -67,10 +73,16 @@ NS_GENERIC_FACTORY_CONSTRUCTOR(nsToolkit)
|
||||||
NS_GENERIC_FACTORY_CONSTRUCTOR(nsLookAndFeel)
|
NS_GENERIC_FACTORY_CONSTRUCTOR(nsLookAndFeel)
|
||||||
NS_GENERIC_FACTORY_CONSTRUCTOR(nsTransferable)
|
NS_GENERIC_FACTORY_CONSTRUCTOR(nsTransferable)
|
||||||
NS_GENERIC_FACTORY_CONSTRUCTOR(nsClipboard)
|
NS_GENERIC_FACTORY_CONSTRUCTOR(nsClipboard)
|
||||||
|
NS_GENERIC_FACTORY_CONSTRUCTOR(nsClipboardHelper)
|
||||||
NS_GENERIC_FACTORY_CONSTRUCTOR(nsHTMLFormatConverter)
|
NS_GENERIC_FACTORY_CONSTRUCTOR(nsHTMLFormatConverter)
|
||||||
NS_GENERIC_FACTORY_CONSTRUCTOR(nsDragService)
|
NS_GENERIC_FACTORY_CONSTRUCTOR(nsDragService)
|
||||||
NS_GENERIC_FACTORY_CONSTRUCTOR(nsSound)
|
NS_GENERIC_FACTORY_CONSTRUCTOR(nsSound)
|
||||||
NS_GENERIC_FACTORY_CONSTRUCTOR(nsFilePicker)
|
NS_GENERIC_FACTORY_CONSTRUCTOR(nsFilePicker)
|
||||||
|
|
||||||
|
#ifdef MOZ_ENABLE_XREMOTE
|
||||||
|
NS_GENERIC_FACTORY_CONSTRUCTOR(nsPhXRemoteWidgetHelper)
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef IBMBIDI
|
#ifdef IBMBIDI
|
||||||
NS_GENERIC_FACTORY_CONSTRUCTOR(nsBidiKeyboard)
|
NS_GENERIC_FACTORY_CONSTRUCTOR(nsBidiKeyboard)
|
||||||
#endif
|
#endif
|
||||||
|
@ -105,6 +117,10 @@ static nsModuleComponentInfo components[] =
|
||||||
NS_CLIPBOARD_CID,
|
NS_CLIPBOARD_CID,
|
||||||
"@mozilla.org/widget/clipboard;1",
|
"@mozilla.org/widget/clipboard;1",
|
||||||
nsClipboardConstructor },
|
nsClipboardConstructor },
|
||||||
|
{ "Clipboard Helper",
|
||||||
|
NS_CLIPBOARDHELPER_CID,
|
||||||
|
"@mozilla.org/widget/clipboardhelper;1",
|
||||||
|
nsClipboardHelperConstructor },
|
||||||
{ "HTML Format Converter",
|
{ "HTML Format Converter",
|
||||||
NS_HTMLFORMATCONVERTER_CID,
|
NS_HTMLFORMATCONVERTER_CID,
|
||||||
"@mozilla.org/widget/htmlformatconverter;1",
|
"@mozilla.org/widget/htmlformatconverter;1",
|
||||||
|
@ -123,6 +139,14 @@ static nsModuleComponentInfo components[] =
|
||||||
"@mozilla.org/widget/bidikeyboard;1",
|
"@mozilla.org/widget/bidikeyboard;1",
|
||||||
nsBidiKeyboardConstructor },
|
nsBidiKeyboardConstructor },
|
||||||
#endif // IBMBIDI
|
#endif // IBMBIDI
|
||||||
|
|
||||||
|
#ifdef MOZ_ENABLE_XREMOTE
|
||||||
|
{ NS_IXREMOTEWIDGETHELPER_CLASSNAME,
|
||||||
|
NS_PHXREMOTEWIDGETHELPER_CID,
|
||||||
|
NS_IXREMOTEWIDGETHELPER_CONTRACTID,
|
||||||
|
nsPhXRemoteWidgetHelperConstructor },
|
||||||
|
#endif
|
||||||
|
|
||||||
{ "Photon File Picker",
|
{ "Photon File Picker",
|
||||||
NS_FILEPICKER_CID,
|
NS_FILEPICKER_CID,
|
||||||
"@mozilla.org/filepicker;1",
|
"@mozilla.org/filepicker;1",
|
||||||
|
|
|
@ -231,7 +231,7 @@ NS_METHOD nsWindow::PreCreateWidget( nsWidgetInitData *aInitData ) {
|
||||||
//
|
//
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
NS_METHOD nsWindow::CreateNative( PtWidget_t *parentWidget ) {
|
NS_METHOD nsWindow::CreateNative( PtWidget_t *parentWidget ) {
|
||||||
PtArg_t arg[20];
|
PtArg_t arg[25];
|
||||||
int arg_count = 0;
|
int arg_count = 0;
|
||||||
PhPoint_t pos;
|
PhPoint_t pos;
|
||||||
PhDim_t dim;
|
PhDim_t dim;
|
||||||
|
@ -275,7 +275,7 @@ NS_METHOD nsWindow::CreateNative( PtWidget_t *parentWidget ) {
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// No border or decorations is the default
|
// No border or decorations is the default
|
||||||
render_flags = Ph_WM_RENDER_INLINE | Ph_WM_RENDER_RESIZE;
|
render_flags = Ph_WM_RENDER_RESIZE;
|
||||||
|
|
||||||
if( mWindowType != eWindowType_popup ) {
|
if( mWindowType != eWindowType_popup ) {
|
||||||
|
|
||||||
|
@ -367,18 +367,21 @@ NS_METHOD nsWindow::CreateNative( PtWidget_t *parentWidget ) {
|
||||||
mClientWidget = PtCreateWidget( PtRawDrawContainer, mWidget, arg_count, arg );
|
mClientWidget = PtCreateWidget( PtRawDrawContainer, mWidget, arg_count, arg );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
PtSetParentWidget( NULL );
|
|
||||||
|
|
||||||
/* Dialog and TopLevel Windows */
|
/* Dialog and TopLevel Windows */
|
||||||
PtSetArg( &arg[arg_count++], Pt_ARG_FLAGS, Pt_DELAY_REALIZE, Pt_DELAY_REALIZE);
|
PtSetArg( &arg[arg_count++], Pt_ARG_FLAGS, Pt_DELAY_REALIZE, Pt_DELAY_REALIZE);
|
||||||
PtSetArg( &arg[arg_count++], Pt_ARG_WINDOW_RENDER_FLAGS, render_flags, -1 );
|
PtSetArg( &arg[arg_count++], Pt_ARG_WINDOW_RENDER_FLAGS, render_flags, -1 );
|
||||||
|
PtSetArg( &arg[arg_count++], Pt_ARG_WINDOW_MANAGED_FLAGS, 0, Ph_WM_CLOSE );
|
||||||
|
PtSetArg( &arg[arg_count++], Pt_ARG_WINDOW_NOTIFY_FLAGS, Ph_WM_CLOSE|Ph_WM_MOVE, ~0 );
|
||||||
PtSetArg( &arg[arg_count++], Pt_ARG_FILL_COLOR, Pg_TRANSPARENT, 0 );
|
PtSetArg( &arg[arg_count++], Pt_ARG_FILL_COLOR, Pg_TRANSPARENT, 0 );
|
||||||
|
|
||||||
PtRawCallback_t cb_raw = { Ph_EV_INFO, EvInfo, NULL };
|
PtRawCallback_t cb_raw = { Ph_EV_INFO, EvInfo, NULL };
|
||||||
PtCallback_t cb_resize = { ResizeHandler, NULL };
|
PtCallback_t cb_resize = { ResizeHandler, NULL };
|
||||||
|
PtCallback_t cb_window = { WindowWMHandler, this };
|
||||||
|
|
||||||
PtSetArg( &arg[arg_count++], Pt_CB_RESIZE, &cb_resize, NULL );
|
PtSetArg( &arg[arg_count++], Pt_CB_RESIZE, &cb_resize, NULL );
|
||||||
PtSetArg( &arg[arg_count++], Pt_CB_RAW, &cb_raw, NULL );
|
PtSetArg( &arg[arg_count++], Pt_CB_RAW, &cb_raw, NULL );
|
||||||
mWidget = PtCreateWidget( PtWindow, NULL, arg_count, arg );
|
PtSetArg( &arg[arg_count++], Pt_CB_WINDOW, &cb_window, 0 );
|
||||||
|
mWidget = PtCreateWidget( PtWindow, parentWidget, arg_count, arg );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -422,11 +425,6 @@ NS_METHOD nsWindow::CreateNative( PtWidget_t *parentWidget ) {
|
||||||
}
|
}
|
||||||
else if( !parentWidget ) {
|
else if( !parentWidget ) {
|
||||||
if( mClientWidget ) PtAddCallback(mClientWidget, Pt_CB_RESIZE, ResizeHandler, nsnull );
|
if( mClientWidget ) PtAddCallback(mClientWidget, Pt_CB_RESIZE, ResizeHandler, nsnull );
|
||||||
else {
|
|
||||||
PtAddCallback(mWidget, Pt_CB_RESIZE, ResizeHandler, nsnull );
|
|
||||||
PtAddCallback(mWidget, Pt_CB_WINDOW, WindowWMHandler, this );
|
|
||||||
PtSetResource( mWidget, Pt_ARG_WINDOW_NOTIFY_FLAGS, Ph_WM_CLOSE|Ph_WM_MOVE, ~0 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// call the event callback to notify about creation
|
// call the event callback to notify about creation
|
||||||
|
@ -892,7 +890,6 @@ NS_METHOD nsWindow::Move( PRInt32 aX, PRInt32 aY ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int nsWindow::MenuRegionCallback( PtWidget_t *widget, void *data, PtCallbackInfo_t *cbinfo ) {
|
int nsWindow::MenuRegionCallback( PtWidget_t *widget, void *data, PtCallbackInfo_t *cbinfo ) {
|
||||||
/* ATENTIE */ printf( "\n\n\n.......MenuRegionCallback\n\n" );
|
|
||||||
if( gRollupWidget && gRollupListener ) {
|
if( gRollupWidget && gRollupListener ) {
|
||||||
/* rollup the menu */
|
/* rollup the menu */
|
||||||
gRollupListener->Rollup();
|
gRollupListener->Rollup();
|
||||||
|
|
|
@ -47,7 +47,6 @@
|
||||||
#include "nsString.h"
|
#include "nsString.h"
|
||||||
|
|
||||||
#include <Pt.h>
|
#include <Pt.h>
|
||||||
#include <Ap.h>
|
|
||||||
|
|
||||||
class nsFont;
|
class nsFont;
|
||||||
class nsIAppShell;
|
class nsIAppShell;
|
||||||
|
@ -100,7 +99,6 @@ public:
|
||||||
|
|
||||||
inline NS_IMETHOD GetAttention(void)
|
inline NS_IMETHOD GetAttention(void)
|
||||||
{
|
{
|
||||||
/* ATENTIE */ printf( "\n\n\n!!!!!!!!!!!!! GetAttention !!!!!!!!!!!!!!!!!!!!!!\n\n\n\n" );
|
|
||||||
if( mWidget ) PtWindowToFront( mWidget );
|
if( mWidget ) PtWindowToFront( mWidget );
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче