--- /dev/null
+# Do not leak a string pointer
+#
+# Copyright (C) 2006 - 2009 Nokia Corporation.
+# This file is distributed under the terms of GNU LGPL license, either version 2
+# of the License, or (at your option) any later version.
+#
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlengine.c gtkhtml-3.24.4/gtkhtml/htmlengine.c
+--- gtkhtml-3.24.4/gtkhtml/htmlengine.c 2007-02-15 12:41:23.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlengine.c 2007-02-15 12:46:07.000000000 +0200
+@@ -5251,7 +5251,8 @@
+ e->formTextArea = NULL;
+ e->inOption = FALSE;
+ e->inTextArea = FALSE;
+- e->formText = g_string_new ("");
++ if (NULL == e->formText)
++ e->formText = g_string_new ("");
+
+ e->flow = NULL;
+
--- /dev/null
+diff -r -U5 gtkhtml-3.24.4/config.h.in gtkhtml-3.24.4/config.h.in
+--- gtkhtml-3.24.4/config.h.in 2008-09-22 04:21:36.000000000 +0200
++++ gtkhtml-3.24.4/config.h.in 2008-10-16 10:00:20.000000000 +0200
+@@ -23,10 +23,12 @@
+ #undef GETTEXT_PACKAGE
+ #undef GTKHTML_RELEASE
+ #undef GTKHTML_RELEASE_STRING
+ #undef HAVE_OLD_SOUP
+
++#undef DISABLE_PRINTING
++#undef DISABLE_GNOME
+
+ /* No deprecated bonobo functions */
+ #undef BONOBO_DISABLE_DEPRECATED
+
+ /* Editor API Version */
+diff -r -U5 gtkhtml-3.24.4/configure.in gtkhtml-3.24.4/configure.in
+--- gtkhtml-3.24.4/configure.in 2008-09-21 15:40:43.000000000 +0200
++++ gtkhtml-3.24.4/configure.in 2008-10-16 10:30:12.000000000 +0200
+@@ -3,10 +3,12 @@
+ AC_INIT(gtkhtml/gtkhtml.c)
+ AM_CONFIG_HEADER(config.h)
+
+ PACKAGE=gtkhtml
+
++AC_PROG_MAKE_SET
++
+ # Required Package Versions
+ m4_define([gtk_minimum_version], [2.12.0])
+ m4_define([gail_minimum_version], [1.1.0])
+ m4_define([gnome_icon_theme_minimum_version], [1.2.0])
+ m4_define([libbonobo_minimum_version], [2.20.3])
+@@ -68,26 +70,93 @@
+ esac
+ AC_MSG_RESULT([$os_win32])
+ AM_CONDITIONAL(OS_WIN32, [test $os_win32 = yes])
+ AC_SUBST(SOEXT)
+
+-GNOME_COMPILE_WARNINGS(yes)
+-CFLAGS="$CFLAGS $warning_flags"
++dnl GNOME_COMPILE_WARNINGS(yes)
++dnl CFLAGS="$CFLAGS $warning_flags"
+
+ AC_SUBST(CFLAGS)
+ AC_SUBST(CPPFLAGS)
+ AC_SUBST(LDFLAGS)
+
+ AM_GLIB_GNU_GETTEXT
+
+-GAIL_MODULES="gail >= gail_minimum_version"
+-PKG_CHECK_MODULES(GAIL, $GAIL_MODULES)
+-AC_SUBST(GAIL_CFLAGS)
+-AC_SUBST(GAIL_LIBS)
+-AC_SUBST(GAIL_MODULES)
++dnl
++dnl do we want a11y support?
++dnl
++GAIL_MODULES=""
++AC_ARG_ENABLE(a11y,
++ [ --enable-a11y Enable Accessibility (requires gail) [default=yes]],
++ [ac_cv_enable_a11y=$enableval],[ac_cv_enable_a11y=yes])
++AC_MSG_CHECKING([whether to enable a11y])
++if test "$ac_cv_enable_a11y" = yes; then
++ AC_MSG_RESULT(yes)
++ GAIL_MODULES="gail >= gail_minimum_version"
++ PKG_CHECK_MODULES(GAIL, $GAIL_MODULES)
++ AC_SUBST(GAIL_CFLAGS)
++ AC_SUBST(GAIL_LIBS)
++ AC_SUBST(GAIL_MODULES)
++ A11Y_DIR="a11y"
++ AC_SUBST(A11Y_DIR)
++ A11Y_LA="../a11y/libgtkhtml-a11y.la"
++ AC_SUBST(A11Y_LA)
++else
++ AC_MSG_RESULT(no)
++ AC_DEFINE(DISABLE_A11Y)
++ CFLAGS="-DDISABLE_A11Y $CFLAGS"
++ PC_CFLAGS="-DDISABLE_A11Y $PC_CFLAGS"
++fi
++
++
++dnl
++dnl do we want printing support?
++dnl
++GNOMEPRINT_MODULES=""
++AC_ARG_ENABLE(printing,
++ [ --enable-printing Enable Printing [default=yes]],
++ [ac_cv_enable_printing=$enableval],[ac_cv_enable_printing=yes])
++AC_MSG_CHECKING([whether to enable printing])
++if test "$ac_cv_enable_printing" = yes; then
++ AC_MSG_RESULT(yes)
++ GNOME_TEST_PROGRAMS="gtest test-suite test-stress"
++else
++ AC_MSG_RESULT(no)
++ AC_DEFINE(DISABLE_PRINTING)
++ CFLAGS="-DDISABLE_PRINTING $CFLAGS"
++ PC_CFLAGS="-DDISABLE_PRINTING $PC_CFLAGS"
++fi
++AM_CONDITIONAL(HAVE_PRINTING, test x$ac_cv_enable_printing != xno)
++
++dnl
++dnl do we want gnome support?
++dnl
++GNOME_MODULES=""
++AC_ARG_ENABLE(gnome,
++ [ --enable-gnome Enable Gnome (requires many things) [default=yes]],
++ [ac_cv_enable_gnome=$enableval],[ac_cv_enable_gnome=yes])
++AC_MSG_CHECKING([whether to enable gnome])
++if test "$ac_cv_enable_gnome" = yes; then
++ AC_MSG_RESULT(yes)
++ GNOME_MODULES="libgnomeui-2.0 >= libgnomeui_minimum_version"
++
++ dnl **************************************************
++ dnl * Gnome Icon Theme
++ dnl **************************************************
++ PKG_CHECK_MODULES(GIT, gnome-icon-theme >= 1.2.0)
++else
++ GNOME_MODULES=""
++ AC_MSG_RESULT(no)
++ AC_DEFINE(DISABLE_GNOME)
++ CFLAGS="-DDISABLE_GNOME $CFLAGS"
++ PC_CFLAGS="-DDISABLE_GNOME $PC_CFLAGS"
++fi
++
++dnl libglade only needed on windows?
++dnl GTKHTML_MODULES="$GNOME_MODULES $GAIL_MODULES libglade-2.0 >= libglade_minimum_version enchant iso-codes"
++GTKHTML_MODULES="$GNOME_MODULES $GAIL_MODULES gtk+-2.0 >= gtk_minimum_version gconf-2.0"
+
+-GTKHTML_MODULES="gtk+-2.0 >= gtk_minimum_version libgnomeui-2.0 >= libgnomeui_minimum_version libglade-2.0 >= libglade_minimum_version enchant gconf-2.0 iso-codes"
+ PKG_CHECK_MODULES(GTKHTML, $GTKHTML_MODULES)
+ AC_SUBST(GTKHTML_CFLAGS)
+ AC_SUBST(GTKHTML_LIBS)
+ AC_SUBST(GTKHTML_MODULES)
+
+@@ -96,13 +165,25 @@
+ AC_HELP_STRING([--with-bonobo-editor],
+ [build the older Bonobo-based editor [[default=no]]]),
+ bonobo_editor="$withval", bonobo_editor="no")
+ if test "x$bonobo_editor" = "xyes"; then
+ EDITOR_MODULES="${GTKHTML_MODULES} libbonobo-2.0 >= libbonobo_minimum_version libbonoboui-2.0 >= libbonoboui_minimum_version"
++ # These are still needed for 'dist' targets.
++ BONOBO_IDL_INCLUDES="-I`$PKG_CONFIG --variable=idldir libbonobo-2.0` -I`$PKG_CONFIG --variable=idldir bonobo-activation-2.0`"
++ AC_SUBST(BONOBO_IDL_INCLUDES)
++ ORBIT_IDL="`$PKG_CONFIG --variable=orbit_idl ORBit-2.0`"
++ AC_SUBST(ORBIT_IDL)
++
+ PKG_CHECK_MODULES(EDITOR, $EDITOR_MODULES)
+ AC_SUBST(EDITOR_CFLAGS)
+ AC_SUBST(EDITOR_LIBS)
++
++ EDITOR_DIR="components"
++ AC_SUBST(EDITOR_DIR)
++else
++ AC_MSG_RESULT(no)
++ AC_DEFINE(DISABLE_EDITOR)
+ fi
+ AM_CONDITIONAL(BONOBO_EDITOR, test x$bonobo_editor = xyes)
+
+ # Glade catalog files
+ AC_ARG_WITH(glade-catalog,
+@@ -113,31 +194,20 @@
+ if test "x$glade_catalog" = "xyes"; then
+ PKG_CHECK_MODULES(GLADEUI, gladeui-1.0)
+ fi
+ AM_CONDITIONAL(GLADE_CATALOG, test x$glade_catalog = xyes)
+
+-# These are still needed for 'dist' targets.
+-BONOBO_IDL_INCLUDES="-I`$PKG_CONFIG --variable=idldir libbonobo-2.0` -I`$PKG_CONFIG --variable=idldir bonobo-activation-2.0`"
+-AC_SUBST(BONOBO_IDL_INCLUDES)
+-ORBIT_IDL="`$PKG_CONFIG --variable=orbit_idl ORBit-2.0`"
+-AC_SUBST(ORBIT_IDL)
+-
+ dnl **********************************
+ dnl soup for testgtkhtml
+ dnl **********************************
+
+ PKG_CHECK_MODULES(SOUP, libsoup-2.4, have_soup="yes", have_soup="no")
+ AM_CONDITIONAL(HAVE_SOUP, test x$have_soup != xno)
+ AC_SUBST(SOUP_CFLAGS)
+ AC_SUBST(SOUP_LIBS)
+
+ dnl **************************************************
+-dnl * Gnome Icon Theme
+-dnl **************************************************
+-PKG_CHECK_MODULES(GIT, gnome-icon-theme >= gnome_icon_theme_minimum_version)
+-
+-dnl **************************************************
+ dnl * iso-codes
+ dnl **************************************************
+
+ AC_MSG_CHECKING([for iso-codes package])
+ have_iso_codes=no
+@@ -214,10 +284,12 @@
+
+ AC_SUBST(GTKHTML_CURRENT)
+ AC_SUBST(GTKHTML_REVISION)
+ AC_SUBST(GTKHTML_AGE)
+
++AC_SUBST(PC_CFLAGS)
++
+ dnl **************
+ dnl Done.
+ dnl **************
+
+ AC_OUTPUT([
+@@ -237,7 +309,12 @@
+
+ echo "
+
+ Configuration:
+
++ accessibility support: $ac_cv_enable_a11y
++ gnome-print support: $ac_cv_enable_printing
++ gnome support: $ac_cv_enable_gnome
++ bonobo-editor component: $bonobo_editor
++
+ Editor component type: ${GNOME_GTKHTML_EDITOR_TYPE}
+ "
+diff -r -U5 gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.24.4/gtkhtml/gtkhtml.c
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2008-10-16 09:59:50.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2008-10-16 10:53:23.000000000 +0200
+@@ -24,11 +24,17 @@
+
+ #include <gdk/gdkkeysyms.h>
+ #include <glib/gi18n-lib.h>
+ #include <string.h>
+
++#ifndef DISABLE_GNOME
++#include <libgnome/gnome-util.h>
++#endif
++
++#ifndef DISABLE_A11Y
+ #include "../a11y/factory.h"
++#endif
+
+ #include "htmlcolorset.h"
+ #include "htmlcluev.h"
+ #include "htmlcursor.h"
+ #include "htmldrawqueue.h"
+@@ -67,11 +73,10 @@
+ #include "gtkhtml-search.h"
+ #include "gtkhtml-stream.h"
+ #include "gtkhtml-private.h"
+ #include "gtkhtml-properties.h"
+ #include "math.h"
+-#include <libgnome/gnome-util.h>
+
+ enum DndTargetType {
+ DND_TARGET_TYPE_MESSAGE_RFC822,
+ DND_TARGET_TYPE_X_UID_LIST,
+ DND_TARGET_TYPE_TEXT_URI_LIST,
+@@ -3044,11 +3049,14 @@
+ html_class->scroll = scroll;
+ html_class->cursor_move = cursor_move;
+ html_class->command = command;
+
+ add_bindings (klass);
++
++#ifndef DISABLE_A11Y
+ gtk_html_accessibility_init ();
++#endif /* ndef DISABLE_A11Y */
+
+ filename = g_build_filename (PREFIX, "share", GTKHTML_RELEASE_STRING, "keybindingsrc.emacs", NULL);
+ gtk_rc_parse (filename);
+ g_free (filename);
+ html_class->emacs_bindings = gtk_binding_set_find ("gtkhtml-bindings-emacs");
+@@ -4053,11 +4061,11 @@
+ g_return_val_if_fail (GTK_IS_HTML (html), NULL);
+
+ return html->priv->base_url;
+ }
+
+-\f
++#ifndef DISABLE_PRINTING
+ /* Printing. */
+ void
+ gtk_html_print_page (GtkHTML *html, GtkPrintContext *context)
+ {
+ g_return_if_fail (html != NULL);
+@@ -4081,11 +4089,11 @@
+ html_engine_print (
+ html->engine, context, header_height, footer_height,
+ header_print, footer_print, user_data);
+ }
+
+-\f
++#endif /* ndef DISABLE_PRINTING */
+ /* Editing. */
+
+ void
+ gtk_html_set_paragraph_style (GtkHTML *html,
+ GtkHTMLParagraphStyle style)
+@@ -6075,11 +6083,11 @@
+ void
+ gtk_html_set_images_blocking (GtkHTML *html, gboolean block)
+ {
+ html->engine->block_images = block;
+ }
+-
++#ifndef DISABLE_PRINTING
+ gint
+ gtk_html_print_page_get_pages_num (GtkHTML *html,
+ GtkPrintContext *context,
+ gdouble header_height,
+ gdouble footer_height)
+@@ -6103,10 +6111,11 @@
+ return html_engine_print_operation_run (
+ html->engine, operation, action, parent,
+ calc_header_height, calc_footer_height,
+ draw_header, draw_footer, user_data, error);
+ }
++#endif /* ndef DISABLE_PRINTING */
+
+ gboolean
+ gtk_html_has_undo (GtkHTML *html)
+ {
+ return html_undo_has_undo_steps (html->engine->undo);
+diff -r -U5 gtkhtml-3.24.4/gtkhtml/gtkhtml-embedded.c gtkhtml-3.24.4/gtkhtml/gtkhtml-embedded.c
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml-embedded.c 2008-06-13 05:05:58.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml-embedded.c 2008-10-16 10:50:53.000000000 +0200
+@@ -117,11 +117,13 @@
+ old_remove(container, child);
+
+ gtk_html_embedded_changed(GTK_HTML_EMBEDDED(container));
+ }
+
++#ifndef DISABLE_PRINTING
+ typedef void (*draw_print_signal)(GtkObject *, gpointer, gpointer);
++#endif /* ndef DISABLE_PRINTING */
+ typedef void (*draw_gdk_signal)(GtkObject *, gpointer, gpointer, gint, gint, gpointer);
+
+ static void
+ draw_gdk_signal_marshaller (GClosure *closure,
+ GValue *return_value,
+@@ -186,21 +188,21 @@
+ G_STRUCT_OFFSET (GtkHTMLEmbeddedClass, draw_gdk),
+ NULL, NULL,
+ draw_gdk_signal_marshaller, G_TYPE_NONE, 4,
+ G_TYPE_POINTER, G_TYPE_POINTER,
+ G_TYPE_INT, G_TYPE_INT);
+-
++#ifndef DISABLE_PRINTING
+ signals [DRAW_PRINT] =
+ g_signal_new ("draw_print",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (GtkHTMLEmbeddedClass, draw_print),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__POINTER,
+ G_TYPE_NONE, 1,
+ G_TYPE_POINTER);
+-
++#endif /* ndef DISABLE_PRINTING */
+ gobject_class->finalize = gtk_html_embedded_finalize;
+
+ widget_class->size_request = gtk_html_embedded_size_request;
+ widget_class->size_allocate = gtk_html_embedded_size_allocate;
+
+diff -r -U5 gtkhtml-3.24.4/gtkhtml/gtkhtml-embedded.h gtkhtml-3.24.4/gtkhtml/gtkhtml-embedded.h
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml-embedded.h 2008-07-18 08:18:37.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml-embedded.h 2008-10-16 10:00:55.000000000 +0200
+@@ -54,11 +54,13 @@
+ GtkBinClass parent_class;
+
+ void (*changed)(GtkHTMLEmbedded *);
+ void (*draw_gdk)(GtkHTMLEmbedded *, GdkPixmap *, GdkGC *,
+ gint, gint);
++#ifndef DISABLE_PRINTING
+ void (*draw_print)(GtkHTMLEmbedded *, GtkPrintContext *);
++#endif /* ndef DISABLE_PRINTING */
+ };
+
+ /* FIXME: There needs to be a way for embedded objects in forms to encode
+ themselves for a form */
+
+diff -r -U5 gtkhtml-3.24.4/gtkhtml/gtkhtml.h gtkhtml-3.24.4/gtkhtml/gtkhtml.h
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2008-08-18 06:54:55.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2008-10-16 10:49:41.000000000 +0200
+@@ -208,11 +208,11 @@
+
+ /* Animated Images */
+ void gtk_html_set_animate (GtkHTML *html,
+ gboolean animate);
+ gboolean gtk_html_get_animate (const GtkHTML *html);
+-
++#ifndef DISABLE_PRINTING
+ /* Printing support. */
+ void gtk_html_print_page_with_header_footer (GtkHTML *html,
+ GtkPrintContext *context,
+ gdouble header_height,
+ gdouble footer_height,
+@@ -233,11 +233,11 @@
+ GtkHTMLPrintCalcHeight calc_footer_height,
+ GtkHTMLPrintDrawFunc draw_header,
+ GtkHTMLPrintDrawFunc draw_footer,
+ gpointer user_data,
+ GError **error);
+-
++#endif /* ndef DISABLE_PRINTING */
+ /* Title. */
+ const gchar *gtk_html_get_title (GtkHTML *html);
+ void gtk_html_set_title (GtkHTML *html, const char *title);
+
+ /* Anchors. */
+diff -r -U5 gtkhtml-3.24.4/gtkhtml/gtkhtml-types.h gtkhtml-3.24.4/gtkhtml/gtkhtml-types.h
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml-types.h 2008-04-11 13:14:42.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml-types.h 2008-10-16 10:47:22.000000000 +0200
+@@ -49,11 +49,11 @@
+ /* FIXME 1st param should be Engine */
+ typedef gboolean (* GtkHTMLSaveReceiverFn) (gpointer engine,
+ const gchar *data,
+ size_t len,
+ gpointer user_data);
+-
++#ifndef DISABLE_PRINTING
+ typedef gint (*GtkHTMLPrintCalcHeight) (GtkHTML *html,
+ GtkPrintOperation *operation,
+ GtkPrintContext *context,
+ gpointer user_data);
+ typedef void (*GtkHTMLPrintDrawFunc) (GtkHTML *html,
+@@ -63,7 +63,7 @@
+ PangoRectangle *rec,
+ gpointer user_data);
+
+ typedef void (*GtkHTMLPrintCallback) (GtkHTML *html, GtkPrintContext *print_context,
+ gdouble x, gdouble y, gdouble width, gdouble height, gpointer user_data);
+-
++#endif /* ndef DISABLE_PRINTING */
+ #endif
+diff -r -U5 gtkhtml-3.24.4/gtkhtml/htmlengine.c gtkhtml-3.24.4/gtkhtml/htmlengine.c
+--- gtkhtml-3.24.4/gtkhtml/htmlengine.c 2008-10-16 09:59:50.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlengine.c 2008-10-16 10:02:08.000000000 +0200
+@@ -48,11 +48,13 @@
+ #include "htmlengine-edit.h"
+ #include "htmlengine-edit-cursor.h"
+ #include "htmlengine-edit-movement.h"
+ #include "htmlengine-edit-cut-and-paste.h"
+ #include "htmlengine-edit-selection-updater.h"
++#ifndef DISABLE_PRINTING
+ #include "htmlengine-print.h"
++#endif /* ndef DISABLE_PRINTING */
+ #include "htmlcolor.h"
+ #include "htmlinterval.h"
+ #include "htmlobject.h"
+ #include "htmlsettings.h"
+ #include "htmltext.h"
+@@ -4382,13 +4384,13 @@
+
+ engine->selection_updater = html_engine_edit_selection_updater_new (engine);
+
+ engine->search_info = NULL;
+ engine->need_spell_check = FALSE;
+-
++#ifndef DISABLE_PRINTING
+ html_engine_print_set_min_split_index (engine, .75);
+-
++#endif /* ndef DISABLE_PRINTING */
+ engine->block = FALSE;
+ engine->block_images = FALSE;
+ engine->save_data = FALSE;
+ engine->saved_step_count = -1;
+
+diff -r -U5 gtkhtml-3.24.4/gtkhtml/htmlengine-print.c gtkhtml-3.24.4/gtkhtml/htmlengine-print.c
+--- gtkhtml-3.24.4/gtkhtml/htmlengine-print.c 2008-04-11 13:14:42.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlengine-print.c 2008-10-16 10:01:30.000000000 +0200
+@@ -18,10 +18,13 @@
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+ */
+
+ #include <config.h>
++
++#ifndef DISABLE_PRINTING
++
+ #include <gtk/gtk.h>
+ #include <glib/gi18n-lib.h>
+ #include "gtkhtml.h"
+ #include "gtkhtmldebug.h"
+ #include "gtkhtml-private.h"
+@@ -511,5 +514,7 @@
+ operation, "end-print",
+ G_CALLBACK (engine_print_end_print), &data);
+
+ return gtk_print_operation_run (operation, action, parent, error);
+ }
++
++#endif /* ndef DISABLE_PRINTING */
+diff -r -U5 gtkhtml-3.24.4/gtkhtml/htmlengine-print.h gtkhtml-3.24.4/gtkhtml/htmlengine-print.h
+--- gtkhtml-3.24.4/gtkhtml/htmlengine-print.h 2008-04-11 13:14:42.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlengine-print.h 2008-10-16 10:46:24.000000000 +0200
+@@ -20,10 +20,12 @@
+ */
+
+ #ifndef _HTMLENGINE_PRINT_H
+ #define _HTMLENGINE_PRINT_H
+
++#ifndef DISABLE_PRINTING
++
+ #include <gtk/gtk.h>
+ #include "htmlengine.h"
+
+ void html_engine_print (HTMLEngine *engine,
+ GtkPrintContext *context,
+@@ -48,7 +50,7 @@
+ GtkHTMLPrintCalcHeight calc_footer_height,
+ GtkHTMLPrintDrawFunc draw_header,
+ GtkHTMLPrintDrawFunc draw_footer,
+ gpointer user_data,
+ GError **error);
+-
++#endif /* ndef DISABLE_PRINTING */
+ #endif
+diff -r -U5 gtkhtml-3.24.4/gtkhtml/htmlframe.c gtkhtml-3.24.4/gtkhtml/htmlframe.c
+--- gtkhtml-3.24.4/gtkhtml/htmlframe.c 2008-07-18 08:18:37.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlframe.c 2008-10-16 10:48:54.000000000 +0200
+@@ -165,11 +165,11 @@
+ gint tx, gint ty)
+ {
+ HTMLFrame *frame = HTML_FRAME (o);
+ HTMLEngine *e = GTK_HTML (frame->html)->engine;
+ GdkRectangle paint;
+-
++#ifndef DISABLE_PRINTING
+ if (GTK_OBJECT_TYPE (e->painter) == HTML_TYPE_PRINTER) {
+ gint pixel_size = html_painter_get_pixel_size (e->painter);
+
+ if (!html_object_intersect (o, &paint, x, y, width, height))
+ return;
+@@ -178,25 +178,30 @@
+ x, y,
+ width - pixel_size * (html_engine_get_left_border (e) + html_engine_get_right_border (e)),
+ height - pixel_size * (html_engine_get_top_border (e) + html_engine_get_bottom_border (e)),
+ tx + pixel_size * html_engine_get_left_border (e), ty + pixel_size * html_engine_get_top_border (e));
+ } else
++#endif /* ndef DISABLE_PRINTING */
+ (*HTML_OBJECT_CLASS (parent_class)->draw) (o, p, x, y, width, height, tx, ty);
+ }
+
+ static void
+ set_painter (HTMLObject *o, HTMLPainter *painter)
+ {
+ HTMLFrame *frame;
+
+ frame = HTML_FRAME (o);
+- if (G_OBJECT_TYPE (GTK_HTML (frame->html)->engine->painter) != HTML_TYPE_PRINTER) {
++#ifndef DISABLE_PRINTING
++ if (G_OBJECT_TYPE (GTK_HTML (frame->html)->engine->painter) != HTML_TYPE_PRINTER)
++#endif /* ndef DISABLE_PRINTING */
+ frame_set_gdk_painter (frame, GTK_HTML (frame->html)->engine->painter);
+- }
+-
++#ifdef DISABLE_PRINTING
++ html_engine_set_painter (GTK_HTML (frame->html)->engine, frame->gdk_painter);
++#else /* def DISABLE_PRINTING */
+ html_engine_set_painter (GTK_HTML (frame->html)->engine,
+ GTK_OBJECT_TYPE (painter) != HTML_TYPE_PRINTER ? frame->gdk_painter : painter);
++#endif
+ }
+
+ static void
+ forall (HTMLObject *self,
+ HTMLEngine *e,
+diff -r -U5 gtkhtml-3.24.4/gtkhtml/htmliframe.c gtkhtml-3.24.4/gtkhtml/htmliframe.c
+--- gtkhtml-3.24.4/gtkhtml/htmliframe.c 2008-07-18 08:18:37.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmliframe.c 2008-10-16 10:45:41.000000000 +0200
+@@ -164,10 +164,11 @@
+ HTMLPainter *p,
+ gint x, gint y,
+ gint width, gint height,
+ gint tx, gint ty)
+ {
++#ifndef DISABLE_PRINTING
+ HTMLIFrame *iframe = HTML_IFRAME (o);
+ HTMLEngine *e = GTK_HTML (iframe->html)->engine;
+ GdkRectangle paint;
+
+ if (GTK_OBJECT_TYPE (e->painter) == HTML_TYPE_PRINTER) {
+@@ -180,25 +181,30 @@
+ x, y,
+ width - pixel_size * (html_engine_get_left_border (e) + html_engine_get_right_border (e)),
+ height - pixel_size * (html_engine_get_top_border (e) + html_engine_get_bottom_border (e)),
+ tx + pixel_size * html_engine_get_left_border (e), ty + pixel_size * html_engine_get_top_border (e));
+ } else
++#endif /* ndef DISABLE_PRINTING */
+ (*HTML_OBJECT_CLASS (parent_class)->draw) (o, p, x, y, width, height, tx, ty);
+ }
+
+ static void
+ set_painter (HTMLObject *o, HTMLPainter *painter)
+ {
+ HTMLIFrame *iframe;
+
+ iframe = HTML_IFRAME (o);
+- if (G_OBJECT_TYPE (GTK_HTML (iframe->html)->engine->painter) != HTML_TYPE_PRINTER) {
++#ifndef DISABLE_PRINTING
++ if (G_OBJECT_TYPE (GTK_HTML (iframe->html)->engine->painter) != HTML_TYPE_PRINTER)
++#endif
+ iframe_set_gdk_painter (iframe, GTK_HTML (iframe->html)->engine->painter);
+- }
+-
++#ifdef DISABLE_PRINTING
++ html_engine_set_painter (GTK_HTML (iframe->html)->engine, iframe->gdk_painter);
++#else /* def DISABLE_PRINTING */
+ html_engine_set_painter (GTK_HTML (iframe->html)->engine,
+ G_OBJECT_TYPE (painter) != HTML_TYPE_PRINTER ? iframe->gdk_painter : painter);
++#endif /* ndef DISABLE_PRINTING */
+ }
+
+ static void
+ forall (HTMLObject *self,
+ HTMLEngine *e,
+diff -r -U5 gtkhtml-3.24.4/gtkhtml/htmlimage.c gtkhtml-3.24.4/gtkhtml/htmlimage.c
+--- gtkhtml-3.24.4/gtkhtml/htmlimage.c 2008-06-13 05:05:58.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlimage.c 2008-10-16 10:43:40.000000000 +0200
+@@ -383,14 +383,14 @@
+
+ if (painter->widget && GTK_IS_HTML (painter->widget))
+ e = html_object_engine (HTML_OBJECT (image), GTK_HTML (painter->widget)->engine);
+ else
+ return;
+-
++#ifndef DISABLE_PRINTING
+ if (HTML_IS_PRINTER (painter))
+ return;
+-
++#endif
+ p = HTML_GDK_PAINTER (painter);
+ /* printf ("draw_image_focus\n"); */
+
+ gdk_gc_set_foreground (p->gc, &html_colorset_get_color_allocated (e->settings->color_set,
+ painter, HTMLTextColor)->color);
+diff -r -U5 gtkhtml-3.24.4/gtkhtml/htmlprinter.c gtkhtml-3.24.4/gtkhtml/htmlprinter.c
+--- gtkhtml-3.24.4/gtkhtml/htmlprinter.c 2008-07-18 08:18:37.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlprinter.c 2008-10-16 10:02:28.000000000 +0200
+@@ -18,10 +18,13 @@
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+ */
+
+ #include <config.h>
++
++#ifndef DISABLE_PRINTING
++
+ #include "gtkhtml-compat.h"
+
+ #include <string.h>
+ #include <ctype.h>
+
+@@ -721,5 +724,7 @@
+ painter = HTML_PAINTER (printer);
+
+ printer->scale = scale;
+ painter->engine_to_pango = scale;
+ }
++
++#endif /* ndef DISABLE_PRINTING */
+diff -r -U5 gtkhtml-3.24.4/gtkhtml/htmlprinter.h gtkhtml-3.24.4/gtkhtml/htmlprinter.h
+--- gtkhtml-3.24.4/gtkhtml/htmlprinter.h 2008-07-18 08:18:37.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlprinter.h 2008-10-16 10:02:34.000000000 +0200
+@@ -23,10 +23,12 @@
+ #define _HTMLPRINTER_H
+
+ #include <gtk/gtk.h>
+ #include "htmlpainter.h"
+
++#ifndef DISABLE_PRINTING
++
+ #define HTML_TYPE_PRINTER (html_printer_get_type ())
+ #define HTML_PRINTER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), HTML_TYPE_PRINTER, HTMLPrinter))
+ #define HTML_PRINTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), HTML_TYPE_PRINTER, HTMLPrinterClass))
+ #define HTML_IS_PRINTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), HTML_TYPE_PRINTER))
+ #define HTML_IS_PRINTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), HTML_TYPE_PRINTER))
+@@ -56,6 +58,7 @@
+ gdouble html_printer_scale_to_gnome_print (HTMLPrinter *printer,
+ gint x);
+ void html_printer_set_scale (HTMLPrinter *printer,
+ gdouble scale);
+
++#endif /* ndef DISABLE_PRINTING */
+ #endif /* _HTMLPRINTER_H */
+diff -r -U5 gtkhtml-3.24.4/gtkhtml/htmltextslave.c gtkhtml-3.24.4/gtkhtml/htmltextslave.c
+--- gtkhtml-3.24.4/gtkhtml/htmltextslave.c 2008-04-11 13:14:42.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmltextslave.c 2008-10-16 10:42:53.000000000 +0200
+@@ -860,14 +860,14 @@
+
+ if (painter->widget && GTK_IS_HTML (painter->widget))
+ e = html_object_engine (HTML_OBJECT (slave->owner), GTK_HTML (painter->widget)->engine);
+ else
+ return;
+-
++#ifndef DISABLE_PRINTING
+ if (HTML_IS_PRINTER (painter))
+ return;
+-
++#endif /* ndef DISABLE_PRINTING */
+ p = HTML_GDK_PAINTER (painter);
+ /* printf ("draw_text_focus\n"); */
+
+ gdk_gc_set_foreground (p->gc, &html_colorset_get_color_allocated (e->settings->color_set,
+ painter, HTMLTextColor)->color);
+diff -r -U5 gtkhtml-3.24.4/gtkhtml/libgtkhtml.pc.in gtkhtml-3.24.4/gtkhtml/libgtkhtml.pc.in
+--- gtkhtml-3.24.4/gtkhtml/libgtkhtml.pc.in 2008-04-11 13:14:42.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/libgtkhtml.pc.in 2008-10-16 10:02:54.000000000 +0200
+@@ -8,6 +8,6 @@
+ Name: libgtkhtml
+ Description: libgtkhtml
+ Requires: @GTKHTML_MODULES@
+ Version: @VERSION@
+ Libs: -L${libdir} -lgtkhtml-@GTKHTML_API_VERSION@
+-Cflags: -I${includedir}/libgtkhtml-@GTKHTML_API_VERSION@
++Cflags: -I${includedir}/libgtkhtml-@GTKHTML_API_VERSION@ @PC_CFLAGS@
+diff -r -U5 gtkhtml-3.24.4/gtkhtml/Makefile.am gtkhtml-3.24.4/gtkhtml/Makefile.am
+--- gtkhtml-3.24.4/gtkhtml/Makefile.am 2008-05-12 09:18:34.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/Makefile.am 2008-10-16 10:33:55.000000000 +0200
+@@ -207,22 +207,25 @@
+ htmlengine-edit-table.h \
+ $(PLATFORM_DEP_SOURCES) \
+ $(NULL)
+
+ libgtkhtml_3_14_la_LDFLAGS = -version-info $(GTKHTML_CURRENT):$(GTKHTML_REVISION):$(GTKHTML_AGE) -no-undefined
+-libgtkhtml_3_14_la_LIBADD = $(GTKHTML_LIBS) ../a11y/libgtkhtml-a11y.la $(GAIL_LIBS) $(REGEX_LIBS)
++libgtkhtml_3_14_la_LIBADD = $(GTKHTML_LIBS) $(A11Y_LA) $(GAIL_LIBS) $(REGEX_LIBS)
+
+ dist-hook:
+ mkdir $(distdir)/tests
+ cp -f $(srcdir)/tests/*.html $(distdir)/tests
+ cp -f $(srcdir)/tests/*.jpg $(distdir)/tests
+
+ if HAVE_SOUP
+ test_programs = testgtkhtml
+ endif
+-noinst_PROGRAMS = $(test_programs) gtest test-suite test-stress
++if HAVE_PRINTING
++gnome_test_programs = gtest test-suite test-stress
++endif
+
++noinst_PROGRAMS = $(test_programs) $(gnome_test_programs)
+
+ testgtkhtml_SOURCES = \
+ testgtkhtml.c \
+ htmlurl.h \
+ htmlurl.c
+diff -r -U5 gtkhtml-3.24.4/Makefile.am gtkhtml-3.24.4/Makefile.am
+--- gtkhtml-3.24.4/Makefile.am 2008-08-01 08:36:01.000000000 +0200
++++ gtkhtml-3.24.4/Makefile.am 2008-10-16 10:03:52.000000000 +0200
+@@ -1,11 +1,10 @@
+ SUBDIRS = \
+- a11y \
++ $(A11Y_DIR) \
+ gtkhtml \
+- components \
+- art \
+- po
++ $(EDITOR_DIR) \
++ art
+
+ CLEANFILES = \
+ po/.intltool-merge-cache
+
+ DISTCLEANFILES = \
--- /dev/null
+# Set some defaults to off without entirely yanking them
+#
+# Copyright (C) 2006 - 2007 Nokia Corporation.
+# This file is distributed under the terms of GNU LGPL license, either version 2
+# of the License, or (at your option) any later version.
+#
+diff -Nru gtkhtml-3.24.4/autogen.sh gtkhtml-3.24.4.mod8/autogen.sh
+diff -Nru gtkhtml-3.24.4/autogen.sh gtkhtml-3.24.4.mod8/autogen.sh
+--- gtkhtml-3.24.4/autogen.sh 1970-01-01 02:00:00.000000000 +0200
+--- gtkhtml-3.24.4/autogen.sh 1970-01-01 02:00:00.000000000 +0200
++++ gtkhtml-3.24.4/autogen.sh 2007-02-16 11:21:27.000000000 +0200
++++ gtkhtml-3.24.4/autogen.sh 2007-02-16 11:21:27.000000000 +0200
+@@ -0,0 +1,7 @@
++#!/bin/sh
++
++set -x
++aclocal
++autoconf
++autoheader
++automake --add-missing --foreign
+d
+diff -r -U5 gtkhtml-3.24.4/configure.in gtkhtml-3.24.4/configure.in
+--- gtkhtml-3.24.4/configure.in 2008-10-16 10:57:08.000000000 +0200
++++ gtkhtml-3.24.4/configure.in 2008-10-16 11:05:40.000000000 +0200
+@@ -84,12 +84,12 @@
+ dnl
+ dnl do we want a11y support?
+ dnl
+ GAIL_MODULES=""
+ AC_ARG_ENABLE(a11y,
+- [ --enable-a11y Enable Accessibility (requires gail) [default=yes]],
+- [ac_cv_enable_a11y=$enableval],[ac_cv_enable_a11y=yes])
++ [ --enable-a11y Enable Accessibility (requires gail) [default=no]],
++ [ac_cv_enable_a11y=$enableval],[ac_cv_enable_a11y=no])
+ AC_MSG_CHECKING([whether to enable a11y])
+ if test "$ac_cv_enable_a11y" = yes; then
+ AC_MSG_RESULT(yes)
+ GAIL_MODULES="gail >= gail_minimum_version"
+ PKG_CHECK_MODULES(GAIL, $GAIL_MODULES)
+@@ -111,12 +111,12 @@
+ dnl
+ dnl do we want printing support?
+ dnl
+ GNOMEPRINT_MODULES=""
+ AC_ARG_ENABLE(printing,
+- [ --enable-printing Enable Printing [default=yes]],
+- [ac_cv_enable_printing=$enableval],[ac_cv_enable_printing=yes])
++ [ --enable-printing Enable Printing [default=no]],
++ [ac_cv_enable_printing=$enableval],[ac_cv_enable_printing=no])
+ AC_MSG_CHECKING([whether to enable printing])
+ if test "$ac_cv_enable_printing" = yes; then
+ AC_MSG_RESULT(yes)
+ GNOME_TEST_PROGRAMS="gtest test-suite test-stress"
+ else
+@@ -130,12 +130,12 @@
+ dnl
+ dnl do we want gnome support?
+ dnl
+ GNOME_MODULES=""
+ AC_ARG_ENABLE(gnome,
+- [ --enable-gnome Enable Gnome (requires many things) [default=yes]],
+- [ac_cv_enable_gnome=$enableval],[ac_cv_enable_gnome=yes])
++ [ --enable-gnome Enable Gnome (requires many things) [default=no]],
++ [ac_cv_enable_gnome=$enableval],[ac_cv_enable_gnome=no])
+ AC_MSG_CHECKING([whether to enable gnome])
+ if test "$ac_cv_enable_gnome" = yes; then
+ AC_MSG_RESULT(yes)
+ GNOME_MODULES="libgnomeui-2.0 >= libgnomeui_minimum_version"
+
+@@ -198,14 +198,30 @@
+
+ dnl **********************************
+ dnl soup for testgtkhtml
+ dnl **********************************
+
+-PKG_CHECK_MODULES(SOUP, libsoup-2.4, have_soup="yes", have_soup="no")
++AC_ARG_ENABLE(soup,
++ [ --enable-soup Enable soup [default=no]],
++ [ac_cv_enable_soup=$enableval],[ac_cv_enable_soup=no])
++AC_MSG_CHECKING([whether to enable soup])
++if test "$ac_cv_enable_soup" = yes; then
++ AC_MSG_RESULT(yes)
++ PKG_CHECK_MODULES(SOUP, libsoup-2.4, have_soup="yes", have_soup="no")
++ if test "x$have_soup" = "xno"; then
++ PKG_CHECK_MODULES(SOUP, soup-2.0 >= 0.7.9, [have_soup="yes"
++ AC_DEFINE(HAVE_OLD_SOUP)],
++ have_soup="no")
++ fi
++ AC_SUBST(SOUP_CFLAGS)
++ AC_SUBST(SOUP_LIBS)
++else
++ have_soup="no"
++ AC_MSG_RESULT(no)
++ AC_DEFINE(DISABLE_SOUP)
++fi
+ AM_CONDITIONAL(HAVE_SOUP, test x$have_soup != xno)
+-AC_SUBST(SOUP_CFLAGS)
+-AC_SUBST(SOUP_LIBS)
+
+ dnl **************************************************
+ dnl * iso-codes
+ dnl **************************************************
+
+@@ -313,8 +329,9 @@
+
+ accessibility support: $ac_cv_enable_a11y
+ gnome-print support: $ac_cv_enable_printing
+ gnome support: $ac_cv_enable_gnome
+ bonobo-editor component: $bonobo_editor
++ soup: $ac_cv_enable_soup
+
+ Editor component type: ${GNOME_GTKHTML_EDITOR_TYPE}
+ "
+Only in gtkhtml-3.24.4/gtkhtml: gtkhtml.c.orig
+Only in gtkhtml-3.24.4/gtkhtml: htmlengine.c.orig
+diff -r -U5 gtkhtml-3.24.4/Makefile.am gtkhtml-3.24.4/Makefile.am
+--- gtkhtml-3.24.4/Makefile.am 2008-10-16 10:57:08.000000000 +0200
++++ gtkhtml-3.24.4/Makefile.am 2008-10-16 11:07:40.000000000 +0200
+@@ -43,6 +43,20 @@
+ BUGS \
+ intltool-extract.in \
+ intltool-update.in \
+ intltool-merge.in
+
+-DISTCHECK_CONFIGURE_FLAGS = --with-bonobo-editor
++#DISTCHECK_CONFIGURE_FLAGS = --with-bonobo-editor
++#AK/22-12-05: common way to create .deb packages (Scratchbox)
++#
++deb:
++ dpkg-buildpackage -rfakeroot -uc -us -sa -D
++
++# Use "dch -a" to add comment to debian/changelog
++# Use "dch -v xx" to add new version to debian/changelog
++#
++# DEBEMAIL and DEBFULLNAME better be defined...! :)
++#
++# DO NOT MANUALLY EDIT THE debian/changelog.
++#
++ver:
++ dch -v 999
--- /dev/null
+# Initial panning support
+#
+# Copyright (C) 2006 - 2007 Nokia Corporation.
+# This file is distributed under the terms of GNU LGPL license, either version 2
+# of the License, or (at your option) any later version.
+#
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.24.4/gtkhtml/gtkhtml.c
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.24.4/gtkhtml/gtkhtml.c
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.24.4/gtkhtml/gtkhtml.c
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.24.4/gtkhtml/gtkhtml.c
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-02-15 17:27:50.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-02-15 17:27:50.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-02-15 17:27:50.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-02-15 17:27:50.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-02-16 15:40:30.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-02-16 15:40:30.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-02-16 15:40:30.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-02-16 15:40:30.000000000 +0200
+@@ -1679,6 +1679,35 @@
+ engine = GTK_HTML (widget)->engine;
+ if (GTK_HTML (widget)->in_selection_drag && html_engine_get_editable (engine))
+ html_engine_jump_at (engine, x, y);
++
++ /* (TL 18-Nov-05) Added panning feature */
++ if (GTK_HTML (widget)->panning) {
++ GtkAdjustment *adj;
++ gint dx, dy;
++ gdouble value;
++
++ dx = x - GTK_HTML (widget)->lastx;
++ dy = y - GTK_HTML (widget)->lasty;
++
++ /* Vertical panning */
++ adj = gtk_layout_get_vadjustment(GTK_LAYOUT(widget));
++ value = adj->value - (gdouble) dy;
++ if (value < adj->lower)
++ value = adj->lower;
++ else if (value > (adj->upper - adj->page_size))
++ value = adj->upper - adj->page_size;
++ gtk_adjustment_set_value(adj, value);
++
++ /* Horizontal panning */
++ adj = gtk_layout_get_hadjustment(GTK_LAYOUT(widget));
++ value = adj->value - (gdouble) dx;
++ if (value < adj->lower)
++ value = adj->lower;
++ else if (value > (adj->upper - adj->page_size))
++ value = adj->upper - adj->page_size;
++ gtk_adjustment_set_value(adj, value);
++ }
++
+ return TRUE;
+ }
+
+@@ -1790,7 +1819,13 @@
+ }
+ break;
+ case 1:
+- html->in_selection_drag = TRUE;
++ /*html->in_selection_drag = TRUE;*/
++ /* (TL 18-Nov-05) First click starts panning, not selection */
++ html->in_selection_drag = FALSE;
++ html->panning = TRUE;
++ html->lastx = x;
++ html->lasty = y;
++
+ if (html_engine_get_editable (engine)) {
+ HTMLObject *obj;
+
+@@ -1856,13 +1891,19 @@
+ }
+ } else if (event->button == 1 && html->allow_selection) {
+ if (event->type == GDK_2BUTTON_PRESS) {
+- html->in_selection_drag = FALSE;
+- gtk_html_select_word (html);
++ /*html->in_selection_drag = FALSE;
++ gtk_html_select_word (html);*/
++ /* (TL 18-Nov-05) Second click starts selection and stops panning */
++ html->in_selection_drag = TRUE;
++ html->panning = FALSE;
+ html->in_selection = TRUE;
+ }
+ else if (event->type == GDK_3BUTTON_PRESS) {
+- html->in_selection_drag = FALSE;
+- gtk_html_select_line (html);
++ /*html->in_selection_drag = FALSE;
++ gtk_html_select_line (html);*/
++ /* (TL 18-Nov-05) Third click starts selection and stops panning */
++ html->in_selection_drag = TRUE;
++ html->panning = FALSE;
+ html->in_selection = TRUE;
+ }
+ }
+@@ -1909,6 +1950,8 @@
+ html_engine_jump_at (engine, x, y);
+
+ html->in_selection_drag = FALSE;
++ /* (TL 18-Nov-05) Stop panning on button release */
++ html->panning = FALSE;
+
+ if (!html->priv->dnd_in_progress
+ && html->pointer_url != NULL && ! html->in_selection) {
+@@ -1951,7 +1994,7 @@
+ }
+
+ html->priv->need_im_reset = TRUE;
+- gtk_im_context_focus_in (html->priv->im_context);
++ //gtk_im_context_focus_in (html->priv->im_context); // (TL 20-Oct-05) Kludge to focus issues
+
+ gtk_html_keymap_direction_changed (gdk_keymap_get_for_display (gtk_widget_get_display (widget)),
+ html);
+@@ -3448,6 +3491,11 @@
+ html->selection_x1 = 0;
+ html->selection_y1 = 0;
+
++ /* (TL 18-Nov-05) For panning */
++ html->panning = FALSE;
++ html->lastx = 0;
++ html->lasty = 0;
++
+ html->in_selection = FALSE;
+ html->in_selection_drag = FALSE;
+
+Only in gtkhtml-3.24.4/gtkhtml: gtkhtml.c.orig
+Only in gtkhtml-3.24.4/gtkhtml: gtkhtml.c.orig
+Only in gtkhtml-3.24.4/gtkhtml: gtkhtml.c.orig
+Only in gtkhtml-3.24.4/gtkhtml: gtkhtml.c.orig
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.h gtkhtml-3.24.4/gtkhtml/gtkhtml.h
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.h gtkhtml-3.24.4/gtkhtml/gtkhtml.h
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.h gtkhtml-3.24.4/gtkhtml/gtkhtml.h
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.h gtkhtml-3.24.4/gtkhtml/gtkhtml.h
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2007-02-15 17:42:33.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2007-02-15 17:42:33.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2007-02-15 17:42:33.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2007-02-15 17:42:33.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2007-02-16 15:40:30.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2007-02-16 15:40:30.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2007-02-16 15:40:30.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2007-02-16 15:40:30.000000000 +0200
+@@ -58,6 +58,11 @@
+
+ gint selection_x1, selection_y1;
+
++ /* (TL 18-Nov-05) Panning variables */
++ gboolean panning;
++ gint lastx;
++ gint lasty;
++
+ guint in_selection : 1;
+ guint in_selection_drag : 1;
+
+Only in gtkhtml-3.24.4/gtkhtml: gtkhtml.h.orig
+Only in gtkhtml-3.24.4/gtkhtml: gtkhtml.h.orig
+Only in gtkhtml-3.24.4/gtkhtml: gtkhtml.h.orig
+Only in gtkhtml-3.24.4/gtkhtml: gtkhtml.h.orig
--- /dev/null
+# Double-click initiates text selection
+#
+# Copyright (C) 2006 - 2007 Nokia Corporation.
+# This file is distributed under the terms of GNU LGPL license, either version 2
+# of the License, or (at your option) any later version.
+#
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.24.4/gtkhtml/gtkhtml.c
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.24.4/gtkhtml/gtkhtml.c
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.24.4/gtkhtml/gtkhtml.c
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.24.4/gtkhtml/gtkhtml.c
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-02-16 15:40:30.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-02-16 15:40:30.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-02-16 15:40:30.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-02-16 15:40:30.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-02-16 15:56:22.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-02-16 15:56:22.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-02-16 15:56:22.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-02-16 15:56:22.000000000 +0200
+@@ -193,6 +193,9 @@
+ /* Interval for scrolling during selection. */
+ #define SCROLL_TIMEOUT_INTERVAL 10
+
++/* Mouse move threshold for doubleclick check */
++#define MOUSE_DBLCLK_THRESHOLD 10
++
+ \f
+ GtkHTMLParagraphStyle
+ clueflow_style_to_paragraph_style (HTMLClueFlowStyle style, HTMLListType item_type)
+@@ -1673,6 +1676,18 @@
+
+ gdk_window_get_pointer (GTK_LAYOUT (widget)->bin_window, &x, &y, NULL);
+
++ /* If there is only a small motion from the origin and simple
++ doubleclick is active, abort the motion, otherwise clear simple_dblclick flag */
++ if (GTK_HTML (widget)->simple_dblclick) {
++ GtkHTML *html = GTK_HTML (widget);
++
++ if (abs(x - html->selection_x1) <= MOUSE_DBLCLK_THRESHOLD &&
++ abs(y - html->selection_y1) <= MOUSE_DBLCLK_THRESHOLD)
++ return TRUE;
++
++ html->simple_dblclick = FALSE;
++ }
++
+ if (!mouse_change_pos (widget, window, x, y, event->state))
+ return FALSE;
+
+@@ -1897,6 +1912,10 @@
+ html->in_selection_drag = TRUE;
+ html->panning = FALSE;
+ html->in_selection = TRUE;
++ /* Check for simple double click, for selecting a word */
++ html->simple_dblclick = TRUE;
++ html->selection_x1 = x;
++ html->selection_y1 = y;
+ }
+ else if (event->type == GDK_3BUTTON_PRESS) {
+ /*html->in_selection_drag = FALSE;
+@@ -1935,7 +1954,8 @@
+
+ engine = html->engine;
+
+- if (html->in_selection) {
++ /* If it is a simple doubleclick don't allow the selection */
++ if (html->in_selection && !html->simple_dblclick) {
+ html_engine_update_selection_active_state (html->engine, html->priv->event_time);
+ if (html->in_selection_drag)
+ html_engine_select_region (engine, html->selection_x1, html->selection_y1,
+@@ -1961,6 +1981,12 @@
+ html_text_set_link_visited (HTML_TEXT(focus_object), focus_object_offset, html->engine, TRUE);
+ }
+ }
++
++ /* If it was a simple doubleclick select a word */
++ if (html->simple_dblclick) {
++ html->simple_dblclick = FALSE;
++ gtk_html_select_word(html);
++ }
+ }
+
+ html->in_selection = FALSE;
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.h gtkhtml-3.24.4/gtkhtml/gtkhtml.h
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.h gtkhtml-3.24.4/gtkhtml/gtkhtml.h
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.h gtkhtml-3.24.4/gtkhtml/gtkhtml.h
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.h gtkhtml-3.24.4/gtkhtml/gtkhtml.h
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2007-02-16 15:40:30.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2007-02-16 15:40:30.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2007-02-16 15:40:30.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2007-02-16 15:40:30.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2007-02-16 15:56:22.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2007-02-16 15:56:22.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2007-02-16 15:56:22.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2007-02-16 15:56:22.000000000 +0200
+@@ -68,6 +68,10 @@
+
+ guint debug : 1;
+ guint allow_selection : 1;
++
++ /* Dbl-clk variables */
++
++ guint simple_dblclick : 1;
+
+ guint hadj_connection;
+ guint vadj_connection;
--- /dev/null
+# Declare some variables as const to silence the compiler
+#
+# Copyright (C) 2006 - 2007 Nokia Corporation.
+# This file is distributed under the terms of GNU LGPL license, either version 2
+# of the License, or (at your option) any later version.
+#
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.24.4/gtkhtml/gtkhtml.c
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.24.4/gtkhtml/gtkhtml.c
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.24.4/gtkhtml/gtkhtml.c
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.24.4/gtkhtml/gtkhtml.c
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-02-16 16:29:01.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-02-16 16:29:01.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-02-16 16:29:01.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-02-16 16:29:01.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-02-16 16:44:08.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-02-16 16:44:08.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-02-16 16:44:08.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-02-16 16:44:08.000000000 +0200
+@@ -92,7 +92,7 @@
+ DND_TARGET_TYPE_STRING,
+ };
+
+-static GtkTargetEntry dnd_link_sources [] = {
++static const GtkTargetEntry dnd_link_sources [] = {
+ { "message/rfc822", 0, DND_TARGET_TYPE_MESSAGE_RFC822 },
+ { "x-uid-list", 0, DND_TARGET_TYPE_X_UID_LIST },
+ { "text/uri-list", 0, DND_TARGET_TYPE_TEXT_URI_LIST },
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml-properties.c gtkhtml-3.24.4/gtkhtml/gtkhtml-properties.c
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml-properties.c gtkhtml-3.24.4/gtkhtml/gtkhtml-properties.c
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml-properties.c gtkhtml-3.24.4/gtkhtml/gtkhtml-properties.c
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml-properties.c gtkhtml-3.24.4/gtkhtml/gtkhtml-properties.c
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml-properties.c 2007-02-12 08:57:38.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml-properties.c 2007-02-12 08:57:38.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml-properties.c 2007-02-12 08:57:38.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml-properties.c 2007-02-12 08:57:38.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml-properties.c 2007-02-16 16:44:08.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml-properties.c 2007-02-16 16:44:08.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml-properties.c 2007-02-16 16:44:08.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml-properties.c 2007-02-16 16:44:08.000000000 +0200
+@@ -136,7 +136,7 @@
+
+ /* enums */
+
+-static GEnumValue _gtk_html_cursor_skip_values[] = {
++static const GEnumValue _gtk_html_cursor_skip_values[] = {
+ { GTK_HTML_CURSOR_SKIP_ONE, "GTK_HTML_CURSOR_SKIP_ONE", "one" },
+ { GTK_HTML_CURSOR_SKIP_WORD, "GTK_HTML_CURSOR_SKIP_WORD", "word" },
+ { GTK_HTML_CURSOR_SKIP_PAGE, "GTK_HTML_CURSOR_SKIP_WORD", "page" },
+@@ -155,7 +155,7 @@
+ return cursor_skip_type;
+ }
+
+-static GEnumValue _gtk_html_command_values[] = {
++static const GEnumValue _gtk_html_command_values[] = {
+ { GTK_HTML_COMMAND_UNDO, "GTK_HTML_COMMAND_UNDO", "undo" },
+ { GTK_HTML_COMMAND_REDO, "GTK_HTML_COMMAND_REDO", "redo" },
+ { GTK_HTML_COMMAND_COPY, "GTK_HTML_COMMAND_COPY", "copy" },
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlengine-edit-cursor.c gtkhtml-3.24.4/gtkhtml/htmlengine-edit-cursor.c
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlengine-edit-cursor.c gtkhtml-3.24.4/gtkhtml/htmlengine-edit-cursor.c
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlengine-edit-cursor.c gtkhtml-3.24.4/gtkhtml/htmlengine-edit-cursor.c
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlengine-edit-cursor.c gtkhtml-3.24.4/gtkhtml/htmlengine-edit-cursor.c
+--- gtkhtml-3.24.4/gtkhtml/htmlengine-edit-cursor.c 2007-02-09 21:54:58.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/htmlengine-edit-cursor.c 2007-02-09 21:54:58.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/htmlengine-edit-cursor.c 2007-02-09 21:54:58.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/htmlengine-edit-cursor.c 2007-02-09 21:54:58.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlengine-edit-cursor.c 2007-02-16 16:44:08.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlengine-edit-cursor.c 2007-02-16 16:44:08.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlengine-edit-cursor.c 2007-02-16 16:44:08.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlengine-edit-cursor.c 2007-02-16 16:44:08.000000000 +0200
+@@ -35,18 +35,18 @@
+
+ #define BLINK_TIMEOUT 500
+
+-static GdkColor table_stipple_active_on = { 0, 0, 0, 0xffff };
+-static GdkColor table_stipple_active_off = { 0, 0xffff, 0xffff, 0xffff };
+-static GdkColor table_stipple_non_active_on = { 0, 0xaaaa, 0xaaaa, 0xaaaa };
+-static GdkColor table_stipple_non_active_off = { 0, 0xffff, 0xffff, 0xffff };
+-
+-static GdkColor cell_stipple_active_on = { 0, 0x7fff, 0x7fff, 0 };
+-static GdkColor cell_stipple_active_off = { 0, 0xffff, 0xffff, 0xffff };
+-static GdkColor cell_stipple_non_active_on = { 0, 0x7aaa, 0x7aaa, 0x7aaa };
+-static GdkColor cell_stipple_non_active_off = { 0, 0xffff, 0xffff, 0xffff };
++static const GdkColor table_stipple_active_on = { 0, 0, 0, 0xffff };
++static const GdkColor table_stipple_active_off = { 0, 0xffff, 0xffff, 0xffff };
++static const GdkColor table_stipple_non_active_on = { 0, 0xaaaa, 0xaaaa, 0xaaaa };
++static const GdkColor table_stipple_non_active_off = { 0, 0xffff, 0xffff, 0xffff };
++
++static const GdkColor cell_stipple_active_on = { 0, 0x7fff, 0x7fff, 0 };
++static const GdkColor cell_stipple_active_off = { 0, 0xffff, 0xffff, 0xffff };
++static const GdkColor cell_stipple_non_active_on = { 0, 0x7aaa, 0x7aaa, 0x7aaa };
++static const GdkColor cell_stipple_non_active_off = { 0, 0xffff, 0xffff, 0xffff };
+
+-static GdkColor image_stipple_active_on = { 0, 0xffff, 0, 0 };
+-static GdkColor image_stipple_active_off = { 0, 0xffff, 0xffff, 0xffff };
++static const GdkColor image_stipple_active_on = { 0, 0xffff, 0, 0 };
++static const GdkColor image_stipple_active_off = { 0, 0xffff, 0xffff, 0xffff };
+
+ void
+ html_engine_hide_cursor (HTMLEngine *engine)
+@@ -110,7 +110,7 @@
+
+ static void
+ draw_cursor_rectangle (HTMLEngine *e, gint x1, gint y1, gint x2, gint y2,
+- GdkColor *on_color, GdkColor *off_color,
++ const GdkColor *on_color, const GdkColor *off_color,
+ gint offset)
+ {
+ GdkGC *gc;
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlengine-edit-cut-and-paste.c gtkhtml-3.24.4/gtkhtml/htmlengine-edit-cut-and-paste.c
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlengine-edit-cut-and-paste.c gtkhtml-3.24.4/gtkhtml/htmlengine-edit-cut-and-paste.c
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlengine-edit-cut-and-paste.c gtkhtml-3.24.4/gtkhtml/htmlengine-edit-cut-and-paste.c
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlengine-edit-cut-and-paste.c gtkhtml-3.24.4/gtkhtml/htmlengine-edit-cut-and-paste.c
+--- gtkhtml-3.24.4/gtkhtml/htmlengine-edit-cut-and-paste.c 2007-01-03 17:19:57.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/htmlengine-edit-cut-and-paste.c 2007-01-03 17:19:57.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/htmlengine-edit-cut-and-paste.c 2007-01-03 17:19:57.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/htmlengine-edit-cut-and-paste.c 2007-01-03 17:19:57.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlengine-edit-cut-and-paste.c 2007-02-16 16:44:08.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlengine-edit-cut-and-paste.c 2007-02-16 16:44:08.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlengine-edit-cut-and-paste.c 2007-02-16 16:44:08.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlengine-edit-cut-and-paste.c 2007-02-16 16:44:08.000000000 +0200
+@@ -1253,9 +1253,9 @@
+ html_engine_thaw (e);
+ }
+
+-static char *picto_chars = "DO)(|/PQ\0:-\0:\0:-\0:\0:;=-\0:;\0:-~\0:\0:\0:-\0:\0:-\0:\0:-\0:\0:-\0:\0";
+-static gint picto_states [] = { 9, 14, 19, 27, 35, 40, 45, 50, 0, -1, 12, 0, -1, 0, -2, 17, 0, -2, 0, -3, -4, -5, 24, 0, -3, -4, 0, -6, 31, 33, 0, -6, 0, -11, 0, -8, 38, 0, -8, 0, -9, 43, 0, -9, 0, -10, 48, 0, -10, 0, -12, 53, 0, -12, 0};
+-static gchar *picto_icon_names [] = {
++static const char *picto_chars = "DO)(|/PQ\0:-\0:\0:-\0:\0:;=-\0:;\0:-~\0:\0:\0:-\0:\0:-\0:\0:-\0:\0:-\0:\0";
++static const gint picto_states [] = { 9, 14, 19, 27, 35, 40, 45, 50, 0, -1, 12, 0, -1, 0, -2, 17, 0, -2, 0, -3, -4, -5, 24, 0, -3, -4, 0, -6, 31, 33, 0, -6, 0, -11, 0, -8, 38, 0, -8, 0, -9, 43, 0, -9, 0, -10, 48, 0, -10, 0, -12, 53, 0, -12, 0};
++static const gchar *picto_icon_names [] = {
+ "stock_smiley-6",
+ "stock_smiley-5",
+ "stock_smiley-1",
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlentity.c gtkhtml-3.24.4/gtkhtml/htmlentity.c
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlentity.c gtkhtml-3.24.4/gtkhtml/htmlentity.c
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlentity.c gtkhtml-3.24.4/gtkhtml/htmlentity.c
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlentity.c gtkhtml-3.24.4/gtkhtml/htmlentity.c
+--- gtkhtml-3.24.4/gtkhtml/htmlentity.c 2007-01-03 17:19:57.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/htmlentity.c 2007-01-03 17:19:57.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/htmlentity.c 2007-01-03 17:19:57.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/htmlentity.c 2007-01-03 17:19:57.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlentity.c 2007-02-16 16:44:08.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlentity.c 2007-02-16 16:44:08.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlentity.c 2007-02-16 16:44:08.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlentity.c 2007-02-16 16:44:08.000000000 +0200
+@@ -37,7 +37,10 @@
+ };
+ typedef struct _EntityEntry EntityEntry;
+
+-static EntityEntry entity_table[] = {
++/* FIXME: why not just sort these and use bsearch() instead of creating
++ * an additional glib hash table?
++ */
++static const EntityEntry entity_table[] = {
+
+ /* Latin1 */
+ { 160, "nbsp" },
--- /dev/null
+diff -r -U5 gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.24.4/gtkhtml/gtkhtml.c
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2008-10-16 11:45:07.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2008-10-16 11:42:21.000000000 +0200
+@@ -6048,12 +6048,14 @@
+ html_font_manager_set_magnification (>K_HTML (HTML_FRAME (o)->html)->engine->painter->font_manager,
+ *(gdouble *) data);
+ } else if (HTML_IS_IFRAME (o)) {
+ html_font_manager_set_magnification (>K_HTML (HTML_IFRAME (o)->html)->engine->painter->font_manager,
+ *(gdouble *) data);
+- } else if (HTML_IS_TEXT (o))
+- html_text_calc_font_size (HTML_TEXT (o), e);
++ } else if (HTML_IS_TEXT (o)) {
++ html_text_calc_font_size (HTML_TEXT (o), e);
++ } else if (HTML_IS_IMAGE (o))
++ html_image_set_magnification (HTML_IMAGE (o), (*((gdouble *)data))) ;
+ }
+
+ void
+ gtk_html_set_magnification (GtkHTML *html, gdouble magnification)
+ {
+diff -r -U5 gtkhtml-3.24.4/gtkhtml/htmlimage.c gtkhtml-3.24.4/gtkhtml/htmlimage.c
+--- gtkhtml-3.24.4/gtkhtml/htmlimage.c 2008-10-16 11:45:06.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlimage.c 2008-10-16 11:42:26.000000000 +0200
+@@ -70,10 +70,17 @@
+ static gint html_image_pointer_update (HTMLImagePointer *ip);
+ static void html_image_pointer_start_animation (HTMLImagePointer *ip);
+
+ static GdkPixbuf * html_image_factory_get_missing (HTMLImageFactory *factory);
+
++void
++html_image_set_magnification (HTMLImage *image, gdouble new_magnification)
++{
++ if (NULL == image) return ;
++ image->magnification = new_magnification ;
++}
++
+ guint
+ html_image_get_actual_width (HTMLImage *image, HTMLPainter *painter)
+ {
+ GdkPixbufAnimation *anim = image->image_ptr->animation;
+ gint pixel_size = painter ? html_painter_get_pixel_size (painter) : 1;
+@@ -81,17 +88,17 @@
+
+ if (image->percent_width) {
+ /* The cast to `gdouble' is to avoid overflow (eg. when
+ printing). */
+ width = ((gdouble) HTML_OBJECT (image)->max_width
+- * image->specified_width) / 100;
++ * image->specified_width) / 100 * image->magnification;
+ } else if (image->specified_width > 0) {
+- width = image->specified_width * pixel_size;
++ width = image->specified_width * pixel_size * image->magnification;
+ } else if (image->image_ptr == NULL || anim == NULL) {
+- width = DEFAULT_SIZE * pixel_size;
++ width = DEFAULT_SIZE * pixel_size * image->magnification;
+ } else {
+- width = gdk_pixbuf_animation_get_width (anim) * pixel_size;
++ width = gdk_pixbuf_animation_get_width (anim) * pixel_size * image->magnification;
+
+ if (image->specified_height > 0 || image->percent_height) {
+ double scale;
+
+ scale = ((double) html_image_get_actual_height (image, painter))
+@@ -114,17 +121,17 @@
+
+ if (image->percent_height) {
+ /* The cast to `gdouble' is to avoid overflow (eg. when
+ printing). */
+ height = ((gdouble) html_engine_get_view_height (image->image_ptr->factory->engine)
+- * image->specified_height) / 100;
++ * image->specified_height) / 100 * image->magnification;
+ } else if (image->specified_height > 0) {
+- height = image->specified_height * pixel_size;
++ height = image->specified_height * pixel_size * image->magnification;
+ } else if (image->image_ptr == NULL || anim == NULL) {
+- height = DEFAULT_SIZE * pixel_size;
++ height = DEFAULT_SIZE * pixel_size * image->magnification;
+ } else {
+- height = gdk_pixbuf_animation_get_height (anim) * pixel_size;
++ height = gdk_pixbuf_animation_get_height (anim) * pixel_size * image->magnification;
+
+ if (image->specified_width > 0 || image->percent_width) {
+ double scale;
+
+ scale = ((double) html_image_get_actual_width (image, painter))
+@@ -852,11 +859,11 @@
+ image->vspace = 0;
+
+ if (valign == HTML_VALIGN_NONE)
+ valign = HTML_VALIGN_BOTTOM;
+ image->valign = valign;
+-
++ image->magnification = 1.0 ;
+ image->image_ptr = html_image_factory_register (imf, image, filename, reload);
+ }
+
+ HTMLObject *
+ html_image_new (HTMLImageFactory *imf,
+diff -r -U5 gtkhtml-3.24.4/gtkhtml/htmlimage.h gtkhtml-3.24.4/gtkhtml/htmlimage.h
+--- gtkhtml-3.24.4/gtkhtml/htmlimage.h 2008-06-13 05:05:58.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlimage.h 2008-10-16 11:44:16.000000000 +0200
+@@ -71,10 +71,11 @@
+ gchar *url;
+ gchar *target;
+ gchar *alt;
+ gchar *usemap;
+ gchar *final_url;
++ gdouble magnification;
+ };
+
+ struct _HTMLImageClass {
+ HTMLObjectClass parent_class;
+ };
+@@ -139,10 +140,12 @@
+ const gchar *url);
+ guint html_image_get_actual_width (HTMLImage *image,
+ HTMLPainter *painter);
+ guint html_image_get_actual_height (HTMLImage *image,
+ HTMLPainter *painter);
++void html_image_set_magnification (HTMLImage *image,
++ gdouble new_magnification) ;
+ /* FIXME move to htmlimagefactory.c */
+ HTMLImageFactory *html_image_factory_new (HTMLEngine *e);
+ void html_image_factory_free (HTMLImageFactory *factory);
+ void html_image_factory_cleanup (HTMLImageFactory *factory); /* Does gc etc. - removes unused image entries */
+ void html_image_factory_stop_animations (HTMLImageFactory *factory);
--- /dev/null
+# Use proper function (gdk_device_get_state) to get next motion hint
+#
+# Copyright (C) 2006 - 2007 Nokia Corporation.
+# This file is distributed under the terms of GNU LGPL license, either version 2
+# of the License, or (at your option) any later version.
+#
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.9.1.mod/gtkhtml/gtkhtml.c
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.9.1.mod/gtkhtml/gtkhtml.c
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.9.1.mod/gtkhtml/gtkhtml.c
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.9.1.mod/gtkhtml/gtkhtml.c
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2006-12-04 12:43:55.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2006-12-04 12:43:55.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2006-12-04 12:43:55.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2006-12-04 12:43:55.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2006-12-05 09:09:51.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2006-12-05 09:09:51.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2006-12-05 09:09:51.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2006-12-05 09:09:51.000000000 +0200
+@@ -1611,6 +1611,8 @@
+ widget = shift_to_iframe_parent (widget, &x, &y);
+
+ gdk_window_get_pointer (GTK_LAYOUT (widget)->bin_window, &x, &y, NULL);
++ if (event->is_hint)
++ gdk_device_get_state (event->device, GTK_LAYOUT (widget)->bin_window, NULL, NULL) ;
+
+ /* If there is only a small motion from the origin and simple
+ doubleclick is active, abort the motion, otherwise clear simple_dblclick flag */
--- /dev/null
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.9.1.new/gtkhtml/gtkhtml.c
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.9.1.new/gtkhtml/gtkhtml.c
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.9.1.new/gtkhtml/gtkhtml.c
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.9.1.new/gtkhtml/gtkhtml.c
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-01-22 10:35:40.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-01-22 10:35:40.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-01-22 10:35:40.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-01-22 10:35:40.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-01-22 10:52:26.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-01-22 10:52:26.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-01-22 10:52:26.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-01-22 10:52:26.000000000 +0200
+@@ -1598,6 +1598,11 @@
+ GdkWindow *window = widget->window;
+ HTMLEngine *engine;
+ gint x, y;
++ guint mouse_double_click_threshold = MOUSE_DBLCLK_THRESHOLD ;
++ GtkSettings *gtk_settings = gtk_widget_get_settings (widget) ;
++
++ if (NULL != gtk_settings)
++ g_object_get (G_OBJECT (gtk_settings), "gtk-double-click-distance", &mouse_double_click_threshold, NULL) ;
+
+ g_return_val_if_fail (widget != NULL, 0);
+ g_return_val_if_fail (GTK_IS_HTML (widget), 0);
+@@ -1619,8 +1624,8 @@
+ if (GTK_HTML (widget)->simple_dblclick) {
+ GtkHTML *html = GTK_HTML (widget);
+
+- if (abs(x - html->selection_x1) <= MOUSE_DBLCLK_THRESHOLD &&
+- abs(y - html->selection_y1) <= MOUSE_DBLCLK_THRESHOLD)
++ if (abs(x - html->selection_x1) <= mouse_double_click_threshold &&
++ abs(y - html->selection_y1) <= mouse_double_click_threshold)
+ return TRUE;
+
+ html->simple_dblclick = FALSE;
--- /dev/null
+diff -r -U5 gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.24.4/gtkhtml/gtkhtml.c
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2008-10-16 12:07:24.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2008-10-16 12:09:36.000000000 +0200
+@@ -1712,10 +1712,11 @@
+ GdkWindow *window = widget->window;
+ HTMLEngine *engine;
+ gint x, y;
+ guint mouse_double_click_threshold = MOUSE_DBLCLK_THRESHOLD ;
+ GtkSettings *gtk_settings = gtk_widget_get_settings (widget) ;
++ GtkHTML *html = NULL ;
+
+ if (NULL != gtk_settings)
+ g_object_get (G_OBJECT (gtk_settings), "gtk-double-click-distance", &mouse_double_click_threshold, NULL) ;
+
+ g_return_val_if_fail (widget != NULL, 0);
+@@ -1731,55 +1732,60 @@
+
+ gdk_window_get_pointer (GTK_LAYOUT (widget)->bin_window, &x, &y, NULL);
+ if (event->is_hint)
+ gdk_device_get_state (event->device, GTK_LAYOUT (widget)->bin_window, NULL, NULL) ;
+
++ html = GTK_HTML (widget) ;
++
+ /* If there is only a small motion from the origin and simple
+ doubleclick is active, abort the motion, otherwise clear simple_dblclick flag */
+- if (GTK_HTML (widget)->simple_dblclick) {
+- GtkHTML *html = GTK_HTML (widget);
+-
++ if (html->simple_dblclick) {
+ if (abs(x - html->selection_x1) <= mouse_double_click_threshold &&
+ abs(y - html->selection_y1) <= mouse_double_click_threshold)
+ return TRUE;
+
+ html->simple_dblclick = FALSE;
+ }
+
+ if (!mouse_change_pos (widget, window, x, y, event->state))
+ return FALSE;
+
+- engine = GTK_HTML (widget)->engine;
+- if (GTK_HTML (widget)->in_selection_drag && html_engine_get_editable (engine))
++ engine = html->engine;
++ if (html->in_selection_drag && html_engine_get_editable (engine))
+ html_engine_jump_at (engine, x, y);
+
+ /* (TL 18-Nov-05) Added panning feature */
+- if (GTK_HTML (widget)->panning) {
++ if (html->panning) {
+ GtkAdjustment *adj;
+ gint dx, dy;
+ gdouble value;
+
+- dx = x - GTK_HTML (widget)->lastx;
+- dy = y - GTK_HTML (widget)->lasty;
++ dx = x - html->lastx;
++ dy = y - html->lasty;
+
+ /* Vertical panning */
+ adj = gtk_layout_get_vadjustment(GTK_LAYOUT(widget));
+ value = adj->value - (gdouble) dy;
+ if (value < adj->lower)
+ value = adj->lower;
+ else if (value > (adj->upper - adj->page_size))
+ value = adj->upper - adj->page_size;
++ if (ABS (html->y_amount_panned) < mouse_double_click_threshold)
++ html->y_amount_panned += (gint)(value - adj->value) ;
+ gtk_adjustment_set_value(adj, value);
+
+ /* Horizontal panning */
+ adj = gtk_layout_get_hadjustment(GTK_LAYOUT(widget));
+ value = adj->value - (gdouble) dx;
+ if (value < adj->lower)
+ value = adj->lower;
+ else if (value > (adj->upper - adj->page_size))
+ value = adj->upper - adj->page_size;
++ if (ABS (html->x_amount_panned) < mouse_double_click_threshold)
++ html->x_amount_panned += (gint)(value - adj->value) ;
+ gtk_adjustment_set_value(adj, value);
++
+ }
+
+ return TRUE;
+ }
+
+@@ -1830,18 +1836,20 @@
+ GdkEventButton *event)
+ {
+ GtkHTML *html;
+ GtkWidget *orig_widget = widget;
+ HTMLEngine *engine;
+- gint value, x, y;
++ gint value, x, y, xWnd, yWnd;
+
+ /* printf ("button_press_event\n"); */
+
+ x = event->x;
+ y = event->y;
+
++ gdk_window_get_pointer (widget->window, &xWnd, &yWnd, NULL) ;
+ widget = shift_to_iframe_parent (widget, &x, &y);
++ shift_to_iframe_parent (orig_widget, &xWnd, &yWnd) ;
+ html = GTK_HTML (widget);
+ engine = html->engine;
+
+ if (event->button == 1 || ((event->button == 2 || event->button == 3)
+ && html_engine_get_editable (engine)))
+@@ -1897,12 +1905,14 @@
+ case 1:
+ /*html->in_selection_drag = TRUE;*/
+ /* (TL 18-Nov-05) First click starts panning, not selection */
+ html->in_selection_drag = FALSE;
+ html->panning = TRUE;
+- html->lastx = x;
+- html->lasty = y;
++ html->x_amount_panned =
++ html->y_amount_panned = 0 ;
++ html->lastx = xWnd + gtk_adjustment_get_value (gtk_layout_get_hadjustment (GTK_LAYOUT (widget)));
++ html->lasty = yWnd + gtk_adjustment_get_value (gtk_layout_get_vadjustment (GTK_LAYOUT (widget)));
+
+ if (html_engine_get_editable (engine)) {
+ HTMLObject *obj;
+
+ obj = html_engine_get_object_at (engine, x, y, NULL, FALSE);
+@@ -1970,10 +1980,12 @@
+ /*html->in_selection_drag = FALSE;
+ gtk_html_select_word (html);*/
+ /* (TL 18-Nov-05) Second click starts selection and stops panning */
+ html->in_selection_drag = TRUE;
+ html->panning = FALSE;
++ html->x_amount_panned =
++ html->y_amount_panned = 0 ;
+ html->in_selection = TRUE;
+ /* Check for simple double click, for selecting a word */
+ html->simple_dblclick = TRUE;
+ html->selection_x1 = x;
+ html->selection_y1 = y;
+@@ -1982,10 +1994,12 @@
+ /*html->in_selection_drag = FALSE;
+ gtk_html_select_line (html);*/
+ /* (TL 18-Nov-05) Third click starts selection and stops panning */
+ html->in_selection_drag = TRUE;
+ html->panning = FALSE;
++ html->x_amount_panned =
++ html->y_amount_panned = 0 ;
+ html->in_selection = TRUE;
+ }
+ }
+
+ return FALSE;
+@@ -2025,10 +2039,16 @@
+ update_primary_selection (html);
+ queue_draw (html);
+ }
+
+ if (event->button == 1) {
++ guint mouse_double_click_threshold = MOUSE_DBLCLK_THRESHOLD ;
++ GtkSettings *gtk_settings = gtk_widget_get_settings (widget) ;
++
++ if (NULL != gtk_settings)
++ g_object_get (G_OBJECT (gtk_settings), "gtk-double-click-distance", &mouse_double_click_threshold, NULL) ;
++
+
+ if (html->in_selection_drag && html_engine_get_editable (engine))
+ html_engine_jump_at (engine, x, y);
+
+ html->in_selection_drag = FALSE;
+@@ -2056,6 +2056,8 @@
+ html->panning = FALSE;
+
+ if (!html->priv->dnd_in_progress
++ && ABS (html->x_amount_panned) < mouse_double_click_threshold
++ && ABS (html->y_amount_panned) < mouse_double_click_threshold
+ && html->pointer_url != NULL && ! html->in_selection
+ && (!gtk_html_get_editable (html) || html->priv->in_url_test_mode)) {
+ g_signal_emit (widget, signals[LINK_CLICKED], 0, html->pointer_url);
+@@ -2059,11 +2079,14 @@
+ focus_object = html_engine_get_object_at (html->engine, x, y, &offset, TRUE);
+ if (HTML_IS_TEXT (focus_object))
+ html_text_set_link_visited (HTML_TEXT (focus_object), (gint) offset, html->engine, TRUE);
+ }
+ }
+-
++
++ html->x_amount_panned =
++ html->y_amount_panned = 0 ;
++
+ /* If it was a simple doubleclick select a word */
+ if (html->simple_dblclick) {
+ html->simple_dblclick = FALSE;
+ gtk_html_select_word(html);
+ }
+@@ -3399,10 +3422,12 @@
+ html->selection_x1 = 0;
+ html->selection_y1 = 0;
+
+ /* (TL 18-Nov-05) For panning */
+ html->panning = FALSE;
++ html->x_amount_panned =
++ html->y_amount_panned = 0 ;
+ html->lastx = 0;
+ html->lasty = 0;
+
+ html->in_selection = FALSE;
+ html->in_selection_drag = FALSE;
+diff -r -U5 gtkhtml-3.24.4/gtkhtml/gtkhtml.h gtkhtml-3.24.4/gtkhtml/gtkhtml.h
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2008-10-16 12:07:24.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2008-10-16 12:09:41.000000000 +0200
+@@ -58,10 +58,12 @@
+
+ /* (TL 18-Nov-05) Panning variables */
+ gboolean panning;
+ gint lastx;
+ gint lasty;
++ gint x_amount_panned ;
++ gint y_amount_panned ;
+
+ guint in_selection : 1;
+ guint in_selection_drag : 1;
+
+ guint debug : 1;
--- /dev/null
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.9.1.mod/gtkhtml/gtkhtml.c
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.9.1.mod/gtkhtml/gtkhtml.c
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.9.1.mod/gtkhtml/gtkhtml.c
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.9.1.mod/gtkhtml/gtkhtml.c
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-02-06 17:08:09.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-02-06 17:08:09.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-02-06 17:08:09.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-02-06 17:08:09.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-02-06 18:31:54.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-02-06 18:31:54.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-02-06 18:31:54.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-02-06 18:31:54.000000000 +0200
+@@ -3941,8 +3941,11 @@
+
+ /* printf ("calc scrollbars\n"); */
+
+- height = html_engine_get_doc_height (html->engine);
+ width = html_engine_get_doc_width (html->engine);
++ height = html_engine_get_doc_height (html->engine);
++
++ width = MAX (width, html->engine->width) ;
++ height = MAX (height, html->engine->height) ;
+
+ layout = GTK_LAYOUT (html);
+ hadj = layout->hadjustment;
+@@ -3972,7 +3975,6 @@
+ if (changed_x)
+ *changed_x = TRUE;
+ }
+-
+ }
+
+ \f
--- /dev/null
+diff -ru gtkhtml-3.24.4/gtkhtml/htmltextslave.c gtkhtml-3.24.4/gtkhtml/htmltextslave.c
+diff -ru gtkhtml-3.24.4/gtkhtml/htmltextslave.c gtkhtml-3.24.4/gtkhtml/htmltextslave.c
+diff -ru gtkhtml-3.24.4/gtkhtml/htmltextslave.c gtkhtml-3.24.4/gtkhtml/htmltextslave.c
+diff -ru gtkhtml-3.24.4/gtkhtml/htmltextslave.c gtkhtml-3.24.4/gtkhtml/htmltextslave.c
+--- gtkhtml-3.24.4/gtkhtml/htmltextslave.c 2007-02-16 17:48:00.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/htmltextslave.c 2007-02-16 17:48:00.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/htmltextslave.c 2007-02-16 17:48:00.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/htmltextslave.c 2007-02-16 17:48:00.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmltextslave.c 2007-02-16 17:58:09.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmltextslave.c 2007-02-16 17:58:09.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmltextslave.c 2007-02-16 17:58:09.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmltextslave.c 2007-02-16 17:58:09.000000000 +0200
+@@ -623,9 +623,8 @@
+ - (slave->owner->text + tmp_gi1.item->offset);
+ tmp_gi2 = pango_glyph_item_split (&tmp_gi1, slave->owner->text, split_index);
+
+- glyph_item->glyph_item = *tmp_gi2;
+- tmp_gi2->item = NULL;
+- tmp_gi2->glyphs = NULL;
++ glyph_item->glyph_item.item = pango_item_copy (tmp_gi2->item) ;
++ glyph_item->glyph_item.glyphs = pango_glyph_string_copy (tmp_gi2->glyphs) ;
+
+ /* free the tmp1 content and tmp2 container, but not the content */
+ pango_item_free (tmp_gi1.item);
--- /dev/null
+diff -ru gtkhtml-3.24.4/configure.in gtkhtml-3.24.4/configure.in
+--- gtkhtml-3.24.4/configure.in 2007-04-03 13:43:10.000000000 +0300
++++ gtkhtml-3.24.4/configure.in 2007-04-03 15:20:59.000000000 +0300
+@@ -75,6 +75,29 @@
+ [ --enable-a11y Enable Accessibility (requires gail) [default=no]],
+ [ac_cv_enable_a11y=$enableval],[ac_cv_enable_a11y=no])
+ AC_MSG_CHECKING([whether to enable a11y])
++echo '**********************************'
++if test -z "$PKG_CONFIG"; then
++ echo "Going to check for pkg-config ..."
++ AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
++ echo "Checked for pkg-config: $PKG_CONFIG"
++fi
++if test "$ac_cv_enable_a11y" = yes; then
++ echo "ac_cv_enable_a11y: Forced off."
++ ac_cv_enable_a11y=no
++ if test "x$PKG_CONFIG" != "xno"; then
++ echo "ac_cv_enable_a11y: Have pkg-config: $PKG_CONFIG"
++ if $PKG_CONFIG --exists gail; then
++ echo "ac_cv_enable_a11y: pkg-config says gail exists"
++ ac_cv_enable_a11y=yes ;
++ echo "ac_cv_enable_a11y: Turned on."
++ else
++ echo "ac_cv_enable_a11y: $PKG_CONFIG --exists gail failed"
++ fi
++ else
++ echo "ac_cv_enable_a11y: Do not have pkg-config: $PKG_CONFIG"
++ fi
++fi
++echo '**********************************'
+ if test "$ac_cv_enable_a11y" = yes; then
+ AC_MSG_RESULT(yes)
+ GAIL_MODULES="gail >= 1.1.0"
--- /dev/null
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.24.4/gtkhtml/gtkhtml.c
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.24.4/gtkhtml/gtkhtml.c
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.24.4/gtkhtml/gtkhtml.c
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.24.4/gtkhtml/gtkhtml.c
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-05-09 15:04:10.000000000 +0300
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-05-09 15:04:10.000000000 +0300
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-05-09 15:04:10.000000000 +0300
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-05-09 15:04:10.000000000 +0300
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-05-09 19:27:23.000000000 +0300
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-05-09 19:27:23.000000000 +0300
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-05-09 19:27:23.000000000 +0300
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-05-09 19:27:23.000000000 +0300
+@@ -6015,6 +6015,12 @@
+ html_engine_flush (html->engine);
+ }
+
++void
++gtk_html_set_link_visited (GtkHTML *html, char *url, gboolean visited)
++ {
++ html_engine_set_link_visited (html->engine, url, visited) ;
++ }
++
+ const char *
+ gtk_html_get_object_id_at (GtkHTML *html, int x, int y)
+ {
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.h gtkhtml-3.24.4/gtkhtml/gtkhtml.h
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.h gtkhtml-3.24.4/gtkhtml/gtkhtml.h
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.h gtkhtml-3.24.4/gtkhtml/gtkhtml.h
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.h gtkhtml-3.24.4/gtkhtml/gtkhtml.h
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2007-05-09 15:04:10.000000000 +0300
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2007-05-09 15:04:10.000000000 +0300
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2007-05-09 15:04:10.000000000 +0300
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2007-05-09 15:04:10.000000000 +0300
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2007-05-09 19:28:52.000000000 +0300
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2007-05-09 19:28:52.000000000 +0300
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2007-05-09 19:28:52.000000000 +0300
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2007-05-09 19:28:52.000000000 +0300
+@@ -328,6 +328,9 @@
+ char * gtk_html_get_cursor_url (GtkHTML *html);
+ void gtk_html_set_tokenizer (GtkHTML *html,
+ HTMLTokenizer *tokenizer);
++void gtk_html_set_link_visited (GtkHTML *html,
++ char *url,
++ gboolean visited);
+
+ /* DEPRECATED */
+ #if 1
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlengine.c gtkhtml-3.24.4/gtkhtml/htmlengine.c
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlengine.c gtkhtml-3.24.4/gtkhtml/htmlengine.c
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlengine.c gtkhtml-3.24.4/gtkhtml/htmlengine.c
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlengine.c gtkhtml-3.24.4/gtkhtml/htmlengine.c
+--- gtkhtml-3.24.4/gtkhtml/htmlengine.c 2007-05-09 15:04:10.000000000 +0300
+--- gtkhtml-3.24.4/gtkhtml/htmlengine.c 2007-05-09 15:04:10.000000000 +0300
+--- gtkhtml-3.24.4/gtkhtml/htmlengine.c 2007-05-09 15:04:10.000000000 +0300
+--- gtkhtml-3.24.4/gtkhtml/htmlengine.c 2007-05-09 15:04:10.000000000 +0300
++++ gtkhtml-3.24.4/gtkhtml/htmlengine.c 2007-05-09 19:26:17.000000000 +0300
++++ gtkhtml-3.24.4/gtkhtml/htmlengine.c 2007-05-09 19:26:17.000000000 +0300
++++ gtkhtml-3.24.4/gtkhtml/htmlengine.c 2007-05-09 19:26:17.000000000 +0300
++++ gtkhtml-3.24.4/gtkhtml/htmlengine.c 2007-05-09 19:26:17.000000000 +0300
+@@ -6090,6 +6090,36 @@
+ g_hash_table_foreach (t, set_object_data, o);
+ }
+
++typedef struct
++ {
++ char *url ;
++ gboolean visited ;
++ } SET_LINK_VISITED_PARAMS ;
++
++static void html_engine_set_link_visited_forall_cb (HTMLObject *self, HTMLEngine *engine, SET_LINK_VISITED_PARAMS *params)
++ {
++ if (HTML_IS_TEXT (self))
++ {
++ char *url = NULL ;
++ gint offset = 0 ;
++
++ do
++ if (NULL != (url = html_object_get_complete_url (HTML_OBJECT (self), offset)))
++ {
++ if (!strcmp (params->url, url))
++ html_text_set_link_visited (HTML_TEXT (self), offset, engine, params->visited) ;
++ g_free (url) ;
++ }
++ while (html_text_next_link_offset (HTML_TEXT (self), &offset)) ;
++ }
++ }
++
++void
++html_engine_set_link_visited (HTMLEngine *e, char *url, gboolean visited)
++ {
++ SET_LINK_VISITED_PARAMS params = {url, visited} ;
++ html_object_forall (e->clue, e, (HTMLObjectForallFunc)html_engine_set_link_visited_forall_cb, ¶ms) ;
++ }
+
+ HTMLEngine *
+ html_engine_get_top_html_engine (HTMLEngine *e)
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlengine.h gtkhtml-3.24.4/gtkhtml/htmlengine.h
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlengine.h gtkhtml-3.24.4/gtkhtml/htmlengine.h
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlengine.h gtkhtml-3.24.4/gtkhtml/htmlengine.h
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlengine.h gtkhtml-3.24.4/gtkhtml/htmlengine.h
+--- gtkhtml-3.24.4/gtkhtml/htmlengine.h 2007-01-03 17:19:57.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/htmlengine.h 2007-01-03 17:19:57.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/htmlengine.h 2007-01-03 17:19:57.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/htmlengine.h 2007-01-03 17:19:57.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlengine.h 2007-05-09 19:26:56.000000000 +0300
++++ gtkhtml-3.24.4/gtkhtml/htmlengine.h 2007-05-09 19:26:56.000000000 +0300
++++ gtkhtml-3.24.4/gtkhtml/htmlengine.h 2007-05-09 19:26:56.000000000 +0300
++++ gtkhtml-3.24.4/gtkhtml/htmlengine.h 2007-05-09 19:26:56.000000000 +0300
+@@ -493,5 +493,6 @@
+ void html_engine_opened_streams_set (HTMLEngine *e, int value);
+
+ void html_engine_refresh_fonts (HTMLEngine *e);
++void html_engine_set_link_visited (HTMLEngine *e, char *url, gboolean visited) ;
+
+ #endif /* _HTMLENGINE_H_ */
--- /dev/null
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlobject.h gtkhtml-3.24.4/gtkhtml/htmlobject.h
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlobject.h gtkhtml-3.24.4/gtkhtml/htmlobject.h
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlobject.h gtkhtml-3.24.4/gtkhtml/htmlobject.h
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlobject.h gtkhtml-3.24.4/gtkhtml/htmlobject.h
+--- gtkhtml-3.24.4/gtkhtml/htmlobject.h 2007-01-03 17:19:57.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/htmlobject.h 2007-01-03 17:19:57.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/htmlobject.h 2007-01-03 17:19:57.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/htmlobject.h 2007-01-03 17:19:57.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlobject.h 2007-05-30 23:03:10.000000000 +0300
++++ gtkhtml-3.24.4/gtkhtml/htmlobject.h 2007-05-30 23:03:10.000000000 +0300
++++ gtkhtml-3.24.4/gtkhtml/htmlobject.h 2007-05-30 23:03:10.000000000 +0300
++++ gtkhtml-3.24.4/gtkhtml/htmlobject.h 2007-05-30 23:03:10.000000000 +0300
+@@ -24,7 +24,6 @@
+ #ifndef _HTMLOBJECT_H_
+ #define _HTMLOBJECT_H_
+
+-#include <libart_lgpl/art_rect.h>
+ #include <gtk/gtk.h>
+ #include "htmltypes.h"
+ #include "htmlenums.h"
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlplainpainter.c gtkhtml-3.24.4/gtkhtml/htmlplainpainter.c
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlplainpainter.c gtkhtml-3.24.4/gtkhtml/htmlplainpainter.c
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlplainpainter.c gtkhtml-3.24.4/gtkhtml/htmlplainpainter.c
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlplainpainter.c gtkhtml-3.24.4/gtkhtml/htmlplainpainter.c
+--- gtkhtml-3.24.4/gtkhtml/htmlplainpainter.c 2007-01-03 17:19:57.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/htmlplainpainter.c 2007-01-03 17:19:57.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/htmlplainpainter.c 2007-01-03 17:19:57.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/htmlplainpainter.c 2007-01-03 17:19:57.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlplainpainter.c 2007-05-30 23:02:58.000000000 +0300
++++ gtkhtml-3.24.4/gtkhtml/htmlplainpainter.c 2007-05-30 23:02:58.000000000 +0300
++++ gtkhtml-3.24.4/gtkhtml/htmlplainpainter.c 2007-05-30 23:02:58.000000000 +0300
++++ gtkhtml-3.24.4/gtkhtml/htmlplainpainter.c 2007-05-30 23:02:58.000000000 +0300
+@@ -22,7 +22,6 @@
+ #include <config.h>
+ #include <string.h>
+ #include <stdlib.h>
+-#include <libart_lgpl/art_rect.h>
+
+ #include "htmlentity.h"
+ #include "htmlgdkpainter.h"
+diff -ru gtkhtml-3.24.4/gtkhtml/htmltablecell.c gtkhtml-3.24.4/gtkhtml/htmltablecell.c
+diff -ru gtkhtml-3.24.4/gtkhtml/htmltablecell.c gtkhtml-3.24.4/gtkhtml/htmltablecell.c
+diff -ru gtkhtml-3.24.4/gtkhtml/htmltablecell.c gtkhtml-3.24.4/gtkhtml/htmltablecell.c
+diff -ru gtkhtml-3.24.4/gtkhtml/htmltablecell.c gtkhtml-3.24.4/gtkhtml/htmltablecell.c
+--- gtkhtml-3.24.4/gtkhtml/htmltablecell.c 2007-02-09 21:54:58.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/htmltablecell.c 2007-02-09 21:54:58.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/htmltablecell.c 2007-02-09 21:54:58.000000000 +0200
+--- gtkhtml-3.24.4/gtkhtml/htmltablecell.c 2007-02-09 21:54:58.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmltablecell.c 2007-05-30 23:03:26.000000000 +0300
++++ gtkhtml-3.24.4/gtkhtml/htmltablecell.c 2007-05-30 23:03:26.000000000 +0300
++++ gtkhtml-3.24.4/gtkhtml/htmltablecell.c 2007-05-30 23:03:26.000000000 +0300
++++ gtkhtml-3.24.4/gtkhtml/htmltablecell.c 2007-05-30 23:03:26.000000000 +0300
+@@ -23,7 +23,6 @@
+
+ #include <config.h>
+ #include <glib.h>
+-#include <libart_lgpl/art_rect.h>
+ #include <string.h>
+ #include "htmlcluev.h"
+ #include "htmlengine-edit.h"
--- /dev/null
+diff -r -U 5 gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.24.4/gtkhtml/gtkhtml.c
+diff -r -U 5 gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.24.4/gtkhtml/gtkhtml.c
+diff -r -U 5 gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.24.4/gtkhtml/gtkhtml.c
+diff -r -U 5 gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.24.4/gtkhtml/gtkhtml.c
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-06-25 11:09:14.970379010 +0200
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-06-25 11:09:14.970379010 +0200
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-06-25 11:09:14.970379010 +0200
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-06-25 11:09:14.970379010 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-06-25 11:05:48.745596648 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-06-25 11:05:48.745596648 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-06-25 11:05:48.745596648 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2007-06-25 11:05:48.745596648 +0200
+@@ -6099,10 +6099,16 @@
+ g_return_if_fail (GTK_IS_HTML (html));
+
+ gtk_html_set_magnification (html, 1.0);
+ }
+
+ void
++gtk_html_get_selection_area (GtkHTML *html, gint *x, gint *y, gint *w, gint *h)
++{
++ html_engine_get_selection_area (html->engine, x, y, w, h);
++}
++
++void
+ gtk_html_set_allow_frameset (GtkHTML *html, gboolean allow)
+ {
+ g_return_if_fail (GTK_IS_HTML (html));
+ g_return_if_fail (HTML_IS_ENGINE (html->engine));
+diff -r -U 5 gtkhtml-3.24.4/gtkhtml/gtkhtml.h gtkhtml-3.24.4/gtkhtml/gtkhtml.h
+diff -r -U 5 gtkhtml-3.24.4/gtkhtml/gtkhtml.h gtkhtml-3.24.4/gtkhtml/gtkhtml.h
+diff -r -U 5 gtkhtml-3.24.4/gtkhtml/gtkhtml.h gtkhtml-3.24.4/gtkhtml/gtkhtml.h
+diff -r -U 5 gtkhtml-3.24.4/gtkhtml/gtkhtml.h gtkhtml-3.24.4/gtkhtml/gtkhtml.h
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2007-06-25 11:09:14.977378731 +0200
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2007-06-25 11:09:14.977378731 +0200
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2007-06-25 11:09:14.977378731 +0200
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2007-06-25 11:09:14.977378731 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2007-06-25 11:05:48.815593858 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2007-06-25 11:05:48.815593858 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2007-06-25 11:05:48.815593858 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2007-06-25 11:05:48.815593858 +0200
+@@ -344,9 +344,14 @@
+ GtkHTMLSaveReceiverFn receiver,
+ gpointer data);
+ GtkHTMLStream *gtk_html_begin_content (GtkHTML *html,
+ gchar *content_type);
+ void gtk_html_drag_dest_set (GtkHTML *html);
++void gtk_html_get_selection_area (GtkHTML *html,
++ gint *x,
++ gint *y,
++ gint *w,
++ gint *h);
+
+ #endif
+
+ #endif /* _GTKHTML_H_ */
+diff -r -U 5 gtkhtml-3.24.4/gtkhtml/htmlengine-search.c gtkhtml-3.24.4/gtkhtml/htmlengine-search.c
+diff -r -U 5 gtkhtml-3.24.4/gtkhtml/htmlengine-search.c gtkhtml-3.24.4/gtkhtml/htmlengine-search.c
+diff -r -U 5 gtkhtml-3.24.4/gtkhtml/htmlengine-search.c gtkhtml-3.24.4/gtkhtml/htmlengine-search.c
+diff -r -U 5 gtkhtml-3.24.4/gtkhtml/htmlengine-search.c gtkhtml-3.24.4/gtkhtml/htmlengine-search.c
+--- gtkhtml-3.24.4/gtkhtml/htmlengine-search.c 2007-06-25 11:09:14.444399968 +0200
+--- gtkhtml-3.24.4/gtkhtml/htmlengine-search.c 2007-06-25 11:09:14.444399968 +0200
+--- gtkhtml-3.24.4/gtkhtml/htmlengine-search.c 2007-06-25 11:09:14.444399968 +0200
+--- gtkhtml-3.24.4/gtkhtml/htmlengine-search.c 2007-06-25 11:09:14.444399968 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlengine-search.c 2007-06-25 11:05:48.056624103 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlengine-search.c 2007-06-25 11:05:48.056624103 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlengine-search.c 2007-06-25 11:05:48.056624103 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlengine-search.c 2007-06-25 11:05:48.056624103 +0200
+@@ -93,10 +93,15 @@
+ ex += last->width;
+ ey += last->descent;
+ w = ex - x;
+ h = ey - y;
+
++ e->search_area_x = x;
++ e->search_area_y = y;
++ e->search_area_w = w;
++ e->search_area_h = h;
++
+ /* now calculate gtkhtml adustments */
+ if (x <= ep->x_offset)
+ nx = x;
+ else if (x + w > ep->x_offset + ep->width)
+ nx = x + w - ep->width;
+diff -r -U 5 gtkhtml-3.24.4/gtkhtml/htmlengine-search.h gtkhtml-3.24.4/gtkhtml/htmlengine-search.h
+diff -r -U 5 gtkhtml-3.24.4/gtkhtml/htmlengine-search.h gtkhtml-3.24.4/gtkhtml/htmlengine-search.h
+diff -r -U 5 gtkhtml-3.24.4/gtkhtml/htmlengine-search.h gtkhtml-3.24.4/gtkhtml/htmlengine-search.h
+diff -r -U 5 gtkhtml-3.24.4/gtkhtml/htmlengine-search.h gtkhtml-3.24.4/gtkhtml/htmlengine-search.h
+--- gtkhtml-3.24.4/gtkhtml/htmlengine-search.h 2007-01-03 16:19:57.000000000 +0100
+--- gtkhtml-3.24.4/gtkhtml/htmlengine-search.h 2007-01-03 16:19:57.000000000 +0100
+--- gtkhtml-3.24.4/gtkhtml/htmlengine-search.h 2007-01-03 16:19:57.000000000 +0100
+--- gtkhtml-3.24.4/gtkhtml/htmlengine-search.h 2007-01-03 16:19:57.000000000 +0100
++++ gtkhtml-3.24.4/gtkhtml/htmlengine-search.h 2007-06-25 11:05:48.106622111 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlengine-search.h 2007-06-25 11:05:48.106622111 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlengine-search.h 2007-06-25 11:05:48.106622111 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlengine-search.h 2007-06-25 11:05:48.106622111 +0200
+@@ -30,5 +30,9 @@
+ gboolean forward);
+ gboolean html_engine_search_next (HTMLEngine *e);
+ gboolean html_engine_search_incremental (HTMLEngine *e,
+ const gchar *text,
+ gboolean forward);
++
++void html_engine_search_get_selected_area (HTMLEngine *e,
++ gint *x, gint *y,
++ gint *w, gint *h);
+diff -r -U 5 gtkhtml-3.24.4/gtkhtml/htmlengine.c gtkhtml-3.24.4/gtkhtml/htmlengine.c
+diff -r -U 5 gtkhtml-3.24.4/gtkhtml/htmlengine.c gtkhtml-3.24.4/gtkhtml/htmlengine.c
+diff -r -U 5 gtkhtml-3.24.4/gtkhtml/htmlengine.c gtkhtml-3.24.4/gtkhtml/htmlengine.c
+diff -r -U 5 gtkhtml-3.24.4/gtkhtml/htmlengine.c gtkhtml-3.24.4/gtkhtml/htmlengine.c
+--- gtkhtml-3.24.4/gtkhtml/htmlengine.c 2007-06-25 11:09:14.988378293 +0200
+--- gtkhtml-3.24.4/gtkhtml/htmlengine.c 2007-06-25 11:09:14.988378293 +0200
+--- gtkhtml-3.24.4/gtkhtml/htmlengine.c 2007-06-25 11:09:14.988378293 +0200
+--- gtkhtml-3.24.4/gtkhtml/htmlengine.c 2007-06-25 11:09:14.988378293 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlengine.c 2007-06-25 11:05:47.689638728 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlengine.c 2007-06-25 11:05:47.689638728 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlengine.c 2007-06-25 11:05:47.689638728 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlengine.c 2007-06-25 11:05:47.689638728 +0200
+@@ -6584,5 +6584,28 @@
+ html_object_change_set_down (e->clue, HTML_CHANGE_ALL);
+ html_engine_calc_size (e, FALSE);
+ html_engine_schedule_update (e);
+ }
+ }
++
++static void
++add_iframe_off (HTMLEngine *e, gint *x, gint *y)
++{
++ g_assert (e);
++ g_assert (e->widget);
++
++ if (e->widget->iframe_parent) {
++ *x += e->widget->iframe_parent->allocation.x;
++ *y += e->widget->iframe_parent->allocation.y;
++ }
++}
++
++void
++html_engine_get_selection_area (HTMLEngine *e,
++ gint *x, gint *y,
++ gint *w, gint *h)
++{
++ *x = e->search_area_x;
++ *y = e->search_area_y;
++ *w = e->search_area_w;
++ *h = e->search_area_h;
++}
+diff -r -U 5 gtkhtml-3.24.4/gtkhtml/htmlengine.h gtkhtml-3.24.4/gtkhtml/htmlengine.h
+diff -r -U 5 gtkhtml-3.24.4/gtkhtml/htmlengine.h gtkhtml-3.24.4/gtkhtml/htmlengine.h
+diff -r -U 5 gtkhtml-3.24.4/gtkhtml/htmlengine.h gtkhtml-3.24.4/gtkhtml/htmlengine.h
+diff -r -U 5 gtkhtml-3.24.4/gtkhtml/htmlengine.h gtkhtml-3.24.4/gtkhtml/htmlengine.h
+--- gtkhtml-3.24.4/gtkhtml/htmlengine.h 2007-06-25 11:09:14.993378094 +0200
+--- gtkhtml-3.24.4/gtkhtml/htmlengine.h 2007-06-25 11:09:14.993378094 +0200
+--- gtkhtml-3.24.4/gtkhtml/htmlengine.h 2007-06-25 11:09:14.993378094 +0200
+--- gtkhtml-3.24.4/gtkhtml/htmlengine.h 2007-06-25 11:09:14.993378094 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlengine.h 2007-06-25 11:05:47.727637213 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlengine.h 2007-06-25 11:05:47.727637213 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlengine.h 2007-06-25 11:05:47.727637213 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlengine.h 2007-06-25 11:05:47.727637213 +0200
+@@ -265,10 +265,15 @@
+
+ gboolean expose;
+ gboolean need_update;
+
+ HTMLObject *parser_clue; /* the root of the currently parsed block */
++
++ gint search_area_x;
++ gint search_area_y;
++ gint search_area_w;
++ gint search_area_h;
+ };
+
+ /* must be forward referenced *sigh* */
+ struct _HTMLEmbedded;
+
+@@ -492,7 +497,10 @@
+ void html_engine_opened_streams_decrement (HTMLEngine *e);
+ void html_engine_opened_streams_set (HTMLEngine *e, int value);
+
+ void html_engine_refresh_fonts (HTMLEngine *e);
+ void html_engine_set_link_visited (HTMLEngine *e, char *url, gboolean visited) ;
++void html_engine_get_selection_area (HTMLEngine *e,
++ gint *x, gint *y,
++ gint *w, gint *h);
+
+ #endif /* _HTMLENGINE_H_ */
--- /dev/null
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlengine-search.c gtkhtml-3.24.4/gtkhtml/htmlengine-search.c
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlengine-search.c gtkhtml-3.24.4/gtkhtml/htmlengine-search.c
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlengine-search.c gtkhtml-3.24.4/gtkhtml/htmlengine-search.c
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlengine-search.c gtkhtml-3.24.4/gtkhtml/htmlengine-search.c
+--- gtkhtml-3.24.4/gtkhtml/htmlengine-search.c 2007-07-31 14:25:35.000000000 +0300
+--- gtkhtml-3.24.4/gtkhtml/htmlengine-search.c 2007-07-31 14:25:35.000000000 +0300
+--- gtkhtml-3.24.4/gtkhtml/htmlengine-search.c 2007-07-31 14:25:35.000000000 +0300
+--- gtkhtml-3.24.4/gtkhtml/htmlengine-search.c 2007-07-31 14:25:35.000000000 +0300
++++ gtkhtml-3.24.4/gtkhtml/htmlengine-search.c 2007-07-31 14:27:45.000000000 +0300
++++ gtkhtml-3.24.4/gtkhtml/htmlengine-search.c 2007-07-31 14:27:45.000000000 +0300
++++ gtkhtml-3.24.4/gtkhtml/htmlengine-search.c 2007-07-31 14:27:45.000000000 +0300
++++ gtkhtml-3.24.4/gtkhtml/htmlengine-search.c 2007-07-31 14:27:45.000000000 +0300
+@@ -153,6 +153,9 @@
+ }
+
+ info = e->search_info = html_search_new (e, text, case_sensitive, forward, regular);
++ if (!info) {
++ return FALSE;
++ }
+
+ p = e->search_info->stack ? HTML_OBJECT (e->search_info->stack->data)->parent : NULL;
+ o = p ? p : e->clue;
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlsearch.c gtkhtml-3.24.4/gtkhtml/htmlsearch.c
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlsearch.c gtkhtml-3.24.4/gtkhtml/htmlsearch.c
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlsearch.c gtkhtml-3.24.4/gtkhtml/htmlsearch.c
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlsearch.c gtkhtml-3.24.4/gtkhtml/htmlsearch.c
+--- gtkhtml-3.24.4/gtkhtml/htmlsearch.c 2007-07-31 14:25:34.000000000 +0300
+--- gtkhtml-3.24.4/gtkhtml/htmlsearch.c 2007-07-31 14:25:34.000000000 +0300
+--- gtkhtml-3.24.4/gtkhtml/htmlsearch.c 2007-07-31 14:25:34.000000000 +0300
+--- gtkhtml-3.24.4/gtkhtml/htmlsearch.c 2007-07-31 14:25:34.000000000 +0300
++++ gtkhtml-3.24.4/gtkhtml/htmlsearch.c 2007-07-31 14:28:24.000000000 +0300
++++ gtkhtml-3.24.4/gtkhtml/htmlsearch.c 2007-07-31 14:28:24.000000000 +0300
++++ gtkhtml-3.24.4/gtkhtml/htmlsearch.c 2007-07-31 14:28:24.000000000 +0300
++++ gtkhtml-3.24.4/gtkhtml/htmlsearch.c 2007-07-31 14:28:24.000000000 +0300
+@@ -100,6 +100,11 @@
+ rv = re_compile_pattern (ns->text, ns->text_bytes, ns->reb);
+ if (rv) {
+ g_warning (rv);
++
++ g_free(ns->reb);
++ ns->reb = NULL;
++ html_search_destroy(ns);
++ ns = NULL;
+ }
+ #else
+ int rv_int;
+@@ -114,6 +119,11 @@
+ } else {
+ g_warning ("regcomp failed, error code %d", rv_int);
+ }
++
++ g_free(ns->reb);
++ ns->reb = NULL;
++ html_search_destroy(ns);
++ ns = NULL;
+ }
+ #endif
+ } else {
--- /dev/null
+--- gtkhtml-3.24.4/configure.in 2008-11-05 10:21:19.000000000 +0100
++++ gtkhtml-3.24.4/configure.in 2008-11-05 10:28:58.000000000 +0100
+@@ -51,11 +51,10 @@
+ AC_ISC_POSIX
+ AC_PROG_CC
+ AC_STDC_HEADERS
+ AC_LIBTOOL_WIN32_DLL
+ AM_PROG_LIBTOOL
+-DOLT
+
+ AC_PATH_PROG(GLIB_GENMARSHAL, glib-genmarshal)
+
+ dnl Win32
+ AC_MSG_CHECKING([for Win32])
--- /dev/null
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.24.4-proper_content_type_handling/gtkhtml/gtkhtml.c
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2009-02-20 14:00:56.000000000 +0100
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2009-02-20 14:02:22.000000000 +0100
+@@ -3680,7 +3680,7 @@
+ {
+ g_return_val_if_fail (! gtk_html_get_editable (html), NULL);
+
+- return gtk_html_begin_full (html, NULL, NULL, 0);
++ return gtk_html_begin_full (html, NULL, content_type, 0);
+ }
+
+ /**
--- /dev/null
+2009-03-20 08:54 diff -lru gtkhtml-3.24.4/gtkhtml/htmlengine.c gtkhtml-3.24.4-fix_crash_dkedves/gtkhtml/htmlengine.c Page 1
+--- gtkhtml-3.24.4/gtkhtml/htmlengine.c 2009-03-20 08:54:09.000000000 +0100
++++ gtkhtml-3.24.4/gtkhtml/htmlengine.c 2009-03-19 21:38:46.000000000 +0100
+@@ -1137,17 +1137,22 @@
+
+ while (l) {
+ gint cd;
+- elem = l->data;
+-
+- cd = elem->style->display;
+- if (cd == display)
+- break;
+
+- if (cd > maxLevel) {
+- if (display != DISPLAY_INLINE
+- || cd > DISPLAY_BLOCK)
+- return;
+- }
++ /* We skip invalid items to avoid crash...
++ * Yeah, its only a workaround... FIXME */
++ if (l->data && ((HTMLElement*)l->data)->style) {
++ elem = l->data;
++
++ cd = elem->style->display;
++ if (cd == display)
++ break;
++
++ if (cd > maxLevel) {
++ if (display != DISPLAY_INLINE
++ || cd > DISPLAY_BLOCK)
++ return;
++ }
++ }
+
+ l = l->next;
+ }
+
--- /dev/null
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.24.4/gtkhtml/gtkhtml.c
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2009-04-07 04:15:16.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2009-04-07 04:14:25.000000000 +0200
+@@ -6139,6 +6139,12 @@
+ html_engine_get_selection_area (html->engine, x, y, w, h);
+ }
+
++void
++gtk_html_set_max_image_size (GtkHTML *html, gint width, gint height)
++{
++ html_engine_set_max_image_size (html->engine, width, height);
++}
++
+ void
+ gtk_html_set_allow_frameset (GtkHTML *html, gboolean allow)
+ {
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.h gtkhtml-3.24.4/gtkhtml/gtkhtml.h
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2009-04-07 04:15:16.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.h 2009-04-07 04:14:25.000000000 +0200
+@@ -366,6 +366,9 @@
+ gint *w,
+ gint *h);
+
++void gtk_html_set_max_image_size (GtkHTML *html,
++ gint width, gint height);
++
+ #endif
+
+ #endif /* _GTKHTML_H_ */
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlengine.c gtkhtml-3.24.4/gtkhtml/htmlengine.c
+--- gtkhtml-3.24.4/gtkhtml/htmlengine.c 2009-04-07 04:15:16.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlengine.c 2009-04-07 04:14:25.000000000 +0200
+@@ -4413,6 +4413,7 @@
+
+ engine->language = NULL;
+
++ engine->image_max_size_set = FALSE;
+ }
+
+ HTMLEngine *
+@@ -6966,3 +6967,12 @@
+ *w = e->search_area_w;
+ *h = e->search_area_h;
+ }
++
++void html_engine_set_max_image_size (HTMLEngine *e,
++ gint width,
++ gint height)
++{
++ e->image_max_height = height;
++ e->image_max_width = width;
++ e->image_max_size_set = TRUE;
++}
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlengine.h gtkhtml-3.24.4/gtkhtml/htmlengine.h
+--- gtkhtml-3.24.4/gtkhtml/htmlengine.h 2009-04-07 04:15:16.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlengine.h 2009-04-07 04:14:25.000000000 +0200
+@@ -270,6 +270,10 @@
+ gint search_area_y;
+ gint search_area_w;
+ gint search_area_h;
++
++ gboolean image_max_size_set;
++ gint image_max_width;
++ gint image_max_height;
+ };
+
+ /* must be forward referenced *sigh* */
+@@ -500,5 +504,6 @@
+ void html_engine_get_selection_area (HTMLEngine *e,
+ gint *x, gint *y,
+ gint *w, gint *h);
++void html_engine_set_max_image_size (HTMLEngine *e, gint width, gint height);
+
+ #endif /* _HTMLENGINE_H_ */
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlimage.c gtkhtml-3.24.4/gtkhtml/htmlimage.c
+--- gtkhtml-3.24.4/gtkhtml/htmlimage.c 2009-04-07 04:15:16.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlimage.c 2009-04-07 04:31:37.000000000 +0200
+@@ -83,8 +83,9 @@
+ html_image_get_actual_width (HTMLImage *image, HTMLPainter *painter)
+ {
+ GdkPixbufAnimation *anim = image->image_ptr->animation;
++ GdkPixbuf *pixbuf = image->image_ptr->pixbuf;
+ gint pixel_size = painter ? html_painter_get_pixel_size (painter) : 1;
+- gint width;
++ gint width, get_width, get_height;
+
+ if (image->percent_width) {
+ /* The cast to `gdouble' is to avoid overflow (eg. when
+@@ -93,16 +94,24 @@
+ * image->specified_width) / 100 * image->magnification;
+ } else if (image->specified_width > 0) {
+ width = image->specified_width * pixel_size * image->magnification;
+- } else if (image->image_ptr == NULL || anim == NULL) {
++ } else if (image->image_ptr == NULL ||
++ (anim == NULL && pixbuf == NULL)) {
+ width = DEFAULT_SIZE * pixel_size * image->magnification;
+ } else {
+- width = gdk_pixbuf_animation_get_width (anim) * pixel_size * image->magnification;
++ if (anim) {
++ get_width = gdk_pixbuf_animation_get_width (anim);
++ get_height = gdk_pixbuf_animation_get_height (anim);
++ } else {
++ get_width = gdk_pixbuf_get_width (pixbuf);
++ get_height = gdk_pixbuf_get_height (pixbuf);
++ }
++ width = get_width * pixel_size * image->magnification;
+
+ if (image->specified_height > 0 || image->percent_height) {
+ double scale;
+
+ scale = ((double) html_image_get_actual_height (image, painter))
+- / (gdk_pixbuf_animation_get_height (anim) * pixel_size);
++ / (get_height * pixel_size);
+
+ width *= scale;
+ }
+@@ -116,8 +125,9 @@
+ html_image_get_actual_height (HTMLImage *image, HTMLPainter *painter)
+ {
+ GdkPixbufAnimation *anim = image->image_ptr->animation;
++ GdkPixbuf *pixbuf = image->image_ptr->pixbuf;
+ gint pixel_size = painter ? html_painter_get_pixel_size (painter) : 1;
+- gint height;
++ gint height, get_width, get_height;
+
+ if (image->percent_height) {
+ /* The cast to `gdouble' is to avoid overflow (eg. when
+@@ -126,16 +136,24 @@
+ * image->specified_height) / 100 * image->magnification;
+ } else if (image->specified_height > 0) {
+ height = image->specified_height * pixel_size * image->magnification;
+- } else if (image->image_ptr == NULL || anim == NULL) {
++ } else if (image->image_ptr == NULL ||
++ (anim == NULL && pixbuf == NULL)) {
+ height = DEFAULT_SIZE * pixel_size * image->magnification;
+ } else {
+- height = gdk_pixbuf_animation_get_height (anim) * pixel_size * image->magnification;
++ if (anim) {
++ get_width = gdk_pixbuf_animation_get_width (anim);
++ get_height = gdk_pixbuf_animation_get_height (anim);
++ } else {
++ get_width = gdk_pixbuf_get_width (pixbuf);
++ get_height = gdk_pixbuf_get_height (pixbuf);
++ }
++ height = get_height * pixel_size * image->magnification;
+
+ if (image->specified_width > 0 || image->percent_width) {
+ double scale;
+
+ scale = ((double) html_image_get_actual_width (image, painter))
+- / (gdk_pixbuf_animation_get_width (anim) * pixel_size);
++ / (get_width * pixel_size);
+
+ height *= scale;
+ }
+@@ -454,7 +472,7 @@
+ pixbuf = gdk_pixbuf_animation_get_static_image (ip->animation);
+ }
+ } else {
+- pixbuf = NULL;
++ pixbuf = ip->pixbuf;
+ }
+
+ pixel_size = html_painter_get_pixel_size (painter);
+@@ -1121,11 +1139,16 @@
+
+ gdk_pixbuf_loader_close (ip->loader, NULL);
+
+- if (!ip->animation) {
+- ip->animation = gdk_pixbuf_loader_get_animation (ip->loader);
++ if (ip->rescaled && !ip->pixbuf) {
++ ip->pixbuf = gdk_pixbuf_loader_get_pixbuf (ip->loader);
+
+- if (ip->animation)
+- g_object_ref (ip->animation);
++ if (ip->pixbuf)
++ g_object_ref (ip->pixbuf);
++ } else if (!ip->rescaled && !ip->animation) {
++ ip->animation = gdk_pixbuf_loader_get_animation (ip->loader);
++
++ if (ip->animation)
++ g_object_ref (ip->animation);
+ }
+ html_image_pointer_start_animation (ip);
+
+@@ -1231,15 +1254,49 @@
+ static void
+ html_image_factory_area_prepared (GdkPixbufLoader *loader, HTMLImagePointer *ip)
+ {
+- if (!ip->animation) {
+- ip->animation = gdk_pixbuf_loader_get_animation (loader);
++ if (ip->rescaled && !ip->pixbuf) {
++ ip->pixbuf = gdk_pixbuf_loader_get_pixbuf (loader);
++ g_object_ref (ip->pixbuf);
++ } else if (!ip->rescaled && !ip->animation) {
++ ip->animation = gdk_pixbuf_loader_get_animation (loader);
+ g_object_ref (ip->animation);
+
+- html_image_pointer_start_animation (ip);
++ html_image_pointer_start_animation (ip);
+ }
+ update_or_redraw (ip);
+ }
+
++static void
++html_image_factory_size_prepared (GdkPixbufLoader *loader,
++ gint width,
++ gint height,
++ HTMLImagePointer *ip)
++{
++ HTMLEngine* e = ip->factory->engine;
++ gint new_width = width;
++ gint new_height = height;
++
++ if (!e->image_max_size_set)
++ return;
++
++ if (new_width > e->image_max_width) {
++ new_height = (gint) ((double) new_height *
++ ((double) e->image_max_width / (double) new_width));
++ new_width = e->image_max_width;
++ }
++
++ if (new_height > e->image_max_height) {
++ new_width = (gint) ((double) new_width *
++ ((double) e->image_max_height / (double) new_height));
++ new_height = e->image_max_height;
++ }
++
++ if ((width != new_width) || (height != new_height)) {
++ ip->rescaled = TRUE;
++ gdk_pixbuf_loader_set_size (loader, new_width, new_height);
++ }
++}
++
+ static GdkPixbuf *
+ html_image_factory_get_missing (HTMLImageFactory *factory)
+ {
+@@ -1321,6 +1378,8 @@
+ retval->iter = NULL;
+ retval->animation = NULL;
+ retval->interests = NULL;
++ retval->pixbuf = NULL;
++ retval->rescaled = FALSE;
+ retval->factory = factory;
+ retval->stall = FALSE;
+ retval->stall_timeout = g_timeout_add (STALL_INTERVAL,
+@@ -1379,6 +1438,10 @@
+ g_object_unref (ip->animation);
+ ip->animation = NULL;
+ }
++ if (ip->pixbuf) {
++ g_object_unref (ip->pixbuf);
++ ip->pixbuf = NULL;
++ }
+ if (ip->iter) {
+ g_object_unref (ip->iter);
+ ip->iter = NULL;
+@@ -1441,21 +1504,28 @@
+
+ if (!ip) {
+ ip = html_image_pointer_new (url, factory);
++ g_signal_connect (ip->loader, "size_prepared",
++ G_CALLBACK (html_image_factory_size_prepared),
++ ip);
+ g_hash_table_insert (factory->loaded_images, ip->url, ip);
+ if (*url) {
+- g_signal_connect (G_OBJECT (ip->loader), "area_prepared",
+- G_CALLBACK (html_image_factory_area_prepared),
+- ip);
+-
+- g_signal_connect (G_OBJECT (ip->loader), "area_updated",
+- G_CALLBACK (html_image_factory_area_updated),
+- ip);
++ g_signal_connect (G_OBJECT (ip->loader), "area_prepared",
++ G_CALLBACK (html_image_factory_area_prepared),
++ ip);
++
++ g_signal_connect (G_OBJECT (ip->loader), "area_updated",
++ G_CALLBACK (html_image_factory_area_updated),
++ ip);
+ stream = html_image_pointer_load (ip);
+ }
+ } else {
+ if (reload) {
+ free_image_ptr_data (ip);
+ ip->loader = gdk_pixbuf_loader_new ();
++ g_signal_connect (ip->loader, "size_prepared",
++ G_CALLBACK (html_image_factory_size_prepared),
++ ip);
++
+ stream = html_image_pointer_load (ip);
+ }
+ }
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlimage.h gtkhtml-3.24.4/gtkhtml/htmlimage.h
+--- gtkhtml-3.24.4/gtkhtml/htmlimage.h 2009-04-07 04:15:16.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlimage.h 2009-04-07 04:23:46.000000000 +0200
+@@ -41,6 +41,8 @@
+ gint stall;
+ guint stall_timeout;
+ guint animation_timeout;
++ GdkPixbuf *pixbuf; /* Only used when image_max_size_set & image rescaled */
++ gboolean rescaled; /* to know image was rescaled */
+ };
+
+ #define HTML_IMAGE(x) ((HTMLImage *)(x))
--- /dev/null
+diff -ru gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.24.4/gtkhtml/gtkhtml.c
+--- gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2009-04-09 10:13:35.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c 2009-04-09 11:28:49.000000000 +0200
+@@ -960,14 +960,14 @@
+ {
+ HTMLEngine *engine = GTK_HTML (widget)->engine;
+
++ if (!engine)
++ return;
++
+ /* we don't need to set font's in idle time so call idle callback directly to avoid
+ recalculating whole document
+ */
+- if (engine) {
+- gtk_html_set_fonts (GTK_HTML (widget), engine->painter);
+- html_engine_refresh_fonts (engine);
+- }
+-
++ gtk_html_set_fonts (GTK_HTML (widget), engine->painter);
++ html_engine_refresh_fonts (engine);
+
+ html_colorset_set_style (engine->defaultSettings->color_set, widget);
+ html_colorset_set_unchanged (engine->settings->color_set,
+@@ -2555,6 +2555,7 @@
+ g_return_if_fail (link);
+ text = g_strndup (HTML_TEXT (obj)->text + link->start_index, link->end_index - link->start_index);
+ utf8 = g_strconcat (complete_url, "\n", text, NULL);
++ g_free (text);
+ } else
+ utf8 = g_strconcat (complete_url, "\n", complete_url, NULL);
+
+@@ -2562,7 +2563,6 @@
+ gtk_selection_data_set (selection_data, selection_data->target, 8,
+ (guchar *) utf16, written_len);
+ g_free (utf8);
+- g_free (complete_url);
+ GTK_HTML (widget)->priv->dnd_url = utf16;
+ } else {
+ gtk_selection_data_set (selection_data, selection_data->target, 8,
+@@ -2570,6 +2570,8 @@
+ /* printf ("complete URL %s\n", complete_url); */
+ GTK_HTML (widget)->priv->dnd_url = complete_url;
+ }
++
++ g_free (complete_url);
+ }
+ }
+ }
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlcheckbox.c gtkhtml-3.24.4/gtkhtml/htmlcheckbox.c
+--- gtkhtml-3.24.4/gtkhtml/htmlcheckbox.c 2008-10-13 10:31:38.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlcheckbox.c 2009-04-09 10:50:17.000000000 +0200
+@@ -110,11 +110,12 @@
+ {
+ HTMLEmbedded *element;
+ GtkWidget *check;
++ static char *on = "on";
+
+ element = HTML_EMBEDDED (checkbox);
+
+ if (value == NULL)
+- value = g_strdup ("on");
++ value = on;
+
+ html_embedded_init (element, HTML_EMBEDDED_CLASS (klass), parent, name, value);
+
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlclueflow.c gtkhtml-3.24.4/gtkhtml/htmlclueflow.c
+--- gtkhtml-3.24.4/gtkhtml/htmlclueflow.c 2008-10-13 10:31:38.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlclueflow.c 2009-04-09 11:27:05.000000000 +0200
+@@ -2308,7 +2308,8 @@
+ p += (info->forward) ? 1 : -1;
+ } */
+
+- while ((info->forward && index < text_bytes)
++ /* index should be lesser than text_bytes - 1 */
++ while ((info->forward && index < (text_bytes - 1))
+ || (!info->forward && index >= 0)) {
+ rv = regexec (info->reb,
+ (gchar *) par + index,
--- /dev/null
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlengine.c gtkhtml-3.24.4/gtkhtml/htmlengine.c
+--- gtkhtml-3.24.4/gtkhtml/htmlengine.c 2009-04-09 13:15:13.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlengine.c 2009-04-09 13:24:57.000000000 +0200
+@@ -795,13 +795,15 @@
+ static void
+ finish_flow (HTMLEngine *e, HTMLObject *clue) {
+ g_return_if_fail (HTML_IS_ENGINE (e));
+-
++
+ if (e->flow && HTML_CLUE (e->flow)->tail == NULL) {
+- html_clue_remove (HTML_CLUE (clue), e->flow);
++ if (clue)
++ html_clue_remove (HTML_CLUE (clue), e->flow);
+ html_object_destroy (e->flow);
+ e->flow = NULL;
+ }
+- close_flow (e, clue);
++ if (clue)
++ close_flow (e, clue);
+ }
+
+
+diff -ru gtkhtml-3.24.4/gtkhtml/htmlobject.c gtkhtml-3.24.4/gtkhtml/htmlobject.c
+--- gtkhtml-3.24.4/gtkhtml/htmlobject.c 2008-10-13 10:31:38.000000000 +0200
++++ gtkhtml-3.24.4/gtkhtml/htmlobject.c 2009-04-09 13:26:02.000000000 +0200
+@@ -57,7 +57,9 @@
+ static void
+ destroy (HTMLObject *self)
+ {
+-#define GTKHTML_MEM_DEBUG 1
++ if (!self)
++ return;
++/* #define GTKHTML_MEM_DEBUG 1 */
+ #if GTKHTML_MEM_DEBUG
+ self->parent = HTML_OBJECT (0xdeadbeef);
+ self->next = HTML_OBJECT (0xdeadbeef);
--- /dev/null
+# Copyright (C) 2009 Kirtika Ruchandani <kirtibr@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+DESCRIPTION = "HTML rendering library"
+HOMEPAGE = "unknown"
+LICENSE = "GPL"
+SECTION = "x11/libs"
+DEPENDS = "gtk+ gail"
+PR = "r0"
+
+SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/gtkhtml/3.24/gtkhtml-3.24.4.tar.gz \
+ file://gtkhtml/gtkhtml_050_check_string.diff;patch=p1 \
+ file://gtkhtml/gtkhtml_090_dependency_removal.diff;patch=p1 \
+ file://gtkhtml/gtkhtml_100_dependency_removal_cleaning.diff;patch=p1 \
+ file://gtkhtml/gtkhtml_110_panning.diff;patch=p1 \
+ file://gtkhtml/gtkhtml_120_text_selection.diff;patch=p1 \
+ file://gtkhtml/gtkhtml_140_const_patch.diff;patch=p1 \
+ file://gtkhtml/gtkhtml_150_image_magnification.diff;patch=p1 \
+ file://gtkhtml/gtkhtml_160_get_motion_hints.diff;patch=p1 \
+ file://gtkhtml/gtkhtml_170_text_selection_with_proper_doubleclick.diff;patch=p1 \
+ file://gtkhtml/gtkhtml_180_dont_click_link_when_panning.diff;patch=p1 \
+ file://gtkhtml/gtkhtml_190_proper_adjustment_values.diff;patch=p1 \
+ file://gtkhtml/gtkhtml_200_textslave_proper_disposal.diff;patch=p1 \
+ file://gtkhtml/gtkhtml_210_try_a11y.diff;patch=p1 \
+ file://gtkhtml/gtkhtml_220_link_visited.diff;patch=p1 \
+ file://gtkhtml/gtkhtml_230_remove_libart.diff;patch=p1 \
+ file://gtkhtml/gtkhtml_240_last_search_selected_area.diff;patch=p1 \
+ file://gtkhtml/gtkhtml_250_back_out_of_regex_search.diff;patch=p1 \
+ file://gtkhtml/gtkhtml_260_dolt_fix.diff;patch=p1 \
+ file://gtkhtml/gtkhtml_270_content_type_fix.diff;patch=p1 \
+ file://gtkhtml/gtkhtml_280_pop_element_by_type_crash_fix.diff;patch=p1 \
+ file://gtkhtml/gtkhtml_290_set_image_max_size.diff;patch=p1 \
+ file://gtkhtml/gtkhtml_300_coverity_findings.diff;patch=p1 \
+ file://gtkhtml/gtkhtml_310_some_workarounds_to_avoid_crash.diff;patch=p1 "
+
+S="${WORKDIR}/gtkhtml-${PV}"
+
+inherit autotools pkgconfig
+EXTRA_OECONF = "--disable-gtk-doc"
+
+ORBIT_IDL = "${STAGING_BINDIR_NATIVE}/orbit-idl-2"
+
+do_configure_append(){
+ find ${S} -name Makefile | xargs sed -i s:'-I$(includedir)':'-I.':g
+ find ${S} -name Makefile | xargs sed -i s:'-I${prefix}/include':'-I.':g
+ find ${S} -name Makefile | xargs sed -i 's|ORBIT_IDL =.*|ORBIT_IDL = ${ORBIT_IDL}|'
+}
+
+
+do_stage(){
+ autotools_stage_all
+}
+
+FILES_${PN} += "${datadir}/gtkhtml-3.14/*"
--- /dev/null
+# Copyright (C) 2009 Kirtika Ruchandani <kirtibr@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+DESCRIPTION = "Hildon HelpLib for application developers"
+HOMEPAGE = "http://maemo.org"
+LICENSE = "GNU Lesser General Public License-version 2.1"
+SECTION = "misc"
+DEPENDS = "gtk-2.0 libosso libhildon1 gtkhtml libxml2"
+PR = "r0"
+
+SRC_URI = "http://ftp.debian.org/pool/main/libh/${PN}/${PN}_${PV}.orig.tar.gz \
+ file://libhildonhelp/plus-sign.patch;patch=1;pnum=0 "
+
+inherit autotools pkgconfig
+
+do_configure_prepend(){
+ touch gtk-doc.make
+}
+
+do_stage(){
+ autotools_stage_all
+}
--- /dev/null
+# Copyright (C) 2009 Kirtika Ruchandani <kirtibr@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+DESCRIPTION = "Text editor application for editing plain-text documents."
+HOMEPAGE = "http://maemo.org"
+LICENSE = "unknown"
+SECTION = "apps"
+DEPENDS = "libhildon1 gtk-2.0 osso-gnome-vfs2 glib-2.0 dbus-glib libosso conbtdialogs libhildonhelp libhildonfm2 osso-af-settings"
+# This is imp. Only r3 (rev. in pre-alpha repo) works. Later ones dont build
+PR = "r3"
+
+SRC_URI = "http://repository.maemo.org/pool/maemo5.0prealpha1/free/m/${PN}/${PN}_${PV}-3.tar.gz"
+
+inherit autotools pkgconfig
+
+FILES_${PN} += "${datadir}/icons/* \
+ ${datadir}/hildon-help/* \
+ ${datadir}/dbus-1/* "