diff options
author | Christian Persch <chpe@cvs.gnome.org> | 2006-06-10 23:19:28 +0000 |
---|---|---|
committer | Christian Persch <chpe@src.gnome.org> | 2006-06-10 23:19:28 +0000 |
commit | b1dc970ca5a6cf9d491aa9dd696e164728d37386 (patch) | |
tree | 88709c81ba6c21310e9445e6c3c319582bcbeb91 | |
parent | 1a27a1951d3728c5d7cfdf80ca982e359bbf97d3 (diff) | |
download | yelp-b1dc970ca5a6cf9d491aa9dd696e164728d37386.tar.gz |
Don't use mozilla's internal string API, and drop support for gecko 1.7
2006-06-11 Christian Persch <chpe@cvs.gnome.org>
* configure.in:
* src/Makefile.am:
* src/Yelper.cpp:
* src/Yelper.h:
* src/yelp-gecko-services.cpp:
* src/yelp-gecko-services.h:
* src/yelp-gecko-utils.cpp:
* src/yelp-gecko-utils.h:
* src/yelp-html.cpp:
* src/yelp-html.h:
* src/yelp-window.c: (window_find_again):
Don't use mozilla's internal string API, and drop support for gecko 1.7
and non-toolkit geckos. Bug #343950.
* m4/gecko.m4:
Updated from Epiphany.
-rw-r--r-- | ChangeLog | 19 | ||||
-rw-r--r-- | configure.in | 13 | ||||
-rw-r--r-- | m4/gecko.m4 | 96 | ||||
-rw-r--r-- | src/Makefile.am | 8 | ||||
-rw-r--r-- | src/Yelper.cpp | 297 | ||||
-rw-r--r-- | src/Yelper.h | 22 | ||||
-rw-r--r-- | src/yelp-gecko-services.cpp | 240 | ||||
-rw-r--r-- | src/yelp-gecko-services.h | 13 | ||||
-rw-r--r-- | src/yelp-gecko-utils.cpp | 20 | ||||
-rw-r--r-- | src/yelp-gecko-utils.h | 1 | ||||
-rw-r--r-- | src/yelp-html.cpp | 14 | ||||
-rw-r--r-- | src/yelp-html.h | 3 | ||||
-rw-r--r-- | src/yelp-window.c | 6 |
13 files changed, 366 insertions, 386 deletions
@@ -1,3 +1,22 @@ +2006-06-11 Christian Persch <chpe@cvs.gnome.org> + + * configure.in: + * src/Makefile.am: + * src/Yelper.cpp: + * src/Yelper.h: + * src/yelp-gecko-services.cpp: + * src/yelp-gecko-services.h: + * src/yelp-gecko-utils.cpp: + * src/yelp-gecko-utils.h: + * src/yelp-html.cpp: + * src/yelp-html.h: + * src/yelp-window.c: (window_find_again): + Don't use mozilla's internal string API, and drop support for gecko 1.7 + and non-toolkit geckos. Bug #343950. + + * m4/gecko.m4: + Updated from Epiphany. + 2006-06-10 Don Scorgie <dscorgie@cvs.gnome.org> * data/ui/yelp-search-ui.xml: diff --git a/configure.in b/configure.in index 7f1efc80..b31bed7b 100644 --- a/configure.in +++ b/configure.in @@ -223,22 +223,13 @@ AC_SUBST([MOZILLA_PREFIX]) AC_SUBST([MOZILLA_EXTRA_LIBS]) case "$MOZILLA" in -mozilla) gecko_min_version=1.7 ;; -seamonkey) gecko_min_version=1.0 ;; -*firefox) gecko_min_version=1.0 ;; -*thunderbird) gecko_min_version=1.0 ;; xulrunner) gecko_min_version=1.8 ;; +*firefox) gecko_min_version=1.5 ;; +*) AC_MSG_ERROR([$gecko_cv_gecko is not supported]) esac PKG_CHECK_MODULES([MOZILLA_COMPONENT],[${gecko_cv_gecko}-xpcom >= $gecko_min_version $gecko_cv_extra_pkg_dependencies]) -if test "$gecko_cv_gecko_flavour" = "toolkit"; then - AC_DEFINE([TYPEAHEADFIND],[1],[Define if we have toolkit's typeaheadfind]) -fi - -dnl Needed since gecko 1.8b2 -AC_DEFINE([MOZILLA_INTERNAL_API],[1],[Define to have access to internal Mozilla APIs]) - dnl ==================================== dnl = zlib for help converters dnl ==================================== diff --git a/m4/gecko.m4 b/m4/gecko.m4 index 56c8b634..9363c5ef 100644 --- a/m4/gecko.m4 +++ b/m4/gecko.m4 @@ -35,11 +35,18 @@ # VARIABLE_PREFIX: # VARIABLE_INCLUDE_ROOT: # VARIABLE_VERSION: The version of the gecko that was found -# VARIABLE_VERSION_MAJOR: -# VARIABLE_VERSION_MINOR: +# VARIABLE_VERSION: +# VARIABLE_VERSION_INT: AC_DEFUN([GECKO_INIT], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_REQUIRE([AC_PROG_AWK])dnl + +AC_PROG_AWK + +# ************************ +# Check which gecko to use +# ************************ AC_MSG_CHECKING([which gecko to use]) @@ -229,62 +236,86 @@ AM_CONDITIONAL([HAVE_GECKO_DEBUG],[test "$gecko_cv_have_debug" = "yes"]) if test "$gecko_cv_have_gecko" = "yes"; then -AC_MSG_CHECKING([for gecko version]) - -# We cannot in grep in mozilla-config.h directly, since in some setups -# (mult-arch for instance) it includes another file with the real -# definitions. - AC_LANG_PUSH([C++]) _SAVE_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I$_GECKO_INCLUDE_ROOT" -AC_EGREP_CPP([\"1\.9], - [#include <mozilla-config.h> - MOZILLA_VERSION], - [gecko_cv_gecko_version_major=1 gecko_cv_gecko_version_minor=9], - [AC_EGREP_CPP([\"1\.8], - [#include <mozilla-config.h> - MOZILLA_VERSION], - [gecko_cv_gecko_version_major=1 gecko_cv_gecko_version_minor=8], - [gecko_cv_gecko_version_major=1 gecko_cv_gecko_version_minor=7]) +AC_CACHE_CHECK([for gecko version], + [gecko_cv_gecko_version], + [AC_RUN_IFELSE( + [AC_LANG_PROGRAM([[ +#include <mozilla-config.h> +#include <string.h> +#include <stdlib.h> +#include <stdio.h> +#include <locale.h> +]],[[ +FILE *stream; +const char *version = ""; + +if (!setlocale (LC_ALL, "C")) return 127; + +stream = fopen ("conftest.data", "w"); +if (!stream) return 126; + +#ifdef MOZILLA_1_8_BRANCH +version = "1.8.1"; +#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"; +} else { + version = "1.7"; +} +#endif +fprintf (stream, "%s\n", version); +if (fclose (stream) != 0) return 125; + +return EXIT_SUCCESS; +]])], + [gecko_cv_gecko_version="$(cat conftest.data)"], + [AC_MSG_FAILURE([could not determine gecko version])], + [gecko_cv_gecko_version="1.7"]) ]) CPPFLAGS="$_SAVE_CPPFLAGS" AC_LANG_POP([C++]) -gecko_cv_gecko_version="$gecko_cv_gecko_version_major.$gecko_cv_gecko_version_minor" +gecko_cv_gecko_version_int="$(echo "$gecko_cv_gecko_version" | $AWK -F\. '{print [$]1 * 1000000 + [$]2 * 1000 + [$]3}')" -AC_MSG_RESULT([$gecko_cv_gecko_version]) - -if test "$gecko_cv_gecko_version_major" != "1" -o "$gecko_cv_gecko_version_minor" -lt "7" -o "$gecko_cv_gecko_version_minor" -gt "9"; then +if test "$gecko_cv_gecko_version_int" -lt "1007000" -o "$gecko_cv_gecko_version_int" -gt "1009000"; then AC_MSG_ERROR([Gecko version $gecko_cv_gecko_version is not supported!]) fi -if test "$gecko_cv_gecko_version_major" = "1" -a "$gecko_cv_gecko_version_minor" -ge "7"; then +if test "$gecko_cv_gecko_version_int" -ge "1007000"; then AC_DEFINE([HAVE_GECKO_1_7],[1],[Define if we have gecko 1.7]) gecko_cv_have_gecko_1_7=yes fi -if test "$gecko_cv_gecko_version_major" = "1" -a "$gecko_cv_gecko_version_minor" -ge "8"; then +if test "$gecko_cv_gecko_version_int" -ge "1008000"; then AC_DEFINE([HAVE_GECKO_1_8],[1],[Define if we have gecko 1.8]) gecko_cv_have_gecko_1_8=yes fi -if test "$gecko_cv_gecko_version_major" = "1" -a "$gecko_cv_gecko_version_minor" -ge "9"; then +if test "$gecko_cv_gecko_version_int" -ge "1008001"; then + AC_DEFINE([HAVE_GECKO_1_8_1],[1],[Define if we have gecko 1.8.1]) + gecko_cv_have_gecko_1_8_1=yes +fi +if test "$gecko_cv_gecko_version_int" -ge "1009000"; then AC_DEFINE([HAVE_GECKO_1_9],[1],[Define if we have gecko 1.9]) gecko_cv_have_gecko_1_9=yes fi fi # if gecko_cv_have_gecko -AM_CONDITIONAL([HAVE_GECKO_1_7],[test "$gecko_cv_gecko_version_major" = "1" -a "$gecko_cv_gecko_version_minor" -ge "7"]) -AM_CONDITIONAL([HAVE_GECKO_1_8],[test "$gecko_cv_gecko_version_major" = "1" -a "$gecko_cv_gecko_version_minor" -ge "8"]) -AM_CONDITIONAL([HAVE_GECKO_1_9],[test "$gecko_cv_gecko_version_major" = "1" -a "$gecko_cv_gecko_version_minor" -ge "9"]) +AM_CONDITIONAL([HAVE_GECKO_1_7],[test "$gecko_cv_gecko_version_int" -ge "1007000"]) +AM_CONDITIONAL([HAVE_GECKO_1_8],[test "$gecko_cv_gecko_version_int" -ge "1008000"]) +AM_CONDITIONAL([HAVE_GECKO_1_8_1],[test "$gecko_cv_gecko_version_int" -ge "1008001"]) +AM_CONDITIONAL([HAVE_GECKO_1_9],[test "$gecko_cv_gecko_version_int" -ge "1009000"]) $1[]_VERSION=$gecko_cv_gecko_version -$1[]_VERSION_MAJOR=$gecko_cv_gecko_version_major -$1[]_VERSION_MINOR=$gecko_cv_gecko_version_minor +$1[]_VERSION_INT=$gecko_cv_gecko_version_int # ************************************************** # Packages that we need to check for with pkg-config @@ -293,7 +324,7 @@ $1[]_VERSION_MINOR=$gecko_cv_gecko_version_minor gecko_cv_extra_libs= gecko_cv_extra_pkg_dependencies= -if test "$gecko_cv_gecko_version_major" = "1" -a "$gecko_cv_gecko_version_minor" -ge "9"; then +if test "$gecko_cv_gecko_version_int" -ge "1009000"; then gecko_cv_extra_libs="-lxul" else gecko_cv_extra_pkg_dependencies="${gecko_cv_gecko}-gtkmozembed" @@ -322,9 +353,11 @@ AC_LANG_PUSH([C++]) _SAVE_CPPFLAGS="$CPPFLAGS" _SAVE_CXXFLAGS="$CXXFLAGS" _SAVE_LDFLAGS="$LDFLAGS" +_SAVE_LIBS="$LIBS" CPPFLAGS="$CPPFLAGS $_GECKO_EXTRA_CPPFLAGS -I$_GECKO_INCLUDE_ROOT $($PKG_CONFIG --cflags-only-I ${gecko_cv_gecko}-xpcom)" CXXFLAGS="$CXXFLAGS $_GECKO_EXTRA_CXXFLAGS $($PKG_CONFIG --cflags-only-other ${gecko_cv_gecko}-xpcom)" -LDFLAGS="$LDFLAGS $_GECKO_EXTRA_LDFLAGS $($PKG_CONFIG --libs ${gecko_cv_gecko}-xpcom) -Wl,--rpath=$_GECKO_HOME" +LDFLAGS="$LDFLAGS $_GECKO_EXTRA_LDFLAGS -Wl,--rpath=$_GECKO_HOME" +LIBS="$LIBS $($PKG_CONFIG --libs ${gecko_cv_gecko}-xpcom)" _GECKO_DISPATCH_INCLUDEDIRS="$2" @@ -343,6 +376,7 @@ m4_indir([$1],m4_shiftn(2,$@)) CPPFLAGS="$_SAVE_CPPFLAGS" CXXFLAGS="$_SAVE_CXXFLAGS" LDFLAGS="$_SAVE_LDFLAGS" +LIBS="$_SAVE_LIBS" AC_LANG_POP([C++]) diff --git a/src/Makefile.am b/src/Makefile.am index 781163f6..7a3c7be4 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -19,7 +19,8 @@ yelp_SOURCES = \ yelp-utils.c yelp-utils.h \ yelp-window.c yelp-window.h \ yelp-xslt-pager.c yelp-xslt-pager.h \ - yelp-marshal-main.c yelp-main.c \ + yelp-marshal.c yelp-marshal.h \ + yelp-main.c \ yelp-print.c yelp-print.h \ yelp-gecko-services.h yelp-gecko-services.cpp @@ -74,8 +75,8 @@ mozilla_include_subdirs = \ yelp_CPPFLAGS = \ -I$(top_srcdir) \ + -I$(top_builddir)/src \ $(addprefix -I$(MOZILLA_INCLUDE_ROOT)/,$(mozilla_include_subdirs)) \ - -include $(MOZILLA_INCLUDE_ROOT)/mozilla-config.h \ $(YELP_DEFINES) \ $(AM_CPPFLAGS) @@ -134,7 +135,8 @@ test_pager_SOURCES = \ yelp-toc-pager.c yelp-toc-pager.h \ yelp-utils.c yelp-utils.h \ yelp-xslt-pager.c yelp-xslt-pager.h \ - yelp-marshal-main.c test-pager.c + yelp-marshal.c yelp-marshal.h \ + test-pager.c test_pager_CPPFLAGS = \ $(YELP_DEFINES) \ diff --git a/src/Yelper.cpp b/src/Yelper.cpp index e18f1c92..73d58a0e 100644 --- a/src/Yelper.cpp +++ b/src/Yelper.cpp @@ -20,42 +20,39 @@ */ #include <mozilla-config.h> - -#ifdef HAVE_CONFIG_H #include <config.h> -#endif -#include "Yelper.h" +#include <stdlib.h> +#include <unistd.h> -#undef MOZILLA_INTERNAL_API -#include "nsEmbedString.h" -#define MOZILLA_INTERNAL_API 1 +#include <nsStringAPI.h> -#include <nsIWebBrowserSetup.h> -#include <nsIClipboardCommands.h> +#include <gtkmozembed.h> +#include <gtkmozembed_internal.h> +#include <nsComponentManagerUtils.h> #include <nsICommandManager.h> -#include <nsIInterfaceRequestorUtils.h> -#include <nsIPrefService.h> -#include <nsIServiceManager.h> +#include <nsIDocShell.h> #include <nsIDOMDocument.h> -#include <nsIDOMMouseEvent.h> -#include <nsIDOMNSEvent.h> #include <nsIDOMEventTarget.h> -#include <nsIDOMNode.h> #include <nsIDOMHTMLAnchorElement.h> +#include <nsIDOMMouseEvent.h> +#include <nsIDOMNode.h> +#include <nsIDOMNSEvent.h> +#include <nsIDOMWindow.h> +#include <nsIInterfaceRequestorUtils.h> +#include <nsIPrefService.h> +#include <nsIPrintSettings.h> +#include <nsITypeAheadFind.h> +#include <nsIWebBrowser.h> #include <nsIWebBrowserPrint.h> +#include <nsIWebBrowserSetup.h> +#include <nsServiceManagerUtils.h> -#ifdef TYPEAHEADFIND -#include <nsIDocShell.h> -#define NS_TYPEAHEADFIND_CONTRACTID "@mozilla.org/typeaheadfind;1" -#endif /* TYPEAHEADFIND */ - -#include <stdlib.h> -#include <unistd.h> +#include "yelp-gecko-services.h" -#include <gtkmozembed_internal.h> +#include "Yelper.h" -#include <yelp-gecko-services.h> +#define NS_TYPEAHEADFIND_CONTRACTID "@mozilla.org/typeaheadfind;1" #ifdef GNOME_ENABLE_DEBUG #define d(x) x @@ -98,7 +95,6 @@ Yelper::Init () rv = mDOMWindow->GetDocument (getter_AddRefs (domDocument)); NS_ENSURE_SUCCESS (rv, rv); -#ifdef TYPEAHEADFIND mFinder = do_CreateInstance (NS_TYPEAHEADFIND_CONTRACTID, &rv); NS_ENSURE_SUCCESS (rv, rv); @@ -109,10 +105,6 @@ Yelper::Init () NS_ENSURE_SUCCESS (rv, rv); mFinder->SetFocusLinks (PR_TRUE); -#else - mFinder = do_GetInterface (mWebBrowser, &rv); - NS_ENSURE_SUCCESS (rv, rv); -#endif /* TYPEAHEADFIND */ mInitialised = PR_TRUE; @@ -148,20 +140,10 @@ Yelper::SetFindProperties (const char *aSearchString, { if (!mInitialised) return; -#ifdef TYPEAHEADFIND mFinder->SetCaseSensitive (aCaseSensitive); /* aWrap not supported for typeaheadfind * search string is set in ::Find for typeaheadfind */ -#else - nsEmbedString uSearchString; - NS_CStringToUTF16 (nsEmbedCString (aSearchString ? aSearchString : ""), - NS_CSTRING_ENCODING_UTF8, uSearchString); - - mFinder->SetSearchString (uSearchString.get ()); - mFinder->SetMatchCase (aCaseSensitive); - mFinder->SetWrapFind (aWrap); -#endif /* TYPEAHEADFIND */ } PRBool @@ -169,9 +151,8 @@ Yelper::Find (const char *aSearchString) { if (!mInitialised) return PR_FALSE; -#ifdef TYPEAHEADFIND - nsEmbedString uSearchString; - NS_CStringToUTF16 (nsEmbedCString (aSearchString ? aSearchString : ""), + nsString uSearchString; + NS_CStringToUTF16 (nsCString (aSearchString ? aSearchString : ""), NS_CSTRING_ENCODING_UTF8, uSearchString); nsresult rv; @@ -179,20 +160,6 @@ Yelper::Find (const char *aSearchString) rv = mFinder->Find (uSearchString, PR_FALSE /* links only? */, &found); return NS_SUCCEEDED (rv) && (found == nsITypeAheadFind::FIND_FOUND || found == nsITypeAheadFind::FIND_WRAPPED); -#else - nsEmbedString uSearchString; - NS_CStringToUTF16 (nsEmbedCString (aSearchString ? aSearchString : ""), - NS_CSTRING_ENCODING_UTF8, uSearchString); - - mFinder->SetSearchString (uSearchString.get ()); - mFinder->SetFindBackwards (PR_FALSE); - - nsresult rv; - PRBool didFind = PR_FALSE; - rv = mFinder->FindNext (&didFind); - - return NS_SUCCEEDED (rv) && didFind; -#endif /* TYPEAHEADFIND */ } PRBool @@ -200,7 +167,6 @@ Yelper::FindAgain (PRBool aForward) { if (!mInitialised) return PR_FALSE; -#ifdef TYPEAHEADFIND nsresult rv; PRUint16 found = nsITypeAheadFind::FIND_NOTFOUND; if (aForward) { @@ -211,15 +177,6 @@ Yelper::FindAgain (PRBool aForward) } return NS_SUCCEEDED (rv) && (found == nsITypeAheadFind::FIND_FOUND || found == nsITypeAheadFind::FIND_WRAPPED); -#else - mFinder->SetFindBackwards (!aForward); - - nsresult rv; - PRBool didFind = PR_FALSE; - rv = mFinder->FindNext (&didFind); - - return NS_SUCCEEDED (rv) && didFind; -#endif /* TYPEAHEADFIND */ } void @@ -248,11 +205,11 @@ Yelper::ProcessMouseEvent (void* aEvent) nsCOMPtr <nsIDOMHTMLAnchorElement> anchor (do_QueryInterface (originalTarget)); if (!anchor) return; - nsEmbedString href; + nsString href; rv = anchor->GetHref (href); if (NS_FAILED (rv) || !href.Length ()) return; - nsEmbedCString cHref; + nsCString cHref; NS_UTF16ToCString (href, NS_CSTRING_ENCODING_UTF8, cHref); if (!cHref.Length ()) return; @@ -272,7 +229,7 @@ Yelper::Print (YelpPrintInfo *print_info, PRBool preview, int *prev_pages) rv = print->GetGlobalPrintSettings (getter_AddRefs (settings)); NS_ENSURE_SUCCESS (rv, rv); - SetPrintSettings (print_info, settings); + PrintListener::SetPrintSettings (print_info, settings); nsCOMPtr<PrintListener> listener = new PrintListener (print_info, print); @@ -296,8 +253,6 @@ Yelper::PrintPreviewNavigate (int page_no) return print->PrintPreviewNavigate (0, page_no); } - - nsresult Yelper::PrintPreviewEnd () { @@ -308,203 +263,3 @@ Yelper::PrintPreviewEnd () return print->ExitPrintPreview (); } - -void -Yelper::SetPrintSettings (YelpPrintInfo *settings, nsIPrintSettings * target) -{ - char *base; - const char *temp_dir; - int fd; - const GnomePrintUnit *unit, *inch, *mm; - double value; - nsEmbedString tmp; - - const static PRUnichar pName[] = { 'P', 'o', 's', 't', 'S', 'c', 'r', 'i', 'p', 't', '/', 'd', 'e', 'f', 'a', 'u', 'l', 't', '\0' }; - target->SetPrinterName(nsEmbedString(pName).get()); - - const static int frame_types[] = { - nsIPrintSettings::kFramesAsIs, - nsIPrintSettings::kSelectedFrame, - nsIPrintSettings::kEachFrameSep - }; - - switch (settings->range) - { - case GNOME_PRINT_RANGE_CURRENT: - case GNOME_PRINT_RANGE_SELECTION_UNSENSITIVE: - case GNOME_PRINT_RANGE_ALL: - target->SetPrintRange (nsIPrintSettings::kRangeAllPages); - break; - case GNOME_PRINT_RANGE_RANGE: - target->SetPrintRange (nsIPrintSettings::kRangeSpecifiedPageRange); - target->SetStartPageRange (settings->from_page); - target->SetEndPageRange (settings->to_page); - break; - case GNOME_PRINT_RANGE_SELECTION: - target->SetPrintRange (nsIPrintSettings::kRangeSelection); - break; - } - - mm = gnome_print_unit_get_by_abbreviation ((const guchar *) "mm"); - inch = gnome_print_unit_get_by_abbreviation ((const guchar *) "in"); - g_assert (mm != NULL && inch != NULL); - - /* top margin */ - if (gnome_print_config_get_length (settings->config, - (const guchar *) GNOME_PRINT_KEY_PAGE_MARGIN_TOP, - &value, &unit) - && gnome_print_convert_distance (&value, unit, inch)) - { - target->SetMarginTop (value); - } - - /* bottom margin */ - if (gnome_print_config_get_length (settings->config, - (const guchar *) GNOME_PRINT_KEY_PAGE_MARGIN_BOTTOM, - &value, &unit) - && gnome_print_convert_distance (&value, unit, inch)) - { - target->SetMarginBottom (value); - } - - /* left margin */ - if (gnome_print_config_get_length (settings->config, - (const guchar *) GNOME_PRINT_KEY_PAGE_MARGIN_LEFT, - &value, &unit) - && gnome_print_convert_distance (&value, unit, inch)) - { - target->SetMarginLeft (value); - } - - /* right margin */ - if (gnome_print_config_get_length (settings->config, - (const guchar *) GNOME_PRINT_KEY_PAGE_MARGIN_RIGHT, - &value, &unit) - && gnome_print_convert_distance (&value, unit, inch)) - { - target->SetMarginRight (value); - } - - - - NS_CStringToUTF16 (nsEmbedCString(settings->header_left_string), - NS_CSTRING_ENCODING_UTF8, tmp); - target->SetHeaderStrLeft (tmp.get()); - - NS_CStringToUTF16 (nsEmbedCString(settings->header_center_string), - NS_CSTRING_ENCODING_UTF8, tmp); - target->SetHeaderStrCenter (tmp.get()); - - NS_CStringToUTF16 (nsEmbedCString(settings->header_right_string), - NS_CSTRING_ENCODING_UTF8, tmp); - target->SetHeaderStrRight (tmp.get()); - - NS_CStringToUTF16 (nsEmbedCString(settings->footer_left_string), - NS_CSTRING_ENCODING_UTF8, tmp); - target->SetFooterStrLeft (tmp.get()); - - NS_CStringToUTF16 (nsEmbedCString(settings->footer_center_string), - NS_CSTRING_ENCODING_UTF8, tmp); - target->SetFooterStrCenter(tmp.get()); - - NS_CStringToUTF16 (nsEmbedCString(settings->footer_right_string), - NS_CSTRING_ENCODING_UTF8, tmp); - target->SetFooterStrRight(tmp.get()); - - - - temp_dir = g_get_tmp_dir (); - base = g_build_filename (temp_dir, "printXXXXXX", NULL); - fd = g_mkstemp (base); - close(fd); - settings->tempfile = g_strdup (base); - - g_free (base); - - - NS_CStringToUTF16 (nsEmbedCString(settings->tempfile), - NS_CSTRING_ENCODING_UTF8, tmp); - target->SetPrintToFile (PR_TRUE); - target->SetToFileName (tmp.get()); - - - /* paper size */ - target->SetPaperSize (nsIPrintSettings::kPaperSizeDefined); - target->SetPaperSizeUnit (nsIPrintSettings::kPaperSizeMillimeters); - - if (gnome_print_config_get_length (settings->config, - (const guchar *) GNOME_PRINT_KEY_PAPER_WIDTH, - &value, &unit) - && gnome_print_convert_distance (&value, unit, mm)) - { - target->SetPaperWidth (value); - } - - if (gnome_print_config_get_length (settings->config, - (const guchar *) GNOME_PRINT_KEY_PAPER_HEIGHT, - &value, &unit) - && gnome_print_convert_distance (&value, unit, mm)) - { - target->SetPaperHeight (value); - } - - /* Mozilla bug https://bugzilla.mozilla.org/show_bug.cgi?id=307404 - * means that we cannot actually use any paper sizes except mozilla's - * builtin list, and we must refer to them *by name*! - */ -#ifndef HAVE_GECKO_1_9 - /* Gnome-Print names some papers differently than what moz understands */ - static const struct - { - const char *gppaper; - const char *mozpaper; - } - paper_table [] = - { - { "USLetter", "Letter" }, - { "USLegal", "Legal" } - }; -#endif /* !HAVE_GECKO_1_9 */ - - /* paper name */ - char *string = (char *) gnome_print_config_get (settings->config, - (const guchar *) GNOME_PRINT_KEY_PAPER_SIZE); - const char *paper = string; - -#ifndef HAVE_GECKO_1_9 - for (PRUint32 i = 0; i < G_N_ELEMENTS (paper_table); i++) - { - if (string != NULL && - g_ascii_strcasecmp (paper_table[i].gppaper, string) == 0) - { - paper = paper_table[i].mozpaper; - break; - } - } -#endif /* !HAVE_GECKO_1_9 */ - - NS_CStringToUTF16 (nsEmbedCString(paper), - NS_CSTRING_ENCODING_UTF8, tmp); - target->SetPaperName (tmp.get()); - g_free (string); - - /* paper orientation */ - string = (char *) gnome_print_config_get (settings->config, - (const guchar *) GNOME_PRINT_KEY_ORIENTATION); - if (string == NULL) string = g_strdup ("R0"); - - if (strncmp (string, "R90", 3) == 0 || strncmp (string, "R270", 4) == 0) - { - target->SetOrientation (nsIPrintSettings::kLandscapeOrientation); - } - else - { - target->SetOrientation (nsIPrintSettings::kPortraitOrientation); - } - g_free (string); - - target->SetPrintInColor (TRUE); - target->SetPrintFrameType (frame_types[settings->frame_type]); - - -} diff --git a/src/Yelper.h b/src/Yelper.h index c7b5d48a..b52a367c 100644 --- a/src/Yelper.h +++ b/src/Yelper.h @@ -23,17 +23,13 @@ #define __YELPER_H__ #include <gtkmozembed.h> - #include <nsCOMPtr.h> -#include <nsIWebBrowser.h> -#include <nsIDOMWindow.h> -#ifdef TYPEAHEADFIND -#include <nsITypeAheadFind.h> -#else -#include <nsIWebBrowserFind.h> -#endif -#include <nsIPrintSettings.h> -#include <yelp-print.h> + +#include "yelp-print.h" + +class nsIDOMWindow; +class nsITypeAheadFind; +class nsIWebBrowser; class Yelper { @@ -65,13 +61,7 @@ private: GtkMozEmbed *mEmbed; nsCOMPtr<nsIWebBrowser> mWebBrowser; nsCOMPtr<nsIDOMWindow> mDOMWindow; -#ifdef TYPEAHEADFIND nsCOMPtr<nsITypeAheadFind> mFinder; -#else - nsCOMPtr<nsIWebBrowserFind> mFinder; -#endif - - void SetPrintSettings (YelpPrintInfo *settings, nsIPrintSettings *target); }; #endif /* !__YELPER_H__ */ diff --git a/src/yelp-gecko-services.cpp b/src/yelp-gecko-services.cpp index a56c3a3f..7a37dde5 100644 --- a/src/yelp-gecko-services.cpp +++ b/src/yelp-gecko-services.cpp @@ -21,24 +21,23 @@ */ #include <mozilla-config.h> +#include "config.h" -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif +#include <stdlib.h> +#include <unistd.h> -#include "nsError.h" -#undef MOZILLA_INTERNAL_API -#include <nsEmbedString.h> -#define MOZILLA_INTERNAL_API 1 +#include <nsStringAPI.h> -#include "yelp-gecko-services.h" - -#include <nsIPrintSettings.h> #include <nsCOMPtr.h> +#include <nsIComponentManager.h> #include <nsIComponentRegistrar.h> -#include <nsIInterfaceRequestorUtils.h> #include <nsIGenericFactory.h> #include <nsILocalFile.h> +#include <nsIPrintSettings.h> +#include <nsServiceManagerUtils.h> +#include <nsXPCOM.h> + +#include "yelp-gecko-services.h" /* Implementation file */ NS_IMPL_ISUPPORTS3(GPrintingPromptService, nsIPrintingPromptService, nsIWebProgressListener, nsIPrintProgressParams) @@ -193,6 +192,208 @@ NS_IMETHODIMP PrintListener::OnSecurityChange(nsIWebProgress *aWebProgress, nsIR return NS_ERROR_NOT_IMPLEMENTED; } +/* static functions */ + +/* static */void +PrintListener::SetPrintSettings (YelpPrintInfo *settings, + nsIPrintSettings * target) +{ + char *base; + const char *temp_dir; + int fd; + const GnomePrintUnit *unit, *inch, *mm; + double value; + nsString tmp; + + target->SetPrinterName(NS_LITERAL_STRING("PostScript/default").get()); + + const static int frame_types[] = { + nsIPrintSettings::kFramesAsIs, + nsIPrintSettings::kSelectedFrame, + nsIPrintSettings::kEachFrameSep + }; + + switch (settings->range) + { + case GNOME_PRINT_RANGE_CURRENT: + case GNOME_PRINT_RANGE_SELECTION_UNSENSITIVE: + case GNOME_PRINT_RANGE_ALL: + target->SetPrintRange (nsIPrintSettings::kRangeAllPages); + break; + case GNOME_PRINT_RANGE_RANGE: + target->SetPrintRange (nsIPrintSettings::kRangeSpecifiedPageRange); + target->SetStartPageRange (settings->from_page); + target->SetEndPageRange (settings->to_page); + break; + case GNOME_PRINT_RANGE_SELECTION: + target->SetPrintRange (nsIPrintSettings::kRangeSelection); + break; + } + + mm = gnome_print_unit_get_by_abbreviation ((const guchar *) "mm"); + inch = gnome_print_unit_get_by_abbreviation ((const guchar *) "in"); + g_assert (mm != NULL && inch != NULL); + + /* top margin */ + if (gnome_print_config_get_length (settings->config, + (const guchar *) GNOME_PRINT_KEY_PAGE_MARGIN_TOP, + &value, &unit) + && gnome_print_convert_distance (&value, unit, inch)) + { + target->SetMarginTop (value); + } + + /* bottom margin */ + if (gnome_print_config_get_length (settings->config, + (const guchar *) GNOME_PRINT_KEY_PAGE_MARGIN_BOTTOM, + &value, &unit) + && gnome_print_convert_distance (&value, unit, inch)) + { + target->SetMarginBottom (value); + } + + /* left margin */ + if (gnome_print_config_get_length (settings->config, + (const guchar *) GNOME_PRINT_KEY_PAGE_MARGIN_LEFT, + &value, &unit) + && gnome_print_convert_distance (&value, unit, inch)) + { + target->SetMarginLeft (value); + } + + /* right margin */ + if (gnome_print_config_get_length (settings->config, + (const guchar *) GNOME_PRINT_KEY_PAGE_MARGIN_RIGHT, + &value, &unit) + && gnome_print_convert_distance (&value, unit, inch)) + { + target->SetMarginRight (value); + } + + + + NS_CStringToUTF16 (nsDependentCString(settings->header_left_string), + NS_CSTRING_ENCODING_UTF8, tmp); + target->SetHeaderStrLeft (tmp.get()); + + NS_CStringToUTF16 (nsDependentCString(settings->header_center_string), + NS_CSTRING_ENCODING_UTF8, tmp); + target->SetHeaderStrCenter (tmp.get()); + + NS_CStringToUTF16 (nsDependentCString(settings->header_right_string), + NS_CSTRING_ENCODING_UTF8, tmp); + target->SetHeaderStrRight (tmp.get()); + + NS_CStringToUTF16 (nsDependentCString(settings->footer_left_string), + NS_CSTRING_ENCODING_UTF8, tmp); + target->SetFooterStrLeft (tmp.get()); + + NS_CStringToUTF16 (nsDependentCString(settings->footer_center_string), + NS_CSTRING_ENCODING_UTF8, tmp); + target->SetFooterStrCenter(tmp.get()); + + NS_CStringToUTF16 (nsDependentCString(settings->footer_right_string), + NS_CSTRING_ENCODING_UTF8, tmp); + target->SetFooterStrRight(tmp.get()); + + + + temp_dir = g_get_tmp_dir (); + base = g_build_filename (temp_dir, "printXXXXXX", NULL); + fd = g_mkstemp (base); + close(fd); + settings->tempfile = g_strdup (base); + + g_free (base); + + + NS_CStringToUTF16 (nsDependentCString(settings->tempfile), + NS_CSTRING_ENCODING_UTF8, tmp); + target->SetPrintToFile (PR_TRUE); + target->SetToFileName (tmp.get()); + + + /* paper size */ + target->SetPaperSize (nsIPrintSettings::kPaperSizeDefined); + target->SetPaperSizeUnit (nsIPrintSettings::kPaperSizeMillimeters); + + if (gnome_print_config_get_length (settings->config, + (const guchar *) GNOME_PRINT_KEY_PAPER_WIDTH, + &value, &unit) + && gnome_print_convert_distance (&value, unit, mm)) + { + target->SetPaperWidth (value); + } + + if (gnome_print_config_get_length (settings->config, + (const guchar *) GNOME_PRINT_KEY_PAPER_HEIGHT, + &value, &unit) + && gnome_print_convert_distance (&value, unit, mm)) + { + target->SetPaperHeight (value); + } + + /* Mozilla bug https://bugzilla.mozilla.org/show_bug.cgi?id=307404 + * means that we cannot actually use any paper sizes except mozilla's + * builtin list, and we must refer to them *by name*! + */ +#ifndef HAVE_GECKO_1_9 + /* Gnome-Print names some papers differently than what moz understands */ + static const struct + { + const char *gppaper; + const char *mozpaper; + } + paper_table [] = + { + { "USLetter", "Letter" }, + { "USLegal", "Legal" } + }; +#endif /* !HAVE_GECKO_1_9 */ + + /* paper name */ + char *string = (char *) gnome_print_config_get (settings->config, + (const guchar *) GNOME_PRINT_KEY_PAPER_SIZE); + const char *paper = string; + +#ifndef HAVE_GECKO_1_9 + for (PRUint32 i = 0; i < G_N_ELEMENTS (paper_table); i++) + { + if (string != NULL && + g_ascii_strcasecmp (paper_table[i].gppaper, string) == 0) + { + paper = paper_table[i].mozpaper; + break; + } + } +#endif /* !HAVE_GECKO_1_9 */ + + NS_CStringToUTF16 (nsDependentCString(paper), + NS_CSTRING_ENCODING_UTF8, tmp); + target->SetPaperName (tmp.get()); + g_free (string); + + /* paper orientation */ + string = (char *) gnome_print_config_get (settings->config, + (const guchar *) GNOME_PRINT_KEY_ORIENTATION); + if (string == NULL) string = g_strdup ("R0"); + + if (strncmp (string, "R90", 3) == 0 || strncmp (string, "R270", 4) == 0) + { + target->SetOrientation (nsIPrintSettings::kLandscapeOrientation); + } + else + { + target->SetOrientation (nsIPrintSettings::kPortraitOrientation); + } + g_free (string); + + target->SetPrintInColor (TRUE); + target->SetPrintFrameType (frame_types[settings->frame_type]); +} + +/* component registration */ + NS_GENERIC_FACTORY_CONSTRUCTOR(GPrintingPromptService) static const nsModuleComponentInfo sAppComps[] = { @@ -209,15 +410,15 @@ static const nsModuleComponentInfo sAppComps[] = { void yelp_register_printing () { - gboolean ret = TRUE; nsresult rv; - nsresult result; - nsCOMPtr<nsIComponentRegistrar> cr; - - result = NS_GetComponentRegistrar(getter_AddRefs(cr)); + rv = NS_GetComponentRegistrar(getter_AddRefs(cr)); + NS_ENSURE_SUCCESS (rv, ); + nsCOMPtr<nsIComponentManager> cm; - NS_GetComponentManager (getter_AddRefs (cm)); + rv = NS_GetComponentManager (getter_AddRefs (cm)); + NS_ENSURE_SUCCESS (rv, ); + nsCOMPtr<nsIGenericFactory> componentFactory; rv = NS_NewGenericFactory(getter_AddRefs(componentFactory), &(sAppComps[0])); @@ -225,8 +426,7 @@ yelp_register_printing () if (NS_FAILED(rv) || !componentFactory) { g_warning ("Failed to make a factory for %s\n", sAppComps[0].mDescription); - - ret = FALSE; + return; } rv = cr->RegisterFactory(sAppComps[0].mCID, @@ -236,8 +436,6 @@ yelp_register_printing () if (NS_FAILED(rv)) { g_warning ("Failed to register %s\n", sAppComps[0].mDescription); - - ret = FALSE; } } diff --git a/src/yelp-gecko-services.h b/src/yelp-gecko-services.h index 66262fe1..a3aa348a 100644 --- a/src/yelp-gecko-services.h +++ b/src/yelp-gecko-services.h @@ -22,8 +22,9 @@ #define __YELP_GECKO_SERVICES_H #include <nsIPrintingPromptService.h> -#include <nsIWebProgressListener.h> #include <nsIPrintProgressParams.h> +#include <nsIWebProgressListener.h> + #include "yelp-print.h" #define G_PRINTINGPROMPTSERVICE_CID \ @@ -64,17 +65,15 @@ public: virtual ~PrintListener (); NS_DECL_ISUPPORTS - NS_DECL_NSIWEBPROGRESSLISTENER + NS_DECL_NSIWEBPROGRESSLISTENER - protected: + static void SetPrintSettings (YelpPrintInfo *settings, nsIPrintSettings *target); + +protected: YelpPrintInfo *info; nsIWebBrowserPrint *print; gboolean cancel_happened; gboolean called_finish; }; - - - - #endif diff --git a/src/yelp-gecko-utils.cpp b/src/yelp-gecko-utils.cpp index 4f37d4bc..0e999285 100644 --- a/src/yelp-gecko-utils.cpp +++ b/src/yelp-gecko-utils.cpp @@ -21,24 +21,27 @@ */ #include "mozilla-config.h" - #include "config.h" +#include <stdlib.h> + +#include <nsStringAPI.h> + +#include <gtkmozembed.h> +#include <gtkmozembed_internal.h> #include <nsCOMPtr.h> -#include <nsIInterfaceRequestorUtils.h> -#include <nsIServiceManager.h> #include <nsIPrefService.h> -#include <stdlib.h> +#include <nsIServiceManager.h> +#include <nsServiceManagerUtils.h> -#include "yelp-gecko-utils.h" #include "yelp-gecko-services.h" +#include "yelp-gecko-utils.h" + static nsIPrefBranch* gPrefBranch; static const char *font_languages[] = { - "x-western" -#ifdef HAVE_GECKO_1_8 - , + "x-western", "ar", "el", "he", @@ -64,7 +67,6 @@ static const char *font_languages[] = { "zh-CN", "zh-HK", "zh-TW" -#endif /* HAVE_GECKO_1_8 */ }; static gboolean diff --git a/src/yelp-gecko-utils.h b/src/yelp-gecko-utils.h index ba2bf6b0..e49b4066 100644 --- a/src/yelp-gecko-utils.h +++ b/src/yelp-gecko-utils.h @@ -23,7 +23,6 @@ #ifndef __YELP_GECKO_UTILS_H__ #define __YELP_GECKO_UTILS_H__ -#include <gtkmozembed.h> #include "yelp-settings.h" G_BEGIN_DECLS diff --git a/src/yelp-html.cpp b/src/yelp-html.cpp index de655131..4ff49f02 100644 --- a/src/yelp-html.cpp +++ b/src/yelp-html.cpp @@ -22,20 +22,18 @@ */ #include <mozilla-config.h> - -#ifdef HAVE_CONFIG_H #include <config.h> -#endif -#include "yelp-html.h" -#include "yelp-marshal.h" +#include <libgnome/gnome-init.h> + +#include "yelp-gecko-services.h" #include "yelp-gecko-utils.h" +#include "yelp-marshal.h" #include "yelp-settings.h" -#include "yelp-gecko-services.h" #include "Yelper.h" -#include <libgnome/gnome-init.h> +#include "yelp-html.h" #ifdef GNOME_ENABLE_DEBUG #define d(x) x @@ -211,6 +209,8 @@ html_class_init (YelpHtmlClass *klass) moz_embed_class->open_uri = html_open_uri; klass->font_handler = 0; + klass->color_handler = 0; + klass->a11y_handler = 0; signals[URI_SELECTED] = g_signal_new ("uri_selected", diff --git a/src/yelp-html.h b/src/yelp-html.h index d2d75302..23d90711 100644 --- a/src/yelp-html.h +++ b/src/yelp-html.h @@ -23,9 +23,6 @@ #ifndef __YELP_HTML_H__ #define __YELP_HTML_H__ -#include <gtk/gtkobject.h> -#include <gtk/gtktypeutils.h> -#include <gtk/gtkmarshal.h> #include <gtkmozembed.h> #include "yelp-print.h" diff --git a/src/yelp-window.c b/src/yelp-window.c index 799bbf2f..427802c0 100644 --- a/src/yelp-window.c +++ b/src/yelp-window.c @@ -2964,12 +2964,6 @@ window_find_again (YelpWindow *window, gboolean forward) { YelpWindowPriv *priv = window->priv; -#ifndef TYPEAHEADFIND - window_find_save_settings (window); - - yelp_html_set_find_props (priv->html_view, priv->find_string, FALSE, FALSE); -#endif /* TYPEAHEADFIND */ - return yelp_html_find_again (priv->html_view, forward); } |