diff --git a/mozilla/modules/plugin/samples/default/mac/DefaultPlugin.pbproj/project.pbxproj b/mozilla/modules/plugin/samples/default/mac/DefaultPlugin.pbproj/project.pbxproj
new file mode 100644
index 00000000000..da877e41e2b
--- /dev/null
+++ b/mozilla/modules/plugin/samples/default/mac/DefaultPlugin.pbproj/project.pbxproj
@@ -0,0 +1,387 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 38;
+ objects = {
+ 089C1669FE841209C02AAC07 = {
+ buildStyles = (
+ 4F9091AC011F3BD104CA0E50,
+ 4F9091AD011F3BD104CA0E50,
+ F50EB520038ABFA401A9666E,
+ );
+ hasScannedForEncodings = 1;
+ isa = PBXProject;
+ mainGroup = 089C166AFE841209C02AAC07;
+ projectDirPath = "";
+ targets = (
+ 089C1673FE841209C02AAC07,
+ F59D147102AC328B01000104,
+ );
+ };
+ 089C166AFE841209C02AAC07 = {
+ children = (
+ 08FB77ADFE841716C02AAC07,
+ 089C167CFE841241C02AAC07,
+ 089C1671FE841209C02AAC07,
+ 19C28FB4FE9D528D11CA2CBB,
+ );
+ isa = PBXGroup;
+ name = MRJPlugin;
+ refType = 4;
+ };
+ 089C1671FE841209C02AAC07 = {
+ children = (
+ F5A7D3AB036E359F01A96660,
+ 08EA7FFBFE8413EDC02AAC07,
+ F51A400C0299CD65012FC976,
+ );
+ isa = PBXGroup;
+ name = "External Frameworks and Libraries";
+ refType = 4;
+ };
+ 089C1673FE841209C02AAC07 = {
+ buildPhases = (
+ 089C1674FE841209C02AAC07,
+ 089C1675FE841209C02AAC07,
+ 089C1676FE841209C02AAC07,
+ 089C1677FE841209C02AAC07,
+ 089C1679FE841209C02AAC07,
+ F5BFB5E8029AD01B01000102,
+ );
+ buildSettings = {
+ FRAMEWORK_SEARCH_PATHS = "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreFoundation.framework\"";
+ HEADER_SEARCH_PATHS = "../../../../../dist/sdk/xpcom/include ../../../../../dist/include/caps ../../../../../dist/include/java ../../../../../dist/include/js ../../../../../dist/include/nspr ../../../../../dist/include/nspr/obsolete ../../../../../dist/include/oji ../../../../../dist/include/plugin ../../../../../dist/include/xpcom ../../../../../dist/include/xpconnect ../../../../../dist/include /Developer/Headers/FlatCarbon";
+ LIBRARY_SEARCH_PATHS = /usr/lib;
+ OTHER_CFLAGS = "-DXP_MACOSX=1 -DNO_X11=1 -DUSE_SYSTEM_CONSOLE=1";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PREFIX_HEADER = DefaultPluginPrefix.h;
+ PRODUCT_NAME = "Default Plugin";
+ SECTORDER_FLAGS = "";
+ WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas";
+ WRAPPER_EXTENSION = plugin;
+ };
+ dependencies = (
+ F59D147202AC350E01000104,
+ );
+ isa = PBXBundleTarget;
+ name = "Default Plugin";
+ productName = MRJPlugin;
+ productReference = 4F9091AB011F3BD104CA0E50;
+ productSettingsXML = "
+
+
+
+ CFBundleDevelopmentRegion
+ English
+ CFBundleExecutable
+ Default Plugin
+ CFBundleIconFile
+
+ CFBundleIdentifier
+ com.netscape.DefaultPlugin
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundlePackageType
+ NSPL
+ CFBundleSignature
+ MOSS
+ CFBundleVersion
+ 1.0
+ CSResourcesFileMapped
+
+
+
+";
+ };
+ 089C1674FE841209C02AAC07 = {
+ buildActionMask = 2147483647;
+ files = (
+ 0F64AF2D0433C8A200A96652,
+ );
+ isa = PBXHeadersBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 089C1675FE841209C02AAC07 = {
+ buildActionMask = 2147483647;
+ files = (
+ 089C1680FE841241C02AAC07,
+ );
+ isa = PBXResourcesBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 089C1676FE841209C02AAC07 = {
+ buildActionMask = 2147483647;
+ files = (
+ F5E0C350036A130901A96660,
+ F5E0C352036A130E01A96660,
+ );
+ isa = PBXSourcesBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 089C1677FE841209C02AAC07 = {
+ buildActionMask = 2147483647;
+ files = (
+ 08EA7FFCFE8413EDC02AAC07,
+ F51A400D0299CD65012FC976,
+ F5A7D695036E35A001A96660,
+ );
+ isa = PBXFrameworksBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 089C1679FE841209C02AAC07 = {
+ buildActionMask = 2147483647;
+ files = (
+ F5E0C34E036A12DF01A96660,
+ );
+ isa = PBXRezBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 089C167CFE841241C02AAC07 = {
+ children = (
+ 089C167DFE841241C02AAC07,
+ F5E0C34D036A12DF01A96660,
+ );
+ isa = PBXGroup;
+ name = Resources;
+ refType = 4;
+ };
+ 089C167DFE841241C02AAC07 = {
+ children = (
+ 089C167EFE841241C02AAC07,
+ );
+ isa = PBXVariantGroup;
+ name = InfoPlist.strings;
+ path = "";
+ refType = 2;
+ };
+ 089C167EFE841241C02AAC07 = {
+ fileEncoding = 10;
+ isa = PBXFileReference;
+ name = English;
+ path = English.lproj/InfoPlist.strings;
+ refType = 4;
+ };
+ 089C1680FE841241C02AAC07 = {
+ fileRef = 089C167DFE841241C02AAC07;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 08EA7FFBFE8413EDC02AAC07 = {
+ isa = PBXFrameworkReference;
+ name = Carbon.framework;
+ path = /System/Library/Frameworks/Carbon.framework;
+ refType = 0;
+ };
+ 08EA7FFCFE8413EDC02AAC07 = {
+ fileRef = 08EA7FFBFE8413EDC02AAC07;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 08FB77ADFE841716C02AAC07 = {
+ children = (
+ 0F64AF2C0433C8A200A96652,
+ F5E0C34F036A130901A96660,
+ F5E0C351036A130E01A96660,
+ );
+ isa = PBXGroup;
+ name = Source;
+ refType = 4;
+ };
+//080
+//081
+//082
+//083
+//084
+//0F0
+//0F1
+//0F2
+//0F3
+//0F4
+ 0F64AF2C0433C8A200A96652 = {
+ fileEncoding = 4;
+ isa = PBXFileReference;
+ path = DefaultPluginPrefix.h;
+ refType = 4;
+ };
+ 0F64AF2D0433C8A200A96652 = {
+ fileRef = 0F64AF2C0433C8A200A96652;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+//0F0
+//0F1
+//0F2
+//0F3
+//0F4
+//190
+//191
+//192
+//193
+//194
+ 19C28FB4FE9D528D11CA2CBB = {
+ children = (
+ 4F9091AB011F3BD104CA0E50,
+ );
+ isa = PBXGroup;
+ name = Products;
+ refType = 4;
+ };
+//190
+//191
+//192
+//193
+//194
+//4F0
+//4F1
+//4F2
+//4F3
+//4F4
+ 4F9091AB011F3BD104CA0E50 = {
+ isa = PBXBundleReference;
+ path = "Default Plugin.plugin";
+ refType = 3;
+ };
+ 4F9091AC011F3BD104CA0E50 = {
+ buildRules = (
+ );
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ OPTIMIZATION_CFLAGS = "-O0";
+ };
+ isa = PBXBuildStyle;
+ name = Development;
+ };
+ 4F9091AD011F3BD104CA0E50 = {
+ buildRules = (
+ );
+ buildSettings = {
+ COPY_PHASE_STRIP = YES;
+ };
+ isa = PBXBuildStyle;
+ name = Deployment;
+ };
+//4F0
+//4F1
+//4F2
+//4F3
+//4F4
+//F50
+//F51
+//F52
+//F53
+//F54
+ F50EB520038ABFA401A9666E = {
+ buildRules = (
+ );
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ DEBUGGING_SYMBOLS = YES;
+ };
+ isa = PBXBuildStyle;
+ name = DeploymentSymbols;
+ };
+ F51A400C0299CD65012FC976 = {
+ isa = PBXFileReference;
+ name = "libstdc++.a";
+ path = "/usr/lib/libstdc++.a";
+ refType = 0;
+ };
+ F51A400D0299CD65012FC976 = {
+ fileRef = F51A400C0299CD65012FC976;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F59D147102AC328B01000104 = {
+ buildArgumentsString = "$ACTION resources";
+ buildPhases = (
+ );
+ buildSettings = {
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PRODUCT_NAME = Resources;
+ SECTORDER_FLAGS = "";
+ WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas";
+ };
+ buildToolPath = /usr/bin/gnumake;
+ buildWorkingDirectory = .;
+ dependencies = (
+ );
+ isa = PBXLegacyTarget;
+ name = Resources;
+ passBuildSettingsInEnvironment = 1;
+ productName = Resources;
+ settingsToExpand = 6;
+ settingsToPassInEnvironment = 287;
+ settingsToPassOnCommandLine = 280;
+ };
+ F59D147202AC350E01000104 = {
+ isa = PBXTargetDependency;
+ target = F59D147102AC328B01000104;
+ };
+ F5A7D3AB036E359F01A96660 = {
+ isa = PBXFrameworkReference;
+ name = CoreFoundation.framework;
+ path = /System/Library/Frameworks/CoreFoundation.framework;
+ refType = 0;
+ };
+ F5A7D695036E35A001A96660 = {
+ fileRef = F5A7D3AB036E359F01A96660;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F5BFB5E8029AD01B01000102 = {
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 6;
+ files = (
+ );
+ isa = PBXCopyFilesBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F5E0C34D036A12DF01A96660 = {
+ isa = PBXFileReference;
+ path = _NullPlugin.rsrc;
+ refType = 2;
+ };
+ F5E0C34E036A12DF01A96660 = {
+ fileRef = F5E0C34D036A12DF01A96660;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F5E0C34F036A130901A96660 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ path = NullPlugin.cpp;
+ refType = 2;
+ };
+ F5E0C350036A130901A96660 = {
+ fileRef = F5E0C34F036A130901A96660;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F5E0C351036A130E01A96660 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ path = npmac.cpp;
+ refType = 2;
+ };
+ F5E0C352036A130E01A96660 = {
+ fileRef = F5E0C351036A130E01A96660;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ };
+ rootObject = 089C1669FE841209C02AAC07;
+}
diff --git a/mozilla/modules/plugin/samples/default/mac/DefaultPluginPrefix.h b/mozilla/modules/plugin/samples/default/mac/DefaultPluginPrefix.h
new file mode 100644
index 00000000000..6d63b1daa12
--- /dev/null
+++ b/mozilla/modules/plugin/samples/default/mac/DefaultPluginPrefix.h
@@ -0,0 +1 @@
+#include "mozilla-config.h"
diff --git a/mozilla/modules/plugin/samples/default/mac/English.lproj/InfoPlist.strings b/mozilla/modules/plugin/samples/default/mac/English.lproj/InfoPlist.strings
new file mode 100644
index 00000000000..af285b9b483
Binary files /dev/null and b/mozilla/modules/plugin/samples/default/mac/English.lproj/InfoPlist.strings differ
diff --git a/mozilla/modules/plugin/samples/default/mac/Makefile.in b/mozilla/modules/plugin/samples/default/mac/Makefile.in
new file mode 100644
index 00000000000..b7a4fd41589
--- /dev/null
+++ b/mozilla/modules/plugin/samples/default/mac/Makefile.in
@@ -0,0 +1,91 @@
+# ***** 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 mozilla.org code.
+#
+# The Initial Developer of the Original Code is
+# Netscape Communications.
+# Portions created by the Initial Developer are Copyright (C) 2001
+# the Initial Developer. All Rights Reserved.
+#
+# Contributor(s):
+# Brian Ryner
+#
+# 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
+# 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 *****
+
+DEPTH = ../../../../..
+topsrcdir = @top_srcdir@
+srcdir = @srcdir@
+VPATH = @srcdir@
+
+include $(DEPTH)/config/autoconf.mk
+
+ifdef MOZ_DEBUG
+BUILDSTYLE = Development
+else
+ifdef CHIMERA_OPT_SYMBOLS
+BUILDSTYLE = DeploymentSymbols
+else
+BUILDSTYLE = Deployment
+endif
+endif
+
+TARGET = "Default Plugin"
+
+include $(topsrcdir)/config/rules.mk
+
+# decodes resource files from AppleSingle to Resource Manager format.
+ASDECODE = $(DIST)/bin/asdecode
+RESOURCE_FILES = _NullPlugin.rsrc
+
+# for objdir builds, copy the project, and symlink the sources
+ABS_topsrcdir := $(shell cd $(topsrcdir); pwd)
+ifneq ($(ABS_topsrcdir),$(MOZ_BUILD_ROOT))
+export::
+ rsync -a --exclude .DS_Store --exclude "CVS/" $(srcdir)/DefaultPlugin.pbproj .
+ ln -fs $(srcdir)/English.lproj
+ ln -fs $(srcdir)/DefaultPluginPrefix.h
+ ln -fs $(srcdir)/NullPlugin.cpp
+ ln -fs $(srcdir)/npmac.cpp
+endif
+
+all:: build-plugin
+
+libs install:: install-plugin
+
+install-plugin: build-plugin
+ $(INSTALL) "build/Default Plugin.plugin" $(DIST)/bin/plugins
+
+resources: $(RESOURCE_FILES)
+
+build-plugin: resources
+ pbxbuild -target $(TARGET) -buildstyle $(BUILDSTYLE)
+
+_%.rsrc: %.rsrc
+ $(ASDECODE) $< $@
+
+clean clobber::
+ rm -f $(RESOURCE_FILES)
+ rm -rf build
diff --git a/mozilla/modules/plugin/samples/default/mac/NullPlugin.cpp b/mozilla/modules/plugin/samples/default/mac/NullPlugin.cpp
index c0689808bdd..d5ef21a5843 100644
--- a/mozilla/modules/plugin/samples/default/mac/NullPlugin.cpp
+++ b/mozilla/modules/plugin/samples/default/mac/NullPlugin.cpp
@@ -40,11 +40,18 @@
#include "npapi.h"
#endif
+#ifdef XP_MACOSX
+#undef DARWIN
+#include
+#else
+#include
#include
#include
#include
#include
#include
+#include
+#endif
#include
#include
@@ -66,6 +73,9 @@ public:
static NPError Initialize();
static void Shutdown();
+ // no ctor because CPlugin is allocated and constructed by hand.
+ // ideally, this should use placement |new|.
+
void Constructor(NPP instance, NPMIMEType type, uint16 mode, int16 argc, char* argn[], char* argv[]);
void Destructor();
@@ -101,8 +111,9 @@ private:
static char* sDefaultPage;
static char* sRefreshText;
static char* sJavaScriptPage;
- static FSSpec sDataFileSpec;
-
+ static FSSpec sDataFileSpec; // only used for Mac OS 9
+ static Boolean sRunningOnOSX;
+
NPP fInstance;
NPWindow* fWindow;
uint16 fMode;
@@ -131,6 +142,7 @@ char* CPlugin::sDefaultPage = NULL;
char* CPlugin::sRefreshText = NULL;
char* CPlugin::sJavaScriptPage = NULL;
FSSpec CPlugin::sDataFileSpec;
+Boolean CPlugin::sRunningOnOSX = false;
extern short gResFile;
@@ -154,9 +166,10 @@ const short rJavaScriptPageURL = 132;
// 'STR#'
const short rTypeListStrings = 129;
-static char szPluginFinderCommandBeginning[] = PLUGINFINDER_COMMAND_BEGINNING;
-static char szPluginFinderCommandEnd[] = PLUGINFINDER_COMMAND_END;
+static const char szPluginFinderCommandBeginning[] = PLUGINFINDER_COMMAND_BEGINNING;
+static const char szPluginFinderCommandEnd[] = PLUGINFINDER_COMMAND_END;
+//#ifndef XP_MACOSX
//------------------------------------------------------------------------------------
// strcasecomp: Why don't the MW C libraries have this??
@@ -170,11 +183,11 @@ int strcasecmp (const char* one, const char *two)
const char *pB;
for(pA=one, pB=two; *pA && *pB; pA++, pB++)
- {
- int tmp = XP_TO_LOWER(*pA) - XP_TO_LOWER(*pB);
- if (tmp)
+ {
+ int tmp = XP_TO_LOWER(*pA) - XP_TO_LOWER(*pB);
+ if (tmp)
return tmp;
- }
+ }
if (*pA)
return 1;
if (*pB)
@@ -182,6 +195,8 @@ int strcasecmp (const char* one, const char *two)
return 0;
}
+//#endif // XP_MACOSX
+
//------------------------------------------------------------------------------------
// NPP_Initialize:
@@ -337,8 +352,8 @@ NPP_StreamAsFile(NPP /*instance*/, NPStream */*stream*/, const char* /*fname*/)
void NP_LOADDS
NPP_Print(NPP instance, NPPrint* printInfo)
{
- if (printInfo == NULL)
- return;
+ if (printInfo == NULL)
+ return;
if (instance != NULL)
{
@@ -388,6 +403,7 @@ jref NPP_GetJavaClass(void)
return NULL;
}
+#pragma mark -
//------------------------------------------------------------------------------------
// CPlugin::Initialize:
@@ -395,11 +411,14 @@ jref NPP_GetJavaClass(void)
NPError CPlugin::Initialize()
{
Handle string;
- SInt16 wResFile;
short saveResFile = CurResFile();
UseResFile(gResFile);
+ long systemVersion;
+ OSErr err = ::Gestalt(gestaltSystemVersion, &systemVersion);
+ sRunningOnOSX = (err == noErr) && (systemVersion >= 0x00001000);
+
// Get Resources
CPlugin::sIconHandle = GetCIcon(rBrokenPluginIcon);
CPlugin::sHandCursor = GetCursor(rHandCursor);
@@ -490,11 +509,13 @@ NPError CPlugin::Initialize()
ReleaseResource(string);
UseResFile(saveResFile);
-
+
+ if (!sRunningOnOSX) // We'll make some CFPreferences the first time we have to on OS X
{
ProcessSerialNumber psn;
ProcessInfoRec info;
FSSpec fsTheApp;
+ SInt16 wResFile;
OSErr wErr;
psn.highLongOfPSN = 0;
@@ -505,8 +526,7 @@ NPError CPlugin::Initialize()
info.processAppSpec = &fsTheApp;
wErr = ::GetProcessInformation(&psn, &info);
if (wErr == noErr) {
- wErr = FSMakeFSSpec(fsTheApp.vRefNum, fsTheApp.parID, "\p:Plug-ins:Default Plug-in Data",
- &sDataFileSpec);
+ wErr = FSMakeFSSpec(fsTheApp.vRefNum, fsTheApp.parID, "\p:Plug-ins:Default Plug-in Data", &sDataFileSpec);
if (wErr == fnfErr) {
FSpCreateResFile(&sDataFileSpec, 'MOSS', 'BINA', smSystemScript);
wResFile = FSpOpenResFile(&CPlugin::sDataFileSpec, fsRdWrPerm);
@@ -521,6 +541,7 @@ NPError CPlugin::Initialize()
}
}
}
+
return NPERR_NO_ERROR;
}
@@ -721,8 +742,8 @@ void CPlugin::Draw(HiliteState hilite)
#if !TARGET_API_MAC_CARBON
FillRect(&drawRect, &(gQDPtr->white));
#else
- Pattern qdWhite;
- FillRect(&drawRect, GetQDGlobalsWhite(&qdWhite));
+ Pattern qdWhite;
+ FillRect(&drawRect, GetQDGlobalsWhite(&qdWhite));
#endif
if (hilite == kHilited) {
@@ -769,7 +790,8 @@ void CPlugin::MouseDown()
{
Draw(kHilited);
Boolean inside = true;
-
+
+ // evil CPU-hogging loop on Mac OS X!
while (StillDown())
{
Point localMouse;
@@ -811,11 +833,11 @@ Boolean CPlugin::FocusDraw()
{
GetPort(&fSavePort);
SetPort((GrafPtr) ourPort);
- Rect portRect;
+ Rect portRect;
#if !TARGET_API_MAC_CARBON
- portRect = ourPort->portRect;
+ portRect = ourPort->portRect;
#else
- GetPortBounds(ourPort, &portRect);
+ GetPortBounds(ourPort, &portRect);
#endif
fSavePortTop = portRect.top;
fSavePortLeft = portRect.left;
@@ -957,51 +979,106 @@ char *CPlugin::MakeDefaultURL(void)
//------------------------------------------------------------------------------------
void CPlugin::AddMimeTypeToList(StringPtr cTypeString)
{
- Handle hTypeList;
- SInt32 dwCount;
- SInt32 index;
- Str255 oldType;
- SInt16 wResFile;
- Boolean failedToFind = true;
+ if (sRunningOnOSX)
+ {
+ CFStringRef pluginKey = CFSTR("DefaultPluginSeenTypes"); // don't release this
+ CFStringRef mimeType = ::CFStringCreateWithPascalString(kCFAllocatorDefault, cTypeString, kCFStringEncodingASCII);
+ CFArrayRef prefsList = (CFArrayRef)::CFPreferencesCopyAppValue(pluginKey, kCFPreferencesCurrentApplication);
+ Boolean foundType = false;
- wResFile = FSpOpenResFile(&CPlugin::sDataFileSpec, fsRdWrPerm);
- if (wResFile != -1) {
- hTypeList = Get1Resource('STR#', rTypeListStrings);
- if (hTypeList != NULL) {
- dwCount = **((short **)hTypeList);
+ if (prefsList == NULL)
+ {
+ CFStringRef stringArray[1];
+ stringArray[0] = mimeType;
- // First make sure it's not already in the list.
- for (index = 1; index <= dwCount; index++) {
- GetIndString(oldType, rTypeListStrings, index);
-
- // if the mimetype already exists in our list, or the plugin is NOT hidden,
- // don't bring up the dialog box
- if (EqualString(cTypeString, oldType, true, true) && !fHiddenPlugin) {
- failedToFind = false;
- break; // Found a match, so bail out!
- }
+ prefsList = ::CFArrayCreate(kCFAllocatorDefault, (const void **)stringArray, 1, &kCFTypeArrayCallBacks);
+ if (prefsList)
+ {
+ ::CFPreferencesSetAppValue(pluginKey, prefsList, kCFPreferencesCurrentApplication);
+ ::CFRelease(prefsList);
}
- if (failedToFind) {
- // Grow the string list handle
- Size itsSize = GetHandleSize(hTypeList);
- Size typeSize = cTypeString[0] + 1;
- SetHandleSize(hTypeList, itsSize + typeSize);
-
- // Increment the count of strings in the list
- (**((short**)hTypeList)) = (short)(++dwCount);
-
- // Copy the data from our string into the handle
- long dwCount = Munger(hTypeList, itsSize, NULL, typeSize, cTypeString, typeSize);
-
- // Mark the resource as changed so it will be written out
- if (dwCount > 0) {
- ChangedResource(hTypeList);
- UpdateResFile(wResFile);
- }
- }
- ReleaseResource(hTypeList);
}
- FSClose(wResFile);
+ else
+ {
+ if (::CFGetTypeID(prefsList) == ::CFArrayGetTypeID())
+ {
+ // first make sure it's not in the list
+ CFIndex count = ::CFArrayGetCount(prefsList);
+ for (CFIndex i = 0; i < count; i ++)
+ {
+ CFStringRef item = (CFStringRef)::CFArrayGetValueAtIndex(prefsList, i); // does not retain
+ if (item &&
+ (::CFGetTypeID(item) == ::CFStringGetTypeID()) &&
+ (::CFStringCompareWithOptions(item, mimeType,
+ CFRangeMake(0, ::CFStringGetLength(item)), kCFCompareCaseInsensitive) == kCFCompareEqualTo))
+ {
+ foundType = true;
+ break;
+ }
+ }
+
+ if (!foundType && !fHiddenPlugin)
+ {
+ CFMutableArrayRef typesArray = ::CFArrayCreateMutableCopy(kCFAllocatorDefault, 0, (CFArrayRef)prefsList);
+ if (typesArray)
+ {
+ ::CFArrayAppendValue(typesArray, mimeType);
+ ::CFPreferencesSetAppValue(pluginKey, typesArray, kCFPreferencesCurrentApplication);
+ }
+ }
+ }
+ ::CFRelease(prefsList);
+ }
+ ::CFRelease(mimeType);
+ }
+ else
+ {
+ Handle hTypeList;
+ SInt32 dwCount;
+ SInt32 index;
+ Str255 oldType;
+ SInt16 wResFile;
+ Boolean failedToFind = true;
+
+ wResFile = FSpOpenResFile(&CPlugin::sDataFileSpec, fsRdWrPerm);
+ if (wResFile != -1) {
+ hTypeList = Get1Resource('STR#', rTypeListStrings);
+ if (hTypeList != NULL) {
+ dwCount = **((short **)hTypeList);
+
+ // First make sure it's not already in the list.
+ for (index = 1; index <= dwCount; index++) {
+ GetIndString(oldType, rTypeListStrings, index);
+
+ // if the mimetype already exists in our list, or the plugin is NOT hidden,
+ // don't bring up the dialog box
+ if (EqualString(cTypeString, oldType, true, true) && !fHiddenPlugin) {
+ failedToFind = false;
+ break; // Found a match, so bail out!
+ }
+ }
+ if (failedToFind) {
+ // Grow the string list handle
+ Size itsSize = GetHandleSize(hTypeList);
+ Size typeSize = cTypeString[0] + 1;
+ SetHandleSize(hTypeList, itsSize + typeSize);
+
+ // Increment the count of strings in the list
+ (**((short**)hTypeList)) = (short)(++dwCount);
+
+ // Copy the data from our string into the handle
+ long dwCount = Munger(hTypeList, itsSize, NULL, typeSize, cTypeString, typeSize);
+
+ // Mark the resource as changed so it will be written out
+ if (dwCount > 0) {
+ ChangedResource(hTypeList);
+ UpdateResFile(wResFile);
+ }
+ }
+ ReleaseResource(hTypeList);
+ }
+ FSClose(wResFile);
+ }
}
}
@@ -1023,41 +1100,72 @@ void CPlugin::AddMimeTypeToList(StringPtr cTypeString)
//------------------------------------------------------------------------------------
Boolean CPlugin::CheckMimeTypes()
{
- Handle hTypeList;
- SInt32 index;
- Str255 oldType;
- Str255 ourType;
- SInt16 wResFile;
- Boolean failedToFind = true;
+ Boolean failedToFind = true;
- wResFile = FSpOpenResFile(&CPlugin::sDataFileSpec, fsRdPerm);
- if (wResFile != -1) {
- hTypeList = Get1Resource('STR#', rTypeListStrings);
- if (hTypeList != NULL) {
- // Convert the mime-type C string to a Pascal string.
- index = strlen(fType);
- if (index > 255) { // don't blow out the Str255
- index = 255;
- }
- BlockMoveData(fType, &ourType[1], index);
- ourType[0] = index;
-
- short count = **((short **)hTypeList);
-
- // Iterate through all the strings in the list.
- for (index = 1; index <= count; index++) {
- GetIndString(oldType, rTypeListStrings, index);
-
- // if the mimetype already exists in our list, or the plugin is NOT hidden,
- // don't bring up the dialog box
- if (EqualString(ourType, oldType, true, true) && !fHiddenPlugin) {
- failedToFind = false;
- break; // Found a match, so bail out!
+ if (sRunningOnOSX)
+ {
+ CFStringRef pluginKey = CFSTR("DefaultPluginSeenTypes"); // don't release this
+ CFStringRef mimeType = ::CFStringCreateWithCString(kCFAllocatorDefault, fType, kCFStringEncodingASCII);
+ CFArrayRef prefsList = (CFArrayRef)::CFPreferencesCopyAppValue(pluginKey, kCFPreferencesCurrentApplication);
+ if (prefsList)
+ {
+ if (::CFGetTypeID(prefsList) == ::CFArrayGetTypeID())
+ {
+ CFIndex count = ::CFArrayGetCount(prefsList);
+ for (CFIndex i = 0; i < count; i ++)
+ {
+ CFStringRef item = (CFStringRef)::CFArrayGetValueAtIndex(prefsList, i); // does not retain
+ if (item &&
+ (::CFGetTypeID(item) == ::CFStringGetTypeID()) &&
+ (::CFStringCompareWithOptions(item, mimeType,
+ CFRangeMake(0, ::CFStringGetLength(item)), kCFCompareCaseInsensitive) == kCFCompareEqualTo))
+ {
+ failedToFind = false;
+ break;
+ }
}
}
- ReleaseResource(hTypeList);
+ ::CFRelease(prefsList);
+ }
+ ::CFRelease(mimeType);
+ }
+ else
+ {
+ Handle hTypeList;
+ SInt32 index;
+ Str255 oldType;
+ Str255 ourType;
+ SInt16 wResFile;
+
+ wResFile = FSpOpenResFile(&CPlugin::sDataFileSpec, fsRdPerm);
+ if (wResFile != -1) {
+ hTypeList = Get1Resource('STR#', rTypeListStrings);
+ if (hTypeList != NULL) {
+ // Convert the mime-type C string to a Pascal string.
+ index = strlen(fType);
+ if (index > 255) { // don't blow out the Str255
+ index = 255;
+ }
+ BlockMoveData(fType, &ourType[1], index);
+ ourType[0] = index;
+
+ short count = **((short **)hTypeList);
+
+ // Iterate through all the strings in the list.
+ for (index = 1; index <= count; index++) {
+ GetIndString(oldType, rTypeListStrings, index);
+
+ // if the mimetype already exists in our list, or the plugin is NOT hidden,
+ // don't bring up the dialog box
+ if (EqualString(ourType, oldType, true, true) && !fHiddenPlugin) {
+ failedToFind = false;
+ break; // Found a match, so bail out!
+ }
+ }
+ ReleaseResource(hTypeList);
+ }
+ FSClose(wResFile);
}
- FSClose(wResFile);
}
return(failedToFind);
}
@@ -1087,7 +1195,7 @@ void CPlugin::AskAndLoadURL()
#if !TARGET_API_MAC_CARBON
SetCursor(&(gQDPtr->arrow));
#else
- Cursor qdArrow;
+ Cursor qdArrow;
SetCursor(GetQDGlobalsArrow(&qdArrow));
#endif
diff --git a/mozilla/modules/plugin/samples/default/mac/NullPlugin.rsrc b/mozilla/modules/plugin/samples/default/mac/NullPlugin.rsrc
index cec3f563f77..1a09fad814f 100644
Binary files a/mozilla/modules/plugin/samples/default/mac/NullPlugin.rsrc and b/mozilla/modules/plugin/samples/default/mac/NullPlugin.rsrc differ
diff --git a/mozilla/modules/plugin/samples/default/mac/npmac.cpp b/mozilla/modules/plugin/samples/default/mac/npmac.cpp
index 63ca73d0937..da00bfe9d26 100644
--- a/mozilla/modules/plugin/samples/default/mac/npmac.cpp
+++ b/mozilla/modules/plugin/samples/default/mac/npmac.cpp
@@ -4,6 +4,8 @@
//
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+#include
+
#include
#include
#include
@@ -22,7 +24,7 @@
// A4Stuff does not exist as of CW 7. Define them to nothing.
//
-#if defined(__MWERKS__) && (__MWERKS__ >= 0x2400)
+#if (defined(__MWERKS__) && (__MWERKS__ >= 0x2400)) || defined(__GNUC__)
#define EnterCodeResource()
#define ExitCodeResource()
#else
@@ -55,7 +57,7 @@
#endif
#endif
-// The following fix for static initializers (which fixes a preious
+// The following fix for static initializers (which fixes a previous
// incompatibility with some parts of PowerPlant, was submitted by
// Jan Ulbrich.
#ifdef __MWERKS__
@@ -78,7 +80,7 @@
// Define PLUGIN_TRACE to 1 to have the wrapper functions emit
// DebugStr messages whenever they are called.
//
-#define PLUGIN_TRACE 0
+//#define PLUGIN_TRACE 1
#if PLUGIN_TRACE
#define PLUGINDEBUGSTR(msg) ::DebugStr(msg)
@@ -87,8 +89,91 @@
#endif
+#ifdef XP_MACOSX
+
+// glue for mapping outgoing Macho function pointers to TVectors
+struct TFPtoTVGlue{
+ void* glue[2];
+};
+
+struct {
+ TFPtoTVGlue newp;
+ TFPtoTVGlue destroy;
+ TFPtoTVGlue setwindow;
+ TFPtoTVGlue newstream;
+ TFPtoTVGlue destroystream;
+ TFPtoTVGlue asfile;
+ TFPtoTVGlue writeready;
+ TFPtoTVGlue write;
+ TFPtoTVGlue print;
+ TFPtoTVGlue event;
+ TFPtoTVGlue urlnotify;
+ TFPtoTVGlue getvalue;
+ TFPtoTVGlue setvalue;
+
+ TFPtoTVGlue shutdown;
+} gPluginFuncsGlueTable;
+
+static inline void* SetupFPtoTVGlue(TFPtoTVGlue* functionGlue, void* fp)
+{
+ functionGlue->glue[0] = fp;
+ functionGlue->glue[1] = 0;
+ return functionGlue;
+}
+
+#define PLUGIN_TO_HOST_GLUE(name, fp) (SetupFPtoTVGlue(&gPluginFuncsGlueTable.name, (void*)fp))
+
+// glue for mapping netscape TVectors to Macho function pointers
+struct TTVtoFPGlue {
+ uint32 glue[6];
+};
+
+struct {
+ TTVtoFPGlue geturl;
+ TTVtoFPGlue posturl;
+ TTVtoFPGlue requestread;
+ TTVtoFPGlue newstream;
+ TTVtoFPGlue write;
+ TTVtoFPGlue destroystream;
+ TTVtoFPGlue status;
+ TTVtoFPGlue uagent;
+ TTVtoFPGlue memalloc;
+ TTVtoFPGlue memfree;
+ TTVtoFPGlue memflush;
+ TTVtoFPGlue reloadplugins;
+ TTVtoFPGlue getJavaEnv;
+ TTVtoFPGlue getJavaPeer;
+ TTVtoFPGlue geturlnotify;
+ TTVtoFPGlue posturlnotify;
+ TTVtoFPGlue getvalue;
+ TTVtoFPGlue setvalue;
+ TTVtoFPGlue invalidaterect;
+ TTVtoFPGlue invalidateregion;
+ TTVtoFPGlue forceredraw;
+} gNetscapeFuncsGlueTable;
+
+static void* SetupTVtoFPGlue(TTVtoFPGlue* functionGlue, void* tvp)
+{
+ static const TTVtoFPGlue glueTemplate = { 0x3D800000, 0x618C0000, 0x800C0000, 0x804C0004, 0x7C0903A6, 0x4E800420 };
+
+ memcpy(functionGlue, &glueTemplate, sizeof(TTVtoFPGlue));
+ functionGlue->glue[0] |= ((UInt32)tvp >> 16);
+ functionGlue->glue[1] |= ((UInt32)tvp & 0xFFFF);
+ ::MakeDataExecutable(functionGlue, sizeof(TTVtoFPGlue));
+ return functionGlue;
+}
+
+#define HOST_TO_PLUGIN_GLUE(name, fp) (SetupTVtoFPGlue(&gNetscapeFuncsGlueTable.name, (void*)fp))
+
+#else
+
+#define PLUGIN_TO_HOST_GLUE(name, fp) (fp)
+#define HOST_TO_PLUGIN_GLUE(name, fp) (fp)
+
+#endif /* XP_MACOSX */
+#pragma mark -
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@@ -103,7 +188,6 @@ QDGlobals* gQDPtr; // Pointer to Netscape
short gResFile; // Refnum of the pluginŐs resource file
NPNetscapeFuncs gNetscapeFuncs; // Function table for procs in Netscape called by plugin
-
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
//
// Wrapper functions for all calls from the plugin to Netscape.
@@ -284,6 +368,8 @@ void NPN_ForceRedraw(NPP instance)
CallNPN_ForceRedrawProc( gNetscapeFuncs.forceredraw, instance);
}
+#pragma mark -
+
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
//
// Wrapper functions for all calls from Netscape to the plugin.
@@ -326,7 +412,9 @@ void Private_Shutdown(void)
PLUGINDEBUGSTR("\pShutdown;g;");
NPP_Shutdown();
+#ifdef __MWERKS__
__destroy_global_chain();
+#endif
ExitCodeResource();
}
@@ -456,8 +544,16 @@ jobject Private_GetJavaClass(void)
void SetUpQD(void);
void SetUpQD(void)
{
+#if !TARGET_API_MAC_CARBON
+ ProcessSerialNumber PSN;
+ FSSpec myFSSpec;
+ Str63 name;
+ ProcessInfoRec infoRec;
OSErr result = noErr;
-
+ CFragConnectionID connID;
+ Str255 errName;
+#endif
+
//
// Memorize the pluginŐs resource file
// refnum for later use.
@@ -540,8 +636,12 @@ void SetUpQD(void)
}
-
+#ifdef __GNUC__
+// gcc requires that main have an 'int' return type
+int main(NPNetscapeFuncs* nsTable, NPPluginFuncs* pluginFuncs, NPP_ShutdownUPP* unloadUpp);
+#else
NPError main(NPNetscapeFuncs* nsTable, NPPluginFuncs* pluginFuncs, NPP_ShutdownUPP* unloadUpp);
+#endif
#if !TARGET_API_MAC_CARBON
#pragma export on
@@ -551,12 +651,18 @@ RoutineDescriptor mainRD = BUILD_ROUTINE_DESCRIPTOR(uppNPP_MainEntryProcInfo, ma
#pragma export off
#endif /* !TARGET_API_MAC_CARBON */
+#ifdef __GNUC__
+DEFINE_API_C(int) main(NPNetscapeFuncs* nsTable, NPPluginFuncs* pluginFuncs, NPP_ShutdownUPP* unloadUpp)
+#else
DEFINE_API_C(NPError) main(NPNetscapeFuncs* nsTable, NPPluginFuncs* pluginFuncs, NPP_ShutdownUPP* unloadUpp)
+#endif
{
EnterCodeResource();
PLUGINDEBUGSTR("\pmain");
+#ifdef __MWERKS__
__InitCode__();
+#endif
NPError err = NPERR_NO_ERROR;
@@ -592,62 +698,63 @@ DEFINE_API_C(NPError) main(NPNetscapeFuncs* nsTable, NPPluginFuncs* pluginFuncs,
int navMinorVers = nsTable->version & 0xFF;
- gNetscapeFuncs.version = nsTable->version;
- gNetscapeFuncs.size = nsTable->size;
- gNetscapeFuncs.posturl = nsTable->posturl;
- gNetscapeFuncs.geturl = nsTable->geturl;
- gNetscapeFuncs.requestread = nsTable->requestread;
- gNetscapeFuncs.newstream = nsTable->newstream;
- gNetscapeFuncs.write = nsTable->write;
- gNetscapeFuncs.destroystream = nsTable->destroystream;
- gNetscapeFuncs.status = nsTable->status;
- gNetscapeFuncs.uagent = nsTable->uagent;
- gNetscapeFuncs.memalloc = nsTable->memalloc;
- gNetscapeFuncs.memfree = nsTable->memfree;
- gNetscapeFuncs.memflush = nsTable->memflush;
- gNetscapeFuncs.reloadplugins = nsTable->reloadplugins;
+ gNetscapeFuncs.version = nsTable->version;
+ gNetscapeFuncs.size = nsTable->size;
+ gNetscapeFuncs.posturl = (NPN_PostURLUPP)HOST_TO_PLUGIN_GLUE(posturl, nsTable->posturl);
+ gNetscapeFuncs.geturl = (NPN_GetURLUPP)HOST_TO_PLUGIN_GLUE(geturl, nsTable->geturl);
+ gNetscapeFuncs.requestread = (NPN_RequestReadUPP)HOST_TO_PLUGIN_GLUE(requestread, nsTable->requestread);
+ gNetscapeFuncs.newstream = (NPN_NewStreamUPP)HOST_TO_PLUGIN_GLUE(newstream, nsTable->newstream);
+ gNetscapeFuncs.write = (NPN_WriteUPP)HOST_TO_PLUGIN_GLUE(write, nsTable->write);
+ gNetscapeFuncs.destroystream = (NPN_DestroyStreamUPP)HOST_TO_PLUGIN_GLUE(destroystream, nsTable->destroystream);
+ gNetscapeFuncs.status = (NPN_StatusUPP)HOST_TO_PLUGIN_GLUE(status, nsTable->status);
+ gNetscapeFuncs.uagent = (NPN_UserAgentUPP)HOST_TO_PLUGIN_GLUE(uagent, nsTable->uagent);
+ gNetscapeFuncs.memalloc = (NPN_MemAllocUPP)HOST_TO_PLUGIN_GLUE(memalloc, nsTable->memalloc);
+ gNetscapeFuncs.memfree = (NPN_MemFreeUPP)HOST_TO_PLUGIN_GLUE(memfree, nsTable->memfree);
+ gNetscapeFuncs.memflush = (NPN_MemFlushUPP)HOST_TO_PLUGIN_GLUE(memflush, nsTable->memflush);
+ gNetscapeFuncs.reloadplugins = (NPN_ReloadPluginsUPP)HOST_TO_PLUGIN_GLUE(reloadplugins, nsTable->reloadplugins);
if( navMinorVers >= NPVERS_HAS_LIVECONNECT )
{
- gNetscapeFuncs.getJavaEnv = nsTable->getJavaEnv;
- gNetscapeFuncs.getJavaPeer = nsTable->getJavaPeer;
+ gNetscapeFuncs.getJavaEnv = (NPN_GetJavaEnvUPP)HOST_TO_PLUGIN_GLUE(getJavaEnv, nsTable->getJavaEnv);
+ gNetscapeFuncs.getJavaPeer = (NPN_GetJavaPeerUPP)HOST_TO_PLUGIN_GLUE(getJavaPeer, nsTable->getJavaPeer);
}
if( navMinorVers >= NPVERS_HAS_NOTIFICATION )
{
- gNetscapeFuncs.geturlnotify = nsTable->geturlnotify;
- gNetscapeFuncs.posturlnotify = nsTable->posturlnotify;
+ gNetscapeFuncs.geturlnotify = (NPN_GetURLNotifyUPP)HOST_TO_PLUGIN_GLUE(geturlnotify, nsTable->geturlnotify);
+ gNetscapeFuncs.posturlnotify = (NPN_PostURLNotifyUPP)HOST_TO_PLUGIN_GLUE(posturlnotify, nsTable->posturlnotify);
}
- gNetscapeFuncs.getvalue = nsTable->getvalue;
- gNetscapeFuncs.setvalue = nsTable->setvalue;
- gNetscapeFuncs.invalidaterect = nsTable->invalidaterect;
- gNetscapeFuncs.invalidateregion = nsTable->invalidateregion;
- gNetscapeFuncs.forceredraw = nsTable->forceredraw;
+ gNetscapeFuncs.getvalue = (NPN_GetValueUPP)HOST_TO_PLUGIN_GLUE(getvalue, nsTable->getvalue);
+ gNetscapeFuncs.setvalue = (NPN_SetValueUPP)HOST_TO_PLUGIN_GLUE(setvalue, nsTable->setvalue);
+ gNetscapeFuncs.invalidaterect = (NPN_InvalidateRectUPP)HOST_TO_PLUGIN_GLUE(invalidaterect, nsTable->invalidaterect);
+ gNetscapeFuncs.invalidateregion = (NPN_InvalidateRegionUPP)HOST_TO_PLUGIN_GLUE(invalidateregion, nsTable->invalidateregion);
+ gNetscapeFuncs.forceredraw = (NPN_ForceRedrawUPP)HOST_TO_PLUGIN_GLUE(forceredraw, nsTable->forceredraw);
//
// Set up the plugin function table that Netscape will use to
// call us. Netscape needs to know about our version and size
// and have a UniversalProcPointer for every function we implement.
//
- pluginFuncs->version = (NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR;
- pluginFuncs->size = sizeof(NPPluginFuncs);
- pluginFuncs->newp = NewNPP_NewProc(Private_New);
- pluginFuncs->destroy = NewNPP_DestroyProc(Private_Destroy);
- pluginFuncs->setwindow = NewNPP_SetWindowProc(Private_SetWindow);
- pluginFuncs->newstream = NewNPP_NewStreamProc(Private_NewStream);
- pluginFuncs->destroystream = NewNPP_DestroyStreamProc(Private_DestroyStream);
- pluginFuncs->asfile = NewNPP_StreamAsFileProc(Private_StreamAsFile);
- pluginFuncs->writeready = NewNPP_WriteReadyProc(Private_WriteReady);
- pluginFuncs->write = NewNPP_WriteProc(Private_Write);
- pluginFuncs->print = NewNPP_PrintProc(Private_Print);
- pluginFuncs->event = NewNPP_HandleEventProc(Private_HandleEvent);
+ pluginFuncs->version = (NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR;
+ pluginFuncs->size = sizeof(NPPluginFuncs);
+ pluginFuncs->newp = NewNPP_NewProc(PLUGIN_TO_HOST_GLUE(newp, Private_New));
+ pluginFuncs->destroy = NewNPP_DestroyProc(PLUGIN_TO_HOST_GLUE(destroy, Private_Destroy));
+ pluginFuncs->setwindow = NewNPP_SetWindowProc(PLUGIN_TO_HOST_GLUE(setwindow, Private_SetWindow));
+ pluginFuncs->newstream = NewNPP_NewStreamProc(PLUGIN_TO_HOST_GLUE(newstream, Private_NewStream));
+ pluginFuncs->destroystream = NewNPP_DestroyStreamProc(PLUGIN_TO_HOST_GLUE(destroystream, Private_DestroyStream));
+ pluginFuncs->asfile = NewNPP_StreamAsFileProc(PLUGIN_TO_HOST_GLUE(asfile, Private_StreamAsFile));
+ pluginFuncs->writeready = NewNPP_WriteReadyProc(PLUGIN_TO_HOST_GLUE(writeready, Private_WriteReady));
+ pluginFuncs->write = NewNPP_WriteProc(PLUGIN_TO_HOST_GLUE(write, Private_Write));
+ pluginFuncs->print = NewNPP_PrintProc(PLUGIN_TO_HOST_GLUE(print, Private_Print));
+ pluginFuncs->event = NewNPP_HandleEventProc(PLUGIN_TO_HOST_GLUE(event, Private_HandleEvent));
if( navMinorVers >= NPVERS_HAS_NOTIFICATION )
{
- pluginFuncs->urlnotify = NewNPP_URLNotifyProc(Private_URLNotify);
+ pluginFuncs->urlnotify = NewNPP_URLNotifyProc(PLUGIN_TO_HOST_GLUE(urlnotify, Private_URLNotify));
}
if( navMinorVers >= NPVERS_HAS_LIVECONNECT )
{
pluginFuncs->javaClass = (JRIGlobalRef) Private_GetJavaClass();
}
- *unloadUpp = NewNPP_ShutdownProc(Private_Shutdown);
+ *unloadUpp = NewNPP_ShutdownProc(PLUGIN_TO_HOST_GLUE(shutdown, Private_Shutdown));
+
SetUpQD();
err = Private_Initialize();
}