diff options
-rw-r--r-- | Makefile.am | 2 | ||||
-rw-r--r-- | configure.in | 52 | ||||
-rw-r--r-- | m4/gecko.m4 | 735 | ||||
-rw-r--r-- | src/Makefile.am | 51 | ||||
-rw-r--r-- | src/Yelper.cpp | 335 | ||||
-rw-r--r-- | src/Yelper.h | 69 | ||||
-rw-r--r-- | src/yelp-gecko-services.cpp | 464 | ||||
-rw-r--r-- | src/yelp-gecko-services.h | 80 | ||||
-rw-r--r-- | src/yelp-gecko-utils.cpp | 271 | ||||
-rw-r--r-- | src/yelp-gecko-utils.h | 41 | ||||
-rw-r--r-- | src/yelp-html.c (renamed from src/yelp-html.cpp) | 337 | ||||
-rw-r--r-- | src/yelp-html.h | 19 | ||||
-rw-r--r-- | src/yelp-info-parser.c | 10 | ||||
-rw-r--r-- | src/yelp-io-channel.c | 7 | ||||
-rw-r--r-- | src/yelp-main.c | 15 | ||||
-rw-r--r-- | src/yelp-search-parser.c | 10 | ||||
-rw-r--r-- | src/yelp-window.c | 180 | ||||
-rw-r--r-- | stylesheets/db2html.xsl.in | 24 | ||||
-rw-r--r-- | stylesheets/mal2html.xsl.in | 4 | ||||
-rw-r--r-- | stylesheets/toc2html.xsl.in | 4 |
20 files changed, 297 insertions, 2413 deletions
diff --git a/Makefile.am b/Makefile.am index f79bc3bf..9ccead58 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,7 +1,5 @@ SUBDIRS = src stylesheets po data tests -ACLOCAL_AMFLAGS = -I m4 - @INTLTOOL_DESKTOP_RULE@ desktopdir = $(datadir)/applications diff --git a/configure.in b/configure.in index 41e026dc..b0e718b3 100644 --- a/configure.in +++ b/configure.in @@ -4,7 +4,6 @@ GNOME_COMMON_INIT AC_CONFIG_SRCDIR([src/yelp-main.c]) AC_CONFIG_HEADERS([config.h]) -AC_CONFIG_MACRO_DIR([m4]) AM_INIT_AUTOMAKE([1.9 dist-bzip2 no-dist-gzip]) AM_MAINTAINER_MODE @@ -18,7 +17,6 @@ AM_GCONF_SOURCE_2 AC_PROG_LN_S AC_PROG_CC -AC_PROG_CXX AM_PROG_CC_STDC AC_ISC_POSIX AC_HEADER_STDC @@ -29,21 +27,9 @@ AM_PROG_CC_C_O GNOME_DEBUG_CHECK GNOME_COMPILE_WARNINGS([maximum]) -GNOME_CXX_WARNINGS MORE_WARN_FLAGS= DEPRECATION_FLAGS= -if test "x$GCC" = "xyes"; then - MOZILLA_WARN_CXXFLAGS="-Wno-ctor-dtor-privacy -Wno-non-virtual-dtor" -fi - -if test "x$enable_maintainer_mode" = "xyes"; then - AC_DEFINE([MAINTAINER_MODE],[1],[Define to enable 'maintainer-only' behaviour]) -# DEPRECATION_FLAGS="-DG_DISABLE_DEPRECATED -DGDK_DISABLE_DEPRECATED -DGDK_PIXBUF_DISABLE_DEPRECATED -DGCONF_DISABLE_DEPRECATED -DGNOME_VFS_DISABLE_DEPRECATED -DBONOBO_UI_DISABLE_DEPRECATED -DBONOBO_DISABLE_DEPRECATED -DLIBGLADE_DISABLE_DEPRECATED -DPANGO_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED -DGNOME_DISABLE_DEPRECATED" - if test "x$GCC" = "xyes"; then - MOZILLA_WARN_CXXFLAGS="-Wall -Wconversion -Wpointer-arith -Wcast-align -Woverloaded-virtual -Wsynth $MOZILLA_WARN_CXXFLAGS" - fi -fi if test "x$enable_debug" = "xyes"; then AC_DEFINE([YELP_DEBUG],[1],[Enable Yelp debugging]) @@ -224,35 +210,13 @@ dnl <= Check for bzip2 > 1.0.0 dnl => AC_SUBST(BZ_LIBS) - # ***** -# Gecko +# Webkit # ***** - -GECKO_INIT([MOZILLA]) -GECKO_DEFINES - -AC_SUBST([MOZILLA]) -AC_SUBST([MOZILLA_FLAVOUR]) -AC_SUBST([MOZILLA_INCLUDE_ROOT]) -AC_SUBST([MOZILLA_HOME]) -AC_SUBST([MOZILLA_PREFIX]) -AC_SUBST([MOZILLA_EXTRA_LIBS]) -AC_SUBST([MOZILLA_GLUE_LIBS]) - -case "$MOZILLA" in -xulrunner) gecko_min_version=1.8 ;; -libxul*) gecko_min_version=1.9 ;; -*firefox) gecko_min_version=1.5 ;; -*) AC_MSG_ERROR([$gecko_cv_gecko is not supported]) -esac - -if test "$MOZILLA" = "libxul-embedding" -o "$MOZILLA" = "libxul"; then - PKG_CHECK_MODULES([MOZILLA_COMPONENT],[$MOZILLA $gecko_cv_extra_pkg_dependencies]) - MOZILLA_COMPONENT_CFLAGS="$MOZILLA_COMPONENT_CFLAGS `$PKG_CONFIG --cflags ${gecko_cv_gecko}` `$PKG_CONFIG --define-variable=includetype=unstable --cflags ${gecko_cv_gecko}`" -else - PKG_CHECK_MODULES([MOZILLA_COMPONENT],[${gecko_cv_gecko}-xpcom >= $gecko_min_version $gecko_cv_extra_pkg_dependencies]) -fi + PKG_CHECK_MODULES(YELP_WEBKIT, "webkit-1.0") + AC_SUBST(YELP_WEBKIT_CFLAGS) + AC_SUBST(YELP_WEBKIT_LIBS) + AC_DEFINE(WEBKIT_BACKEND, 1, [Webkit Backend]) # ***** # SMClient @@ -283,13 +247,12 @@ AM_CONDITIONAL([WITH_SMCLIENT_WIN32],[test "$with_smclient" = "win32"]) AM_CONDITIONAL([WITH_SMCLIENT_QUARTZ],[test "$with_smclient" = "quartz"]) # Set flags - AM_CPPFLAGS="$AM_CPPFLAGS $DEPRECATION_FLAGS" AM_CFLAGS="$AM_CFLAGS $WARN_CFLAGS $MORE_WARN_FLAGS" -AM_CXXFLAGS="$AM_CXXFLAGS $WARN_CXXFLAGS $MOZILLA_WARN_CXXFLAGS" + + AC_SUBST([AM_CPPFLAGS]) AC_SUBST([AM_CFLAGS]) -AC_SUBST([AM_CXXFLAGS]) AC_SUBST([AM_LDFLAGS]) AC_CONFIG_FILES([ @@ -320,7 +283,6 @@ yelp-$VERSION: Debug enabled: ${enable_debug} Search backend: ${search_backend} - Mozilla version: ${MOZILLA} Using SMClient: ${with_smclient} " diff --git a/m4/gecko.m4 b/m4/gecko.m4 deleted file mode 100644 index 84c47fb4..00000000 --- a/m4/gecko.m4 +++ /dev/null @@ -1,735 +0,0 @@ -# Copyright © 2000-2004 Marco Pesenti Gritti -# Copyright © 2003, 2004, 2005, 2006 Christian Persch -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; either version 2 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -# GECKO_INIT(VARIABLE,[ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND]) -# -# Checks for gecko, and aborts if it's not found -# -# Checks for -fshort-wchar compiler variable, and adds it to -# AM_CXXFLAGS if found -# -# Checks whether RTTI is enabled, and adds -fno-rtti to -# AM_CXXFLAGS otherwise -# -# Checks whether the gecko build is a debug build, and adds -# debug flags to AM_CXXFLAGS if it is. -# -# Expanded variables: -# VARIABLE: Which gecko was found (e.g. "xulrunnner", "seamonkey", ...) -# VARIABLE_FLAVOUR: The flavour of the gecko that was found -# VARIABLE_HOME: -# VARIABLE_NSPR: set if nspr is provided by gecko flags -# VARIABLE_PREFIX: -# VARIABLE_INCLUDE_ROOT: -# VARIABLE_VERSION: The version of the gecko that was found -# 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]) - -AC_ARG_WITH([gecko], - AS_HELP_STRING([--with-gecko@<:@=mozilla|firefox|seamonkey|xulrunner|libxul-embedding|libxul@:>@], - [Which gecko engine to use (autodetected by default)])) - -# Backward compat -AC_ARG_WITH([mozilla],[],[with_gecko=$withval],[]) - -gecko_cv_gecko=$with_gecko - -# Autodetect gecko -_geckos="xulrunner firefox mozilla-firefox seamonkey mozilla libxul-embedding libxul" -if test -z "$gecko_cv_gecko"; then - for lizard in $_geckos; do - if $PKG_CONFIG --exists $lizard-xpcom; then - gecko_cv_gecko=$lizard - break; - elif $PKG_CONFIG --exists $lizard; then - gecko_cv_gecko=$lizard - break; - elif $PKG_CONFIG --exists $lizard-unstable; then - gecko_cv_gecko=$lizard - break; - fi - done -fi - -AC_MSG_RESULT([$gecko_cv_gecko]) - -if test "x$gecko_cv_gecko" = "x"; then - ifelse([$3],,[AC_MSG_ERROR([No gecko found; you may need to adjust PKG_CONFIG_PATH or install a mozilla/firefox/xulrunner -devel package])],[$3]) - gecko_cv_have_gecko=no -elif ! ( echo "$_geckos" | egrep "(^| )$gecko_cv_gecko(\$| )" > /dev/null); then - AC_MSG_ERROR([Unknown gecko "$gecko_cv_gecko" specified]) -else - ifelse([$2],,[],[$2]) - gecko_cv_have_gecko=yes -fi - -AC_MSG_CHECKING([manual gecko home set]) - -AC_ARG_WITH([gecko-home], - AS_HELP_STRING([--with-gecko-home@<:@=[path]@:>@], - [Manually set MOZILLA_FIVE_HOME])) - -gecko_cv_gecko_home=$with_gecko_home - -# **************** -# Define variables -# **************** - -if test "$gecko_cv_have_gecko" = "yes"; then - -case "$gecko_cv_gecko" in -mozilla) gecko_cv_gecko_flavour=mozilla ;; -seamonkey) gecko_cv_gecko_flavour=mozilla ;; -*firefox) gecko_cv_gecko_flavour=toolkit ;; -xulrunner) gecko_cv_gecko_flavour=toolkit ;; -libxul*) gecko_cv_gecko_flavour=toolkit ;; -esac - -if $PKG_CONFIG --exists ${gecko_cv_gecko}-xpcom; then - _GECKO_INCLUDE_ROOT="`$PKG_CONFIG --variable=includedir ${gecko_cv_gecko}-xpcom`" - _GECKO_CFLAGS="-I$_GECKO_INCLUDE_ROOT" - _GECKO_LIBDIR="`$PKG_CONFIG --variable=libdir ${gecko_cv_gecko}-xpcom`" - _GECKO_HOME="`$PKG_CONFIG --variable=libdir ${gecko_cv_gecko}-xpcom`" - _GECKO_PREFIX="`$PKG_CONFIG --variable=prefix ${gecko_cv_gecko}-xpcom`" - _GECKO_NSPR=no # XXX asac: this is currently a blind guess and should be a AC test -else - _GECKO_INCLUDE_ROOT="`$PKG_CONFIG --variable=includedir ${gecko_cv_gecko}`/unstable" - _GECKO_CFLAGS="`$PKG_CONFIG --cflags ${gecko_cv_gecko}` `$PKG_CONFIG --cflags ${gecko_cv_gecko}-unstable`" - _GECKO_LIBDIR="`$PKG_CONFIG --variable=sdkdir ${gecko_cv_gecko}`/bin" - _GECKO_HOME=$with_gecko_home - _GECKO_PREFIX="`$PKG_CONFIG --variable=prefix ${gecko_cv_gecko}`" - _GECKO_NSPR=no # XXX asac: this is currently a blind guess and should be a AC test -fi -fi # if gecko_cv_have_gecko - -if test "$gecko_cv_gecko_flavour" = "toolkit"; then - AC_DEFINE([HAVE_MOZILLA_TOOLKIT],[1],[Define if mozilla is of the toolkit flavour]) -fi - -$1[]=$gecko_cv_gecko -$1[]_FLAVOUR=$gecko_cv_gecko_flavour -$1[]_INCLUDE_ROOT=$_GECKO_INCLUDE_ROOT -$1[]_CFLAGS=$_GECKO_CFLAGS -$1[]_LIBDIR=$_GECKO_LIBDIR -$1[]_HOME=$_GECKO_HOME -$1[]_PREFIX=$_GECKO_PREFIX -$1[]_NSPR=$_GECKO_NSPR - -# ************************************************************** -# This is really gcc-only -# Do this test using CXX only since some versions of gcc -# 2.95-2.97 have a signed wchar_t in c++ only and some versions -# only have short-wchar support for c++. -# ************************************************************** - -_GECKO_EXTRA_CPPFLAGS= -_GECKO_EXTRA_CFLAGS= -_GECKO_EXTRA_CXXFLAGS= -_GECKO_EXTRA_LDFLAGS= - -if test "$gecko_cv_have_gecko" = "yes"; then - -AC_LANG_PUSH([C++]) - -_SAVE_CXXFLAGS=$CXXFLAGS -CXXFLAGS="$CXXFLAGS $_GECKO_EXTRA_CXXFLAGS -fshort-wchar" - -AC_CACHE_CHECK([for compiler -fshort-wchar option], - gecko_cv_have_usable_wchar_option, - [AC_RUN_IFELSE([AC_LANG_SOURCE( - [[#include <stddef.h> - int main () { - return (sizeof(wchar_t) != 2) || (wchar_t)-1 < (wchar_t) 0 ; - } ]])], - [gecko_cv_have_usable_wchar_option="yes"], - [gecko_cv_have_usable_wchar_option="no"], - [gecko_cv_have_usable_wchar_option="maybe (cross-compiling)"])]) - -CXXFLAGS="$_SAVE_CXXFLAGS" - -AC_LANG_POP([C++]) - -if test "$gecko_cv_have_usable_wchar_option" = "yes"; then - _GECKO_EXTRA_CXXFLAGS="-fshort-wchar" - AM_CXXFLAGS="$AM_CXXFLAGS -fshort-wchar" -fi - -fi # if gecko_cv_have_gecko - -# ************** -# Check for RTTI -# ************** - -if test "$gecko_cv_have_gecko" = "yes"; then - -AC_MSG_CHECKING([whether to enable C++ RTTI]) -AC_ARG_ENABLE([cpp-rtti], - AS_HELP_STRING([--enable-cpp-rtti],[Enable C++ RTTI]), - [],[enable_cpp_rtti=no]) -AC_MSG_RESULT([$enable_cpp_rtti]) - -if test "$enable_cpp_rtti" = "no"; then - _GECKO_EXTRA_CXXFLAGS="-fno-rtti $_GECKO_EXTRA_CXXFLAGS" - AM_CXXFLAGS="-fno-rtti $AM_CXXFLAGS" -fi - -fi # if gecko_cv_have_gecko - -# ************* -# Various tests -# ************* - -if test "$gecko_cv_have_gecko" = "yes"; then - -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 <mozilla-config.h> - #include <string.h> - #include <stdlib.h> - 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( - [[#include <mozilla-config.h> - #if !defined(MOZ_REFLOW_PERF) || !defined(MOZ_REFLOW_PERF_DSP) - #error No - #endif]] - )], - [gecko_cv_have_debug=yes], - [gecko_cv_have_debug=no]) -AC_MSG_RESULT([$gecko_cv_have_debug]) - -AC_MSG_CHECKING([[whether we have a xpcom glue]]) -AC_COMPILE_IFELSE( - [AC_LANG_SOURCE( - [[ - #ifndef XPCOM_GLUE - #error "no xpcom glue found" - #endif]] - )], - [gecko_cv_have_xpcom_glue=yes], - [gecko_cv_have_xpcom_glue=no]) -AC_MSG_RESULT([$gecko_cv_have_xpcom_glue]) - -CPPFLAGS="$_SAVE_CPPFLAGS" - -AC_LANG_POP([C++]) - -if test "$gecko_cv_have_debug" = "yes"; then - _GECKO_EXTRA_CXXFLAGS="$_GECKO_EXTRA_CXXFLAGS -DDEBUG -D_DEBUG" - AM_CXXFLAGS="-DDEBUG -D_DEBUG $AM_CXXFLAGS" - - AC_DEFINE([HAVE_GECKO_DEBUG],[1],[Define if gecko is a debug build]) -fi - -if test "$gecko_cv_have_xpcom_glue" = "yes"; then - AC_DEFINE([HAVE_GECKO_XPCOM_GLUE],[1],[Define if xpcom glue is used]) -fi - -fi # if gecko_cv_have_gecko - -# *********************** -# Check for gecko version -# *********************** - -if test "$gecko_cv_have_gecko" = "yes"; then - -AC_LANG_PUSH([C++]) - -_SAVE_CPPFLAGS="$CPPFLAGS" -CPPFLAGS="$CPPFLAGS $_GECKO_CFLAGS" - -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_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 - AC_MSG_ERROR([Gecko version $gecko_cv_gecko_version is not supported!]) -fi - -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_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_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 - -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]) -else - gecko_cv_have_gecko_1_9_1=no -fi - -if test "$gecko_cv_have_gecko_1_9_1" = "yes"; then - AC_DEFINE([HAVE_GECKO_1_9_1],[1],[Define if we have gecko 1.9.1]) -fi - -fi # if gecko_cv_have_gecko - -$1[]_VERSION=$gecko_cv_gecko_version -$1[]_VERSION_INT=$gecko_cv_gecko_version_int - -# ************************************************** -# Packages that we need to check for with pkg-config -# ************************************************** - -gecko_cv_extra_libs= -gecko_cv_glue_libs= -gecko_cv_extra_pkg_dependencies= - -if test "$gecko_cv_gecko_version_int" -ge "1009000"; then - if ! test "$gecko_cv_have_xpcom_glue" = "yes"; then - gecko_cv_extra_libs="-L$_GECKO_LIBDIR -lxul" - else - gecko_cv_glue_libs="-L$_GECKO_LIBDIR -lxpcomglue" - fi -else - gecko_cv_extra_pkg_dependencies="${gecko_cv_gecko}-gtkmozembed" -fi - -$1[]_EXTRA_PKG_DEPENDENCIES="$gecko_cv_extra_pkg_dependencies" -$1[]_EXTRA_LIBS="$gecko_cv_extra_libs" -$1[]_GLUE_LIBS="$gecko_cv_glue_libs" - -]) - -# GECKO_DEFINES -# -# Defines the AM_CONDITIONALS for GECKO_INIT. This is a separate call -# so that you may call GECKO_INIT conditionally; but note that you must -# call GECKO_DEFINES _unconditionally_ ! - -AC_DEFUN([GECKO_DEFINES], -[ -# Ensure we have an integer variable to compare with -if test -z "$gecko_cv_gecko_version_int"; then - gecko_cv_gecko_version_int=0 -fi -AM_CONDITIONAL([HAVE_MOZILLA_TOOLKIT],[test "$gecko_cv_have_gecko" = "yes" -a "$gecko_cv_gecko_flavour" = "toolkit"]) -AM_CONDITIONAL([HAVE_GECKO_DEBUG],[test "$gecko_cv_have_gecko" = "yes" -a "$gecko_cv_have_debug" = "yes"]) -AM_CONDITIONAL([HAVE_GECKO_1_7],[test "$gecko_cv_have_gecko" = "yes" -a "$gecko_cv_gecko_version_int" -ge "1007000"]) -AM_CONDITIONAL([HAVE_GECKO_1_8],[test "$gecko_cv_have_gecko" = "yes" -a "$gecko_cv_gecko_version_int" -ge "1008000"]) -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_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"]) -]) - -# *************************************************************************** -# *************************************************************************** -# *************************************************************************** - -# _GECKO_DISPATCH(MACRO, INCLUDEDIRS, ...) - -m4_define([_GECKO_DISPATCH], -[ - -if test "$gecko_cv_have_gecko" != "yes"; then - AC_MSG_FAILURE([Gecko not present; can't run this test!]) -fi - -AC_LANG_PUSH([C++]) - -_SAVE_CPPFLAGS="$CPPFLAGS" -_SAVE_CXXFLAGS="$CXXFLAGS" -_SAVE_LDFLAGS="$LDFLAGS" -_SAVE_LIBS="$LIBS" -if test "${gecko_cv_gecko}" = "libxul-embedding" -o "${gecko_cv_gecko}" = "libxul"; then - CPPFLAGS="$CPPFLAGS $_GECKO_EXTRA_CPPFLAGS $_GECKO_CFLAGS $($PKG_CONFIG --cflags-only-I ${gecko_cv_gecko}-unstable)" - CXXFLAGS="$CXXFLAGS $_GECKO_EXTRA_CXXFLAGS $_GECKO_CFLAGS $($PKG_CONFIG --cflags-only-other ${gecko_cv_gecko}-unstable)" - LIBS="$LIBS $($PKG_CONFIG --libs ${gecko_cv_gecko}) -ldl" -else - CPPFLAGS="$CPPFLAGS $_GECKO_EXTRA_CPPFLAGS $_GECKO_CFLAGS $($PKG_CONFIG --cflags-only-I ${gecko_cv_gecko}-xpcom)" - CXXFLAGS="$CXXFLAGS $_GECKO_EXTRA_CXXFLAGS $_GECKO_CFLAGS $($PKG_CONFIG --cflags-only-other ${gecko_cv_gecko}-xpcom)" - LIBS="$LIBS $($PKG_CONFIG --libs ${gecko_cv_gecko}-xpcom)" -fi -if test -n "$_GECKO_HOME"; then - LDFLAGS="$LDFLAGS $_GECKO_EXTRA_LDFLAGS -Wl,--rpath=$_GECKO_HOME" -else - LDFLAGS="$LDFLAGS $_GECKO_EXTRA_LDFLAGS" -fi - -_GECKO_DISPATCH_INCLUDEDIRS="$2" - -# Sigh Gentoo has a rubbish header layout -# http://bugs.gentoo.org/show_bug.cgi?id=100804 -# Mind you, it's useful to be able to test against uninstalled mozilla builds... -_GECKO_DISPATCH_INCLUDEDIRS="$_GECKO_DISPATCH_INCLUDEDIRS dom necko pref" - -# Now add them to CPPFLAGS - asac: well ... not anymore since 1.9 -> test whether they exist before adding. -for i in $_GECKO_DISPATCH_INCLUDEDIRS; do - if test -d "$_GECKO_INCLUDE_ROOT/$i"; then - CPPFLAGS="$CPPFLAGS -I$_GECKO_INCLUDE_ROOT/$i" - fi -done - -m4_indir([$1],m4_shiftn(2,$@)) - -CPPFLAGS="$_SAVE_CPPFLAGS" -CXXFLAGS="$_SAVE_CXXFLAGS" -LDFLAGS="$_SAVE_LDFLAGS" -LIBS="$_SAVE_LIBS" - -AC_LANG_POP([C++]) - -])# _GECKO_DISPATCH - -# *************************************************************************** -# *************************************************************************** -# *************************************************************************** - -# GECKO_CHECK_HEADERS(INCLUDEDIRS, HEADERS, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND], [INCLUDES]) - -AC_DEFUN([GECKO_CHECK_HEADERS],[_GECKO_DISPATCH([AC_CHECK_HEADERS],$@)]) - -# GECKO_COMPILE_IFELSE(INCLUDEDIRS, PROGRAM, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) - -AC_DEFUN([GECKO_COMPILE_IFELSE],[_GECKO_DISPATCH([AC_COMPILE_IFELSE],$@)]) - -# GECKO_RUN_IFELSE(INCLUDEDIRS, PROGRAM, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) - -AC_DEFUN([GECKO_RUN_IFELSE],[_GECKO_DISPATCH([AC_RUN_IFELSE],$@)]) - -# *************************************************************************** -# *************************************************************************** -# *************************************************************************** - -# GECKO_XPCOM_PROGRAM([PROLOGUE], [BODY]) -# -# Produce a template C++ program which starts XPCOM up and shuts it down after -# the BODY part has run. In BODY, the the following variables are predeclared: -# -# nsresult rv -# int status = 1 (EXIT_FAILURE) -# -# The program's exit status will be |status|; set it to 0 (or EXIT_SUCCESS) -# to indicate success and to a value between 1 (EXIT_FAILURE) and 120 to -# indicate failure. -# -# To jump out of the BODY and exit the test program, you can use |break|. - -AC_DEFUN([GECKO_XPCOM_PROGRAM], -[AC_LANG_PROGRAM([[ -#include <mozilla-config.h> -#include <stdlib.h> -#include <stdio.h> - -#ifdef XPCOM_GLUE -#include <nsXPCOMGlue.h> -#else -#include <nsXPCOM.h> -#endif // XPCOM_GLUE - -#include <nsCOMPtr.h> -#include <nsILocalFile.h> -#include <nsIServiceManager.h> -#if defined(HAVE_GECKO_1_8) || defined(HAVE_GECKO_1_9) -#include <nsStringAPI.h> -#else -#include <nsString.h> -#endif -]] -[$1], -[[ - -nsresult rv; -#ifdef XPCOM_GLUE - static const GREVersionRange greVersion = { - "1.8", PR_TRUE, - "1.9.*", PR_TRUE - }; - char xpcomLocation[4096]; - rv = GRE_GetGREPathWithProperties(&greVersion, 1, nsnull, 0, xpcomLocation, 4096); - if (NS_FAILED(rv)) { - exit(123); - } - - // Startup the XPCOM Glue that links us up with XPCOM. - XPCOMGlueStartup(xpcomLocation); - if (NS_FAILED(rv)) { - exit(124); - } -#endif // XPCOM_GLUE - -// redirect unwanted mozilla debug output to the bit bucket -freopen ("/dev/null", "w", stdout); - -nsCOMPtr<nsILocalFile> directory = nsnull; -#ifndef XPCOM_GLUE -rv = NS_NewNativeLocalFile (NS_LITERAL_CSTRING("$_GECKO_HOME"), PR_FALSE, - getter_AddRefs (directory)); -if (NS_FAILED (rv) || !directory) { - exit (126); -} -#endif - -rv = NS_InitXPCOM2 (nsnull, directory, nsnull); -if (NS_FAILED (rv)) { - exit (125); -} - -int status = EXIT_FAILURE; - -// now put in the BODY, scoped with do...while(0) to ensure we don't hold a -// COMptr after XPCOM shutdown and so we can jump out with a simple |break|. -do { -]] -m4_shiftn(1,$@) -[[ -} while (0); - -NS_ShutdownXPCOM (nsnull); -exit (status); -]]) -]) # GECKO_XPCOM_PROGRAM - -# *************************************************************************** -# *************************************************************************** -# *************************************************************************** - -# GECKO_XPCOM_PROGRAM_CHECK([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND], [ACTION-IF-CROSS-COMPILING]) -# -# Checks whether we can build and run any XPCOM test programs at all - -AC_DEFUN([GECKO_XPCOM_PROGRAM_CHECK], -[AC_REQUIRE([GECKO_INIT])dnl - -AC_CACHE_CHECK([whether we can compile and run XPCOM programs], -[gecko_cv_xpcom_program_check], -[ -gecko_cv_xpcom_program_check=no - -GECKO_RUN_IFELSE([], - [GECKO_XPCOM_PROGRAM([],[[status = EXIT_SUCCESS;]])], - [gecko_cv_xpcom_program_check=yes], - [gecko_cv_xpcom_program_check=no], - [gecko_cv_xpcom_program_check=maybe]) -]) - -if test "$gecko_cv_xpcom_program_check" = "yes"; then - ifelse([$2],,[:],[$2]) -else - ifelse([$3],,[AC_MSG_FAILURE([Cannot compile and run XPCOM programs])], - [$3]) -fi - -]) # GECKO_XPCOM_PROGRAM_CHECK - -# *************************************************************************** -# *************************************************************************** -# *************************************************************************** - -# GECKO_CHECK_CONTRACTID(CONTRACTID, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) -# -# Checks wheter CONTRACTID is a registered contract ID - -AC_DEFUN([GECKO_CHECK_CONTRACTID], -[AC_REQUIRE([GECKO_INIT])dnl - -AS_VAR_PUSHDEF([gecko_cv_have_CID],[gecko_cv_have_$1]) - -AC_CACHE_CHECK([for the $1 XPCOM component], -gecko_cv_have_CID, -[ -AS_VAR_SET(gecko_cv_have_CID,[no]) - -GECKO_RUN_IFELSE([], -[GECKO_XPCOM_PROGRAM([[ -#include <nsIComponentRegistrar.h> -]],[[ -status = 99; -nsCOMPtr<nsIComponentRegistrar> registrar; -rv = NS_GetComponentRegistrar (getter_AddRefs (registrar)); -if (NS_FAILED (rv)) break; - -status = 98; -PRBool isRegistered = PR_FALSE; -rv = registrar->IsContractIDRegistered ("$1", &isRegistered); -if (NS_FAILED (rv)) break; - -status = isRegistered ? EXIT_SUCCESS : 97; -]]) -], -[AS_VAR_SET(gecko_cv_have_CID,[yes])], -[AS_VAR_SET(gecko_cv_have_CID,[no])], -[AS_VAR_SET(gecko_cv_have_CID,[maybe])]) - -]) - -if test AS_VAR_GET(gecko_cv_have_CID) = "yes"; then - ifelse([$2],,[:],[$2]) -else - ifelse([$3],,[AC_MSG_ERROR([dnl -Contract ID "$1" is not registered, but $PACKAGE_NAME depends on it.])], - [$3]) -fi - -AS_VAR_POPDEF([gecko_cv_have_CID]) - -]) # GECKO_CHECK_CONTRACTID - -# GECKO_CHECK_CONTRACTIDS(CONTRACTID, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) -# -# Checks wheter CONTRACTIDs are registered contract IDs. -# If ACTION-IF-NOT-FOUND is given, it is executed when one of the contract IDs -# is not found and the missing contract ID is in the |as_contractid| variable. - -AC_DEFUN([GECKO_CHECK_CONTRACTIDS], -[AC_REQUIRE([GECKO_INIT])dnl - -result=yes -as_contractid= -for as_contractid in $1 -do - GECKO_CHECK_CONTRACTID([$as_contractid],[],[result=no; break;]) -done - -if test "$result" = "yes"; then - ifelse([$2],,[:],[$2]) -else - ifelse([$3],,[AC_MSG_ERROR([dnl -Contract ID "$as_contractid" is not registered, but $PACKAGE_NAME depends on it.])], - [$3]) -fi - -]) # GECKO_CHECK_CONTRACTIDS - -# *************************************************************************** -# *************************************************************************** -# *************************************************************************** - -# GECKO_XPIDL([ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND]) -# -# Checks for xpidl program and include directory -# -# Variables set: -# XPIDL: the xpidl program -# XPIDL_IDLDIR: the xpidl include directory - -AC_DEFUN([GECKO_XPIDL], -[AC_REQUIRE([GECKO_INIT])dnl - -if test ${gecko_cv_gecko} = "libxul-embedding" -o ${gecko_cv_gecko} = "libxul"; then - _GECKO_LIBDIR="`$PKG_CONFIG pkg-config --variable=sdkdir ${gecko_cv_gecko}`/bin" -else - _GECKO_LIBDIR="`$PKG_CONFIG --variable=libdir ${gecko_cv_gecko}-xpcom`" -fi - -AC_PATH_PROG([XPIDL],[xpidl],[no],[$_GECKO_LIBDIR:$PATH]) - -if test ${gecko_cv_gecko} = "libxul-embedding" -o ${gecko_cv_gecko} = "libxul"; then -XPIDL_IDLDIR="`$PKG_CONFIG --variable=idldir ${gecko_cv_gecko}`" -else -XPIDL_IDLDIR="`$PKG_CONFIG --variable=idldir ${gecko_cv_gecko}-xpcom`" -if test -z "$XPIDL_IDLDIR" -o ! -f "$XPIDL_IDLDIR/nsISupports.idl"; then - XPIDL_IDLDIR="`echo $_GECKO_LIBDIR | sed -e s!lib!share/idl!`" -fi -# Some distributions (Gentoo) have it in unusual places -if test -z "$XPIDL_IDLDIR" -o ! -f "$XPIDL_IDLDIR/nsISupports.idl"; then - XPIDL_IDLDIR="$_GECKO_INCLUDE_ROOT/idl" -fi - -if test "$XPIDL" != "no" -a -n "$XPIDL_IDLDIR" -a -f "$XPIDL_IDLDIR/nsISupports.idl"; then - ifelse([$1],,[:],[$1]) -else - ifelse([$2],,[AC_MSG_FAILURE([XPIDL program or include directory not found])],[$2]) -fi - -]) diff --git a/src/Makefile.am b/src/Makefile.am index 4d7cb708..39575fb9 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,23 +1,19 @@ bin_PROGRAMS = yelp yelp_SOURCES = \ - Yelper.cpp Yelper.h \ yelp-base.c yelp-base.h \ yelp-bookmarks.c yelp-bookmarks.h \ yelp-debug.c yelp-debug.h \ yelp-error.c yelp-error.h \ - yelp-gecko-utils.cpp yelp-gecko-utils.h \ - yelp-html.cpp yelp-html.h \ + yelp-html.c yelp-html.h \ yelp-io-channel.c yelp-io-channel.h \ yelp-settings.c yelp-settings.h \ yelp-utils.c yelp-utils.h \ yelp-window.c yelp-window.h \ yelp-marshal.c yelp-marshal.h \ yelp-main.c \ - yelp-print.c yelp-print.h \ yelp-page.c yelp-page.h \ yelp-transform.c yelp-transform.h \ - yelp-gecko-services.h yelp-gecko-services.cpp \ yelp-document.h yelp-document.c \ yelp-toc.h yelp-toc.c \ yelp-docbook.h yelp-docbook.c \ @@ -31,6 +27,7 @@ yelp_SOURCES = \ yelp-search.c yelp-search.h \ yelp-search-parser.c yelp-search-parser.h + YELP_DEFINES = \ -DG_LOG_DOMAIN=\"Yelp\" \ -DPREFIX=\""$(prefix)"\" \ @@ -41,47 +38,19 @@ YELP_DEFINES = \ -DSERVERDIR=\"$(libexecdir)\" \ -DBINDIR=\""$(bindir)"\" \ -DSHAREDIR=\""$(pkgdatadir)"\" \ - -DMOZILLA_HOME=\""$(MOZILLA_HOME)\"" \ -DGDU_ICON_PATH=\"$(GDU_ICON_PATH)\" -mozilla_include_subdirs = \ - . \ - commandhandler \ - content \ - docshell \ - dom \ - fastfind \ - find \ - gtkembedmoz \ - gfx \ - layout \ - necko \ - pref \ - string \ - uriloader \ - webbrwsr \ - webshell \ - widget - yelp_CPPFLAGS = \ -I$(top_srcdir) \ -I$(top_builddir)/src \ $(YELP_DEFINES) \ $(AM_CPPFLAGS) -yelp_CPPFLAGS += $(MOZILLA_COMPONENT_CFLAGS) -yelp_CPPFLAGS += $(addprefix -I$(MOZILLA_INCLUDE_ROOT)/,$(mozilla_include_subdirs)) - yelp_CFLAGS = \ $(YELP_CFLAGS) \ $(YELP_SEARCH_CFLAGS) \ - $(AM_CFLAGS) - -yelp_CXXFLAGS = \ - $(YELP_CFLAGS) \ - $(YELP_SEARCH_CFLAGS) \ - $(MOZILLA_COMPONENT_CFLAGS) \ - $(AM_CXXFLAGS) + $(AM_CFLAGS) \ + $(YELP_WEBKIT_CFLAGS) yelp_LDADD = \ $(YELP_LIBS) \ @@ -90,17 +59,11 @@ yelp_LDADD = \ $(Z_LIBS) \ $(BZ_LIBS) \ $(LZMADEC_LIBS) \ - $(X_LIBS) \ - $(MOZILLA_COMPONENT_LIBS) \ - $(MOZILLA_EXTRA_LIBS) \ - $(MOZILLA_GLUE_LIBS) + $(YELP_WEBKIT_LIBS) \ + $(X_LIBS) yelp_LDFLAGS = $(AM_LDFLAGS) -if !HAVE_GECKO_XPCOM_GLUE -yelp_LDFLAGS += -R$(MOZILLA_HOME) -endif - if WITH_SMCLIENT yelp_SOURCES += \ eggdesktopfile.c \ @@ -220,7 +183,7 @@ CLEANFILES = xgen-ymh xgen-ymc MAINTAINERCLEANFILES = $(BUILT_SOURCES) -EXTRA_DIST = yelp-marshal.list yelp-infos.xml +EXTRA_DIST = yelp-marshal.list yelp-infos.xml yelp-print.c yelp-print.h install-exec-hook: rm -f $(DESTDIR)$(bindir)/gnome-help && \ diff --git a/src/Yelper.cpp b/src/Yelper.cpp deleted file mode 100644 index c05db149..00000000 --- a/src/Yelper.cpp +++ /dev/null @@ -1,335 +0,0 @@ -/* - * Copyright (C) 2000-2004 Marco Pesenti Gritti - * Copyright (C) 2003-2006 Christian Persch - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * $Id$ - */ - -#include <mozilla-config.h> -#include <config.h> - -#include <stdlib.h> -#include <unistd.h> - -#include <nsStringAPI.h> - -#include <gtkmozembed.h> -#include <gtkmozembed_internal.h> -#include <nsComponentManagerUtils.h> -#include <nsICommandManager.h> -#include <nsIDocShell.h> -#include <nsIDOMDocument.h> -#include <nsIDOMEventTarget.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 <nsISelectionController.h> -#include <nsITypeAheadFind.h> -#include <nsIWebBrowser.h> -#include <nsIWebBrowserPrint.h> -#include <nsIWebBrowserSetup.h> -#include <nsServiceManagerUtils.h> - -#ifndef HAVE_GECKO_1_9 -#include <nsIDocShell.h> -#include <nsIDocShellTreeItem.h> -#include <nsISelectionDisplay.h> -#include <nsISimpleEnumerator.h> -#include <nsITypeAheadFind.h> -#endif /* !HAVE_GECKO_1_9 */ - -#include "yelp-debug.h" -#include "yelp-gecko-services.h" - -#include "Yelper.h" - -#define NS_TYPEAHEADFIND_CONTRACTID "@mozilla.org/typeaheadfind;1" - -Yelper::Yelper (GtkMozEmbed *aEmbed) -: mInitialised(PR_FALSE) -, mSelectionAttention(PR_FALSE) -, mEmbed(aEmbed) -{ - debug_print (DB_DEBUG, "Yelper ctor [%p]\n", this); -} - -Yelper::~Yelper () -{ - debug_print (DB_DEBUG, "Yelper dtor [%p]\n", this); -} - -nsresult -Yelper::Init () -{ - if (mInitialised) return NS_OK; - - nsresult rv = NS_ERROR_FAILURE; - gtk_moz_embed_get_nsIWebBrowser (mEmbed, - getter_AddRefs (mWebBrowser)); - NS_ENSURE_TRUE (mWebBrowser, rv); - - nsCOMPtr<nsIWebBrowserSetup> setup (do_QueryInterface (mWebBrowser, &rv)); - NS_ENSURE_SUCCESS (rv, rv); - - setup->SetProperty (nsIWebBrowserSetup::SETUP_USE_GLOBAL_HISTORY, PR_FALSE); - - rv = mWebBrowser->GetContentDOMWindow (getter_AddRefs (mDOMWindow)); - NS_ENSURE_SUCCESS (rv, rv); - - /* This will instantiate an about:blank doc if necessary */ - nsCOMPtr<nsIDOMDocument> domDocument; - rv = mDOMWindow->GetDocument (getter_AddRefs (domDocument)); - NS_ENSURE_SUCCESS (rv, rv); - - mFinder = do_CreateInstance (NS_TYPEAHEADFIND_CONTRACTID, &rv); - NS_ENSURE_SUCCESS (rv, rv); - - nsCOMPtr<nsIDocShell> docShell (do_GetInterface (mWebBrowser, &rv)); - NS_ENSURE_SUCCESS (rv, rv); - - rv = mFinder->Init (docShell); - NS_ENSURE_SUCCESS (rv, rv); - -#ifdef HAVE_GECKO_1_9 -// mFinder->SetSelectionModeAndRepaint (nsISelectionController::SELECTION_ON); -#else - mFinder->SetFocusLinks (PR_TRUE); -#endif - - mInitialised = PR_TRUE; - - return NS_OK; -} - -void -Yelper::Destroy () -{ - mEmbed = nsnull; - mWebBrowser = nsnull; - mDOMWindow = nsnull; - mFinder = nsnull; - - mInitialised = PR_FALSE; -} - -void -Yelper::DoCommand (const char *aCommand) -{ - if (!mInitialised) return; - - nsCOMPtr<nsICommandManager> cmdManager (do_GetInterface (mWebBrowser)); - if (!cmdManager) return; - - cmdManager->DoCommand (aCommand, nsnull, nsnull); -} - -void -Yelper::SetFindProperties (const char *aSearchString, - PRBool aCaseSensitive, - PRBool aWrap) -{ - if (!mInitialised) return; - - mFinder->SetCaseSensitive (aCaseSensitive); - /* aWrap not supported for typeaheadfind - * search string is set in ::Find for typeaheadfind - */ -} - -PRBool -Yelper::Find (const char *aSearchString) -{ - NS_ENSURE_TRUE (aSearchString, PR_FALSE); - - if (!mInitialised) return PR_FALSE; - - SetSelectionAttention (PR_TRUE); - - nsresult rv; - PRUint16 found = nsITypeAheadFind::FIND_NOTFOUND; - rv = mFinder->Find (NS_ConvertUTF8toUTF16 (aSearchString), - PR_FALSE /* links only? */, - &found); - - return NS_SUCCEEDED (rv) && (found == nsITypeAheadFind::FIND_FOUND || found == nsITypeAheadFind::FIND_WRAPPED); -} - -PRBool -Yelper::FindAgain (PRBool aForward) -{ - if (!mInitialised) return PR_FALSE; - - SetSelectionAttention (PR_TRUE); - - nsresult rv; - PRUint16 found = nsITypeAheadFind::FIND_NOTFOUND; -#ifdef HAVE_GECKO_1_9 - rv = mFinder->FindAgain (!aForward, - PR_FALSE /* links only? */, - &found); -#else - if (aForward) { - rv = mFinder->FindNext (&found); - } - else { - rv = mFinder->FindPrevious (&found); - } -#endif /* HAVE_GECKO_1_9 */ - - return NS_SUCCEEDED (rv) && (found == nsITypeAheadFind::FIND_FOUND || found == nsITypeAheadFind::FIND_WRAPPED); -} - -void -Yelper::SetSelectionAttention (PRBool aAttention) -{ -#if 0 - if (aAttention == mSelectionAttention) return; - - mSelectionAttention = aAttention; - - NS_ENSURE_TRUE (mFinder, ); - - PRInt16 display; - if (aAttention) { - display = nsISelectionController::SELECTION_ATTENTION; - } - else { - display = nsISelectionController::SELECTION_ON; - } - -#ifdef HAVE_GECKO_1_9 - mFinder->SetSelectionModeAndRepaint (display); -#else - nsresult rv; - nsCOMPtr<nsIDocShell> shell (do_GetInterface (mWebBrowser, &rv)); - /* It's okay for this to fail, if the tab is closing, or if - * we weren't attached to any tab yet - */ - if (NS_FAILED (rv) || !shell) return; - - nsCOMPtr<nsISimpleEnumerator> enumerator; - rv = shell->GetDocShellEnumerator (nsIDocShellTreeItem::typeContent, - nsIDocShell::ENUMERATE_FORWARDS, - getter_AddRefs (enumerator)); - NS_ENSURE_SUCCESS (rv, ); - - PRBool hasMore = PR_FALSE; - while (NS_SUCCEEDED (enumerator->HasMoreElements (&hasMore)) && hasMore) { - nsCOMPtr<nsISupports> element; - enumerator->GetNext (getter_AddRefs (element)); - if (!element) continue; - - nsCOMPtr<nsISelectionDisplay> sd (do_GetInterface (element)); - if (!sd) continue; - - nsCOMPtr<nsISelectionController> controller (do_QueryInterface (sd)); - if (!controller) continue; - - controller->SetDisplaySelection (display); - } -#endif /* HAVE_GECKO_1_9 */ -#endif /* 0 */ -} - -void -Yelper::ProcessMouseEvent (void* aEvent) -{ - g_return_if_fail (aEvent != NULL); - - nsIDOMEvent *domEvent = static_cast<nsIDOMEvent*>(aEvent); - nsCOMPtr<nsIDOMMouseEvent> event (do_QueryInterface (domEvent)); - if (!event) return; - - PRUint16 button = 2; - event->GetButton (&button); - - /* Mozilla uses 2 as its right mouse button code */ - if (button != 2) return; - - nsCOMPtr<nsIDOMNSEvent> nsEvent (do_QueryInterface (event)); - if (!nsEvent) return; - - nsresult rv; - nsCOMPtr<nsIDOMEventTarget> originalTarget; - rv = nsEvent->GetOriginalTarget (getter_AddRefs (originalTarget)); - if (NS_FAILED (rv) || !originalTarget) return; - - nsCOMPtr <nsIDOMHTMLAnchorElement> anchor (do_QueryInterface (originalTarget)); - if (!anchor) return; - - nsString href; - rv = anchor->GetHref (href); - if (NS_FAILED (rv) || !href.Length ()) return; - - g_signal_emit_by_name (mEmbed, "popupmenu_requested", - NS_ConvertUTF16toUTF8 (href).get()); -} - -nsresult -Yelper::Print (YelpPrintInfo *print_info, PRBool preview, int *prev_pages) -{ - nsresult rv; - - nsCOMPtr<nsIWebBrowserPrint> print(do_GetInterface (mWebBrowser, &rv)); - NS_ENSURE_SUCCESS (rv, rv); - - nsCOMPtr<nsIPrintSettings> settings; - - rv = print->GetGlobalPrintSettings (getter_AddRefs (settings)); - NS_ENSURE_SUCCESS (rv, rv); - - rv = PrintListener::SetPrintSettings (print_info, preview, settings); - - NS_ENSURE_SUCCESS (rv, rv); - - nsCOMPtr<PrintListener> listener = new PrintListener (print_info, print); - - if (!preview) - rv = print->Print (settings, listener); - else { - rv = print->PrintPreview (settings, mDOMWindow, nsnull); - rv |= print->GetPrintPreviewNumPages (prev_pages); - } - return rv; - -} - -nsresult -Yelper::PrintPreviewNavigate (int page_no) -{ - nsresult rv; - nsCOMPtr<nsIWebBrowserPrint> print(do_GetInterface (mWebBrowser, &rv)); - NS_ENSURE_SUCCESS (rv, rv); - - return print->PrintPreviewNavigate (0, page_no); -} - -nsresult -Yelper::PrintPreviewEnd () -{ - nsresult rv; - nsCOMPtr<nsIWebBrowserPrint> print(do_GetInterface (mWebBrowser, &rv)); - NS_ENSURE_SUCCESS (rv, rv); - - return print->ExitPrintPreview (); - -} diff --git a/src/Yelper.h b/src/Yelper.h deleted file mode 100644 index 50c86e13..00000000 --- a/src/Yelper.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (C) 2000-2004 Marco Pesenti Gritti - * Copyright (C) 2003-2005 Christian Persch - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * $Id$ - */ - -#ifndef __YELPER_H__ -#define __YELPER_H__ - -#include <gtkmozembed.h> -#include <nsCOMPtr.h> - -#include "yelp-print.h" - -class nsIDOMWindow; -class nsITypeAheadFind; -class nsIWebBrowser; - -class Yelper -{ -public: - Yelper (GtkMozEmbed *aEmbed); - ~Yelper (); - - nsresult Init (); - void Destroy (); - - void DoCommand (const char *aCommand); - - void SetFindProperties (const char *aSearchString, - PRBool aCaseSensitive, - PRBool aWrap); - PRBool Find (const char *aSearchString); - PRBool FindAgain (PRBool aForward); - void SetSelectionAttention (PRBool aSelectionAttention); - - void ProcessMouseEvent (void *aEvent); - - nsresult Print (YelpPrintInfo *print_info, PRBool preview, - int *prev_pages); - nsresult PrintPreviewNavigate (int page_no); - nsresult PrintPreviewEnd (); - -private: - PRPackedBool mInitialised; - PRPackedBool mSelectionAttention; - - GtkMozEmbed *mEmbed; - nsCOMPtr<nsIWebBrowser> mWebBrowser; - nsCOMPtr<nsIDOMWindow> mDOMWindow; - nsCOMPtr<nsITypeAheadFind> mFinder; -}; - -#endif /* !__YELPER_H__ */ diff --git a/src/yelp-gecko-services.cpp b/src/yelp-gecko-services.cpp deleted file mode 100644 index 1ee3a229..00000000 --- a/src/yelp-gecko-services.cpp +++ /dev/null @@ -1,464 +0,0 @@ -/* - * Copyright (C) 2002 Philip Langdale - * Copyright (C) 2003-2004 Christian Persch - * Copyright (C) 2005 Juerg Billeter - * Copyright (C) 2005 Don Scorgie <Don@Scorgie.org> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - */ - -#include <mozilla-config.h> -#include <config.h> - -#include <stdlib.h> -#include <unistd.h> - -#include <nsStringAPI.h> - -#include <nsCOMPtr.h> -#include <nsIComponentManager.h> -#include <nsComponentManagerUtils.h> -#include <nsIComponentRegistrar.h> -#include <nsIGenericFactory.h> -#include <nsILocalFile.h> -#include <nsIPrintSettings.h> -#include <nsServiceManagerUtils.h> - -#ifdef XPCOM_GLUE -#include <nsXPCOMGlue.h> -#else -#include <nsXPCOM.h> -#endif - -#include "yelp-gecko-services.h" - -/* Implementation file */ -NS_IMPL_ISUPPORTS3(GPrintingPromptService, nsIPrintingPromptService, nsIWebProgressListener, nsIPrintProgressParams) - - GPrintingPromptService::GPrintingPromptService() -{ - mPrintInfo = NULL; -} - -GPrintingPromptService::~GPrintingPromptService() -{ - if (mPrintInfo != NULL) - { - yelp_print_info_free (mPrintInfo); - } -} - -/* void showPrintDialog (in nsIDOMWindow parent, in nsIWebBrowserPrint webBrowserPrint, in nsIPrintSettings printSettings); */ -NS_IMETHODIMP GPrintingPromptService::ShowPrintDialog(nsIDOMWindow *parent, nsIWebBrowserPrint *webBrowserPrint, nsIPrintSettings *printSettings) -{ - return NS_OK; - -} - -/* void showProgress (in nsIDOMWindow parent, in nsIWebBrowserPrint webBrowserPrint, in nsIPrintSettings printSettings, in nsIObserver openDialogObserver, in boolean isForPrinting, out nsIWebProgressListener webProgressListener, out nsIPrintProgressParams printProgressParams, out boolean notifyOnOpen); */ -NS_IMETHODIMP GPrintingPromptService::ShowProgress(nsIDOMWindow *parent, nsIWebBrowserPrint *webBrowserPrint, nsIPrintSettings *printSettings, nsIObserver *openDialogObserver, PRBool isForPrinting, nsIWebProgressListener **webProgressListener, nsIPrintProgressParams **printProgressParams, PRBool *notifyOnOpen) -{ - return NS_OK; -} - -/* void showPageSetup (in nsIDOMWindow parent, in nsIPrintSettings printSettings, in nsIObserver printObserver); */ -NS_IMETHODIMP GPrintingPromptService::ShowPageSetup(nsIDOMWindow *parent, nsIPrintSettings *printSettings, - nsIObserver *printObserver) -{ - return NS_OK; -} - -/* void showPrinterProperties (in nsIDOMWindow parent, in wstring printerName, in nsIPrintSettings printSettings); */ -NS_IMETHODIMP GPrintingPromptService::ShowPrinterProperties(nsIDOMWindow *parent, const PRUnichar *printerName, nsIPrintSettings *printSettings) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - - -/* void onStateChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in unsigned long aStateFlags, in nsresult aStatus); */ -NS_IMETHODIMP GPrintingPromptService::OnStateChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, PRUint32 aStateFlags, nsresult aStatus) -{ - return NS_OK; -} - -/* void onProgressChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in long aCurSelfProgress, in long aMaxSelfProgress, in long aCurTotalProgress, in long aMaxTotalProgress); */ -NS_IMETHODIMP GPrintingPromptService::OnProgressChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, PRInt32 aCurSelfProgress, PRInt32 aMaxSelfProgress, PRInt32 aCurTotalProgress, PRInt32 aMaxTotalProgress) -{ - return NS_OK; -} - -/* void onLocationChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in nsIURI location); */ -NS_IMETHODIMP GPrintingPromptService::OnLocationChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, nsIURI *location) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -/* void onStatusChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in nsresult aStatus, in wstring aMessage); */ -NS_IMETHODIMP GPrintingPromptService::OnStatusChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, nsresult aStatus, const PRUnichar *aMessage) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -/* void onSecurityChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in unsigned long state); */ -NS_IMETHODIMP GPrintingPromptService::OnSecurityChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, PRUint32 state) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -/* attribute wstring docTitle; */ -NS_IMETHODIMP GPrintingPromptService::GetDocTitle(PRUnichar * *aDocTitle) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} -NS_IMETHODIMP GPrintingPromptService::SetDocTitle(const PRUnichar * aDocTitle) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -/* attribute wstring docURL; */ -NS_IMETHODIMP GPrintingPromptService::GetDocURL(PRUnichar * *aDocURL) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} -NS_IMETHODIMP GPrintingPromptService::SetDocURL(const PRUnichar * aDocURL) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMPL_ISUPPORTS1(PrintListener, nsIWebProgressListener) - - PrintListener::PrintListener (YelpPrintInfo *in, nsIWebBrowserPrint *p) -{ - info = in; - print = p; - cancel_happened = FALSE; - /*NULL*/ - -} - -PrintListener::~PrintListener () -{ - /*NULL*/ -} - -/* void onStateChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in unsigned long aStateFlags, in nsresult aStatus); */ -NS_IMETHODIMP PrintListener::OnStateChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, PRUint32 aStateFlags, nsresult aStatus) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -/* void onProgressChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in long aCurSelfProgress, in long aMaxSelfProgress, in long aCurTotalProgress, in long aMaxTotalProgress); */ -NS_IMETHODIMP PrintListener::OnProgressChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, PRInt32 aCurSelfProgress, PRInt32 aMaxSelfProgress, PRInt32 aCurTotalProgress, PRInt32 aMaxTotalProgress) -{ - yelp_print_update_progress (info, - (1.0 * aCurTotalProgress) / (aMaxTotalProgress * 1.0)); - - if (info->cancelled && !cancel_happened) { - /* This doesn't seem to actually cancel anything. - * therefore, the best course of action is to ignore it - * until we've finished printing to the file - * and then free it - Mozilla bug #253926 - */ - print->Cancel(); - cancel_happened = TRUE; - } - if (aCurTotalProgress == 100 && aMaxTotalProgress == 100) /* 100% finished */ - yelp_print_moz_finished (info); - return NS_OK; -} - -/* void onLocationChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in nsIURI location); */ -NS_IMETHODIMP PrintListener::OnLocationChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, nsIURI *location) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -/* void onStatusChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in nsresult aStatus, in wstring aMessage); */ -NS_IMETHODIMP PrintListener::OnStatusChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, nsresult aStatus, const PRUnichar *aMessage) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -/* void onSecurityChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in unsigned long state); */ -NS_IMETHODIMP PrintListener::OnSecurityChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, PRUint32 state) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -/* static functions */ - -/* static */nsresult -PrintListener::SetPrintSettings (YelpPrintInfo *settings, - PRBool preview, - nsIPrintSettings * target) -{ - nsString tmp; - - /* This is a bastard mix of old Yelp stuff, old epiphany stuff - * and new epiphany stuff. It does work though. - */ - /* Initialisation */ - target->SetIsInitializedFromPrinter (PR_FALSE); - target->SetIsInitializedFromPrefs (PR_FALSE); - target->SetPrintSilent (PR_FALSE); - target->SetShowPrintProgress (PR_TRUE); - target->SetNumCopies (1); - - /* We always print PS to a file and then hand that off to gtk-print */ - target->SetPrinterName (NS_LITERAL_STRING ("PostScript/default").get()); - target->SetPrintToFile (PR_FALSE); - - /* This is the time between printing each page, in ms. - * It 'gives the user more time to press cancel' ! - * We don't want any of this nonsense, so set this to a low value, - * just enough to update the print dialogue. - */ - target->SetPrintPageDelay (50); - - if (!preview) { - gchar *base; - const gchar *temp_dir; - gint fd; - GtkPageSet pageSet; - GtkPrintPages printPages; - - target->SetPrintToFile (PR_TRUE); - - 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()); - - pageSet = gtk_print_settings_get_page_set (settings->config); - target->SetPrintOptions (nsIPrintSettings::kPrintEvenPages, - pageSet != GTK_PAGE_SET_ODD); - target->SetPrintOptions (nsIPrintSettings::kPrintEvenPages, - pageSet != GTK_PAGE_SET_EVEN); - - target->SetPrintReversed (gtk_print_settings_get_reverse (settings->config)); - - printPages = gtk_print_settings_get_print_pages (settings->config); - switch (printPages) { - case GTK_PRINT_PAGES_RANGES: { - int numRanges = 0; - GtkPageRange *pageRanges = gtk_print_settings_get_page_ranges (settings->config, &numRanges); - if (numRanges > 0) { - /* FIXME: We can only support one range, - * For now, ignore more ranges */ - target->SetPrintRange (nsIPrintSettings::kRangeSpecifiedPageRange); - target->SetStartPageRange (pageRanges[0].start+1); - target->SetEndPageRange (pageRanges[0].end+1); - - g_free (pageRanges); - } - break; - } - case GTK_PRINT_PAGES_CURRENT: - /* not supported, fall through */ - case GTK_PRINT_PAGES_ALL: - target->SetPrintRange (nsIPrintSettings::kRangeAllPages); - break; - /* FIXME: we need some custom ranges here, "Selection" and - * "Focused Frame" */ - } - } else { - target->SetPrintOptions (nsIPrintSettings::kPrintEvenPages, PR_TRUE); - target->SetPrintOptions (nsIPrintSettings::kPrintEvenPages, PR_TRUE); - target->SetPrintReversed (PR_FALSE); - target->SetPrintRange (nsIPrintSettings::kRangeAllPages); - } - - switch (gtk_print_settings_get_orientation (settings->config)) { - case GTK_PAGE_ORIENTATION_PORTRAIT: - case GTK_PAGE_ORIENTATION_REVERSE_PORTRAIT: /* not supported */ - target->SetOrientation (nsIPrintSettings::kPortraitOrientation); - break; - case GTK_PAGE_ORIENTATION_LANDSCAPE: - case GTK_PAGE_ORIENTATION_REVERSE_LANDSCAPE: /* not supported */ - target->SetOrientation (nsIPrintSettings::kLandscapeOrientation); - break; - } - - target->SetPrintInColor (gtk_print_settings_get_use_color (settings->config)); - - target->SetPaperSizeUnit(nsIPrintSettings::kPaperSizeMillimeters); - - GtkPaperSize *paperSize = gtk_page_setup_get_paper_size (settings->setup); - if (!paperSize) { - g_warning ("Paper size not set. Aborting!\n"); - return NS_ERROR_FAILURE; - } - - target->SetPaperSizeType (nsIPrintSettings::kPaperSizeDefined); - target->SetPaperWidth (gtk_paper_size_get_width (paperSize, GTK_UNIT_MM)); - target->SetPaperHeight (gtk_paper_size_get_height (paperSize, GTK_UNIT_MM)); - -#ifdef HAVE_GECKO_1_9 - target->SetPaperName (NS_ConvertUTF8toUTF16 (gtk_paper_size_get_name (paperSize)).get ()); -#else - { - /* 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*! - */ - static const struct { - const char gtkPaperName[13]; - const char mozPaperName[10]; - } paperTable [] = { - { GTK_PAPER_NAME_A5, "A5" }, - { GTK_PAPER_NAME_A4, "A4" }, - { GTK_PAPER_NAME_A3, "A3" }, - { GTK_PAPER_NAME_LETTER, "Letter" }, - { GTK_PAPER_NAME_LEGAL, "Legal" }, - { GTK_PAPER_NAME_EXECUTIVE, "Executive" }, - }; - - const char *paperName = gtk_paper_size_get_name (paperSize); - - PRUint32 i; - for (i = 0; i < G_N_ELEMENTS (paperTable); i++) { - if (g_ascii_strcasecmp (paperTable[i].gtkPaperName, paperName) == 0) { - paperName = paperTable[i].mozPaperName; - break; - } - } - if (i == G_N_ELEMENTS (paperTable)) { - /* Not in table, fall back to A4 */ - g_warning ("Unknown paper name '%s', falling back to A4", - gtk_paper_size_get_name (paperSize)); - paperName = paperTable[1].mozPaperName; - } - - target->SetPaperName (NS_ConvertUTF8toUTF16 (paperName).get ()); - } -#endif /* !HAVE_GECKO_1_9 */ - - /* Sucky mozilla wants margins in inch! */ - target->SetMarginTop (gtk_page_setup_get_top_margin (settings->setup, GTK_UNIT_INCH)); - target->SetMarginBottom (gtk_page_setup_get_bottom_margin (settings->setup, GTK_UNIT_INCH)); - target->SetMarginLeft (gtk_page_setup_get_left_margin (settings->setup, GTK_UNIT_INCH)); - target->SetMarginRight (gtk_page_setup_get_right_margin (settings->setup, GTK_UNIT_INCH)); - - - 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()); - - /* FIXME I think this is the right default, but this prevents the user - * from cancelling the print immediately, see the stupid comment in - * nsPrintEngine: - * "DO NOT allow the print job to be cancelled if it is Print FrameAsIs - * because it is only printing one page." - * We work around this by just not sending the job to the printer then. - */ - target->SetPrintFrameType(nsIPrintSettings::kFramesAsIs); /* FIXME setting */ - target->SetPrintFrameTypeUsage (nsIPrintSettings::kUseSettingWhenPossible); - - target->SetScaling (gtk_print_settings_get_scale (settings->config) / 100.0); - - /* FIXME: What do these do? Need to learn to fix them properly - * For now, leave at Epiphany type defaults - */ - - target->SetShrinkToFit (PR_FALSE); /* FIXME setting */ - - target->SetPrintBGColors (PR_FALSE); /* FIXME setting */ - target->SetPrintBGImages (PR_FALSE); /* FIXME setting */ - - /* target->SetPlexName (LITERAL ("default")); */ - /* target->SetColorspace (LITERAL ("default")); */ - /* target->SetResolutionName (LITERAL ("default")); */ - /* target->SetDownloadFonts (PR_TRUE); */ - - return NS_OK; - -}; - -/* component registration */ - -NS_GENERIC_FACTORY_CONSTRUCTOR(GPrintingPromptService) - -static const nsModuleComponentInfo sAppComps[] = { - { - G_PRINTINGPROMPTSERVICE_CLASSNAME, - G_PRINTINGPROMPTSERVICE_CID, - G_PRINTINGPROMPTSERVICE_CONTRACTID, - GPrintingPromptServiceConstructor - }, -}; - -void -yelp_register_printing () -{ - nsresult rv; - nsCOMPtr<nsIComponentRegistrar> cr; - rv = NS_GetComponentRegistrar(getter_AddRefs(cr)); - NS_ENSURE_SUCCESS (rv, ); - - nsCOMPtr<nsIComponentManager> cm; - rv = NS_GetComponentManager (getter_AddRefs (cm)); - NS_ENSURE_SUCCESS (rv, ); - - nsCOMPtr<nsIGenericFactory> componentFactory; - componentFactory = do_CreateInstance ("@mozilla.org/generic-factory;1", &rv); - - if (NS_FAILED(rv) || !componentFactory) - { - g_warning ("Failed to make a factory for %s\n", sAppComps[0].mDescription); - return; - } - - componentFactory->SetComponentInfo(&(sAppComps[0])); - - rv = cr->RegisterFactory(sAppComps[0].mCID, - sAppComps[0].mDescription, - sAppComps[0].mContractID, - componentFactory); - if (NS_FAILED(rv)) - { - g_warning ("Failed to register %s\n", sAppComps[0].mDescription); - } - -} diff --git a/src/yelp-gecko-services.h b/src/yelp-gecko-services.h deleted file mode 100644 index c9a8dca6..00000000 --- a/src/yelp-gecko-services.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (C) 2000 Marco Pesenti Gritti - * Copyright (C) 2005 Don Scorgie <Don@Scorgie.org> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - */ - -#ifndef __YELP_GECKO_SERVICES_H -#define __YELP_GECKO_SERVICES_H - -#include <nsIPrintingPromptService.h> -#include <nsIPrintProgressParams.h> -#include <nsIWebProgressListener.h> - -#include "yelp-print.h" - -#define G_PRINTINGPROMPTSERVICE_CID \ - { /* dbf438d3-5f62-4978-a700-6fc39447477c */ \ - 0xdbf438d3, 0x5f62, 0x4978, \ - { 0xa7, 0x00, 0x6f, 0xc3, 0x94, 0x47, 0x47, 0x7c } } - -#define G_PRINTINGPROMPTSERVICE_CLASSNAME "Yelps Printing Prompt Service" -#define G_PRINTINGPROMPTSERVICE_CONTRACTID "@mozilla.org/embedcomp/printingprompt-service;1" - -void yelp_register_printing (); - -/* Overwriting PrintPromptService makes the default mozilla print dialog - * not appear. We already have our print dialog shown - */ -class GPrintingPromptService : public nsIPrintingPromptService, nsIWebProgressListener, nsIPrintProgressParams -{ -public: - NS_DECL_ISUPPORTS - NS_DECL_NSIPRINTINGPROMPTSERVICE - NS_DECL_NSIWEBPROGRESSLISTENER - NS_DECL_NSIPRINTPROGRESSPARAMS - - GPrintingPromptService(); - virtual ~GPrintingPromptService(); - -protected: - YelpPrintInfo *mPrintInfo; -}; - -/* The PrintListener allows us to update the progress bars. - * Its not much help, but better than nothing - */ -class PrintListener : public nsIWebProgressListener -{ -public: - PrintListener (YelpPrintInfo *in, nsIWebBrowserPrint *p); - virtual ~PrintListener (); - - NS_DECL_ISUPPORTS - NS_DECL_NSIWEBPROGRESSLISTENER - - static nsresult SetPrintSettings (YelpPrintInfo *settings, PRBool preview, - 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 deleted file mode 100644 index 42bba2e3..00000000 --- a/src/yelp-gecko-utils.cpp +++ /dev/null @@ -1,271 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Copyright (C) 2004 Marco Pesenti Gritti - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Marco Pesenti Gritti <marco@gnome.org> - */ - -#include "mozilla-config.h" -#include "config.h" - -#include <stdlib.h> - -#include <nsStringAPI.h> - -#ifdef HAVE_GECKO_1_9 -#include <gtkmozembed_glue.cpp> -#endif - -#include <gtkmozembed.h> -#include <gtkmozembed_internal.h> -#include <nsCOMPtr.h> -#include <nsIPrefService.h> -#include <nsIServiceManager.h> -#include <nsServiceManagerUtils.h> - -#include "yelp-gecko-services.h" - -#include "yelp-gecko-utils.h" - -static nsIPrefBranch* gPrefBranch; - -static const char *font_languages[] = { - "x-western", - "ar", - "el", - "he", - "ja", - "ko", - "th", - "tr", - "x-armn", - "x-baltic", - "x-beng", - "x-cans", - "x-central-euro", - "x-cyrillic", - "x-devanagari", - "x-ethi", - "x-geor", - "x-gujr", - "x-guru", - "x-khmr", - "x-mlym", - "x-tamil", - "x-unicode", - "zh-CN", - "zh-HK", - "zh-TW" -}; - -static gboolean -yelp_util_split_font_string (const gchar *font_name, gchar **name, gint *size) -{ - PangoFontDescription *desc; - PangoFontMask mask = (PangoFontMask) (PANGO_FONT_MASK_FAMILY | PANGO_FONT_MASK_SIZE); - gboolean retval = FALSE; - - if (!font_name) return FALSE; - - desc = pango_font_description_from_string (font_name); - if (!desc) return FALSE; - - if ((pango_font_description_get_set_fields (desc) & mask) == mask) { - *size = PANGO_PIXELS (pango_font_description_get_size (desc)); - *name = g_strdup (pango_font_description_get_family (desc)); - retval = TRUE; - } - - pango_font_description_free (desc); - - return retval; -} - -static gboolean -gecko_prefs_set_bool (const gchar *key, gboolean value) -{ - NS_ENSURE_TRUE (gPrefBranch, FALSE); - - return NS_SUCCEEDED(gPrefBranch->SetBoolPref (key, value)); -} - -static gboolean -gecko_prefs_set_string (const gchar *key, const gchar *value) -{ - NS_ENSURE_TRUE (gPrefBranch, FALSE); - - return NS_SUCCEEDED(gPrefBranch->SetCharPref (key, value)); -} - -static gboolean -gecko_prefs_set_int (const gchar *key, gint value) -{ - NS_ENSURE_TRUE (gPrefBranch, FALSE); - - return NS_SUCCEEDED(gPrefBranch->SetIntPref (key, value)); -} - -extern "C" void -yelp_gecko_set_caret (gboolean value) -{ - gecko_prefs_set_bool ("accessibility.browsewithcaret", value); -} - -extern "C" void -yelp_gecko_set_color (YelpColorType type, const gchar *color) -{ - gecko_prefs_set_bool ("browser.display.use_system_colors", FALSE); - switch (type) { - case YELP_COLOR_FG: - gecko_prefs_set_string ("browser.display.foreground_color", - color); - break; - case YELP_COLOR_BG: - gecko_prefs_set_string ("browser.display.background_color", - color); - break; - case YELP_COLOR_ANCHOR: - gecko_prefs_set_string ("browser.anchor_color", - color); - break; - default: - break; - } -} - -extern "C" void -yelp_gecko_set_font (YelpFontType font_type, const gchar *fontname) -{ - char *name = NULL; - char pref[128]; - int size = 0; - guint i; - - if (!yelp_util_split_font_string (fontname, &name, &size)) { - g_free (name); - return; - } - - gecko_prefs_set_string ("font.size.unit", "pt"); - - switch (font_type) { - case YELP_FONT_VARIABLE: - for (i = 0; i < G_N_ELEMENTS (font_languages); ++i) { - g_snprintf (pref, sizeof (pref), - "font.name.variable.%s", - font_languages[i]); - gecko_prefs_set_string (pref, name); - - g_snprintf (pref, sizeof (pref), - "font.size.variable.%s", - font_languages[i]); - gecko_prefs_set_int (pref, size); - - g_snprintf (pref, sizeof (pref), - "font.minimum-size.%s", - font_languages[i]); - gecko_prefs_set_int (pref, 8); - } - break; - case YELP_FONT_FIXED: - for (i = 0; i < G_N_ELEMENTS (font_languages); ++i) { - g_snprintf (pref, sizeof (pref), - "font.name.fixed.%s", - font_languages[i]); - gecko_prefs_set_string (pref, name); - - g_snprintf (pref, sizeof (pref), - "font.size.fixed.%s", - font_languages[i]); - gecko_prefs_set_int (pref, size); - } - - break; - default: - break; - } - - g_free (name); -} - -extern "C" gboolean -yelp_gecko_init (void) -{ -#ifdef HAVE_GECKO_1_9 - NS_LogInit (); -#endif - - nsresult rv; -#ifdef XPCOM_GLUE - static const GREVersionRange greVersion = { - "1.9a", PR_TRUE, - "2", PR_TRUE - }; - char xpcomLocation[PATH_MAX]; - rv = GRE_GetGREPathWithProperties(&greVersion, 1, nsnull, 0, xpcomLocation, sizeof (xpcomLocation)); - NS_ENSURE_SUCCESS (rv, FALSE); - - // Startup the XPCOM Glue that links us up with XPCOM. - rv = XPCOMGlueStartup(xpcomLocation); - NS_ENSURE_SUCCESS (rv, FALSE); - - rv = GTKEmbedGlueStartup(); - NS_ENSURE_SUCCESS (rv, FALSE); - - rv = GTKEmbedGlueStartupInternal(); - NS_ENSURE_SUCCESS (rv, FALSE); - - char *lastSlash = strrchr(xpcomLocation, '/'); - if (lastSlash) - *lastSlash = '\0'; - - gtk_moz_embed_set_path(xpcomLocation); - -#else -#ifdef HAVE_GECKO_1_9 - gtk_moz_embed_set_path (MOZILLA_HOME); -#else - gtk_moz_embed_set_comp_path (MOZILLA_HOME); -#endif -#endif // XPCOM_GLUE - - gtk_moz_embed_push_startup (); - - yelp_register_printing (); - - nsCOMPtr<nsIPrefService> prefService (do_GetService (NS_PREFSERVICE_CONTRACTID, &rv)); - NS_ENSURE_SUCCESS (rv, FALSE); - - rv = CallQueryInterface (prefService, &gPrefBranch); - NS_ENSURE_SUCCESS (rv, FALSE); - - return TRUE; -} - -extern "C" void -yelp_gecko_shutdown (void) -{ - NS_IF_RELEASE (gPrefBranch); - gPrefBranch = nsnull; - - gtk_moz_embed_pop_startup (); - -#ifdef HAVE_GECKO_1_9 - NS_LogTerm (); -#endif -} diff --git a/src/yelp-gecko-utils.h b/src/yelp-gecko-utils.h deleted file mode 100644 index e49b4066..00000000 --- a/src/yelp-gecko-utils.h +++ /dev/null @@ -1,41 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Copyright (C) 2004 Marco Pesenti Gritti - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Marco Pesenti Gritti <marco@gnome.org> - */ - -#ifndef __YELP_GECKO_UTILS_H__ -#define __YELP_GECKO_UTILS_H__ - -#include "yelp-settings.h" - -G_BEGIN_DECLS - -void yelp_gecko_set_caret (gboolean value); -void yelp_gecko_set_color (YelpColorType type, - const gchar *color); -void yelp_gecko_set_font (YelpFontType font_type, - const gchar *fontname); -gboolean yelp_gecko_init (void); -void yelp_gecko_shutdown (void); - -G_END_DECLS - -#endif /* __YELP_GECKO_UTILS_H__ */ - diff --git a/src/yelp-html.cpp b/src/yelp-html.c index aa9371da..fae92748 100644 --- a/src/yelp-html.cpp +++ b/src/yelp-html.c @@ -21,17 +21,15 @@ * Author: Marco Pesenti Gritti <marco@gnome.org> */ -#include <mozilla-config.h> #include <config.h> - -#include <string.h> - -#include "yelp-gecko-services.h" -#include "yelp-gecko-utils.h" #include "yelp-marshal.h" #include "yelp-settings.h" -#include "Yelper.h" +#include <string.h> +#include <webkit/webkitwebframe.h> +#include <webkit/webkitnetworkrequest.h> +#include <webkit/webkitwebview.h> +#include <webkit/webkitwebsettings.h> #include "yelp-html.h" #include "yelp-debug.h" @@ -40,16 +38,19 @@ #define YELP_HTML_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), YELP_TYPE_HTML, YelpHtmlPriv)) struct _YelpHtmlPriv { - Yelper *yelper; + GString *content; + gchar *mime; + gchar *find_string; + gboolean initialised; gchar *base_uri; gchar *anchor; gboolean frames_enabled; guint timeout; }; -static void html_set_fonts (void); -static void html_set_colors (void); -static void html_set_a11y (void); +static void html_set_fonts (YelpHtml *html); +static void html_set_colors (YelpHtml *html); +static void html_set_a11y (YelpHtml *html); enum { URI_SELECTED, @@ -63,56 +64,58 @@ static guint signals[LAST_SIGNAL] = { 0 }; static GObjectClass *parent_class = NULL; -static void -html_title (GtkMozEmbed *embed) -{ - YelpHtml *html = YELP_HTML (embed); - char *new_title; +static gboolean +html_open_uri (WebKitWebView* view, + WebKitWebFrame* web_frame, + WebKitNetworkRequest* req, + WebKitWebNavigationAction* action, + WebKitWebPolicyDecision* decision, + gpointer data) +{ + const gchar *uri = webkit_network_request_get_uri (req); + WebKitNavigationResponse resp = WEBKIT_NAVIGATION_RESPONSE_IGNORE; + YelpHtml *html = YELP_HTML (view); + gboolean block_load; + gchar *real_uri; - new_title = gtk_moz_embed_get_title (embed); + debug_print (DB_FUNCTION, "entering\n"); + debug_print (DB_ARG, " uri = \"%s\"\n", uri); - if (new_title && *new_title != '\0') - { - g_signal_emit (html, signals[TITLE_CHANGED], 0, new_title); - g_free (new_title); + /* Only emit our signals on clicks */ + if (webkit_web_navigation_action_get_reason (action) != WEBKIT_WEB_NAVIGATION_REASON_LINK_CLICKED) { + webkit_web_policy_decision_use (decision); + return TRUE; } -} -static gint -html_dom_mouse_down (GtkMozEmbed *embed, gpointer dom_event) -{ - YelpHtml *html = YELP_HTML (embed); - - html->priv->yelper->ProcessMouseEvent (dom_event); + real_uri = g_strdup (uri); - return FALSE; -} + /* If we got an URI with an anchor, that means we got to a + * reference; we want to get what comes after #, and replace what + * is after ? in the base URI we have + */ + if (g_str_has_prefix (uri, html->priv->base_uri)) { + gint length = strlen (html->priv->base_uri); -static gint -html_open_uri (GtkMozEmbed *embed, const gchar *uri) -{ - YelpHtml *html = YELP_HTML (embed); - gboolean block_load = FALSE; + if (uri[length] == '#') { + gchar *question_mark = g_strrstr (real_uri, "?"); + gchar *tmp = real_uri; - g_return_val_if_fail (uri != NULL, FALSE); + *question_mark = '\0'; + real_uri = g_strdup_printf ("%s?%s", tmp, uri + length + 1); - debug_print (DB_FUNCTION, "entering\n"); - debug_print (DB_ARG, " uri = \"%s\"\n", uri); - - if (g_str_equal (html->priv->base_uri, uri)) { - /* As of xulrunner 1.6.2, open_uri is called in response - to the base URI we pass in. - */ - return FALSE; + g_free (tmp); + } } if (!html->priv->frames_enabled) { - g_signal_emit (html, signals[URI_SELECTED], 0, uri, FALSE); - block_load = TRUE; + g_signal_emit (html, signals[URI_SELECTED], 0, real_uri, FALSE); } else { - g_signal_emit (html, signals[FRAME_SELECTED], 0, uri, FALSE, &block_load); + g_signal_emit (html, signals[FRAME_SELECTED], 0, real_uri, FALSE, &block_load); } - return block_load; + + g_free (real_uri); + webkit_web_policy_decision_ignore (decision); + return TRUE; } #ifdef HAVE_GECKO_1_9 @@ -156,23 +159,6 @@ html_realize (GtkWidget *widget) GTK_WIDGET_CLASS (parent_class)->realize (widget); - nsresult rv; - rv = html->priv->yelper->Init (); - - if (NS_FAILED (rv)) { - g_warning ("Yelper initialization failed for %p\n", (void*) html); - } - -#ifdef HAVE_GECKO_1_9 - if (!gail_get_root_restored) { - gail_get_root_restored = TRUE; - if (atk_class && gail_get_root) { - gtk_widget_get_accessible (widget); - atk_class->get_root = gail_get_root; - } - } -#endif - } static void @@ -186,30 +172,35 @@ html_init (YelpHtml *html) priv->base_uri = NULL; priv->anchor = NULL; priv->timeout = 0; + priv->content = NULL; + priv->mime = NULL; + priv->initialised = FALSE; - priv->yelper = new Yelper (GTK_MOZ_EMBED (html)); klass = YELP_HTML_GET_CLASS (html); if (!klass->font_handler) { klass->font_handler = yelp_settings_notify_add (YELP_SETTINGS_INFO_FONTS, (GHookFunc) html_set_fonts, - NULL); - html_set_fonts (); + html); + html_set_fonts (html); } if (!klass->color_handler) { klass->color_handler = yelp_settings_notify_add (YELP_SETTINGS_INFO_COLOR, (GHookFunc) html_set_colors, - NULL); - html_set_colors (); + html); + html_set_colors (html); } if (!klass->a11y_handler) { klass->a11y_handler = yelp_settings_notify_add (YELP_SETTINGS_INFO_A11Y, (GHookFunc) html_set_a11y, - NULL); - html_set_a11y (); + html); + html_set_a11y (html); } + + g_signal_connect (html, "navigation-policy-decision-requested", + G_CALLBACK (html_open_uri), NULL); } static void @@ -217,8 +208,6 @@ html_dispose (GObject *object) { YelpHtml *html = YELP_HTML (object); - html->priv->yelper->Destroy (); - parent_class->dispose (object); } @@ -228,13 +217,14 @@ html_finalize (GObject *object) YelpHtml *html = YELP_HTML (object); YelpHtmlPriv *priv = html->priv; - delete priv->yelper; if (priv->timeout) g_source_remove (priv->timeout); g_free (priv->base_uri); g_free (priv->anchor); + g_signal_handlers_disconnect_by_func (html, html_open_uri, NULL); + parent_class->finalize (object); } @@ -243,7 +233,7 @@ html_class_init (YelpHtmlClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - GtkMozEmbedClass *moz_embed_class = GTK_MOZ_EMBED_CLASS (klass); + WebKitWebViewClass* wc_class = WEBKIT_WEB_VIEW_CLASS (klass); parent_class = (GObjectClass *) g_type_class_peek_parent (klass); @@ -252,9 +242,6 @@ html_class_init (YelpHtmlClass *klass) widget_class->realize = html_realize; - moz_embed_class->title = html_title; - moz_embed_class->dom_mouse_down = html_dom_mouse_down; - moz_embed_class->open_uri = html_open_uri; klass->font_handler = 0; klass->color_handler = 0; @@ -282,16 +269,6 @@ html_class_init (YelpHtmlClass *klass) G_TYPE_BOOLEAN, 2, G_TYPE_POINTER, G_TYPE_BOOLEAN); - signals[TITLE_CHANGED] = - g_signal_new ("title_changed", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (YelpHtmlClass, - title_changed), - NULL, NULL, - g_cclosure_marshal_VOID__STRING, - G_TYPE_NONE, - 1, G_TYPE_STRING); signals[POPUPMENU_REQUESTED] = g_signal_new ("popupmenu_requested", @@ -325,7 +302,7 @@ yelp_html_get_type (void) (GInstanceInitFunc) html_init, }; - type = g_type_register_static (GTK_TYPE_MOZ_EMBED, + type = g_type_register_static (WEBKIT_TYPE_WEB_VIEW, "YelpHtml", &info, (GTypeFlags) 0); } @@ -358,7 +335,10 @@ yelp_html_set_base_uri (YelpHtml *html, const gchar *uri) if (priv->base_uri) g_free (priv->base_uri); - priv->base_uri = g_strdup (uri); + if (uri[0] == '/') + priv->base_uri = g_strdup_printf ("file://%s", uri); + else + priv->base_uri = g_strdup (uri); } void @@ -367,22 +347,29 @@ yelp_html_open_stream (YelpHtml *html, const gchar *mime) debug_print (DB_FUNCTION, "entering\n"); html->priv->frames_enabled = FALSE; - gtk_moz_embed_open_stream (GTK_MOZ_EMBED (html), - html->priv->base_uri, - mime); + if (html->priv->content) + g_string_free (html->priv->content, TRUE); + html->priv->content = NULL; + g_free (html->priv->mime); + html->priv->mime = g_strdup(mime); } void yelp_html_write (YelpHtml *html, const gchar *data, gint len) { - if (len == -1) len = strlen (data); + gchar *tmp = NULL; + + if (len == -1) len = strlen (data); debug_print (DB_FUNCTION, "entering\n"); debug_print (DB_ARG, " data = %i bytes\n", strlen (data)); debug_print (DB_ARG, " len = %i\n", len); - gtk_moz_embed_append_data (GTK_MOZ_EMBED (html), - data, len); + if (html->priv->content) { + g_string_append_len (html->priv->content, data, len); + } else { + html->priv->content = g_string_new_len (data, len); + } } void @@ -410,47 +397,51 @@ yelp_html_printf (YelpHtml *html, char *format, ...) g_free (string); } -/* Fire "children_changed::add" event to refresh "UI-Grab" window of GOK, - * this event is not fired when using gtk_moz_embed_xxx_stream, - * see Mozilla bug #293670. Done in a timeout to allow mozilla to - * actually draw to the screen */ - -static gboolean -timeout_update_gok (YelpHtml *html) -{ - g_signal_emit_by_name (gtk_widget_get_accessible (GTK_WIDGET (html)), - "children_changed::add", -1, NULL, NULL); - html->priv->timeout = 0; - return FALSE; -} void yelp_html_close (YelpHtml *html) { debug_print (DB_FUNCTION, "entering\n"); - gtk_moz_embed_close_stream (GTK_MOZ_EMBED (html)); -#ifdef HAVE_GECKO_1_9 - html_reset_accessible_parent (GTK_WIDGET (html)); -#else - html->priv->timeout = g_timeout_add_seconds (2, - (GSourceFunc) timeout_update_gok, - html); -#endif + if (!html->priv->initialised) { + html->priv->initialised = TRUE; + html_set_fonts (html); + html_set_colors (html); + html_set_a11y (html); + webkit_web_view_set_maintains_back_forward_list (WEBKIT_WEB_VIEW (html), FALSE); + } + + webkit_web_view_load_string (WEBKIT_WEB_VIEW (html), + html->priv->content->str, + html->priv->mime, + NULL, + html->priv->base_uri); + g_string_free (html->priv->content, TRUE); + html->priv->content = NULL; + g_free (html->priv->mime); + html->priv->mime = NULL; } gboolean yelp_html_find (YelpHtml *html, const gchar *find_string) { - return html->priv->yelper->Find (find_string); + if (html->priv->find_string) + g_free(html->priv->find_string); + html->priv->find_string = g_strdup (find_string); + return webkit_web_view_search_text (WEBKIT_WEB_VIEW (html), + find_string, FALSE, + TRUE, TRUE); } gboolean yelp_html_find_again (YelpHtml *html, gboolean forward) { - return html->priv->yelper->FindAgain ((PRBool) forward); + return webkit_web_view_search_text (WEBKIT_WEB_VIEW (html), + html->priv->find_string, + FALSE, + forward, TRUE); } void @@ -459,7 +450,7 @@ yelp_html_set_find_props (YelpHtml *html, gboolean match_case, gboolean wrap) { - html->priv->yelper->SetFindProperties (str, (PRBool) match_case, (PRBool) wrap); + /* Empty */ } void @@ -479,79 +470,117 @@ yelp_html_jump_to_anchor (YelpHtml *html, void yelp_html_copy_selection (YelpHtml *html) { - html->priv->yelper->DoCommand ("cmd_copy"); + webkit_web_view_copy_clipboard (WEBKIT_WEB_VIEW (html)); } void yelp_html_select_all (YelpHtml *html) { - html->priv->yelper->DoCommand ("cmd_selectAll"); + webkit_web_view_select_all (WEBKIT_WEB_VIEW (html)); } void -yelp_html_print (YelpHtml *html, YelpPrintInfo *info, gboolean preview, gint *npages) +yelp_html_print (YelpHtml *html) { - html->priv->yelper->Print (info, preview, npages); -} - -void -yelp_html_preview_navigate (YelpHtml *html, gint page_no) -{ - html->priv->yelper->PrintPreviewNavigate (page_no); -} - -void -yelp_html_preview_end (YelpHtml *html) -{ - html->priv->yelper->PrintPreviewEnd (); + webkit_web_view_execute_script (WEBKIT_WEB_VIEW (html), "print();"); } static void -html_set_fonts (void) +html_set_fonts (YelpHtml *html) { gchar *font; + WebKitWebSettings *settings; + GValue *name, *size; + gchar *str_name; + gint i_size; + gchar *tmp; + + settings = webkit_web_view_get_settings (WEBKIT_WEB_VIEW (html)); font = yelp_settings_get_font (YELP_FONT_VARIABLE); - yelp_gecko_set_font (YELP_FONT_VARIABLE, font); + + /* We have to separate the string into name and size and then + * assign to the 2 gvalues */ + tmp = g_strrstr (font, " "); + if (!tmp) { + g_warning ("Cannot decode font pattern %s", font); + g_free (font); + return; + } + + name = g_new0 (GValue, 1); + size = g_new0 (GValue, 1); + + name = g_value_init (name, G_TYPE_STRING); + size = g_value_init (size, G_TYPE_INT); + + str_name = g_strndup (font, tmp - font); + + i_size = g_strtod (tmp, NULL); + + g_value_set_string (name, str_name); + g_value_set_int (size, i_size); + + g_object_set_property (G_OBJECT (settings), "default-font-family", + name); + g_object_set_property (G_OBJECT (settings), "default-font-size", + size); + g_free (font); font = yelp_settings_get_font (YELP_FONT_FIXED); - yelp_gecko_set_font (YELP_FONT_FIXED, font); + + tmp = g_strrstr (font, " "); + if (!tmp) { + g_warning ("Cannot decode monospace font pattern %s", font); + g_free (font); + return; + } + + name = g_value_reset (name); + size = g_value_reset (size); + + str_name = g_strndup (font, tmp - font); + + i_size = g_strtod (tmp, NULL); + + g_value_set_string (name, str_name); + g_value_set_int (size, i_size); + + + g_object_set_property (G_OBJECT (settings), "monospace-font-family", + name); + g_object_set_property (G_OBJECT (settings), "default-monospace-font-size", + size); + g_free (font); } static void -html_set_colors (void) +html_set_colors (YelpHtml *html) { - const gchar *color; - - color = yelp_settings_get_color (YELP_COLOR_FG); - yelp_gecko_set_color (YELP_COLOR_FG, color); + /* TODO: No Webkit equivalent ... */ + /* See https://bugs.webkit.org/show_bug.cgi?id=19486 */ - color = yelp_settings_get_color (YELP_COLOR_BG); - yelp_gecko_set_color (YELP_COLOR_BG, color); - - color = yelp_settings_get_color (YELP_COLOR_ANCHOR); - yelp_gecko_set_color (YELP_COLOR_ANCHOR, color); } static void -html_set_a11y (void) +html_set_a11y (YelpHtml *html) { gboolean caret; caret = yelp_settings_get_caret (); - yelp_gecko_set_caret (caret); + /* TODO Webkit version */ } gboolean yelp_html_initialize (void) { - return yelp_gecko_init (); + return TRUE; } void yelp_html_shutdown (void) { - yelp_gecko_shutdown (); + /* Empty */ } diff --git a/src/yelp-html.h b/src/yelp-html.h index 5994eb79..82235991 100644 --- a/src/yelp-html.h +++ b/src/yelp-html.h @@ -23,9 +23,8 @@ #ifndef __YELP_HTML_H__ #define __YELP_HTML_H__ -#include <gtkmozembed.h> - -#include "yelp-print.h" +#include <config.h> +#include <webkit/webkit.h> G_BEGIN_DECLS @@ -41,14 +40,12 @@ typedef struct _YelpHtmlClass YelpHtmlClass; typedef struct _YelpHtmlPriv YelpHtmlPriv; struct _YelpHtml { - GtkMozEmbed parent; - + WebKitWebView parent; YelpHtmlPriv *priv; }; struct _YelpHtmlClass { - GtkMozEmbedClass parent_class; - + WebKitWebViewClass parent; guint font_handler; guint color_handler; guint a11y_handler; @@ -103,13 +100,7 @@ void yelp_html_copy_selection (YelpHtml *html); void yelp_html_select_all (YelpHtml *html); -void yelp_html_print (YelpHtml *html, - YelpPrintInfo *info, - gboolean preview, - gint *npages); -void yelp_html_preview_end (YelpHtml *html); -void yelp_html_preview_navigate (YelpHtml *html, - gint page_no); +void yelp_html_print (YelpHtml *html); gboolean yelp_html_initialize (void); void yelp_html_shutdown (void); diff --git a/src/yelp-info-parser.c b/src/yelp-info-parser.c index c8494127..276d878c 100644 --- a/src/yelp-info-parser.c +++ b/src/yelp-info-parser.c @@ -1029,7 +1029,7 @@ yelp_info_parse_menu (GtkTreeStore *tree, xmlNodePtr *node, ref1 = xmlNewTextChild (mholder, NULL, BAD_CAST "a", BAD_CAST tmp); g_free (tmp); - tmp = g_strconcat ("#", xref, NULL); + tmp = g_strconcat ("?", xref, NULL); xmlNewProp (ref1, BAD_CAST "href", BAD_CAST tmp); g_free (tmp); } else { /* Indexy type menu - we gotta do a little work to fix the @@ -1047,7 +1047,7 @@ yelp_info_parse_menu (GtkTreeStore *tree, xmlNodePtr *node, ref1 = xmlNewTextChild (mholder, NULL, BAD_CAST "a", BAD_CAST title); - tmp = g_strconcat ("#", xref, NULL); + tmp = g_strconcat ("?", xref, NULL); xmlNewProp (ref1, BAD_CAST "href", BAD_CAST tmp); g_free (tmp); xmlNewTextChild (mholder, NULL, BAD_CAST "spacing", @@ -1056,7 +1056,7 @@ yelp_info_parse_menu (GtkTreeStore *tree, xmlNodePtr *node, ref1 = xmlNewTextChild (mholder, NULL, BAD_CAST "a", BAD_CAST tmp); g_free (tmp); - tmp = g_strconcat ("#", xref, NULL); + tmp = g_strconcat ("?", xref, NULL); xmlNewProp (ref1, BAD_CAST "href", BAD_CAST tmp); g_free (tmp); @@ -1214,7 +1214,7 @@ info_process_text_notes (xmlNodePtr *node, gchar *content, GtkTreeStore *tree) link = g_strstrip (link); length = strlen (link) - 1; link[length] = '\0'; - href = g_strconcat ("#", link, NULL); + href = g_strconcat ("?", link, NULL); link[length] = 'a'; g_free (link); @@ -1249,7 +1249,7 @@ info_process_text_notes (xmlNodePtr *node, gchar *content, GtkTreeStore *tree) frag = g_strndup (url, tmp1 - url); g_strstrip (frag); gtk_tree_model_foreach (GTK_TREE_MODEL (tree), resolve_frag_id, &frag); - href = g_strconcat ("#", frag, NULL); + href = g_strconcat ("?", frag, NULL); g_free (frag); } for (ulink = urls; *ulink != NULL; ulink++) { diff --git a/src/yelp-io-channel.c b/src/yelp-io-channel.c index 5ccb2fbf..b41a205f 100644 --- a/src/yelp-io-channel.c +++ b/src/yelp-io-channel.c @@ -24,13 +24,6 @@ #include <config.h> #endif -#ifdef HAVE_GECKO_1_9 -/* This is needed to stop gecko's version of libz - * interfering and making gzopen et. al. crazy defines. - */ -#define MOZZCONF_H -#endif - #include <stdio.h> #include <glib.h> diff --git a/src/yelp-main.c b/src/yelp-main.c index 41e70510..c88f26f4 100644 --- a/src/yelp-main.c +++ b/src/yelp-main.c @@ -30,6 +30,7 @@ #include <dbus/dbus-glib-bindings.h> #include <string.h> #include <stdlib.h> +#include <libxslt/xslt.h> #ifdef WITH_SMCLIENT #include "eggsmclient.h" @@ -343,6 +344,7 @@ main (int argc, char **argv) bindtextdomain(GETTEXT_PACKAGE, GNOMELOCALEDIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain(GETTEXT_PACKAGE); + xsltInit (); local_id = (gchar *) g_getenv ("DESKTOP_STARTUP_ID"); @@ -393,7 +395,7 @@ main (int argc, char **argv) } if (!yelp_html_initialize ()) { - g_printerr ("Could not initialize gecko!\n"); + g_printerr ("Could not initialize HTML component\n"); exit (1); } @@ -414,16 +416,7 @@ main (int argc, char **argv) if (private || !main_is_running ()) { const gchar *env; - /* workaround for bug #329461 */ - env = g_getenv ("MOZ_ENABLE_PANGO"); - - if (env == NULL || - *env == '\0' || - g_str_equal(env, "0")) - { - g_setenv ("MOZ_DISABLE_PANGO", "1", TRUE); - } - + xsltInit (); if (session_started) { main_restore_session (); } else { diff --git a/src/yelp-search-parser.c b/src/yelp-search-parser.c index 9be5c43f..8844b44e 100644 --- a/src/yelp-search-parser.c +++ b/src/yelp-search-parser.c @@ -840,9 +840,9 @@ string_append (gchar *current, gchar *new, gchar *suffix) gchar *ret; if (suffix) { - ret = g_strconcat (current, ":", new, suffix, NULL); + ret = g_strconcat (current, "\n", new, suffix, NULL); } else { - ret = g_strconcat (current, ":", new, NULL); + ret = g_strconcat (current, "\n", new, NULL); } g_free (current); return ret; @@ -910,7 +910,7 @@ build_lists (gchar *search_terms, gchar ***terms, gint **dups, suffixes = NULL; } - search_terms = g_strdelimit (search_terms, ":", ' '); +/* search_terms = g_strdelimit (search_terms, ":", ' '); */ list_copy = g_strsplit (g_utf8_casefold (g_strstrip ( search_terms), -1), " ", -1); @@ -981,11 +981,11 @@ build_lists (gchar *search_terms, gchar ***terms, gint **dups, } } g_strfreev (list_copy); - *terms = g_strsplit (term_str, ":", -1); + *terms = g_strsplit (term_str, "\n", -1); n_terms = g_strv_length (*terms); (*dups) = g_new0 (gint, n_terms); (*stops) = g_new0 (gboolean, n_terms); - list_copy = g_strsplit (dup_str, ":", -1); + list_copy = g_strsplit (dup_str, "\n", -1); if (n_terms == 0) goto done; diff --git a/src/yelp-window.c b/src/yelp-window.c index 67bfc09d..67b640cb 100644 --- a/src/yelp-window.c +++ b/src/yelp-window.c @@ -42,7 +42,6 @@ #include "yelp-db-print.h" #include "yelp-mallard.h" #include "yelp-window.h" -#include "yelp-print.h" #include "yelp-debug.h" @@ -76,12 +75,6 @@ typedef struct { gchar *frag_title; } YelpHistoryEntry; -typedef struct { - YelpPage *page; - YelpWindow *window; - -} YelpLoadData; - static void window_init (YelpWindow *window); static void window_class_init (YelpWindowClass *klass); @@ -126,11 +119,9 @@ static gboolean html_frame_selected_cb (YelpHtml *html, gboolean handled, gpointer user_data); static void html_title_changed_cb (YelpHtml *html, + gpointer webframe, gchar *title, gpointer user_data); -static void html_popupmenu_requested_cb (YelpHtml *html, - gchar *uri, - gpointer user_data); static gboolean window_key_event_cb (GtkWidget *widget, GdkEventKey *event, YelpWindow *window); @@ -220,8 +211,8 @@ static void window_find_previous_cb (GtkAction *action, YelpWindow *window); static gboolean tree_model_iter_following (GtkTreeModel *model, GtkTreeIter *iter); -static gboolean window_write_html (YelpLoadData *data); -static void window_write_print_html (YelpHtml *html, +static void window_write_html (YelpWindow *window, + YelpHtml *html, YelpPage *page); enum { @@ -244,6 +235,8 @@ struct _YelpWindowPriv { YelpHtml *html_view; GtkWidget *side_sw; GtkWidget *search_action; + GtkWidget *html_sw; + /* Find in Page */ GtkToolItem *find_prev; @@ -905,23 +898,17 @@ page_request_cb (YelpDocument *document, YelpWindow *window) { YelpError *error; - YelpLoadData *data = NULL; switch (signal) { case YELP_DOCUMENT_SIGNAL_PAGE: window_set_sections (window, yelp_document_get_sections (document)); - data = g_new0 (YelpLoadData, 1); - data->window = window; - data->page = (YelpPage *) func_data; - - window_write_html (data); + window_write_html (window, NULL, (YelpPage *) func_data); window->priv->current_request = -1; yelp_page_free ((YelpPage *) func_data); gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET (window)), NULL); - g_free (data); break; case YELP_DOCUMENT_SIGNAL_TITLE: /* We don't need to actually handle title signals as gecko @@ -1075,7 +1062,7 @@ yelp_window_load (YelpWindow *window, const gchar *uri) doc = yelp_info_new (real_uri); break; case YELP_RRN_TYPE_DOC: - priv->base_uri = g_filename_to_uri (real_uri, NULL, NULL); + priv->base_uri = g_strdup(real_uri); doc = yelp_docbook_new (real_uri); break; case YELP_RRN_TYPE_SEARCH: @@ -1441,7 +1428,15 @@ window_populate (YelpWindow *window) gtk_paned_add1 (GTK_PANED (priv->pane), priv->side_sw); priv->html_pane = gtk_vbox_new (FALSE, 0); - + /* Webkit don't like showing scrollbars, so we have to add our + own */ + priv->html_sw = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (priv->html_sw), + GTK_POLICY_AUTOMATIC, + GTK_POLICY_AUTOMATIC); + gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (priv->html_sw), + GTK_SHADOW_IN); + priv->find_bar = gtk_toolbar_new (); gtk_toolbar_set_style (GTK_TOOLBAR (priv->find_bar), GTK_TOOLBAR_BOTH_HORIZ); gtk_toolbar_set_icon_size (GTK_TOOLBAR (priv->find_bar), GTK_ICON_SIZE_MENU); @@ -1463,21 +1458,20 @@ window_populate (YelpWindow *window) "title_changed", G_CALLBACK (html_title_changed_cb), window); - g_signal_connect (priv->html_view, - "popupmenu_requested", - G_CALLBACK (html_popupmenu_requested_cb), - window); /* Connect to look for /'s */ g_signal_connect (window, "key-press-event", G_CALLBACK (window_key_event_cb), window); + gtk_container_add (GTK_CONTAINER (priv->html_sw), + GTK_WIDGET (priv->html_view)); gtk_box_pack_end (GTK_BOX (priv->html_pane), - GTK_WIDGET (priv->html_view), + GTK_WIDGET (priv->html_sw), TRUE, TRUE, 0); - + gtk_widget_show (priv->html_sw); gtk_paned_add2 (GTK_PANED (priv->pane), priv->html_pane); + gtk_box_pack_start (GTK_BOX (priv->main_box), priv->pane, TRUE, TRUE, 0); @@ -1852,21 +1846,14 @@ html_uri_selected_cb (YelpHtml *html, gboolean handled, gpointer user_data) { - gchar *new_uri = uri; YelpWindow *window = YELP_WINDOW (user_data); debug_print (DB_FUNCTION, "entering\n"); debug_print (DB_ARG, " uri = \"%s\"\n", uri); - if (g_str_has_prefix (uri, "xref:")) - new_uri = g_strconcat (window->priv->base_uri, "#", uri + 5, NULL); - if (!handled) { - yelp_window_load (window, new_uri); + yelp_window_load (window, uri); } - - if (new_uri != uri) - g_free (new_uri); } static gboolean @@ -1894,41 +1881,17 @@ html_frame_selected_cb (YelpHtml *html, gchar *uri, gboolean handled, return TRUE; } -static void -html_title_changed_cb (YelpHtml *html, - gchar *title, - gpointer user_data) -{ - gtk_window_set_title (GTK_WINDOW (user_data), title); -} -static void -html_popupmenu_requested_cb (YelpHtml *html, - gchar *uri, - gpointer user_data) +static void html_title_changed_cb (YelpHtml *html, + gpointer webframe, + gchar *title, + gpointer user_data) { - YelpWindow *window = YELP_WINDOW (user_data); - - gtk_ui_manager_remove_ui (window->priv->ui_manager, - window->priv->merge_id); - - - if (g_str_has_prefix(uri, "mailto:")) { - gtk_ui_manager_add_ui (window->priv->ui_manager, - window->priv->merge_id, - "/ui/main_popup", - "CpMail", - "CopyMail", - GTK_UI_MANAGER_MENUITEM, - FALSE); - } - g_free (window->priv->uri); - window->priv->uri = g_strdup (uri); - gtk_menu_popup (GTK_MENU (window->priv->popup), - NULL, NULL, NULL, NULL, 3, gtk_get_current_event_time()); + gtk_window_set_title (GTK_WINDOW (user_data), title); } + /** GtkTreeView Callbacks *****************************************************/ static void @@ -1949,7 +1912,7 @@ tree_selection_changed_cb (GtkTreeSelection *selection, gtk_tree_model_get (model, &iter, YELP_DOCUMENT_COLUMN_ID, &id, -1); - uri = g_strdup_printf ("%s#%s", priv->base_uri, id); + uri = g_strdup_printf ("%s?%s", priv->base_uri, id); yelp_window_load (window, uri); g_free (uri); } @@ -2056,11 +2019,9 @@ window_print_signal (YelpDocument *document, switch (signal) { case YELP_DOCUMENT_SIGNAL_PAGE: - window_write_print_html (print->html, (YelpPage *) func_data); - + window_write_html (print->window, print->html, (YelpPage *) func_data); yelp_page_free ((YelpPage *) func_data); - - yelp_print_run (print->window, print->html, print->gtk_win, print->vbox); + yelp_html_print (print->html); break; case YELP_DOCUMENT_SIGNAL_TITLE: g_free (func_data); @@ -2166,18 +2127,18 @@ window_print_page_cb (GtkAction *action, YelpWindow *window) GFileInputStream *stream; gsize n; gchar buffer[BUFFER_SIZE]; - - file = g_file_new_for_uri (priv->uri); - stream = g_file_read (file, NULL, NULL); - + + file = g_file_new_for_uri (priv->uri); + stream = g_file_read (file, NULL, NULL); + if (stream == NULL) { /*GError *error = NULL; - g_set_error (&error, YELP_ERROR, YELP_ERROR_IO, - _("The file ‘%s’ could not be read. This file might " - "be missing, or you might not have permissions to " - "read it."), - uri); - window_error (window, error, TRUE);*/ + g_set_error (&error, YELP_ERROR, YELP_ERROR_IO, + _("The file ‘%s’ could not be read. This file might " + "be missing, or you might not have permissions to " + "read it."), + uri); + window_error (window, error, TRUE);*/ /* TODO: Proper errors */ if (file) @@ -2205,19 +2166,19 @@ window_print_page_cb (GtkAction *action, YelpWindow *window) } while ((g_input_stream_read_all - ((GInputStream *)stream, buffer, BUFFER_SIZE, &n, NULL, NULL))) { + ((GInputStream *)stream, buffer, BUFFER_SIZE, &n, NULL, NULL))) { yelp_html_write (html, buffer, n); } - if (file) - g_object_unref (file); - if (stream) - g_object_unref (stream); + yelp_html_print (html); + if (file) + g_object_unref (file); + if (stream) + g_object_unref (stream); + yelp_html_close (html); - - yelp_print_run (window, html, gtk_win, vbox); - + } } @@ -2861,51 +2822,28 @@ tree_model_iter_following (GtkTreeModel *model, return FALSE; } -static gboolean -window_write_html (YelpLoadData *data) +static void +window_write_html (YelpWindow *window, YelpHtml *html, YelpPage *page) { gchar *uri = NULL; gsize read; - YelpHtml *html = data->window->priv->html_view; gchar contents[BUFFER_SIZE]; + + if (!html) + html = window->priv->html_view; /* Use a silly fake URI to stop gecko doing silly things */ - if (data->window->priv->current_frag) { - /* FIXME: more of this terrible slash hack */ - gchar *slash, *jump_id; - slash = strchr (data->window->priv->current_frag, '/'); - if (slash) - jump_id = slash + 1; - else - jump_id = data->window->priv->current_frag; - uri = g_strdup_printf ("%s#%s", data->window->priv->base_uri, jump_id); - } + if (window->priv->current_frag) + uri = g_strdup_printf ("%s?%s", window->priv->base_uri, + window->priv->current_frag); else - uri = g_strdup (data->window->priv->base_uri); - + uri = g_strdup (window->priv->base_uri); + yelp_html_set_base_uri (html, uri); g_free (uri); yelp_html_open_stream (html, "application/xhtml+xml"); do { - yelp_page_read (data->page, contents, BUFFER_SIZE, &read, NULL); - yelp_html_write (html, contents, read); - } while (read == BUFFER_SIZE); - yelp_html_close (html); - return FALSE; -} - -static void -window_write_print_html (YelpHtml *html, YelpPage * page) -{ - gsize read; - gchar contents[BUFFER_SIZE]; - - /* Use a silly fake URI to stop gecko doing silly things */ - yelp_html_set_base_uri (html, "file:///foobar"); - yelp_html_open_stream (html, "application/xhtml+xml"); - - do { yelp_page_read (page, contents, BUFFER_SIZE, &read, NULL); yelp_html_write (html, contents, read); } while (read == BUFFER_SIZE); diff --git a/stylesheets/db2html.xsl.in b/stylesheets/db2html.xsl.in index b68f153a..02e597cc 100644 --- a/stylesheets/db2html.xsl.in +++ b/stylesheets/db2html.xsl.in @@ -68,7 +68,17 @@ FIXME: yelp:cache no longer works <!-- == db.xref.target == --> <xsl:template name="db.xref.target"> <xsl:param name="linkend"/> - <xsl:value-of select="concat('xref:', $linkend)"/> + <xsl:param name="depth_in_chunk"> + <xsl:call-template name="db.chunk.depth-in-chunk"/> + </xsl:param> + <xsl:choose> + <xsl:when test="$depth_in_chunk != 0"> + <xsl:value-of select="concat('#', $linkend)"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="concat('?', $linkend)"/> + </xsl:otherwise> + </xsl:choose> </xsl:template> <!-- == db2html.css.custom == --> @@ -78,11 +88,13 @@ FIXME: yelp:cache no longer works <!-- == db2html.division.head.extra == --> <xsl:template name="db2html.division.head.extra"> - <script type="text/javascript"> - <xsl:attribute name="src"> - <xsl:value-of select="concat('file://', $yelp.javascript)"/> - </xsl:attribute> - </script> + <xsl:if test="string($yelp.javascript) != ''"> + <script type="text/javascript"> + <xsl:attribute name="src"> + <xsl:value-of select="concat('file://', $yelp.javascript)"/> + </xsl:attribute> + </script> + </xsl:if> </xsl:template> </xsl:stylesheet> diff --git a/stylesheets/mal2html.xsl.in b/stylesheets/mal2html.xsl.in index 9a55fccc..37560a71 100644 --- a/stylesheets/mal2html.xsl.in +++ b/stylesheets/mal2html.xsl.in @@ -44,10 +44,10 @@ <xsl:when test="contains($xref, '#')"> <xsl:variable name="pageid" select="substring-before($xref, '#')"/> <xsl:variable name="sectionid" select="substring-after($xref, '#')"/> - <xsl:value-of select="concat('xref:', $pageid, '/', $sectionid)"/> + <xsl:value-of select="concat('#', $pageid, '/', $sectionid)"/> </xsl:when> <xsl:otherwise> - <xsl:value-of select="concat('xref:', $xref)"/> + <xsl:value-of select="concat('#', $xref)"/> </xsl:otherwise> </xsl:choose> </xsl:template> diff --git a/stylesheets/toc2html.xsl.in b/stylesheets/toc2html.xsl.in index f630e62f..129cf6e9 100644 --- a/stylesheets/toc2html.xsl.in +++ b/stylesheets/toc2html.xsl.in @@ -58,7 +58,7 @@ padding-</xsl:text><xsl:value-of select="$left"/><xsl:text>: 204px; padding-top: 0.2em; padding-bottom: 0.2em; - -moz-border-radius: 6px; + -webkit-border-radius: 6px; border: solid 1px </xsl:text> <xsl:value-of select="$theme.color.blue_border"/><xsl:text>; background-color: </xsl:text> @@ -112,7 +112,7 @@ padding: 1em; background-color: </xsl:text><xsl:value-of select="$theme.color.background"/><xsl:text>; color: </xsl:text><xsl:value-of select="$theme.color.text"/><xsl:text>; - -moz-border-radius: 8px; + -webkit-border-radius: 8px; } ul { margin-left: 0em; padding-left: 0em; } li[class~="toclist"] { |