Index: yelp-2.30.2/m4/gecko.m4 =================================================================== --- yelp-2.30.2.orig/m4/gecko.m4 +++ yelp-2.30.2/m4/gecko.m4 @@ -212,25 +212,6 @@ AC_LANG_PUSH([C++]) _SAVE_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $_GECKO_EXTRA_CPPFLAGS $_GECKO_CFLAGS" -AC_MSG_CHECKING([[whether we have a gtk 2 gecko build]]) -AC_RUN_IFELSE( - [AC_LANG_SOURCE( - [[#include - #include - #include - int main(void) { - if (strcmp (MOZ_DEFAULT_TOOLKIT, "gtk2") == 0 || - strcmp (MOZ_DEFAULT_TOOLKIT, "cairo-gtk2") == 0) - return EXIT_SUCCESS; - - return EXIT_FAILURE; - } ]] - )], - [result=yes], - [AC_MSG_ERROR([[This program needs a gtk 2 gecko build]])], - [result=maybe]) -AC_MSG_RESULT([$result]) - AC_MSG_CHECKING([[whether we have a gecko debug build]]) AC_COMPILE_IFELSE( [AC_LANG_SOURCE( @@ -304,7 +285,9 @@ if (!stream) return 126; #ifdef MOZILLA_1_8_BRANCH version = "1.8.1"; #else -if (strncmp (MOZILLA_VERSION, "1.9", strlen ("1.9")) == 0) { +if (strncmp (MOZILLA_VERSION, "2.0", strlen ("2.0")) == 0) { + version = "2.0"; +} else if (strncmp (MOZILLA_VERSION, "1.9", strlen ("1.9")) == 0) { version = "1.9"; } else if (strncmp (MOZILLA_VERSION, "1.8", strlen ("1.8")) == 0) { version = "1.8"; @@ -328,7 +311,7 @@ AC_LANG_POP([C++]) gecko_cv_gecko_version_int="$(echo "$gecko_cv_gecko_version" | $AWK -F . '{print [$]1 * 1000000 + [$]2 * 1000 + [$]3}')" -if test "$gecko_cv_gecko_version_int" -lt "1007000" -o "$gecko_cv_gecko_version_int" -gt "1009000"; then +if test "$gecko_cv_gecko_version_int" -lt "1007000" -o "$gecko_cv_gecko_version_int" -gt "2000000"; then AC_MSG_ERROR([Gecko version $gecko_cv_gecko_version is not supported!]) fi @@ -350,7 +333,10 @@ if test "$gecko_cv_gecko_version_int" -g fi if test "${gecko_cv_gecko}" = "libxul-embedding" -o "${gecko_cv_gecko}" = "libxul"; then - PKG_CHECK_EXISTS([${gecko_cv_gecko} >= 1.9.1],[gecko_cv_have_gecko_1_9_1=yes gecko_cv_gecko_version="1.9.1" gecko_cv_gecko_version_int=1009001],[gecko_cv_have_gecko_1_9_1=no]) + PKG_CHECK_EXISTS([${gecko_cv_gecko} >= 1.9.1], + [ gecko_cv_have_gecko_1_9_1=yes + if test "$gecko_cv_gecko_version_int" -lt "2000000"; then gecko_cv_gecko_version="1.9.1" gecko_cv_gecko_version_int=1009001; fi + ],[gecko_cv_have_gecko_1_9_1=no]) else gecko_cv_have_gecko_1_9_1=no fi @@ -359,6 +345,11 @@ if test "$gecko_cv_have_gecko_1_9_1" = " AC_DEFINE([HAVE_GECKO_1_9_1],[1],[Define if we have gecko 1.9.1]) fi +if test "$gecko_cv_gecko_version_int" -ge "2000000"; then + AC_DEFINE([HAVE_GECKO_2_0],[1],[Define if we have gecko 2.0]) + gecko_cv_have_gecko_2_0=yes +fi + fi # if gecko_cv_have_gecko $1[]_VERSION=$gecko_cv_gecko_version @@ -407,6 +398,7 @@ AM_CONDITIONAL([HAVE_GECKO_1_8],[test "$ AM_CONDITIONAL([HAVE_GECKO_1_8_1],[test "$gecko_cv_have_gecko" = "yes" -a "$gecko_cv_gecko_version_int" -ge "1008001"]) AM_CONDITIONAL([HAVE_GECKO_1_9],[test "$gecko_cv_have_gecko" = "yes" -a "$gecko_cv_gecko_version_int" -ge "1009000"]) AM_CONDITIONAL([HAVE_GECKO_1_9_1],[test "$gecko_cv_have_gecko" = "yes" -a "$gecko_cv_have_gecko_1_9_1" = "yes"]) +AM_CONDITIONAL([HAVE_GECKO_2_0],[test "$gecko_cv_have_gecko" = "yes" -a "$gecko_cv_have_gecko_2_0" = "yes"]) AM_CONDITIONAL([HAVE_GECKO_HOME],[test "x$_GECKO_HOME" != "x"]) AM_CONDITIONAL([HAVE_GECKO_DEBUG],[test "$gecko_cv_have_debug" = "yes"]) AM_CONDITIONAL([HAVE_GECKO_XPCOM_GLUE],[test "$gecko_cv_have_xpcom_glue" = "yes"]) Index: yelp-2.30.2/src/yelp-gecko-services.cpp =================================================================== --- yelp-2.30.2.orig/src/yelp-gecko-services.cpp +++ yelp-2.30.2/src/yelp-gecko-services.cpp @@ -32,7 +32,11 @@ #include #include #include +#ifndef HAVE_GECKO_2_0 #include +#else +#include +#endif #include #include #include @@ -418,6 +422,8 @@ PrintListener::SetPrintSettings (YelpPri /* component registration */ +#ifndef HAVE_GECKO_2_0 + NS_GENERIC_FACTORY_CONSTRUCTOR(GPrintingPromptService) static const nsModuleComponentInfo sAppComps[] = { @@ -462,3 +468,115 @@ yelp_register_printing () } } + +#else + +/* + * Adapted from code from ./embedding/browser/activex/src/control/PromptService.cpp in Firefox + */ + +//***************************************************************************** +// GPrintingPromptServiceFactory +//***************************************************************************** + +class GPrintingPromptServiceFactory : public nsIFactory +{ +public: + NS_DECL_ISUPPORTS + NS_DECL_NSIFACTORY + + GPrintingPromptServiceFactory(); + virtual ~GPrintingPromptServiceFactory(); +}; + +//***************************************************************************** + +NS_IMPL_ISUPPORTS1(GPrintingPromptServiceFactory, nsIFactory) + +GPrintingPromptServiceFactory::GPrintingPromptServiceFactory() +{ +} + +GPrintingPromptServiceFactory::~GPrintingPromptServiceFactory() +{ +} + +NS_IMETHODIMP GPrintingPromptServiceFactory::CreateInstance(nsISupports *aOuter, const nsIID & aIID, void **aResult) +{ + NS_ENSURE_ARG_POINTER(aResult); + + *aResult = NULL; + GPrintingPromptService *inst = new GPrintingPromptService; + if (!inst) + return NS_ERROR_OUT_OF_MEMORY; + + nsresult rv = inst->QueryInterface(aIID, aResult); + if (rv != NS_OK) { + // We didn't get the right interface, so clean up + delete inst; + } + + return rv; +} + +NS_IMETHODIMP GPrintingPromptServiceFactory::LockFactory(PRBool lock) +{ + return NS_OK; +} + +//***************************************************************************** + +nsresult NS_NewPrintingPromptServiceFactory(nsIFactory** aFactory) +{ + NS_ENSURE_ARG_POINTER(aFactory); + *aFactory = nsnull; + + GPrintingPromptServiceFactory *result = new GPrintingPromptServiceFactory; + if (!result) + return NS_ERROR_OUT_OF_MEMORY; + + NS_ADDREF(result); + *aFactory = result; + + return NS_OK; +} + +/* + * End of adapted code. + */ + +static NS_DEFINE_CID(kGPrintingPromptServiceCID, G_PRINTINGPROMPTSERVICE_CID); + +void +yelp_register_printing () +{ + nsresult rv; + nsCOMPtr cr; + rv = NS_GetComponentRegistrar(getter_AddRefs(cr)); + NS_ENSURE_SUCCESS (rv, ); + + nsCOMPtr cm; + rv = NS_GetComponentManager (getter_AddRefs (cm)); + NS_ENSURE_SUCCESS (rv, ); + + nsCOMPtr componentFactory; + rv = NS_NewPrintingPromptServiceFactory(getter_AddRefs(componentFactory)); + + if (NS_FAILED(rv) || !componentFactory) + { + g_warning ("Failed to make a factory for %s\n", G_PRINTINGPROMPTSERVICE_CLASSNAME); + return; + } + + rv = cr->RegisterFactory(kGPrintingPromptServiceCID, + G_PRINTINGPROMPTSERVICE_CLASSNAME, + G_PRINTINGPROMPTSERVICE_CONTRACTID, + componentFactory); + if (NS_FAILED(rv)) + { + g_warning ("Failed to register %s\n", G_PRINTINGPROMPTSERVICE_CLASSNAME); + } + +} + +#endif Index: yelp-2.30.2/src/yelp-gecko-utils.cpp =================================================================== --- yelp-2.30.2.orig/src/yelp-gecko-utils.cpp +++ yelp-2.30.2/src/yelp-gecko-utils.cpp @@ -213,8 +213,8 @@ yelp_gecko_init (void) nsresult rv; #ifdef XPCOM_GLUE static const GREVersionRange greVersion = { - "1.9a", PR_TRUE, - "2", PR_TRUE + "2.0a", PR_TRUE, + "2.0", PR_TRUE }; char xpcomLocation[PATH_MAX]; rv = GRE_GetGREPathWithProperties(&greVersion, 1, nsnull, 0, xpcomLocation, sizeof (xpcomLocation));