зеркало из https://github.com/mozilla/pjs.git
[OS/2] Bug 305061: use RWS to improve platform integration on OS/2 (base RWS support and helper app handling), p=Rich Walsh and me, testing=abwillis1,daveryeo,wuno, r=mkaply
This commit is contained in:
Родитель
9fc33eef9e
Коммит
e3f7b3d3ae
|
@ -21,6 +21,7 @@
|
|||
#
|
||||
# Contributor(s):
|
||||
# Ben Goodger <ben@bengoodger.com>
|
||||
# Rich Walsh <dragtext@e-vertise.com>
|
||||
#
|
||||
# Alternatively, the contents of this file may be used under the terms of
|
||||
# either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
|
@ -46,3 +47,20 @@ selectDownloadDir=Select Download Folder
|
|||
unknownAccept.label=Save File
|
||||
unknownCancel.label=Cancel
|
||||
fileType=%S file
|
||||
|
||||
# LOCALIZATION NOTE (wpsDefaultOS2): OS/2 only, WPS refers to the Workplace Shell and should probably not be translated
|
||||
wpsDefaultOS2=WPS Default
|
||||
# LOCALIZATION NOTE (classViewerOS2): OS/2 only
|
||||
classViewerOS2=Viewer for Class %S
|
||||
# LOCALIZATION NOTE (mmImageViewerOS2): OS/2 only, default operation of image files with OS/2 multimedia support installed
|
||||
mmImageViewerOS2=Image Viewer
|
||||
# LOCALIZATION NOTE (mmAudioPlayerOS2): OS/2 only, default operation of audio files with OS/2 multimedia support installed
|
||||
mmAudioPlayerOS2=Audio Player
|
||||
# LOCALIZATION NOTE (mmVideoPlayerOS2): OS/2 only, default operation of video files with OS/2 multimedia support installed
|
||||
mmVideoPlayerOS2=Video Player
|
||||
# LOCALIZATION NOTE (mmMidiPlayerOS2): OS/2 only, default operation of MIDI files with OS/2 multimedia support installed
|
||||
mmMidiPlayerOS2=MIDI Player
|
||||
# LOCALIZATION NOTE (odZipFolderOS2): OS/2 only, refers to ZipFolder of Object Desktop
|
||||
odZipFolderOS2=ZipFolder
|
||||
# LOCALIZATION NOTE (odTextViewOS2): OS/2 only, refers to TextView of Object Desktop
|
||||
odTextViewOS2=TextView
|
||||
|
|
|
@ -125,6 +125,7 @@ endif
|
|||
|
||||
ifeq ($(MOZ_WIDGET_TOOLKIT),os2)
|
||||
OSHELPER += nsMIMEInfoOS2.cpp
|
||||
REQUIRES += widget
|
||||
endif
|
||||
|
||||
EXPORTS = \
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* -*- Mode: C++; tab-width: 3; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* vim: set sw=2 sts=2 et cin: */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
|
@ -24,6 +24,8 @@
|
|||
* Scott MacGregor <mscott@netscape.com>
|
||||
* Boris Zbarsky <bzbarsky@mit.edu> (Added mailcap and mime.types support)
|
||||
* Christian Biesinger <cbiesinger@web.de>
|
||||
* Rich Walsh <dragtext@e-vertise.com>
|
||||
* Peter Weilbacher <mozilla@Weilbacher.org>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
||||
|
@ -39,14 +41,26 @@
|
|||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#ifdef MOZ_OS2_HIGH_MEMORY
|
||||
// os2safe.h has to be included before os2.h, needed for high mem
|
||||
#include <os2safe.h>
|
||||
#endif
|
||||
|
||||
#include "nsMIMEInfoOS2.h"
|
||||
#include "nsOSHelperAppService.h"
|
||||
#include "nsExternalHelperAppService.h"
|
||||
#include "nsCExternalHandlerService.h"
|
||||
#include "nsReadableUtils.h"
|
||||
#include "nsIProcess.h"
|
||||
#include "nsNetUtil.h"
|
||||
#include "nsDirectoryServiceDefs.h"
|
||||
#include "nsIVariant.h"
|
||||
#include "nsArrayEnumerator.h"
|
||||
#include "nsIRwsService.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
#define SALT_SIZE 8
|
||||
#define TABLE_SIZE 36
|
||||
static const PRUnichar table[] =
|
||||
|
@ -55,23 +69,72 @@ static const PRUnichar table[] =
|
|||
'u','v','w','x','y','z','0','1','2','3',
|
||||
'4','5','6','7','8','9'};
|
||||
|
||||
// reduces overhead by preventing calls to nsRwsService when it isn't present
|
||||
static PRBool sUseRws = PR_TRUE;
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
NS_IMPL_ISUPPORTS_INHERITED1(nsMIMEInfoOS2, nsMIMEInfoBase, nsIPropertyBag)
|
||||
|
||||
nsMIMEInfoOS2::~nsMIMEInfoOS2()
|
||||
{
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsMIMEInfoOS2::LaunchWithURI(nsIURI* aURI,
|
||||
nsIInterfaceRequestor* aWindowContext)
|
||||
//------------------------------------------------------------------------
|
||||
// if the helper application is a DOS app, create an 8.3 filename
|
||||
static nsresult Make8Dot3Name(nsIFile *aFile, nsACString& aPath)
|
||||
{
|
||||
nsCAutoString leafName;
|
||||
aFile->GetNativeLeafName(leafName);
|
||||
const char *lastDot = strrchr(leafName.get(), '.');
|
||||
|
||||
char suffix[8] = "";
|
||||
if (lastDot) {
|
||||
strncpy(suffix, lastDot, 4);
|
||||
suffix[4] = '\0';
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIFile> tempPath;
|
||||
nsresult rv = NS_GetSpecialDirectory(NS_OS_TEMP_DIR, getter_AddRefs(tempPath));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsAutoString saltedTempLeafName;
|
||||
do {
|
||||
saltedTempLeafName.Truncate();
|
||||
|
||||
// this salting code was ripped directly from the profile manager.
|
||||
// turn PR_Now() into milliseconds since epoch 1058 & salt rand with that
|
||||
double fpTime;
|
||||
LL_L2D(fpTime, PR_Now());
|
||||
srand((uint)(fpTime * 1e-6 + 0.5));
|
||||
|
||||
for (PRInt32 i=0; i < SALT_SIZE; i++)
|
||||
saltedTempLeafName.Append(table[(rand()%TABLE_SIZE)]);
|
||||
|
||||
AppendASCIItoUTF16(suffix, saltedTempLeafName);
|
||||
rv = aFile->CopyTo(tempPath, saltedTempLeafName);
|
||||
} while (NS_FAILED(rv));
|
||||
|
||||
nsCOMPtr<nsPIExternalAppLauncher>
|
||||
helperAppService(do_GetService(NS_EXTERNALHELPERAPPSERVICE_CONTRACTID));
|
||||
if (!helperAppService)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
tempPath->Append(saltedTempLeafName);
|
||||
helperAppService->DeleteTemporaryFileOnExit(tempPath);
|
||||
tempPath->GetNativePath(aPath);
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
// opens a file using the selected program or WPS object
|
||||
|
||||
NS_IMETHODIMP nsMIMEInfoOS2::LaunchWithFile(nsIFile *aFile)
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
|
||||
nsCOMPtr<nsILocalFile> docToLoad;
|
||||
rv = GetLocalFileFromURI(aURI, getter_AddRefs(docToLoad));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsCAutoString path;
|
||||
docToLoad->GetNativePath(path);
|
||||
|
||||
nsCOMPtr<nsIFile> application;
|
||||
if (mPreferredAction == useHelperApp) {
|
||||
nsCOMPtr<nsILocalHandlerApp> localHandlerApp =
|
||||
|
@ -86,73 +149,152 @@ NS_IMETHODIMP nsMIMEInfoOS2::LaunchWithURI(nsIURI* aURI,
|
|||
return NS_ERROR_INVALID_ARG;
|
||||
}
|
||||
|
||||
// The nsIMIMEInfo should have either the default or preferred
|
||||
// application handler attribute set to match the preferredAction!
|
||||
nsCAutoString filePath;
|
||||
aFile->GetNativePath(filePath);
|
||||
|
||||
// if there's no program, use the WPS to open the file
|
||||
if (!application) {
|
||||
HOBJECT hobject = WinQueryObject(path.get());
|
||||
if (WinSetObjectData( hobject, "OPEN=DEFAULT" ))
|
||||
return NS_OK;
|
||||
else
|
||||
return NS_ERROR_FAILURE;
|
||||
rv = NS_ERROR_FAILURE;
|
||||
|
||||
// if RWS is enabled, see if nsOSHelperAppService provided a handle for
|
||||
// the app associated with this file; if so, use it to open the file;
|
||||
if (sUseRws) {
|
||||
PRUint32 appHandle;
|
||||
GetDefaultAppHandle(&appHandle);
|
||||
if (appHandle) {
|
||||
nsCOMPtr<nsIRwsService> rwsSvc(do_GetService("@mozilla.org/rwsos2;1"));
|
||||
if (!rwsSvc) {
|
||||
sUseRws = PR_FALSE;
|
||||
} else {
|
||||
// this call is identical to dropping the file on a program's icon;
|
||||
// it ensures filenames with multiple dots are handled correctly
|
||||
rv = rwsSvc->OpenWithAppHandle(filePath.get(), appHandle);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// if RWS isn't present or fails, open it using a PM call
|
||||
if (NS_FAILED(rv)) {
|
||||
if (WinSetObjectData(WinQueryObject(filePath.get()), "OPEN=DEFAULT"))
|
||||
rv = NS_OK;
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
// open the data file using the specified program file
|
||||
nsCAutoString appPath;
|
||||
if (application) {
|
||||
application->GetNativePath(appPath);
|
||||
}
|
||||
|
||||
ULONG ulAppType;
|
||||
nsCAutoString apppath;
|
||||
application->GetNativePath(apppath);
|
||||
DosQueryAppType(apppath.get(), &ulAppType);
|
||||
DosQueryAppType(appPath.get(), &ulAppType);
|
||||
if (ulAppType & (FAPPTYP_DOS |
|
||||
FAPPTYP_WINDOWSPROT31 |
|
||||
FAPPTYP_WINDOWSPROT |
|
||||
FAPPTYP_WINDOWSREAL)) {
|
||||
// if the helper application is a DOS app, create an 8.3 filename
|
||||
// we do this even if the filename is valid because it's 8.3, who cares
|
||||
nsCOMPtr<nsPIExternalAppLauncher> helperAppService (do_GetService(NS_EXTERNALHELPERAPPSERVICE_CONTRACTID));
|
||||
if (helperAppService)
|
||||
{
|
||||
nsCAutoString leafName;
|
||||
docToLoad->GetNativeLeafName(leafName);
|
||||
const char* lastDot = strrchr(leafName.get(), '.');
|
||||
char suffix[CCHMAXPATH + 1] = "";
|
||||
if (lastDot)
|
||||
{
|
||||
strcpy(suffix, lastDot);
|
||||
}
|
||||
suffix[4] = '\0';
|
||||
|
||||
nsAutoString saltedTempLeafName;
|
||||
do {
|
||||
saltedTempLeafName.Truncate();
|
||||
// this salting code was ripped directly from the profile manager.
|
||||
// turn PR_Now() into milliseconds since epoch 1058 // and salt rand with that.
|
||||
double fpTime;
|
||||
LL_L2D(fpTime, PR_Now());
|
||||
srand((uint)(fpTime * 1e-6 + 0.5));
|
||||
PRInt32 i;
|
||||
for (i=0;i<SALT_SIZE;i++) {
|
||||
saltedTempLeafName.Append(table[(rand()%TABLE_SIZE)]);
|
||||
}
|
||||
AppendASCIItoUTF16(suffix, saltedTempLeafName);
|
||||
rv = docToLoad->MoveTo(nsnull, saltedTempLeafName);
|
||||
} while (NS_FAILED(rv));
|
||||
helperAppService->DeleteTemporaryFileOnExit(docToLoad);
|
||||
docToLoad->GetNativePath(path);
|
||||
}
|
||||
} else {
|
||||
path.Insert('\"', 0);
|
||||
path.Append('\"');
|
||||
rv = Make8Dot3Name(aFile, filePath);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
}
|
||||
|
||||
const char * strPath = path.get();
|
||||
// if we were given an application to use then use it....otherwise
|
||||
// make the registry call to launch the app
|
||||
nsCOMPtr<nsIProcess> process = do_CreateInstance(NS_PROCESS_CONTRACTID);
|
||||
if (NS_FAILED(rv = process->Init(application)))
|
||||
return rv;
|
||||
PRUint32 pid;
|
||||
return process->Run(PR_FALSE, &strPath, 1, &pid);
|
||||
|
||||
filePath.Insert('\"', 0);
|
||||
filePath.Append('\"');
|
||||
|
||||
// if RWS is enabled, have the WPS open the file using the selected app;
|
||||
// this lets the user specify commandline args in the exe's WPS notebook
|
||||
rv = NS_ERROR_FAILURE;
|
||||
if (sUseRws) {
|
||||
nsCOMPtr<nsIRwsService> rwsSvc(do_GetService("@mozilla.org/rwsos2;1"));
|
||||
if (!rwsSvc) {
|
||||
sUseRws = PR_FALSE;
|
||||
} else {
|
||||
rv = rwsSvc->OpenWithAppPath(filePath.get(), appPath.get());
|
||||
}
|
||||
}
|
||||
|
||||
// if RWS isn't present or fails, use Moz facilities to run the program
|
||||
if (NS_FAILED(rv)) {
|
||||
nsCOMPtr<nsIProcess> process = do_CreateInstance(NS_PROCESS_CONTRACTID);
|
||||
if (NS_FAILED(rv = process->Init(application)))
|
||||
return rv;
|
||||
const char *strPath = filePath.get();
|
||||
PRUint32 pid;
|
||||
return process->Run(PR_FALSE, &strPath, 1, &pid);
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
nsresult nsMIMEInfoOS2::LoadUriInternal(nsIURI* aURL)
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
// if there's a description, there's a handler (which may be the WPS)
|
||||
|
||||
NS_IMETHODIMP nsMIMEInfoOS2::GetHasDefaultHandler(PRBool *_retval)
|
||||
{
|
||||
*_retval = !mDefaultAppDescription.IsEmpty();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
// copied directly from nsMIMEInfoImpl
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsMIMEInfoOS2::GetDefaultDescription(nsAString& aDefaultDescription)
|
||||
{
|
||||
if (mDefaultAppDescription.IsEmpty() && mDefaultApplication)
|
||||
mDefaultApplication->GetLeafName(aDefaultDescription);
|
||||
else
|
||||
aDefaultDescription = mDefaultAppDescription;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
// Get() is new, Set() is an override; they permit nsOSHelperAppService
|
||||
// to reorder the default & preferred app handlers
|
||||
|
||||
void nsMIMEInfoOS2::GetDefaultApplication(nsIFile **aDefaultAppHandler)
|
||||
{
|
||||
*aDefaultAppHandler = mDefaultApplication;
|
||||
NS_IF_ADDREF(*aDefaultAppHandler);
|
||||
return;
|
||||
}
|
||||
|
||||
void nsMIMEInfoOS2::SetDefaultApplication(nsIFile *aDefaultApplication)
|
||||
{
|
||||
mDefaultApplication = aDefaultApplication;
|
||||
return;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
// gets/sets the handle of the WPS object associated with this mimetype
|
||||
|
||||
void nsMIMEInfoOS2::GetDefaultAppHandle(PRUint32 *aHandle)
|
||||
{
|
||||
if (aHandle) {
|
||||
if (mDefaultAppHandle <= 0x10000 || mDefaultAppHandle >= 0x40000)
|
||||
mDefaultAppHandle = 0;
|
||||
*aHandle = mDefaultAppHandle;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void nsMIMEInfoOS2::SetDefaultAppHandle(PRUint32 aHandle)
|
||||
{
|
||||
if (aHandle <= 0x10000 || aHandle >= 0x40000)
|
||||
mDefaultAppHandle = 0;
|
||||
else
|
||||
mDefaultAppHandle = aHandle;
|
||||
return;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
nsresult nsMIMEInfoOS2::LoadUriInternal(nsIURI *aURL)
|
||||
{
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsIPrefService> thePrefsService(do_GetService(NS_PREFSERVICE_CONTRACTID, &rv));
|
||||
|
@ -409,3 +551,74 @@ nsresult nsMIMEInfoOS2::LoadUriInternal(nsIURI* aURL)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
// nsIPropertyBag
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsMIMEInfoOS2::GetEnumerator(nsISimpleEnumerator **_retval)
|
||||
{
|
||||
nsCOMArray<nsIVariant> properties;
|
||||
|
||||
nsCOMPtr<nsIVariant> variant;
|
||||
GetProperty(NS_LITERAL_STRING("defaultApplicationIconURL"), getter_AddRefs(variant));
|
||||
if (variant)
|
||||
properties.AppendObject(variant);
|
||||
|
||||
GetProperty(NS_LITERAL_STRING("customApplicationIconURL"), getter_AddRefs(variant));
|
||||
if (variant)
|
||||
properties.AppendObject(variant);
|
||||
|
||||
return NS_NewArrayEnumerator(_retval, properties);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsMIMEInfoOS2::GetProperty(const nsAString& aName, nsIVariant **_retval)
|
||||
{
|
||||
nsresult rv = NS_ERROR_FAILURE;
|
||||
|
||||
if (aName.EqualsLiteral(PROPERTY_DEFAULT_APP_ICON_URL)) {
|
||||
rv = GetIconURLVariant(mDefaultApplication, _retval);
|
||||
} else {
|
||||
if (aName.EqualsLiteral(PROPERTY_CUSTOM_APP_ICON_URL) &&
|
||||
mPreferredApplication) {
|
||||
// find file from handler
|
||||
nsCOMPtr<nsIFile> appFile;
|
||||
nsCOMPtr<nsILocalHandlerApp> localHandlerApp =
|
||||
do_QueryInterface(mPreferredApplication, &rv);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
rv = localHandlerApp->GetExecutable(getter_AddRefs(appFile));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
rv = GetIconURLVariant(appFile, _retval);
|
||||
}
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsMIMEInfoOS2::GetIconURLVariant(nsIFile *aApplication, nsIVariant **_retval)
|
||||
{
|
||||
nsresult rv = CallCreateInstance("@mozilla.org/variant;1", _retval);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsCAutoString fileURLSpec;
|
||||
if (aApplication)
|
||||
NS_GetURLSpecFromFile(aApplication, fileURLSpec);
|
||||
else {
|
||||
GetPrimaryExtension(fileURLSpec);
|
||||
fileURLSpec.Insert(NS_LITERAL_CSTRING("moztmp."), 0);
|
||||
}
|
||||
|
||||
nsCAutoString iconURLSpec(NS_LITERAL_CSTRING("moz-icon://"));
|
||||
iconURLSpec += fileURLSpec;
|
||||
nsCOMPtr<nsIWritableVariant> writable(do_QueryInterface(*_retval));
|
||||
writable->SetAsAUTF8String(iconURLSpec);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* vim: set sw=2 sts=2 et cin: */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
|
@ -19,6 +21,8 @@
|
|||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Rich Walsh <dragtext@e-vertise.com>
|
||||
* Peter Weilbacher <mozilla@Weilbacher.org>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
|
@ -38,6 +42,7 @@
|
|||
#define nsMIMEInfoOS2_h_
|
||||
|
||||
#include "nsMIMEInfoImpl.h"
|
||||
#include "nsIPropertyBag.h"
|
||||
|
||||
#include "nsIPrefService.h"
|
||||
#include "nsIPrefBranch.h"
|
||||
|
@ -50,25 +55,43 @@
|
|||
#define INCL_WINSHELLDATA
|
||||
#include <os2.h>
|
||||
|
||||
class nsMIMEInfoOS2 : public nsMIMEInfoImpl
|
||||
class nsMIMEInfoOS2 : public nsMIMEInfoBase, public nsIPropertyBag
|
||||
{
|
||||
public:
|
||||
nsMIMEInfoOS2(const char* aType = "") : nsMIMEInfoImpl(aType) {}
|
||||
nsMIMEInfoOS2(const nsACString& aMIMEType) : nsMIMEInfoImpl(aMIMEType) {}
|
||||
nsMIMEInfoOS2(const char *aType = "") :
|
||||
nsMIMEInfoBase(aType), mDefaultAppHandle(0) {}
|
||||
nsMIMEInfoOS2(const nsACString& aMIMEType) :
|
||||
nsMIMEInfoBase(aMIMEType), mDefaultAppHandle(0) {}
|
||||
nsMIMEInfoOS2(const nsACString& aType, HandlerClass aClass) :
|
||||
nsMIMEInfoImpl(aType, aClass) {}
|
||||
nsMIMEInfoBase(aType, aClass), mDefaultAppHandle(0) {}
|
||||
virtual ~nsMIMEInfoOS2();
|
||||
|
||||
NS_IMETHOD LaunchWithURI(nsIURI* aURI,
|
||||
nsIInterfaceRequestor* aWindowContext);
|
||||
NS_DECL_ISUPPORTS_INHERITED
|
||||
NS_DECL_NSIPROPERTYBAG
|
||||
|
||||
NS_IMETHOD LaunchWithFile(nsIFile *aFile);
|
||||
|
||||
NS_IMETHOD GetHasDefaultHandler(PRBool *_retval);
|
||||
NS_IMETHOD GetDefaultDescription(nsAString& aDefaultDescription);
|
||||
|
||||
void GetDefaultApplication(nsIFile **aDefaultAppHandler);
|
||||
void SetDefaultApplication(nsIFile *aDefaultApplication);
|
||||
|
||||
void GetDefaultAppHandle(PRUint32 *aHandle);
|
||||
void SetDefaultAppHandle(PRUint32 aHandle);
|
||||
|
||||
protected:
|
||||
virtual NS_HIDDEN_(nsresult) LoadUriInternal(nsIURI *aURI);
|
||||
#ifdef DEBUG
|
||||
virtual NS_HIDDEN_(nsresult) LaunchDefaultWithFile(nsIFile* aFile) {
|
||||
// XXX should we do most of the work here and let LaunchWithFile() call this?
|
||||
virtual NS_HIDDEN_(nsresult) LaunchDefaultWithFile(nsIFile *aFile) {
|
||||
NS_NOTREACHED("Do not call this, use LaunchWithFile");
|
||||
return NS_ERROR_UNEXPECTED;
|
||||
}
|
||||
#endif
|
||||
|
||||
NS_IMETHOD GetIconURLVariant(nsIFile *aApplication, nsIVariant **_retval);
|
||||
|
||||
nsCOMPtr<nsIFile> mDefaultApplication;
|
||||
PRUint32 mDefaultAppHandle;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* -*- Mode: C++; tab-width: 3; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* vim: set sw=2 sts=2 et cin: */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
|
@ -24,6 +24,7 @@
|
|||
* Scott MacGregor <mscott@netscape.com>
|
||||
* Boris Zbarsky <bzbarsky@mit.edu> (Added mailcap and mime.types support)
|
||||
* Peter Weilbacher <mozilla@Weilbacher.org>
|
||||
* Rich Walsh <dragtext@e-vertise.com>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
||||
|
@ -57,8 +58,16 @@
|
|||
#include "prenv.h" // for PR_GetEnv()
|
||||
#include "nsMIMEInfoOS2.h"
|
||||
#include "nsAutoPtr.h"
|
||||
#include "nsIRwsService.h"
|
||||
#include "nsIStringBundle.h"
|
||||
#include "nsLocalHandlerApp.h"
|
||||
#include <stdlib.h> // for system()
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
// reduces overhead by preventing calls to nsRws when it isn't present
|
||||
static PRBool sUseRws = PR_TRUE;
|
||||
|
||||
static nsresult
|
||||
FindSemicolon(nsAString::const_iterator& aSemicolon_iter,
|
||||
const nsAString::const_iterator& aEnd_iter);
|
||||
|
@ -73,6 +82,8 @@ ParseMIMEType(const nsAString::const_iterator& aStart_iter,
|
|||
inline PRBool
|
||||
IsNetscapeFormat(const nsACString& aBuffer);
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
nsOSHelperAppService::nsOSHelperAppService() : nsExternalHelperAppService()
|
||||
{
|
||||
}
|
||||
|
@ -1345,6 +1356,212 @@ nsOSHelperAppService::GetFromType(const nsCString& aMIMEType) {
|
|||
return mimeInfo;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
// returns a localized string from unknownContentType.properties
|
||||
|
||||
static nsresult
|
||||
GetNLSString(const PRUnichar *aKey, nsAString& result)
|
||||
{
|
||||
nsresult rv;
|
||||
|
||||
nsCOMPtr<nsIStringBundleService> bundleSvc =
|
||||
do_GetService(NS_STRINGBUNDLE_CONTRACTID, &rv);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsCOMPtr<nsIStringBundle> bundle;
|
||||
rv = bundleSvc->CreateBundle(
|
||||
"chrome://mozapps/locale/downloads/unknownContentType.properties",
|
||||
getter_AddRefs(bundle));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsXPIDLString string;
|
||||
rv = bundle->GetStringFromName(aKey, getter_Copies(string));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
result.Assign(string);
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
// returns the handle of the WPS object associated with a file extension;
|
||||
// if RWS isn't being used or there's no association, returns zero;
|
||||
// also constructs a description of the handler based on available info
|
||||
|
||||
static PRUint32
|
||||
WpsGetDefaultHandler(const char *aFileExt, nsAString& aDescription)
|
||||
{
|
||||
aDescription.Truncate();
|
||||
|
||||
if (sUseRws) {
|
||||
nsCOMPtr<nsIRwsService> rwsSvc(do_GetService("@mozilla.org/rwsos2;1"));
|
||||
if (!rwsSvc)
|
||||
sUseRws = PR_FALSE;
|
||||
else {
|
||||
PRUint32 handle;
|
||||
// the handle may be zero if the WPS class provides the default handler
|
||||
if (NS_SUCCEEDED(rwsSvc->HandlerFromExtension(aFileExt, &handle, aDescription)))
|
||||
return handle;
|
||||
}
|
||||
}
|
||||
|
||||
// no RWS or RWS failed to return at least a description
|
||||
if (NS_FAILED(GetNLSString(NS_LITERAL_STRING("wpsDefaultOS2").get(),
|
||||
aDescription)))
|
||||
aDescription.Assign(NS_LITERAL_STRING("WPS default"));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
// this constructs the system-default entry when neither mailcap nor
|
||||
// mime.types provided any info
|
||||
|
||||
static void
|
||||
WpsMimeInfoFromExtension(const char *aFileExt, nsMIMEInfoOS2 *aMI)
|
||||
{
|
||||
// this identifies whether the mimetype is a bogus
|
||||
// "application/octet-stream" generated when no match
|
||||
// could be found for this extension
|
||||
PRBool exists;
|
||||
aMI->ExtensionExists(nsDependentCString(aFileExt), &exists);
|
||||
|
||||
// get the default app's description and WPS handle (if any)
|
||||
nsAutoString ustr;
|
||||
PRUint32 handle = WpsGetDefaultHandler(aFileExt, ustr);
|
||||
aMI->SetDefaultDescription(ustr);
|
||||
aMI->SetDefaultAppHandle(handle);
|
||||
|
||||
// if the mimeinfo is bogus, change the mimetype & extensions list
|
||||
if (!exists) {
|
||||
nsCAutoString extLower;
|
||||
nsCAutoString cstr;
|
||||
ToLowerCase(nsDependentCString(aFileExt), extLower);
|
||||
cstr.Assign(NS_LITERAL_CSTRING("application/x-") + extLower);
|
||||
aMI->SetMIMEType(cstr);
|
||||
aMI->SetFileExtensions(extLower);
|
||||
}
|
||||
|
||||
// if the mimetype is valid, perhaps we can supply a description;
|
||||
// if it's bogus, replace the description
|
||||
if (exists)
|
||||
aMI->GetDescription(ustr);
|
||||
else
|
||||
ustr.Truncate();
|
||||
|
||||
if (ustr.IsEmpty()) {
|
||||
nsCAutoString extUpper;
|
||||
ToUpperCase(nsDependentCString(aFileExt), extUpper);
|
||||
CopyUTF8toUTF16(extUpper, ustr);
|
||||
|
||||
nsAutoString fileType;
|
||||
if (NS_FAILED(GetNLSString(NS_LITERAL_STRING("fileType").get(), fileType)))
|
||||
ustr.Assign(NS_LITERAL_STRING("%S file"));
|
||||
int pos = -1;
|
||||
if ((pos = fileType.Find("%S")) > -1);
|
||||
fileType.Replace(pos, 2, ustr);
|
||||
aMI->SetDescription(fileType);
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
// this is an override of nsExternalHelperAppService's method;
|
||||
// after the parent's method has looked for a handler, add
|
||||
// an entry for the WPS's handler if there's room and one exists;
|
||||
// it will never replace entries from mailcap or mimetypes.rdf
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsOSHelperAppService::GetFromTypeAndExtension(const nsACString& aMIMEType,
|
||||
const nsACString& aFileExt,
|
||||
nsIMIMEInfo **_retval)
|
||||
{
|
||||
// let the existing code do its thing
|
||||
nsresult rv = nsExternalHelperAppService::GetFromTypeAndExtension(
|
||||
aMIMEType, aFileExt, _retval);
|
||||
if (!(*_retval))
|
||||
return rv;
|
||||
|
||||
// this is needed for Get/SetDefaultApplication()
|
||||
nsMIMEInfoOS2 *mi = static_cast<nsMIMEInfoOS2*>(*_retval);
|
||||
|
||||
// do lookups using the original extension if present;
|
||||
// otherwise use the extension derived from the mimetype
|
||||
nsCAutoString ext;
|
||||
if (!aFileExt.IsEmpty())
|
||||
ext.Assign(aFileExt);
|
||||
else {
|
||||
mi->GetPrimaryExtension(ext);
|
||||
if (ext.IsEmpty())
|
||||
return rv;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIFile> defApp;
|
||||
nsCOMPtr<nsIHandlerApp> prefApp;
|
||||
mi->GetDefaultApplication(getter_AddRefs(defApp));
|
||||
mi->GetPreferredApplicationHandler(getter_AddRefs(prefApp));
|
||||
nsCOMPtr<nsILocalHandlerApp> locPrefApp = do_QueryInterface(prefApp, &rv);
|
||||
|
||||
// if neither mailcap nor mimetypes.rdf had an entry,
|
||||
// create a default entry using the WPS handler
|
||||
if (!defApp && !locPrefApp) {
|
||||
WpsMimeInfoFromExtension(ext.get(), mi);
|
||||
return rv;
|
||||
}
|
||||
|
||||
PRBool gotPromoted = PR_FALSE;
|
||||
|
||||
// both mailcap & mimetypes.rdf have an entry; if they're
|
||||
// different, exit; otherwise, clear the default entry
|
||||
if (defApp && locPrefApp) {
|
||||
PRBool sameFile;
|
||||
nsCOMPtr<nsIFile> app;
|
||||
rv = locPrefApp->GetExecutable(getter_AddRefs(app));
|
||||
defApp->Equals(app, &sameFile);
|
||||
if (!sameFile)
|
||||
return rv;
|
||||
|
||||
defApp = 0;
|
||||
mi->SetDefaultApplication(0);
|
||||
mi->SetDefaultDescription(EmptyString());
|
||||
gotPromoted = PR_TRUE;
|
||||
}
|
||||
|
||||
nsAutoString description;
|
||||
|
||||
// mailcap has an entry but mimetypes.rdf doesn't;
|
||||
// promote mailcap's entry to preferred
|
||||
if (defApp && !locPrefApp) {
|
||||
mi->GetDefaultDescription(description);
|
||||
nsLocalHandlerApp *handlerApp(new nsLocalHandlerApp(description, defApp));
|
||||
mi->SetPreferredApplicationHandler(handlerApp);
|
||||
gotPromoted = PR_TRUE;
|
||||
}
|
||||
|
||||
// if the former default app was promoted to preferred app,
|
||||
// update preferred action if appropriate
|
||||
if (gotPromoted) {
|
||||
nsHandlerInfoAction action;
|
||||
mi->GetPreferredAction(&action);
|
||||
if (action == nsIMIMEInfo::useSystemDefault) {
|
||||
mi->SetPreferredAction(nsIMIMEInfo::useHelperApp);
|
||||
mi->SetPreferredAction(nsIMIMEInfo::useHelperApp);
|
||||
}
|
||||
}
|
||||
|
||||
// use the WPS default as the system default handler
|
||||
PRUint32 handle = WpsGetDefaultHandler(ext.get(), description);
|
||||
mi->SetDefaultDescription(description);
|
||||
mi->SetDefaultApplication(0);
|
||||
mi->SetDefaultAppHandle(handle);
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
already_AddRefed<nsIMIMEInfo>
|
||||
nsOSHelperAppService::GetMIMEInfoFromOS(const nsACString& aType,
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* -*- Mode: C++; tab-width: 3; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* vim: set sw=2 sts=2 et cin: */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
|
@ -62,6 +62,9 @@ public:
|
|||
virtual ~nsOSHelperAppService();
|
||||
|
||||
// method overrides for mime.types and mime.info look up steps
|
||||
NS_IMETHOD GetFromTypeAndExtension(const nsACString& aMIMEType,
|
||||
const nsACString& aFileExt,
|
||||
nsIMIMEInfo **_retval);
|
||||
already_AddRefed<nsIMIMEInfo> GetMIMEInfoFromOS(const nsACString& aMimeType,
|
||||
const nsACString& aFileExt,
|
||||
PRBool *aFound);
|
||||
|
|
|
@ -118,6 +118,10 @@ XPIDLSRCS += nsIPrintSettingsX.idl \
|
|||
nsIPrintSessionX.idl
|
||||
endif
|
||||
|
||||
ifeq ($(MOZ_WIDGET_TOOLKIT),os2)
|
||||
XPIDLSRCS += nsIRwsService.idl
|
||||
endif
|
||||
|
||||
EXPORTS := $(addprefix $(srcdir)/, $(EXPORTS))
|
||||
|
||||
include $(topsrcdir)/config/rules.mk
|
||||
|
|
|
@ -0,0 +1,136 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is OS/2 Remote Workplace Server interface.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Richard L Walsh.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2005
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
||||
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#include "nsISupports.idl"
|
||||
|
||||
[scriptable, uuid(74a1105c-7e5a-418e-9a57-a0fc8cc992fc)]
|
||||
interface nsIRwsService : nsISupports
|
||||
{
|
||||
/**
|
||||
* Retrieves the icon given to files with the specified extension
|
||||
*
|
||||
* @param aExt The extension without the leading dot;
|
||||
* if the dot is present, it will be ignored.
|
||||
* @param aNeedMini Retrieve a mini icon if true; a standard icon if false.
|
||||
* @return An HPOINTER representing the icon.
|
||||
*/
|
||||
unsigned long iconFromExtension(in string aExt, in boolean aNeedMini);
|
||||
|
||||
/**
|
||||
* Retrieves the icon for a specific file or abstract object.
|
||||
*
|
||||
* @param aPath The fully-qualified name of the file or object.
|
||||
* @param aAbstract False for filesystem objects, true for abstract objects.
|
||||
* @param aNeedMini Retrieve a mini icon if true; a standard icon if false.
|
||||
* @return An HPOINTER representing the icon.
|
||||
*/
|
||||
unsigned long iconFromPath(in string aPath, in boolean aAbstract,
|
||||
in boolean aNeedMini);
|
||||
|
||||
/**
|
||||
* Retrieves a file or abstract object's icon using its WPS object handle.
|
||||
*
|
||||
* @param aHandle The file or object's WPS object handle.
|
||||
* @param aNeedMini Retrieve a mini icon if true; a standard icon if false.
|
||||
* @return An HPOINTER representing the icon.
|
||||
*/
|
||||
unsigned long iconFromHandle(in unsigned long aHandle, in boolean aNeedMini);
|
||||
|
||||
/**
|
||||
* Returns the name of the default handler for files with the
|
||||
* specified extension. If the handler is a program, it also
|
||||
* retrieves the handler's WPS object handle; if the default
|
||||
* handler is provided by a WPS class, aHandle will be zero.
|
||||
*
|
||||
* @param aExt The extension without the leading dot;
|
||||
* if the dot is present, it will be ignored.
|
||||
* @param aHandle Returns a WPS object handle for programs or
|
||||
* zero for class-based handlers.
|
||||
* @return Either the unqualified title of a program or
|
||||
* the name of the WPS class' default viewer/player.
|
||||
*/
|
||||
AString handlerFromExtension(in string aExt, out unsigned long aHandle);
|
||||
|
||||
/**
|
||||
* Returns the name of the default handler for a specific file.
|
||||
* If the handler is a program, it also retrieves the handler's
|
||||
* WPS object handle; if the default handler is provided by a
|
||||
* WPS class, aHandle will be zero.
|
||||
*
|
||||
* @param aPath The fully-qualified name of a file.
|
||||
* @param aHandle Returns a WPS object handle for programs or
|
||||
* zero for class-based handlers.
|
||||
* @return Either the unqualified title of a program or
|
||||
* the name of the WPS class' default viewer/player.
|
||||
*/
|
||||
AString handlerFromPath(in string aPath, out unsigned long aHandle);
|
||||
|
||||
/**
|
||||
* Returns the unqualified title of the specified object.
|
||||
*
|
||||
* @param aHandle A WPS object handle.
|
||||
* @return The title of this object.
|
||||
*/
|
||||
AString titleFromHandle(in unsigned long aHandle);
|
||||
|
||||
/**
|
||||
* Displays the WPS object menu for the specified file or abstract object.
|
||||
*
|
||||
* @param aPath The fully-qualified name of the file or object.
|
||||
* @param aAbstract False for filesystem objects, true for abstract objects.
|
||||
*/
|
||||
void menuFromPath(in string aPath, in boolean aAbstract);
|
||||
|
||||
/**
|
||||
* Opens a file using the specified program file. The effect
|
||||
* is identical to dropping the file on the program's icon.
|
||||
*
|
||||
* @param aFilePath The fully-qualified name of a file.
|
||||
* @param aAppPath The fully-qualified name of a program file.
|
||||
*/
|
||||
void openWithAppPath(in string aFilePath, in string aAppPath);
|
||||
|
||||
/**
|
||||
* Opens a file using the specified WPS object handle. The effect
|
||||
* is identical to dropping the file on the object's icon.
|
||||
*
|
||||
* @param aFilePath The fully-qualified name of a file.
|
||||
* @param aAppHandle A WPS object handle.
|
||||
*/
|
||||
void openWithAppHandle(in string aFilePath, in unsigned long aAppHandle);
|
||||
};
|
||||
|
|
@ -94,6 +94,7 @@ CPPSRCS = \
|
|||
nsScreenManagerOS2.cpp \
|
||||
nsDeviceContextSpecOS2.cpp \
|
||||
nsPrintOptionsOS2.cpp \
|
||||
nsRwsService.cpp \
|
||||
$(NULL)
|
||||
|
||||
SHARED_LIBRARY_LIBS = \
|
||||
|
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -0,0 +1,82 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is OS/2 Remote Workplace Server interface.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Richard L Walsh.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2005
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
||||
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
#ifndef nsRwsService_h__
|
||||
#define nsRwsService_h__
|
||||
|
||||
#include "nsIRwsService.h"
|
||||
#include "rws.h"
|
||||
|
||||
// e314efd1-f4ef-49e0-bd98-12d4e87a63a7
|
||||
#define NS_RWSSERVICE_CID \
|
||||
{ 0xe314efd1, 0xf4ef,0x49e0, { 0xbd, 0x98, 0x12, 0xd4, 0xe8, 0x7a, 0x63, 0xa7 } }
|
||||
|
||||
#define NS_RWSSERVICE_CONTRACTID "@mozilla.org/rwsos2;1"
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
NS_IMETHODIMP nsRwsServiceConstructor(nsISupports *aOuter, REFNSIID aIID,
|
||||
void **aResult);
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
class ExtCache;
|
||||
|
||||
class nsRwsService : public nsIRwsService, public nsIObserver
|
||||
{
|
||||
public:
|
||||
NS_DECL_NSIRWSSERVICE
|
||||
NS_DECL_NSIOBSERVER
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
nsRwsService();
|
||||
|
||||
private:
|
||||
~nsRwsService();
|
||||
|
||||
protected:
|
||||
static nsresult RwsConvert(PRUint32 type, PRUint32 value, PRUint32 *result);
|
||||
static nsresult RwsConvert(PRUint32 type, PRUint32 value, nsAString& result);
|
||||
|
||||
ExtCache *mExtCache;
|
||||
};
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
#endif // nsRwsService_h__
|
|
@ -80,6 +80,7 @@
|
|||
#include "nsHTMLFormatConverter.h"
|
||||
|
||||
#include "nsScreenManagerOS2.h"
|
||||
#include "nsRwsService.h"
|
||||
|
||||
// Printing
|
||||
#include "nsDeviceContextSpecOS2.h"
|
||||
|
@ -186,6 +187,10 @@ static const nsModuleComponentInfo components[] =
|
|||
// "@mozilla.org/gfx/printer_enumerator/gtk;1",
|
||||
"@mozilla.org/gfx/printerenumerator;1",
|
||||
nsPrinterEnumeratorOS2Constructor },
|
||||
{ "Rws Service Interface",
|
||||
NS_RWSSERVICE_CID,
|
||||
NS_RWSSERVICE_CONTRACTID,
|
||||
nsRwsServiceConstructor },
|
||||
};
|
||||
|
||||
PR_STATIC_CALLBACK(void)
|
||||
|
|
Загрузка…
Ссылка в новой задаче