summaryrefslogtreecommitdiff
path: root/openembedded/packages/gtkhtml2/files
diff options
context:
space:
mode:
Diffstat (limited to 'openembedded/packages/gtkhtml2/files')
-rw-r--r--openembedded/packages/gtkhtml2/files/add-end-element-signal.patch141
-rw-r--r--openembedded/packages/gtkhtml2/files/css-media.patch28
-rw-r--r--openembedded/packages/gtkhtml2/files/css-stylesheet-user.patch31
-rw-r--r--openembedded/packages/gtkhtml2/files/fix-infinite-loop.patch91
-rw-r--r--openembedded/packages/gtkhtml2/files/fix-margin-inherit.patch25
-rw-r--r--openembedded/packages/gtkhtml2/files/fix-recreation2.patch93
-rw-r--r--openembedded/packages/gtkhtml2/files/fix-style-change.patch29
7 files changed, 413 insertions, 25 deletions
diff --git a/openembedded/packages/gtkhtml2/files/add-end-element-signal.patch b/openembedded/packages/gtkhtml2/files/add-end-element-signal.patch
new file mode 100644
index 000000000..66bfc16fd
--- /dev/null
+++ b/openembedded/packages/gtkhtml2/files/add-end-element-signal.patch
@@ -0,0 +1,141 @@
+Index: libgtkhtml/document/htmldocument.c
+===================================================================
+--- libgtkhtml/document/htmldocument.c.orig 2006-02-11 05:21:28.000000000 +0000
++++ libgtkhtml/document/htmldocument.c 2006-02-11 15:41:06.000000000 +0000
+@@ -48,6 +48,7 @@ enum {
+
+ /* DOM change events */
+ NODE_INSERTED,
++ NODE_FINISHED,
+ NODE_REMOVED,
+ TEXT_UPDATED,
+ STYLE_UPDATED,
+@@ -536,6 +537,12 @@ html_document_new_node (HtmlParser *pars
+ }
+
+ static void
++html_document_finished_node (HtmlParser *parser, DomNode *node, HtmlDocument *document)
++{
++ g_signal_emit (G_OBJECT (document), document_signals [NODE_FINISHED], 0, node);
++}
++
++static void
+ html_document_finalize (GObject *object)
+ {
+ HtmlDocument *document = HTML_DOCUMENT (object);
+@@ -639,6 +646,16 @@ html_document_class_init (HtmlDocumentCl
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE, 1,
+ DOM_TYPE_NODE);
++
++ document_signals [NODE_FINISHED] =
++ g_signal_new ("node_finished",
++ G_TYPE_FROM_CLASS (object_class),
++ G_SIGNAL_RUN_LAST,
++ G_STRUCT_OFFSET (HtmlDocumentClass, node_finished),
++ NULL, NULL,
++ g_cclosure_marshal_VOID__OBJECT,
++ G_TYPE_NONE, 1,
++ DOM_TYPE_NODE);
+
+ document_signals [NODE_REMOVED] =
+ g_signal_new ("node_removed",
+@@ -818,6 +835,9 @@ html_document_open_stream (HtmlDocument
+ g_signal_connect (document->parser, "done_parsing",
+ (GCallback) html_document_done_parsing,
+ document);
++ g_signal_connect (document->parser, "finished_node",
++ (GCallback) html_document_finished_node,
++ document);
+
+ document->state = HTML_DOCUMENT_STATE_PARSING;
+ return TRUE;
+Index: libgtkhtml/document/htmldocument.h
+===================================================================
+--- libgtkhtml/document/htmldocument.h.orig 2006-02-11 05:21:28.000000000 +0000
++++ libgtkhtml/document/htmldocument.h 2006-02-11 15:35:38.000000000 +0000
+@@ -80,6 +80,7 @@ struct _HtmlDocumentClass {
+
+ /* DOM change events */
+ void (*node_inserted) (HtmlDocument *document, DomNode *node);
++ void (*node_finished) (HtmlDocument *document, DomNode *node);
+ void (*node_removed) (HtmlDocument *document, DomNode *node);
+ void (*text_updated) (HtmlDocument *document, DomNode *node);
+ void (*style_updated) (HtmlDocument *document, DomNode *node, HtmlStyleChange style_change);
+Index: libgtkhtml/document/htmlparser.c
+===================================================================
+--- libgtkhtml/document/htmlparser.c.orig 2006-01-17 11:50:54.000000000 +0000
++++ libgtkhtml/document/htmlparser.c 2006-02-11 17:21:20.000000000 +0000
+@@ -28,6 +28,7 @@ enum {
+ NEW_NODE,
+ DONE_PARSING,
+ PARSED_DOCUMENT_NODE,
++ FINISHED_NODE,
+ LAST_SIGNAL
+ };
+
+@@ -84,8 +85,13 @@ static void
+ html_endElement (void *ctx, const xmlChar *name)
+ {
+ HtmlParser *parser = HTML_PARSER (ctx);
++ DomNode *node;
+
+ xmlSAX2EndElement (parser->xmlctxt, name);
++
++ node = dom_Node_mkref (xmlGetLastChild (parser->xmlctxt->node));
++ if (node)
++ g_signal_emit (G_OBJECT (parser), parser_signals [FINISHED_NODE], 0, node);
+ }
+
+ static void
+@@ -241,6 +247,15 @@ html_parser_class_init (HtmlParserClass
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
++ parser_signals [FINISHED_NODE] =
++ g_signal_new ("finished_node",
++ G_TYPE_FROM_CLASS (object_class),
++ G_SIGNAL_RUN_LAST,
++ G_STRUCT_OFFSET (HtmlParserClass, finished_node),
++ NULL, NULL,
++ g_cclosure_marshal_VOID__OBJECT,
++ G_TYPE_NONE, 1,
++ DOM_TYPE_NODE);
+ }
+
+ static void
+@@ -281,11 +296,11 @@ html_parser_set_type (HtmlParser *parser
+ /* FIXME: Free parser if existing */
+ if (parser_type == HTML_PARSER_TYPE_HTML) {
+ parser->xmlctxt = htmlCreatePushParserCtxt (SAXHandler, parser,
+- parser->chars, parser->res, NULL, 0);
++ NULL, 0, NULL, 0);
+ }
+ else {
+ parser->xmlctxt = xmlCreatePushParserCtxt (SAXHandler, parser,
+- parser->chars, parser->res, NULL);
++ NULL, 0, NULL);
+ }
+
+
+Index: libgtkhtml/document/htmlparser.h
+===================================================================
+--- libgtkhtml/document/htmlparser.h.orig 2006-01-17 11:50:54.000000000 +0000
++++ libgtkhtml/document/htmlparser.h 2006-02-11 18:57:51.000000000 +0000
+@@ -57,8 +57,6 @@ struct _HtmlParser {
+
+ /* Used by libxml */
+ xmlParserCtxtPtr xmlctxt;
+- int res;
+- char chars[10];
+
+ gboolean blocking;
+ DomNode *blocking_node;
+@@ -71,6 +69,7 @@ struct _HtmlParserClass {
+ void (* done_parsing) (HtmlParser *parser);
+ void (* new_node) (HtmlParser *parser, DomNode *node);
+ void (* parsed_document_node) (HtmlParser *parser, DomDocument *document);
++ void (* finished_node) (HtmlParser *parser, DomNode *node);
+ };
+ typedef struct _HtmlParserClass HtmlParserClass;
+
diff --git a/openembedded/packages/gtkhtml2/files/css-media.patch b/openembedded/packages/gtkhtml2/files/css-media.patch
index a2d4d2b68..c5500ca2d 100644
--- a/openembedded/packages/gtkhtml2/files/css-media.patch
+++ b/openembedded/packages/gtkhtml2/files/css-media.patch
@@ -1,7 +1,7 @@
Index: libgtkhtml/css/cssmatcher.c
===================================================================
---- libgtkhtml/css/cssmatcher.c.orig 2006-02-05 18:19:15.000000000 +0000
-+++ libgtkhtml/css/cssmatcher.c 2006-02-05 18:20:15.000000000 +0000
+--- libgtkhtml/css/cssmatcher.c.orig 2006-02-11 05:18:03.000000000 +0000
++++ libgtkhtml/css/cssmatcher.c 2006-02-11 05:21:28.000000000 +0000
@@ -2411,7 +2411,8 @@ css_matcher_apply_stylesheet (HtmlDocume
CssStatement *stat = list->data;
gint j;
@@ -155,8 +155,8 @@ Index: libgtkhtml/css/cssmatcher.c
Index: libgtkhtml/document/htmldocument.c
===================================================================
---- libgtkhtml/document/htmldocument.c.orig 2006-02-05 18:20:06.000000000 +0000
-+++ libgtkhtml/document/htmldocument.c 2006-02-05 18:20:15.000000000 +0000
+--- libgtkhtml/document/htmldocument.c.orig 2006-02-11 05:21:18.000000000 +0000
++++ libgtkhtml/document/htmldocument.c 2006-02-11 05:21:28.000000000 +0000
@@ -142,9 +142,7 @@ html_document_stylesheet_stream_close (c
if (!buffer)
return;
@@ -268,7 +268,7 @@ Index: libgtkhtml/document/htmldocument.c
g_signal_connect (G_OBJECT (document->image_factory), "request_image",
G_CALLBACK (html_document_request_image), document);
-@@ -1150,3 +1157,24 @@ html_document_remove_stylesheet (HtmlDoc
+@@ -1159,3 +1166,24 @@ html_document_remove_stylesheet (HtmlDoc
return TRUE;
}
@@ -295,8 +295,8 @@ Index: libgtkhtml/document/htmldocument.c
+}
Index: libgtkhtml/document/htmldocument.h
===================================================================
---- libgtkhtml/document/htmldocument.h.orig 2006-02-05 18:20:06.000000000 +0000
-+++ libgtkhtml/document/htmldocument.h 2006-02-05 18:20:15.000000000 +0000
+--- libgtkhtml/document/htmldocument.h.orig 2006-02-11 05:20:51.000000000 +0000
++++ libgtkhtml/document/htmldocument.h 2006-02-11 05:21:28.000000000 +0000
@@ -64,6 +64,8 @@ struct _HtmlDocument {
DomNode *hover_node;
DomNode *active_node;
@@ -316,7 +316,7 @@ Index: libgtkhtml/document/htmldocument.h
GType html_document_get_type (void);
@@ -116,6 +119,10 @@ DomNode *html_document_find_anchor
void html_document_add_stylesheet (HtmlDocument *document, CssStylesheet *stylesheet);
- gboolean html_document_remove_stylesheet (HtmlDocument *document, CssStylesheet *stylesheet);
+ void html_document_remove_stylesheet (HtmlDocument *document, CssStylesheet *stylesheet);
+void html_document_set_media_type (HtmlDocument *document, const gchar *type);
+const gchar *html_document_get_media_type (HtmlDocument *document);
@@ -327,8 +327,8 @@ Index: libgtkhtml/document/htmldocument.h
#endif /* __HTMLDOCUMENT_H__ */
Index: libgtkhtml/css/cssparser.c
===================================================================
---- libgtkhtml/css/cssparser.c.orig 2006-02-05 18:19:15.000000000 +0000
-+++ libgtkhtml/css/cssparser.c 2006-02-05 18:20:15.000000000 +0000
+--- libgtkhtml/css/cssparser.c.orig 2006-02-11 05:18:03.000000000 +0000
++++ libgtkhtml/css/cssparser.c 2006-02-11 05:21:28.000000000 +0000
@@ -688,6 +688,32 @@ css_parser_parse_value (const gchar *buf
return pos;
}
@@ -441,8 +441,8 @@ Index: libgtkhtml/css/cssparser.c
if (pos == -1)
Index: libgtkhtml/css/cssparser.h
===================================================================
---- libgtkhtml/css/cssparser.h.orig 2006-02-05 18:19:15.000000000 +0000
-+++ libgtkhtml/css/cssparser.h 2006-02-05 18:20:15.000000000 +0000
+--- libgtkhtml/css/cssparser.h.orig 2006-02-11 05:18:03.000000000 +0000
++++ libgtkhtml/css/cssparser.h 2006-02-11 05:21:28.000000000 +0000
@@ -30,7 +30,7 @@
G_BEGIN_DECLS
@@ -454,8 +454,8 @@ Index: libgtkhtml/css/cssparser.h
G_END_DECLS
Index: libgtkhtml/css/cssstylesheet.h
===================================================================
---- libgtkhtml/css/cssstylesheet.h.orig 2006-02-05 18:19:15.000000000 +0000
-+++ libgtkhtml/css/cssstylesheet.h 2006-02-05 18:20:15.000000000 +0000
+--- libgtkhtml/css/cssstylesheet.h.orig 2006-02-11 05:18:03.000000000 +0000
++++ libgtkhtml/css/cssstylesheet.h 2006-02-11 05:21:28.000000000 +0000
@@ -99,6 +99,7 @@ struct _CssStatement {
CssValue *url;
gboolean fetched;
diff --git a/openembedded/packages/gtkhtml2/files/css-stylesheet-user.patch b/openembedded/packages/gtkhtml2/files/css-stylesheet-user.patch
index 01c983895..4fe7e9045 100644
--- a/openembedded/packages/gtkhtml2/files/css-stylesheet-user.patch
+++ b/openembedded/packages/gtkhtml2/files/css-stylesheet-user.patch
@@ -1,8 +1,8 @@
Index: libgtkhtml/document/htmldocument.c
===================================================================
---- libgtkhtml/document/htmldocument.c.orig 2006-02-05 18:19:17.000000000 +0000
-+++ libgtkhtml/document/htmldocument.c 2006-02-05 18:20:06.000000000 +0000
-@@ -1122,3 +1122,31 @@ html_document_find_anchor (HtmlDocument
+--- libgtkhtml/document/htmldocument.c.orig 2006-02-11 05:06:30.000000000 +0000
++++ libgtkhtml/document/htmldocument.c 2006-02-11 05:21:18.000000000 +0000
+@@ -1122,3 +1122,40 @@ html_document_find_anchor (HtmlDocument
else
return NULL;
}
@@ -12,7 +12,7 @@ Index: libgtkhtml/document/htmldocument.c
+{
+ HtmlStyleChange style_change;
+
-+ g_return_val_if_fail (HTML_IS_DOCUMENT (document), NULL);
++ g_return_if_fail (HTML_IS_DOCUMENT (document));
+
+ /* Note: @import not supported for user stylesheets, due to
+ * complications it would cause with removal.
@@ -20,30 +20,39 @@ Index: libgtkhtml/document/htmldocument.c
+
+ document->stylesheets = g_slist_append (document->stylesheets, sheet);
+
-+ style_change = html_document_restyle_node (document, DOM_NODE (dom_Document__get_documentElement (document->dom_document)), NULL, TRUE);
-+ g_signal_emit (G_OBJECT (document), document_signals [STYLE_UPDATED], 0, DOM_NODE (dom_Document__get_documentElement (document->dom_document)), style_change);
++ if (document->dom_document) {
++ style_change = html_document_restyle_node (document, DOM_NODE (dom_Document__get_documentElement (document->dom_document)), NULL, TRUE);
++ g_signal_emit (G_OBJECT (document), document_signals [STYLE_UPDATED], 0, DOM_NODE (dom_Document__get_documentElement (document->dom_document)), style_change);
++ }
+}
+
-+gboolean
++void
+html_document_remove_stylesheet (HtmlDocument *document, CssStylesheet *stylesheet)
+{
-+ g_return_val_if_fail (stylesheet && HTML_IS_DOCUMENT (document), FALSE);
++ HtmlStyleChange style_change;
++
++ g_return_if_fail (stylesheet && HTML_IS_DOCUMENT (document));
+
+ document->stylesheets = g_slist_remove (document->stylesheets, stylesheet);
+
++ if (document->dom_document) {
++ style_change = html_document_restyle_node (document, DOM_NODE (dom_Document__get_documentElement (document->dom_document)), NULL, TRUE);
++ g_signal_emit (G_OBJECT (document), document_signals [STYLE_UPDATED], 0, DOM_NODE (dom_Document__get_documentElement (document->dom_document)), style_change);
++ }
++
+ return TRUE;
+}
+
Index: libgtkhtml/document/htmldocument.h
===================================================================
---- libgtkhtml/document/htmldocument.h.orig 2006-02-05 18:19:17.000000000 +0000
-+++ libgtkhtml/document/htmldocument.h 2006-02-05 18:20:06.000000000 +0000
+--- libgtkhtml/document/htmldocument.h.orig 2006-02-11 05:06:30.000000000 +0000
++++ libgtkhtml/document/htmldocument.h 2006-02-11 05:20:51.000000000 +0000
@@ -113,6 +113,9 @@ void html_document_update_active_nod
void html_document_update_focus_element (HtmlDocument *document, DomElement *element);
DomNode *html_document_find_anchor (HtmlDocument *doc, const gchar *anchor);
+void html_document_add_stylesheet (HtmlDocument *document, CssStylesheet *stylesheet);
-+gboolean html_document_remove_stylesheet (HtmlDocument *document, CssStylesheet *stylesheet);
++void html_document_remove_stylesheet (HtmlDocument *document, CssStylesheet *stylesheet);
+
G_END_DECLS
diff --git a/openembedded/packages/gtkhtml2/files/fix-infinite-loop.patch b/openembedded/packages/gtkhtml2/files/fix-infinite-loop.patch
new file mode 100644
index 000000000..c2f36daf8
--- /dev/null
+++ b/openembedded/packages/gtkhtml2/files/fix-infinite-loop.patch
@@ -0,0 +1,91 @@
+Index: libgtkhtml/layout/htmlbox.c
+===================================================================
+--- libgtkhtml/layout/htmlbox.c.orig 2006-02-08 23:43:30.000000000 +0000
++++ libgtkhtml/layout/htmlbox.c 2006-02-11 04:49:55.000000000 +0000
+@@ -873,26 +873,21 @@ html_box_check_min_max_width_height (Htm
+ *boxheight = html_length_get_value (&HTML_BOX_GET_STYLE (self)->box->max_height, 0);
+ }
+
+- /* Maintain aspect ratio if it's an image - bias towards making image smaller */
++ /* Maintain aspect ratio if it's an image */
+ if (HTML_IS_BOX_IMAGE (self)) {
+ if ((*boxwidth > old_width) && (*boxheight >= old_height)) {
+ *boxheight = *boxheight * (gdouble)(*boxwidth / (gdouble)old_width);
+- html_box_check_min_max_width_height (self, boxwidth, boxheight);
+ return;
+ }
+-
+- if ((*boxheight > old_height) && (*boxwidth >= old_width)) {
++ else if ((*boxheight > old_height) && (*boxwidth >= old_width)) {
+ *boxwidth = *boxwidth * (gdouble)(*boxheight / (gdouble)old_height);
+- html_box_check_min_max_width_height (self, boxwidth, boxheight);
+ return;
+ }
+-
+- if ((*boxwidth < old_width) && (*boxheight <= old_height)) {
++ else if ((*boxwidth < old_width) && (*boxheight <= old_height)) {
+ *boxheight = *boxheight * (gdouble)(*boxwidth / (gdouble)old_width);
+ return;
+ }
+-
+- if ((*boxheight < old_height) && (*boxwidth <= old_width)) {
++ else if ((*boxheight < old_height) && (*boxwidth <= old_width)) {
+ *boxwidth = *boxwidth * (gdouble)(*boxheight / (gdouble)old_height);
+ return;
+ }
+Index: libgtkhtml/layout/html/htmlboximage.c
+===================================================================
+--- libgtkhtml/layout/html/htmlboximage.c.orig 2006-02-08 23:41:33.000000000 +0000
++++ libgtkhtml/layout/html/htmlboximage.c 2006-02-11 05:01:36.000000000 +0000
+@@ -176,8 +176,26 @@ html_box_image_relayout (HtmlBox *box, H
+
+ html_box_check_min_max_width_height (box, &width, &height);
+
+- if (old_width != width || old_height != height)
++ /* Guard against oscillation - When max-width/height alters the
++ * size of an image, the aspect ratio is maintained, but this
++ * can cause an infinite resizing loop as the size oscillates
++ * between two sizes that alternately require and don't
++ * require a scrollbar.
++ */
++ if ((old_width != width || old_height != height) && (width != image->last_width[1] || height != image->last_height[1])) {
+ html_box_image_update_scaled_pixbuf (image, width, height);
++ image->last_width[1] = image->last_width[0];
++ image->last_height[1] = image->last_height[0];
++ image->last_width[0] = width;
++ image->last_height[0] = height;
++ } else {
++ image->last_width[1] = image->last_width[0];
++ image->last_height[1] = image->last_height[0];
++ image->last_width[0] = width;
++ image->last_height[0] = height;
++ width = old_width;
++ height = old_height;
++ }
+ }
+ else {
+ if (style->width.type != HTML_LENGTH_AUTO)
+@@ -239,6 +257,10 @@ html_box_image_init (HtmlBoxImage *image
+ image->content_height = 20;
+ image->image = NULL;
+ image->scaled_pixbuf = NULL;
++ image->last_width[0] = 0;
++ image->last_height[0] = 0;
++ image->last_width[1] = 0;
++ image->last_height[1] = 0;
+ }
+
+ GType
+Index: libgtkhtml/layout/html/htmlboximage.h
+===================================================================
+--- libgtkhtml/layout/html/htmlboximage.h.orig 2001-08-05 12:45:30.000000000 +0100
++++ libgtkhtml/layout/html/htmlboximage.h 2006-02-11 04:40:44.000000000 +0000
+@@ -49,6 +49,8 @@ struct _HtmlBoxImage {
+ GdkPixbuf *scaled_pixbuf;
+ gboolean updated;
+ HtmlView *view;
++
++ gint last_width[2], last_height[2];
+ };
+
+ struct _HtmlBoxImageClass {
diff --git a/openembedded/packages/gtkhtml2/files/fix-margin-inherit.patch b/openembedded/packages/gtkhtml2/files/fix-margin-inherit.patch
new file mode 100644
index 000000000..16337b7cc
--- /dev/null
+++ b/openembedded/packages/gtkhtml2/files/fix-margin-inherit.patch
@@ -0,0 +1,25 @@
+Index: libgtkhtml/layout/htmlbox.c
+===================================================================
+--- libgtkhtml/layout/htmlbox.c.orig 2006-02-06 01:50:52.000000000 +0000
++++ libgtkhtml/layout/htmlbox.c 2006-02-06 01:53:16.000000000 +0000
+@@ -151,17 +151,13 @@ simple_margin (HtmlStyle *style)
+ static gboolean
+ need_containing_width (HtmlBox *box, gint width)
+ {
+- HtmlStyle *style;
+-
+ if (width > 0)
+ return FALSE;
+
+- style = HTML_BOX_GET_STYLE (box);
+-
+- if (simple_margin (style))
+- return FALSE;
++ if (html_box_get_containing_block (box))
++ return TRUE;
+
+- return TRUE;
++ return FALSE;
+ }
+
+ gint
diff --git a/openembedded/packages/gtkhtml2/files/fix-recreation2.patch b/openembedded/packages/gtkhtml2/files/fix-recreation2.patch
new file mode 100644
index 000000000..92a8c8fd2
--- /dev/null
+++ b/openembedded/packages/gtkhtml2/files/fix-recreation2.patch
@@ -0,0 +1,93 @@
+Index: libgtkhtml/view/htmlview.c
+===================================================================
+--- libgtkhtml/view/htmlview.c.orig 2006-02-11 05:06:22.000000000 +0000
++++ libgtkhtml/view/htmlview.c 2006-02-11 05:07:01.000000000 +0000
+@@ -2135,38 +2135,31 @@ html_view_style_updated (HtmlDocument *d
+ HtmlBox *new_box = NULL;
+
+ /* Don't replace boxes where display: none has been set */
+- if (style->display == HTML_DISPLAY_NONE) {
+- html_view_removed (document, node, view);
++ if (!style || style->display == HTML_DISPLAY_NONE)
+ break;
+- }
+
+ new_box = html_box_factory_new_box (view, node, TRUE);
+ g_assert (new_box);
+
+ new_box->dom_node = node;
+ g_object_add_weak_pointer (G_OBJECT (node), (gpointer *)&(new_box->dom_node));
++ html_box_handle_html_properties (new_box, node->xmlnode);
+ new_box->next = box->next;
+ new_box->prev = box->prev;
+ new_box->parent = box->parent;
+- new_box->children = box->children;
+
+- if (box->next) box->next->prev = new_box;
+- if (box->prev) box->prev->next = new_box;
+- if (box->parent)
++ if (box->parent) {
+ if (box->parent->children == box)
+ box->parent->children = new_box;
++ }
++ if (box->next) box->next->prev = new_box;
++ if (box->prev) box->prev->next = new_box;
+ if (box->children) {
+ HtmlBox *child = box->children;
+ while (child) {
+- if (child->parent == box)
+- child->parent = new_box;
+- child = child->prev;
+- }
+- child = box->children->next;
+- while (child) {
+- if (child->parent == box)
+- child->parent = new_box;
+- child = child->next;
++ HtmlBox *temp = child->next;
++ html_box_append_child (new_box, child);
++ child = temp;
+ }
+ }
+
+@@ -2176,7 +2169,6 @@ html_view_style_updated (HtmlDocument *d
+ html_view_remove_layout_box (view, node);
+ g_object_unref (box);
+
+- html_box_handle_html_properties (new_box, node->xmlnode);
+ html_view_add_layout_box (view, node, new_box);
+ html_view_relayout_callback (document, node, view);
+ break;
+Index: libgtkhtml/graphics/htmlimage.c
+===================================================================
+--- libgtkhtml/graphics/htmlimage.c.orig 2006-02-11 05:06:22.000000000 +0000
++++ libgtkhtml/graphics/htmlimage.c 2006-02-11 05:06:34.000000000 +0000
+@@ -142,6 +142,7 @@ static void
+ html_image_init (HtmlImage *image)
+ {
+ image->pixbuf = NULL;
++ image->stream = NULL;
+ image->broken = FALSE;
+ image->loading = FALSE;
+ image->loader = gdk_pixbuf_loader_new ();
+Index: libgtkhtml/graphics/htmlimagefactory.c
+===================================================================
+--- libgtkhtml/graphics/htmlimagefactory.c.orig 2006-02-11 05:06:22.000000000 +0000
++++ libgtkhtml/graphics/htmlimagefactory.c 2006-02-11 05:07:43.000000000 +0000
+@@ -146,7 +146,7 @@ html_image_factory_get_image (HtmlImageF
+
+ image = HTML_IMAGE (g_object_new (HTML_IMAGE_TYPE, NULL));
+
+- g_object_weak_ref (G_OBJECT (image), (GWeakNotify)html_image_shutdown, image_factory);
++ g_signal_connect_swapped (G_OBJECT (image), "last_unref", G_CALLBACK (html_image_shutdown), image_factory);
+
+ image->loading = TRUE;
+
+@@ -154,6 +154,7 @@ html_image_factory_get_image (HtmlImageF
+ image);
+
+ image->stream = stream;
++ g_object_add_weak_pointer (G_OBJECT (stream), (gpointer *) &(image->stream));
+ g_object_add_weak_pointer (G_OBJECT (image), (gpointer *) &(stream->user_data));
+
+ g_signal_emit (G_OBJECT (image_factory), image_factory_signals [REQUEST_IMAGE], 0, uri, stream);
diff --git a/openembedded/packages/gtkhtml2/files/fix-style-change.patch b/openembedded/packages/gtkhtml2/files/fix-style-change.patch
new file mode 100644
index 000000000..865f2692a
--- /dev/null
+++ b/openembedded/packages/gtkhtml2/files/fix-style-change.patch
@@ -0,0 +1,29 @@
+Index: libgtkhtml/view/htmlview.c
+===================================================================
+--- libgtkhtml/view/htmlview.c.orig 2006-02-11 04:45:41.000000000 +0000
++++ libgtkhtml/view/htmlview.c 2006-02-11 04:45:42.000000000 +0000
+@@ -2286,9 +2286,7 @@ html_view_realize (GtkWidget *widget)
+ * GtkLayout uses the bg color for background but we want
+ * to use base color.
+ */
+- widget->style = gtk_style_copy (widget->style);
+- widget->style->bg[GTK_STATE_NORMAL] =
+- widget->style->base[GTK_STATE_NORMAL];
++ gtk_widget_modify_bg (widget, GTK_STATE_NORMAL, &widget->style->base[GTK_STATE_NORMAL]);
+ /*
+ * Store the font size so we can adjust size of HtmlFontSpecification
+ * if the size changes.
+@@ -3189,9 +3187,10 @@ html_view_style_set (GtkWidget *widget,
+ "focus-line-width", &focus_width,
+ NULL);
+
+-
+- widget->style->bg[GTK_STATE_NORMAL] =
+- widget->style->base[GTK_STATE_NORMAL];
++ if (!gdk_color_equal (&widget->style->bg[GTK_STATE_NORMAL], &widget->style->base[GTK_STATE_NORMAL])) {
++ gtk_widget_modify_bg (widget, GTK_STATE_NORMAL, &widget->style->base[GTK_STATE_NORMAL]);
++ return;
++ }
+ fsize = pango_font_description_get_size (widget->style->font_desc) / (gfloat) PANGO_SCALE;
+ new_isize = (gint) fsize;
+ old_isize = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (widget), "html-view-font-size"));