aboutsummaryrefslogtreecommitdiffstats
path: root/recipes/gtk-webcore
diff options
context:
space:
mode:
Diffstat (limited to 'recipes/gtk-webcore')
-rw-r--r--recipes/gtk-webcore/files/KWIQ-mimetype-segfault.patch14
-rw-r--r--recipes/gtk-webcore/files/KWQKURL-urlcmp.patch9
-rw-r--r--recipes/gtk-webcore/files/build_silence.patch16
-rw-r--r--recipes/gtk-webcore/files/fix-loading-error-report.patch44
-rw-r--r--recipes/gtk-webcore/files/gcc4-fno-threadsafe-statics-JavaScriptCore.patch12
-rw-r--r--recipes/gtk-webcore/files/gcc4-fno-threadsafe-statics-NRCit.patch12
-rw-r--r--recipes/gtk-webcore/files/gcc4-fno-threadsafe-statics-NRCore.patch12
-rw-r--r--recipes/gtk-webcore/files/gdk-colorspace.diff25
-rw-r--r--recipes/gtk-webcore/files/libm.patch13
-rw-r--r--recipes/gtk-webcore/files/no-pedantic.patch11
-rw-r--r--recipes/gtk-webcore/files/path_fixes.patch15
-rw-r--r--recipes/gtk-webcore/files/setHandle_segfault-fix.patch16
-rw-r--r--recipes/gtk-webcore/files/stop-load.image-loading.patch44
-rw-r--r--recipes/gtk-webcore/midori-0.0.17/webkit-update.patch676
-rw-r--r--recipes/gtk-webcore/midori-0.0.18/desktop.patch7
-rw-r--r--recipes/gtk-webcore/midori.inc10
-rw-r--r--recipes/gtk-webcore/midori_0.0.10.bb3
-rw-r--r--recipes/gtk-webcore/midori_0.0.11.bb1
-rw-r--r--recipes/gtk-webcore/midori_0.0.12.bb1
-rw-r--r--recipes/gtk-webcore/midori_0.0.13.bb1
-rw-r--r--recipes/gtk-webcore/midori_0.0.15.bb1
-rw-r--r--recipes/gtk-webcore/midori_0.0.17.bb5
-rw-r--r--recipes/gtk-webcore/midori_0.0.18.bb6
-rw-r--r--recipes/gtk-webcore/midori_0.0.21.bb5
-rw-r--r--recipes/gtk-webcore/midori_0.0.8.bb11
-rw-r--r--recipes/gtk-webcore/midori_0.1.2.bb29
-rw-r--r--recipes/gtk-webcore/midori_git.bb33
-rw-r--r--recipes/gtk-webcore/osb-browser-0.5.0/no-pedantic.patch11
-rw-r--r--recipes/gtk-webcore/osb-browser_0.5.0.bb11
-rw-r--r--recipes/gtk-webcore/osb-browser_20050430.bb18
-rw-r--r--recipes/gtk-webcore/osb-browser_20060212.bb20
-rw-r--r--recipes/gtk-webcore/osb-browser_svn.bb18
-rw-r--r--recipes/gtk-webcore/osb-jscore-0.5.0/gcc4-fno-threadsafe-statics.patch11
-rw-r--r--recipes/gtk-webcore/osb-jscore-0.5.0/libm.patch13
-rw-r--r--recipes/gtk-webcore/osb-jscore-0.5.0/missing-includes.patch10
-rw-r--r--recipes/gtk-webcore/osb-jscore-0.5.0/superh-aclocal.patch11
-rw-r--r--recipes/gtk-webcore/osb-jscore-0.5.0/superh-ustring-declaration-error.patch47
-rw-r--r--recipes/gtk-webcore/osb-jscore_0.5.0.bb36
-rw-r--r--recipes/gtk-webcore/osb-jscore_20050430.bb38
-rw-r--r--recipes/gtk-webcore/osb-jscore_20070816.bb40
-rw-r--r--recipes/gtk-webcore/osb-jscore_svn.bb39
-rw-r--r--recipes/gtk-webcore/osb-nrcit/pkgconfig_fix.patch13
-rw-r--r--recipes/gtk-webcore/osb-nrcit_0.5.0.bb30
-rw-r--r--recipes/gtk-webcore/osb-nrcit_20050430.bb39
-rw-r--r--recipes/gtk-webcore/osb-nrcit_20070816.bb39
-rw-r--r--recipes/gtk-webcore/osb-nrcit_svn.bb39
-rw-r--r--recipes/gtk-webcore/osb-nrcore-0.5.0/KWQDictImpl.patch375
-rw-r--r--recipes/gtk-webcore/osb-nrcore.inc46
-rw-r--r--recipes/gtk-webcore/osb-nrcore_0.5.0.bb6
-rw-r--r--recipes/gtk-webcore/osb-nrcore_20050430.bb11
-rw-r--r--recipes/gtk-webcore/osb-nrcore_20070816.bb14
-rw-r--r--recipes/gtk-webcore/osb-nrcore_svn.bb23
52 files changed, 1990 insertions, 0 deletions
diff --git a/recipes/gtk-webcore/files/KWIQ-mimetype-segfault.patch b/recipes/gtk-webcore/files/KWIQ-mimetype-segfault.patch
new file mode 100644
index 0000000000..feee33c8fe
--- /dev/null
+++ b/recipes/gtk-webcore/files/KWIQ-mimetype-segfault.patch
@@ -0,0 +1,14 @@
+--- NRCore/kwiq/KWQLoader.cpp.orig 2006-01-10 19:20:34.000000000 +0200
++++ NRCore/kwiq/KWQLoader.cpp 2006-01-10 19:20:50.000000000 +0200
+@@ -292,7 +292,10 @@
+ QString KWQResponseMIMEType(KWIQResponse *r)
+ {
+ ASSERT(r);
+- return r->mimeType();
++ if (!r)
++ return 0;
++ else
++ return r->mimeType();
+ }
+
+ QString KWQResponseHeaderString(KWIQResponse *r)
diff --git a/recipes/gtk-webcore/files/KWQKURL-urlcmp.patch b/recipes/gtk-webcore/files/KWQKURL-urlcmp.patch
new file mode 100644
index 0000000000..89aec6147d
--- /dev/null
+++ b/recipes/gtk-webcore/files/KWQKURL-urlcmp.patch
@@ -0,0 +1,9 @@
+--- NRCore/kwiq/KWQKURL.h.orig 2006-03-16 22:48:18.000000000 +0100
++++ NRCore/kwiq/KWQKURL.h 2006-03-16 22:48:20.000000000 +0100
+@@ -130,4 +130,6 @@
+ friend bool urlcmp(const QString &URLA, const QString &URLB, bool ignoreTrailingSlash, bool ignoreRef);
+ };
+
++bool urlcmp(const QString &URLA, const QString &URLB, bool ignoreTrailingSlash, bool ignoreRef);
++
+ #endif
diff --git a/recipes/gtk-webcore/files/build_silence.patch b/recipes/gtk-webcore/files/build_silence.patch
new file mode 100644
index 0000000000..ac77e17aac
--- /dev/null
+++ b/recipes/gtk-webcore/files/build_silence.patch
@@ -0,0 +1,16 @@
+Index: configure.in
+===================================================================
+--- configure.in (revision 46)
++++ configure.in (working copy)
+@@ -134,9 +134,9 @@
+ AC_SUBST(LIBCURL_LIBS) #needed by the osb-nrcore.pc.in
+
+
+-CXXFLAGS="$CXXFLAGS -fno-exceptions -fno-rtti -nostdinc++"
++CXXFLAGS="$CXXFLAGS -fno-exceptions -fno-rtti -nostdinc++ -DLOG_DISABLED"
+
+-CPPFLAGS="$CPPFLAGS -include \"\$(top_srcdir)/WebCorePrefix.h\" $PACKAGE_CFLAGS $X_CFLAGS $JSCORE_CFLAGS $DEFINES"
++CPPFLAGS="$CPPFLAGS -include \"\$(top_srcdir)/WebCorePrefix.h\" $PACKAGE_CFLAGS $X_CFLAGS $JSCORE_CFLAGS $DEFINES -DLOG_DISABLED"
+ LDFLAGS="$LDFLAGS $PACKAGE_LIBS $X_LIBS $JSCORE_LIBS \
+ -nodefaultlibs -lgcc -lc"
+
diff --git a/recipes/gtk-webcore/files/fix-loading-error-report.patch b/recipes/gtk-webcore/files/fix-loading-error-report.patch
new file mode 100644
index 0000000000..09e6f4f03a
--- /dev/null
+++ b/recipes/gtk-webcore/files/fix-loading-error-report.patch
@@ -0,0 +1,44 @@
+--- NRCit.orig/src/gtk/webi.cc.orig 2006-04-04 01:53:14.000000000 +0300
++++ NRCit/src/gtk/webi.cc 2006-04-04 01:44:20.000000000 +0300
+@@ -839,12 +839,15 @@
+ status->status = WEBI_LOADING_COMPLETE;
+ status->statusCode = statusCode;
+
++ g_signal_emit_by_name(webi, "status", status);
+ // assert(status->ready == status->files);
+ }
+
+ void MyRoot::internalStatusStartItem(const OSB::ResourceStatus * _status)
+ {
+ if (!internal) return;
++
++ status->status = WEBI_LOADING_START;
+ status->files++;
+ g_signal_emit_by_name(webi, "status", status);
+ }
+@@ -852,6 +855,8 @@
+ void MyRoot::internalStatusHeadersItem(const OSB::ResourceStatus * _status)
+ {
+ if (!internal) return;
++
++ status->status = WEBI_LOADING_START;
+ if (_status->size()) {
+ status->size += _status->size();
+ status->totalSize += _status->size();
+@@ -863,6 +868,8 @@
+ void MyRoot::internalStatusProgressItem(const OSB::ResourceStatus * _status)
+ {
+ if (!internal) return;
++
++ status->status = WEBI_LOADING_START;
+ status->totalReceived += _status->lastReceived();
+ // in case Content-Length -header is not present
+ if (!_status->size()) {
+@@ -880,6 +887,7 @@
+ status->ready++;
+ if (_status->error()) {
+ // FIXME: handle errors as well.u
++ status->status = WEBI_LOADING_ERROR;
+ }
+
+ g_signal_emit_by_name(webi, "status", status);
diff --git a/recipes/gtk-webcore/files/gcc4-fno-threadsafe-statics-JavaScriptCore.patch b/recipes/gtk-webcore/files/gcc4-fno-threadsafe-statics-JavaScriptCore.patch
new file mode 100644
index 0000000000..d48644cf5e
--- /dev/null
+++ b/recipes/gtk-webcore/files/gcc4-fno-threadsafe-statics-JavaScriptCore.patch
@@ -0,0 +1,12 @@
+diff -bur JavaScriptCore~orig/configure.in JavaScriptCore/configure.in
+--- JavaScriptCore~orig/configure.in 2006-02-12 01:51:50.000000000 -0600
++++ JavaScriptCore/configure.in 2006-02-12 22:26:44.000000000 -0600
+@@ -63,7 +63,7 @@
+ fi
+ changequote([,])dnl
+
+-CXXFLAGS="$CXXFLAGS -fno-exceptions -fno-rtti -nostdinc++"
++CXXFLAGS="$CXXFLAGS -fno-exceptions -fno-rtti -nostdinc++ -fno-threadsafe-statics"
+ LDFLAGS="$LDFLAGS $PACKAGE_LIBS" #-nodefaultlibs -lgcc -lc -lm"
+
+ CPPFLAGS="$CPPFLAGS $PACKAGE_CFLAGS -I\$(top_srcdir)/kjs -I\$(top_srcdir)/pcre -I\$(top_srcdir)/"
diff --git a/recipes/gtk-webcore/files/gcc4-fno-threadsafe-statics-NRCit.patch b/recipes/gtk-webcore/files/gcc4-fno-threadsafe-statics-NRCit.patch
new file mode 100644
index 0000000000..bee942fa9a
--- /dev/null
+++ b/recipes/gtk-webcore/files/gcc4-fno-threadsafe-statics-NRCit.patch
@@ -0,0 +1,12 @@
+diff -bur NRCit~orig/configure.in NRCit/configure.in
+--- NRCit~orig/configure.in 2005-08-08 18:07:00.000000000 -0500
++++ NRCit/configure.in 2006-02-12 21:28:53.000000000 -0600
+@@ -37,7 +37,7 @@
+ esac
+ case " $CXXFLAGS " in
+ *[\ \ ]-Wall[\ \ ]*) ;;
+- *) CXXFLAGS="$CXXFLAGS -Wall -Werror" ;;
++ *) CXXFLAGS="$CXXFLAGS -Wall -Werror -fno-threadsafe-statics" ;;
+ esac
+ fi
+ changequote([,])dnl
diff --git a/recipes/gtk-webcore/files/gcc4-fno-threadsafe-statics-NRCore.patch b/recipes/gtk-webcore/files/gcc4-fno-threadsafe-statics-NRCore.patch
new file mode 100644
index 0000000000..d3cb8c9b47
--- /dev/null
+++ b/recipes/gtk-webcore/files/gcc4-fno-threadsafe-statics-NRCore.patch
@@ -0,0 +1,12 @@
+diff -bur NRCore~orig/configure.in NRCore/configure.in
+--- NRCore~orig/configure.in 2005-02-16 03:31:43.000000000 -0600
++++ NRCore/configure.in 2006-02-12 21:03:49.000000000 -0600
+@@ -107,7 +107,7 @@
+ esac
+ case " $CXXFLAGS " in
+ *[\ \ ]-Wall[\ \ ]*) ;;
+- *) CXXFLAGS="$CXXFLAGS -Wall " ;;
++ *) CXXFLAGS="$CXXFLAGS -Wall -fno-threadsafe-statics " ;;
+ esac
+ fi
+ changequote([,])dnl
diff --git a/recipes/gtk-webcore/files/gdk-colorspace.diff b/recipes/gtk-webcore/files/gdk-colorspace.diff
new file mode 100644
index 0000000000..f225bc937d
--- /dev/null
+++ b/recipes/gtk-webcore/files/gdk-colorspace.diff
@@ -0,0 +1,25 @@
+Index: src/ImageRenderer.cpp
+===================================================================
+RCS file: /cvsroot/gtk-webcore/NRCit/src/ImageRenderer.cpp,v
+retrieving revision 1.1.1.1
+diff -u -r1.1.1.1 ImageRenderer.cpp
+--- NRCit.orig/src/ImageRenderer.cpp 16 Feb 2005 09:33:16 -0000 1.1.1.1
++++ NRCit/src/ImageRenderer.cpp 27 May 2005 23:36:28 -0000
+@@ -297,7 +297,7 @@
+ wantedSize.height,
+ GDK_INTERP_BILINEAR);
+
+- gdk_pixbuf_render_pixmap_and_mask(scaledbuf, &pixmap, &alpha, 100);
++ gdk_pixbuf_render_pixmap_and_mask_for_colormap(scaledbuf,gdk_colormap_get_system(), &pixmap, &alpha, 100);
+
+ buf = scaledbuf;
+ if (iter) {
+@@ -312,7 +312,7 @@
+ } else {
+
+ //correct size
+- gdk_pixbuf_render_pixmap_and_mask(buf, &pixmap, &alpha, 100);
++ gdk_pixbuf_render_pixmap_and_mask_for_colormap(buf, gdk_colormap_get_system(),&pixmap, &alpha, 100);
+ }
+
+ assert(gdk_pixbuf_get_has_alpha(buf) == (alpha != NULL));
diff --git a/recipes/gtk-webcore/files/libm.patch b/recipes/gtk-webcore/files/libm.patch
new file mode 100644
index 0000000000..b0c0cc6af2
--- /dev/null
+++ b/recipes/gtk-webcore/files/libm.patch
@@ -0,0 +1,13 @@
+Index: osb-jscore-0.5.0/configure.in
+===================================================================
+--- osb-jscore-0.5.0.orig/configure.in 2004-10-18 11:39:43.000000000 -0400
++++ osb-jscore-0.5.0/configure.in 2005-02-02 17:36:36.551550088 -0500
+@@ -18,6 +18,8 @@
+ AC_CHECK_HEADERS(string.h strings.h float.h)
+
+
++# isnan & friends generally come from libm, so link to it if its available
++AC_CHECK_LIB(m, sin)
+
+ AC_CHECK_FUNCS(isnan,[
+ AC_DEFINE(HAVE_FUNC_ISNAN,[],[Define to 1 if you have isnan function.])
diff --git a/recipes/gtk-webcore/files/no-pedantic.patch b/recipes/gtk-webcore/files/no-pedantic.patch
new file mode 100644
index 0000000000..faabbbf15f
--- /dev/null
+++ b/recipes/gtk-webcore/files/no-pedantic.patch
@@ -0,0 +1,11 @@
+--- osb-browser-0.5.0.orig/configure.in 2004-10-18 17:40:28.000000000 +0200
++++ osb-browser-0.5.0/configure.in 2004-10-24 01:23:26.000000000 +0200
+@@ -54,7 +54,7 @@
+ if test "x$GCC" = "xyes"; then
+ case " $CFLAGS " in
+ *[\ \ ]-Wall[\ \ ]*) ;;
+- *) CFLAGS="$CFLAGS -Wall -Werror -ansi -pedantic" ;;
++ *) CFLAGS="$CFLAGS -Wall -Werror -ansi" ;;
+ esac
+ fi
+ changequote([,])dnl
diff --git a/recipes/gtk-webcore/files/path_fixes.patch b/recipes/gtk-webcore/files/path_fixes.patch
new file mode 100644
index 0000000000..adb27bdd85
--- /dev/null
+++ b/recipes/gtk-webcore/files/path_fixes.patch
@@ -0,0 +1,15 @@
+Index: NRCore/configure.in
+===================================================================
+--- NRCore.orig/configure.in 2008-02-29 11:01:14.000000000 +0000
++++ NRCore/configure.in 2008-02-29 12:45:18.000000000 +0000
+@@ -67,8 +67,8 @@
+ AC_MSG_RESULT([found. Using prefix $jscore_prefix])
+ JSCORE_ENABLE=yes
+ AC_SUBST(JSCORE_ENABLE)
+- JSCORE_LIBS="-L$jscore_prefix/lib -ljscore"
+- JSCORE_CFLAGS="-I$jscore_prefix/include/gtk-webcore-jscore/"
++ JSCORE_LIBS="-L$jscore_prefix/lib -lgtk_webcore_jscore"
++ JSCORE_CFLAGS="-I$jscore_prefix/include/gtk-webcore/"
+ jscore_pkgdatadir="$jscore_prefix/share/gtk-webcore-jscore"
+ else
+ AC_MSG_ERROR([JavaScriptCore not found. Use --with-javascriptcore-prefix=PREFIX])
diff --git a/recipes/gtk-webcore/files/setHandle_segfault-fix.patch b/recipes/gtk-webcore/files/setHandle_segfault-fix.patch
new file mode 100644
index 0000000000..9ebdfeebe5
--- /dev/null
+++ b/recipes/gtk-webcore/files/setHandle_segfault-fix.patch
@@ -0,0 +1,16 @@
+--- NRCore/kwiq/KWQResourceLoader.cpp.orig 2006-01-21 00:13:32.000000000 +0200
++++ NRCore/kwiq/KWQResourceLoader.cpp 2006-01-20 23:52:59.000000000 +0200
+@@ -56,8 +56,11 @@
+ void KWQResourceLoader::setHandle(WebCoreResourceHandle* handle)
+ {
+ ASSERT(!_handle);
+- handle->retain();
+- _handle = handle;
++ if (handle)
++ {
++ handle->retain();
++ _handle = handle;
++ }
+ }
+
+ void KWQResourceLoader::receivedResponse(KWIQResponse* response)
diff --git a/recipes/gtk-webcore/files/stop-load.image-loading.patch b/recipes/gtk-webcore/files/stop-load.image-loading.patch
new file mode 100644
index 0000000000..47200825c0
--- /dev/null
+++ b/recipes/gtk-webcore/files/stop-load.image-loading.patch
@@ -0,0 +1,44 @@
+--- NRCit/src/frameimpl.cpp.orig 2005-02-16 11:33:16.000000000 +0200
++++ NRCit/src/frameimpl.cpp 2005-10-28 00:44:15.000000000 +0300
+@@ -152,6 +152,7 @@
+
+ void FrameImpl::stopLoad()
+ {
++ frameLoadDelegate()->onFrameLoadFinished(this, 1);
+ closeURL();
+ }
+
+--- NRCit/src/ImageRenderer.cpp.orig 2005-02-16 11:33:16.000000000 +0200
++++ NRCit/src/ImageRenderer.cpp 2005-10-28 20:43:42.000000000 +0300
+@@ -133,19 +133,19 @@
+ g_object_ref(pixbuf);
+ } else {
+ // not loading
+- if (ir.anim) {
++ /*if (ir.anim) {
+ // is an animation => get own pixbuf, owned by iterator
+ anim = ir.anim;
+ g_object_ref(anim);
+ assert(ir.iter);
+ iter = gdk_pixbuf_animation_get_iter(anim, NULL);
+- } else {
++ } else {*/
+ // not an animation
+ assert(!ir.iter);
+ pixbuf = ir.pixbuf;
+ if (pixbuf)
+ g_object_ref(pixbuf);
+- }
++ //}
+ }
+ }
+
+@@ -415,7 +417,7 @@
+
+ void ImageRenderer::stopAnimation()
+ {
+- //stopped = true;
++ stopped = true;
+ }
+
+ void ImageRenderer::tileInRect(GdkRectangle* r, int sx, int sy, CGContextRef context)
diff --git a/recipes/gtk-webcore/midori-0.0.17/webkit-update.patch b/recipes/gtk-webcore/midori-0.0.17/webkit-update.patch
new file mode 100644
index 0000000000..d3d19123cf
--- /dev/null
+++ b/recipes/gtk-webcore/midori-0.0.17/webkit-update.patch
@@ -0,0 +1,676 @@
+Update midori 0.17 to the new pkgconfig and header location. Taken from upstream git
+
+diff -Nurd midori-0.0.17/src/browser.c midori/src/browser.c
+--- midori-0.0.17/src/browser.c 2008-01-23 02:20:22.000000000 +0100
++++ midori/src/browser.c 2008-03-05 10:43:08.028499025 +0100
+@@ -1,5 +1,5 @@
+ /*
+- Copyright (C) 2007 Christian Dywan <christian@twotoasts.de>
++ Copyright (C) 2007-2008 Christian Dywan <christian@twotoasts.de>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+@@ -290,6 +290,15 @@
+ g_free(source);*/
+ }
+
++void on_action_fullscreen_activate(GtkAction* action, CBrowser* browser)
++{
++ GdkWindowState state = gdk_window_get_state(browser->window->window);
++ if(state & GDK_WINDOW_STATE_FULLSCREEN)
++ gtk_window_unfullscreen(GTK_WINDOW(browser->window));
++ else
++ gtk_window_fullscreen(GTK_WINDOW(browser->window));
++}
++
+ void on_action_back_activate(GtkAction* action, CBrowser* browser)
+ {
+ webkit_web_view_go_back(WEBKIT_WEB_VIEW(get_nth_webView(-1, browser)));
+@@ -1125,13 +1134,35 @@
+ update_search_engines(browser);
+ }
+
++static void on_window_state_changed(GtkWidget* widget
++ , GdkEventWindowState* event, CBrowser* browser)
++{
++ if(event->changed_mask & GDK_WINDOW_STATE_FULLSCREEN)
++ {
++ if(event->new_window_state & GDK_WINDOW_STATE_FULLSCREEN)
++ {
++ gtk_widget_hide(browser->menubar);
++ g_object_set(browser->fullscreen, "stock-id"
++ , GTK_STOCK_LEAVE_FULLSCREEN, NULL);
++ gtk_widget_show(browser->fullscreen);
++ }
++ else
++ {
++ gtk_widget_show(browser->menubar);
++ gtk_widget_hide(browser->fullscreen);
++ g_object_set(browser->fullscreen, "stock-id"
++ , GTK_STOCK_FULLSCREEN, NULL);
++ }
++ }
++}
++
+ static void on_window_size_allocate(GtkWidget* widget, GtkAllocation* allocation
+ , CBrowser* browser)
+ {
+ if(GTK_WIDGET_REALIZED(widget))
+ {
+- if(!(gdk_window_get_state(widget->window)
+- & (GDK_WINDOW_STATE_MAXIMIZED | GDK_WINDOW_STATE_FULLSCREEN)))
++ GdkWindowState state = gdk_window_get_state(widget->window);
++ if(!(state & (GDK_WINDOW_STATE_MAXIMIZED | GDK_WINDOW_STATE_FULLSCREEN)))
+ {
+ config->winWidth = allocation->width;
+ config->winHeight = allocation->height;
+@@ -1180,6 +1211,8 @@
+
+ // Setup the window metrics
+ browser->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
++ g_signal_connect(browser->window, "window-state-event"
++ , G_CALLBACK(on_window_state_changed), browser);
+ GdkScreen* screen = gtk_window_get_screen(GTK_WINDOW(browser->window));
+ const gint defaultWidth = (gint)gdk_screen_get_width(screen) / 1.7;
+ const gint defaultHeight = (gint)gdk_screen_get_height(screen) / 1.7;
+@@ -1351,6 +1384,13 @@
+ gtk_toolbar_insert(GTK_TOOLBAR(browser->navibar)
+ , GTK_TOOL_ITEM(browser->closedTabs), -1);
+ sokoke_container_show_children(GTK_CONTAINER(browser->navibar));
++ action = gtk_action_group_get_action(browser->actiongroup, "Fullscreen");
++ browser->fullscreen = gtk_action_create_tool_item(action);
++ gtk_widget_hide(browser->fullscreen);
++ g_signal_connect(browser->fullscreen, "clicked"
++ , G_CALLBACK(on_action_fullscreen_activate), browser);
++ gtk_toolbar_insert(GTK_TOOLBAR(browser->navibar)
++ , GTK_TOOL_ITEM(browser->fullscreen), -1);
+ action_set_active("ToolbarNavigation", config->toolbarNavigation, browser);
+
+ // Bookmarkbar
+@@ -1605,6 +1645,7 @@
+ browser->location = oldBrowser->location;
+ browser->webSearch = oldBrowser->webSearch;
+ browser->closedTabs = oldBrowser->closedTabs;
++ browser->fullscreen = oldBrowser->fullscreen;
+ browser->bookmarkbar = oldBrowser->bookmarkbar;
+ browser->panels = oldBrowser->panels;
+ browser->panels_notebook = oldBrowser->panels_notebook;
+@@ -1691,7 +1732,9 @@
+
+ // Connect signals
+ #define DOC_CONNECT(__sig, __func) g_signal_connect \
+- (G_OBJECT(browser->webView), __sig, G_CALLBACK(__func), browser);
++ (browser->webView, __sig, G_CALLBACK(__func), browser);
++ #define DOC_CONNECTA(__sig, __func) g_signal_connect_after \
++ (browser->webView, __sig, G_CALLBACK(__func), browser);
+ DOC_CONNECT ("navigation-requested" , on_webView_navigation_requested)
+ DOC_CONNECT ("title-changed" , on_webView_title_changed)
+ DOC_CONNECT ("icon-loaded" , on_webView_icon_changed)
+@@ -1704,11 +1747,13 @@
+ DOC_CONNECT ("console-message" , on_webView_console_message)
+
+ DOC_CONNECT ("button-press-event" , on_webView_button_press)
++ DOC_CONNECTA ("button-press-event" , on_webView_button_press_after)
+ DOC_CONNECT ("popup-menu" , on_webView_popup);
+ DOC_CONNECT ("scroll-event" , on_webView_scroll);
+ DOC_CONNECT ("leave-notify-event" , on_webView_leave)
+ DOC_CONNECT ("destroy" , on_webView_destroy)
+ #undef DOC_CONNECT
++ #undef DOC_CONNECTA
+
+ webkit_web_view_set_settings(WEBKIT_WEB_VIEW(browser->webView), webSettings);
+
+diff -Nurd midori-0.0.17/src/browser.h midori/src/browser.h
+--- midori-0.0.17/src/browser.h 2008-01-20 19:16:17.000000000 +0100
++++ midori/src/browser.h 2008-03-05 10:43:08.028499025 +0100
+@@ -39,6 +39,7 @@
+ GtkWidget* location;
+ GtkWidget* webSearch;
+ GtkWidget* closedTabs;
++ GtkWidget* fullscreen;
+ GtkWidget* bookmarkbar;
+ // panels
+ GtkWidget* panels;
+@@ -161,6 +162,9 @@
+ on_action_source_view_activate(GtkAction*, CBrowser*);
+
+ void
++on_action_fullscreen_activate(GtkAction*, CBrowser*);
++
++void
+ on_action_back_activate(GtkAction*, CBrowser*);
+
+ void
+@@ -364,6 +368,9 @@
+ { "Properties", GTK_STOCK_PROPERTIES
+ , NULL, ""
+ , "hm?", NULL/*G_CALLBACK(on_action_properties_activate)*/ },
++ { "Fullscreen", GTK_STOCK_FULLSCREEN
++ , NULL, "F11"
++ , "Toggle fullscreen view", G_CALLBACK(on_action_fullscreen_activate) },
+
+ { "Go", NULL, "_Go" },
+ { "Back", GTK_STOCK_GO_BACK
+diff -Nurd midori-0.0.17/src/conf.c midori/src/conf.c
+--- midori-0.0.17/src/conf.c 2008-01-23 05:12:24.000000000 +0100
++++ midori/src/conf.c 2008-03-05 10:43:08.028499025 +0100
+@@ -1,5 +1,5 @@
+ /*
+- Copyright (C) 2007 Christian Dywan <christian@twotoasts.de>
++ Copyright (C) 2007-2008 Christian Dywan <christian@twotoasts.de>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+@@ -64,6 +64,7 @@
+ GET_INT(config->newPages, "NewPages", CONFIG_NEWPAGES_TAB_NEW);
+ GET_INT(config->openTabsInTheBackground, "OpenTabsInTheBackground", FALSE);
+ GET_INT(config->openPopupsInTabs, "OpenPopupsInTabs", FALSE);
++ GET_INT(config->middleClickGoto, "MiddleClickGoto", FALSE);
+ #undef GET_INT
+ #undef GET_STR
+
+@@ -73,6 +74,10 @@
+ #define GET_STR(var, key, default) \
+ var = sokoke_key_file_get_string_default( \
+ keyFile, "content", key, default, NULL)
++ GET_STR(config->defaultFontFamily, "DefaultFontFamily", "Sans");
++ GET_INT(config->defaultFontSize, "DefaultFontSize", 10);
++ GET_INT(config->minimumFontSize, "MinimumFontSize", 5);
++ GET_STR(config->defaultEncoding, "DefaultEncoding", "UTF-8");
+ GET_INT(config->autoLoadImages, "AutoLoadImages", TRUE);
+ GET_INT(config->autoShrinkImages, "AutoShrinkImages", TRUE);
+ GET_INT(config->printBackgrounds, "PrintBackgrounds", FALSE);
+@@ -143,7 +148,12 @@
+ g_key_file_set_integer(keyFile, "browser", "NewPages", config->newPages);
+ g_key_file_set_integer(keyFile, "browser", "OpenTabsInTheBackground", config->openTabsInTheBackground);
+ g_key_file_set_integer(keyFile, "browser", "OpenPopupsInTabs", config->openPopupsInTabs);
++ g_key_file_set_integer(keyFile, "browser", "MiddleClickGoto", config->middleClickGoto);
+
++ g_key_file_set_string (keyFile, "content", "DefaultFontFamily", config->defaultFontFamily);
++ g_key_file_set_integer(keyFile, "content", "DefaultFontSize", config->defaultFontSize);
++ g_key_file_set_integer(keyFile, "content", "MinimumFontSize", config->minimumFontSize);
++ g_key_file_set_string (keyFile, "content", "DefaultEncoding", config->defaultEncoding);
+ g_key_file_set_integer(keyFile, "content", "AutoLoadImages", config->autoLoadImages);
+ g_key_file_set_integer(keyFile, "content", "AutoShrinkImages", config->autoShrinkImages);
+ g_key_file_set_integer(keyFile, "content", "PrintBackgrounds", config->printBackgrounds);
+diff -Nurd midori-0.0.17/src/conf.h midori/src/conf.h
+--- midori-0.0.17/src/conf.h 2008-01-23 05:11:13.000000000 +0100
++++ midori/src/conf.h 2008-03-05 10:43:08.028499025 +0100
+@@ -1,5 +1,5 @@
+ /*
+- Copyright (C) 2007 Christian Dywan <christian@twotoasts.de>
++ Copyright (C) 2007-2008 Christian Dywan <christian@twotoasts.de>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+@@ -36,8 +36,12 @@
+ guint newPages; // where to open new pages
+ gboolean openTabsInTheBackground;
+ gboolean openPopupsInTabs;
++ gboolean middleClickGoto;
+
+-
++ gchar* defaultFontFamily;
++ guint defaultFontSize;
++ guint minimumFontSize;
++ gchar* defaultEncoding;
+ gboolean autoLoadImages;
+ gboolean autoShrinkImages;
+ gboolean printBackgrounds;
+diff -Nurd midori-0.0.17/src/global.h midori/src/global.h
+--- midori-0.0.17/src/global.h 2008-01-23 03:13:40.000000000 +0100
++++ midori/src/global.h 2008-03-05 10:43:08.028499025 +0100
+@@ -16,7 +16,7 @@
+ #include "../katze/katze.h"
+
+ #include <gtk/gtk.h>
+-#include <webkit.h>
++#include <webkit/webkit.h>
+
+ // -- globals
+
+@@ -81,5 +81,9 @@
+ #if !GTK_CHECK_VERSION(2, 10, 0)
+ #define GTK_STOCK_SELECT_ALL "gtk-select-all"
+ #endif
++#if !GTK_CHECK_VERSION(2, 8, 0)
++#define GTK_STOCK_FULLSCREEN "gtk-fullscreen"
++#define GTK_STOCK_LEAVE_FULLSCREEN "gtk-leave-fullscreen"
++#endif
+
+ #endif /* !__GLOBAL_H__ */
+diff -Nurd midori-0.0.17/src/helpers.c midori/src/helpers.c
+--- midori-0.0.17/src/helpers.c 2008-01-20 17:46:16.000000000 +0100
++++ midori/src/helpers.c 2008-03-05 10:43:08.028499025 +0100
+@@ -16,7 +16,7 @@
+ #include "../katze/katze.h"
+
+ #include <string.h>
+-#include <webkit.h>
++#include <webkit/webkit.h>
+
+ GtkIconTheme* get_icon_theme(GtkWidget* widget)
+ {
+@@ -417,7 +417,7 @@
+ if(!strstr(uri, "://"))
+ {
+ // Do we have a domain, ip address or localhost?
+- if(strstr(uri, ".") != NULL || !strcmp(uri, "localhost"))
++ if(strchr(uri, '.') != NULL || !strcmp(uri, "localhost"))
+ return g_strconcat("http://", uri, NULL);
+ // We don't want to search? So return early.
+ if(!search)
+diff -Nurd midori-0.0.17/src/main.c midori/src/main.c
+--- midori-0.0.17/src/main.c 2008-01-23 05:13:21.000000000 +0100
++++ midori/src/main.c 2008-03-05 10:43:08.031832796 +0100
+@@ -1,5 +1,5 @@
+ /*
+- Copyright (C) 2007 Christian Dywan <christian@twotoasts.de>
++ Copyright (C) 2007-2008 Christian Dywan <christian@twotoasts.de>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+@@ -21,6 +21,7 @@
+
+ #include <string.h>
+ #include <gtk/gtk.h>
++#include <webkit/webkit.h>
+
+ #include "config.h"
+
+@@ -58,6 +59,10 @@
+ #if !GTK_CHECK_VERSION(2, 10, 0)
+ { GTK_STOCK_SELECT_ALL, "Select _All", 0, 0, (gchar*)"gtk20" },
+ #endif
++ #if !GTK_CHECK_VERSION(2, 8, 0)
++ { GTK_STOCK_FULLSCREEN, "_Fullscreen", 0, 0, (gchar*)"gtk20" },
++ { GTK_STOCK_FULLSCREEN, "_Leave Fullscreen", 0, 0, (gchar*)"gtk20" },
++ #endif
+ };
+ GtkIconFactory* factory = gtk_icon_factory_new();
+ guint i;
+@@ -244,8 +249,11 @@
+ stock_items_init();
+ browsers = NULL;
+
+- webSettings = webkit_web_settings_new();
+- g_object_set(webSettings
++ webSettings = g_object_new(WEBKIT_TYPE_WEB_SETTINGS
++ , "default-font-family" , config->defaultFontFamily
++ , "default-font-size" , config->defaultFontSize
++ , "minimum-font-size" , config->minimumFontSize
++ , "default-encoding" , config->defaultEncoding
+ , "auto-load-images" , config->autoLoadImages
+ , "auto-shrink-images" , config->autoShrinkImages
+ , "print-backgrounds" , config->printBackgrounds
+diff -Nurd midori-0.0.17/src/prefs.c midori/src/prefs.c
+--- midori-0.0.17/src/prefs.c 2008-01-23 05:10:45.000000000 +0100
++++ midori/src/prefs.c 2008-03-05 10:43:08.031832796 +0100
+@@ -1,5 +1,5 @@
+ /*
+- Copyright (C) 2007 Christian Dywan <christian@twotoasts.de>
++ Copyright (C) 2007-2008 Christian Dywan <christian@twotoasts.de>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+@@ -15,7 +15,8 @@
+ #include "global.h"
+ #include "sokoke.h"
+
+-#include "string.h"
++#include <stdlib.h>
++#include <string.h>
+
+ static gboolean on_prefs_homepage_focus_out(GtkWidget* widget
+ , GdkEventFocus event, CPrefs* prefs)
+@@ -29,11 +30,65 @@
+ config->startup = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
+ }
+
++static void on_prefs_defaultFont_changed(GtkWidget* widget, CPrefs* prefs)
++{
++ const gchar* font = gtk_font_button_get_font_name(GTK_FONT_BUTTON(widget));
++ gchar** components = g_strsplit(font, " ", 0);
++ guint i, n = g_strv_length(components) - 1;
++ GString* fontName = g_string_new(NULL);
++ for(i = 0; i < n; i++)
++ g_string_append_printf(fontName, "%s ", components[i]);
++ katze_assign(config->defaultFontFamily, g_string_free(fontName, FALSE));
++ config->defaultFontSize = atoi(components[n]);
++ g_strfreev(components);
++ g_object_set(webSettings, "default-font-family", config->defaultFontFamily
++ , "default-font-size", config->defaultFontSize, NULL);
++}
++
++static void on_prefs_minimumFontSize_changed(GtkWidget* widget, CPrefs* prefs)
++{
++ config->minimumFontSize = gtk_spin_button_get_value(GTK_SPIN_BUTTON(widget));
++ g_object_set(webSettings, "minimum-font-size", config->minimumFontSize, NULL);
++}
++
++static void on_prefs_defaultEncoding_changed(GtkWidget* widget, CPrefs* prefs)
++{
++ gchar* encoding;
++ switch(gtk_combo_box_get_active(GTK_COMBO_BOX(widget)))
++ {
++ case 0:
++ encoding = g_strdup("BIG5");
++ break;
++ case 1:
++ encoding = g_strdup("SHIFT_JIS");
++ break;
++ case 2:
++ encoding = g_strdup("KOI8-R");
++ break;
++ case 3:
++ encoding = g_strdup("UTF-8");
++ break;
++ case 4:
++ encoding = g_strdup("ISO-8859-1");
++ break;
++ default:
++ encoding = g_strdup("UTF-8");
++ g_warning("Invalid default encoding");
++ }
++ katze_assign(config->defaultEncoding, encoding);
++ g_object_set(webSettings, "default-encoding", config->defaultEncoding, NULL);
++}
++
+ static void on_prefs_newpages_changed(GtkWidget* widget, CPrefs* prefs)
+ {
+ config->newPages = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
+ }
+
++void on_prefs_middleClickGoto_toggled(GtkWidget* widget, CPrefs* prefs)
++{
++ config->middleClickGoto = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
++}
++
+ void on_prefs_openTabsInTheBackground_toggled(GtkWidget* widget, CPrefs* prefs)
+ {
+ config->openTabsInTheBackground = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
+@@ -302,7 +357,7 @@
+ #define WIDGET_ADD(__widget, __left, __right, __top, __bottom)\
+ gtk_table_attach(GTK_TABLE(table), __widget\
+ , __left, __right, __top, __bottom\
+- , 0, GTK_FILL, 8, 2)
++ , GTK_FILL, GTK_FILL, 8, 2)
+ #define FILLED_ADD(__widget, __left, __right, __top, __bottom)\
+ gtk_table_attach(GTK_TABLE(table), __widget\
+ , __left, __right, __top, __bottom\
+@@ -371,30 +426,42 @@
+ PAGE_NEW("Appearance");
+ FRAME_NEW("Font settings");
+ TABLE_NEW(5, 2);
+- INDENTED_ADD(gtk_label_new("Standard font"), 0, 1, 0, 1);
+- button = gtk_font_button_new_with_font("Sans 10"/*config->sFontStandard*/);
+- gtk_widget_set_sensitive(button, FALSE); //...
++ INDENTED_ADD(gtk_label_new_with_mnemonic("Default _font"), 0, 1, 0, 1);
++ gchar* defaultFont = g_strdup_printf("%s %d"
++ , config->defaultFontFamily, config->defaultFontSize);
++ button = gtk_font_button_new_with_font(defaultFont);
++ g_free(defaultFont);
++ g_signal_connect(button, "font-set", G_CALLBACK(on_prefs_defaultFont_changed), prefs);
+ FILLED_ADD(button, 1, 2, 0, 1);
+- INDENTED_ADD(gtk_label_new("Minimum font size"), 0, 1, 1, 2);
++ INDENTED_ADD(gtk_label_new_with_mnemonic("_Minimum font size"), 0, 1, 1, 2);
+ hbox = gtk_hbox_new(FALSE, 4);
+- spinbutton = gtk_spin_button_new_with_range(5, 12, 1);
+- gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbutton), 5/*config->iFontSizeMin*/);
+- gtk_widget_set_sensitive(spinbutton, FALSE); //...
++ spinbutton = gtk_spin_button_new_with_range(1, G_MAXINT, 1);
++ gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbutton), config->minimumFontSize);
++ g_signal_connect(spinbutton, "value-changed"
++ , G_CALLBACK(on_prefs_minimumFontSize_changed), prefs);
+ gtk_box_pack_start(GTK_BOX(hbox), spinbutton, FALSE, FALSE, 0);
+ button = gtk_button_new_with_mnemonic("_Advanced");
+ gtk_widget_set_sensitive(button, FALSE); //...
+ gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 4);
+ FILLED_ADD(hbox, 1, 2, 1, 2);
+- INDENTED_ADD(gtk_label_new("Default encoding"), 0, 1, 2, 3);
++ INDENTED_ADD(gtk_label_new_with_mnemonic("Default _encoding"), 0, 1, 2, 3);
+ combobox = gtk_combo_box_new_text();
+- const gchar* encoding = NULL; g_get_charset(&encoding);
+- // TODO: Fallback to utf-8 if the encoding is not sane (e.g. when lang=C)
+- gchar* sEncodingDefault = g_strdup_printf("System (%s)", encoding);
+ sokoke_combo_box_add_strings(GTK_COMBO_BOX(combobox)
+- , sEncodingDefault, "Chinese", "Greek", "Japanese (SHIFT_JIS)"
+- , "Korean", "Russian", "Unicode (UTF-8)", "Western (ISO-8859-1)", NULL);
+- gtk_combo_box_set_active(GTK_COMBO_BOX(combobox), 0); //...
+- gtk_widget_set_sensitive(combobox, FALSE); //...
++ , "Chinese (BIG5)", "Japanese (SHIFT_JIS)", "Russian (KOI8-R)"
++ , "Unicode (UTF-8)", "Western (ISO-8859-1)", NULL);
++ if(!strcmp(config->defaultEncoding, "BIG5"))
++ gtk_combo_box_set_active(GTK_COMBO_BOX(combobox), 0);
++ else if(!strcmp(config->defaultEncoding, "SHIFT_JIS"))
++ gtk_combo_box_set_active(GTK_COMBO_BOX(combobox), 1);
++ else if(!strcmp(config->defaultEncoding, "KOI8-R"))
++ gtk_combo_box_set_active(GTK_COMBO_BOX(combobox), 2);
++ else if(!strcmp(config->defaultEncoding, "UTF-8"))
++ gtk_combo_box_set_active(GTK_COMBO_BOX(combobox), 3);
++ else if(!strcmp(config->defaultEncoding, "ISO-8859-1"))
++ gtk_combo_box_set_active(GTK_COMBO_BOX(combobox), 4);
++ // FIXME: Provide a 'Custom' item
++ g_signal_connect(combobox, "changed"
++ , G_CALLBACK(on_prefs_defaultEncoding_changed), prefs);
+ FILLED_ADD(combobox, 1, 2, 2, 3);
+ button = gtk_button_new_with_label("Advanced settings");
+ gtk_widget_set_sensitive(button, FALSE); //...
+@@ -427,15 +494,19 @@
+ sokoke_combo_box_add_strings(GTK_COMBO_BOX(combobox)
+ , "New tab", "New window", "Current tab", NULL);
+ gtk_combo_box_set_active(GTK_COMBO_BOX(combobox), config->newPages);
+- g_signal_connect(combobox, "changed"
+- , G_CALLBACK(on_prefs_newpages_changed), prefs);
++ g_signal_connect(combobox, "changed", G_CALLBACK(on_prefs_newpages_changed), prefs);
+ gtk_widget_set_sensitive(combobox, FALSE); //...
+ FILLED_ADD(combobox, 1, 2, 0, 1);
++ checkbutton = gtk_check_button_new_with_mnemonic("_Middle click goto");
++ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton), config->middleClickGoto);
++ g_signal_connect(checkbutton, "toggled"
++ , G_CALLBACK(on_prefs_middleClickGoto_toggled), prefs);
++ INDENTED_ADD(checkbutton, 0, 1, 1, 2);
+ checkbutton = gtk_check_button_new_with_mnemonic("Open tabs in the _background");
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton), config->openTabsInTheBackground);
+ g_signal_connect(checkbutton, "toggled"
+ , G_CALLBACK(on_prefs_openTabsInTheBackground_toggled), prefs);
+- SPANNED_ADD(checkbutton, 0, 2, 1, 2);
++ SPANNED_ADD(checkbutton, 1, 2, 1, 2);
+ checkbutton = gtk_check_button_new_with_mnemonic("Open popups in _tabs");
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton), config->openPopupsInTabs);
+ g_signal_connect(checkbutton, "toggled"
+@@ -448,7 +519,7 @@
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton), config->autoLoadImages);
+ g_signal_connect(checkbutton, "toggled"
+ , G_CALLBACK(on_prefs_loadImagesAutomatically_toggled), prefs);
+- SPANNED_ADD(checkbutton, 0, 1, 0, 1);
++ INDENTED_ADD(checkbutton, 0, 1, 0, 1);
+ checkbutton = gtk_check_button_new_with_mnemonic("_Shrink images to fit");
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton), config->autoShrinkImages);
+ g_signal_connect(checkbutton, "toggled"
+@@ -458,7 +529,7 @@
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton), config->printBackgrounds);
+ g_signal_connect(checkbutton, "toggled"
+ , G_CALLBACK(on_prefs_printBackgrounds_toggled), prefs);
+- SPANNED_ADD(checkbutton, 0, 1, 1, 2);
++ INDENTED_ADD(checkbutton, 0, 1, 1, 2);
+ checkbutton = gtk_check_button_new_with_mnemonic("_Resizable textareas");
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton), config->resizableTextAreas);
+ g_signal_connect(checkbutton, "toggled"
+@@ -468,7 +539,7 @@
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton), config->enableScripts);
+ g_signal_connect(checkbutton, "toggled"
+ , G_CALLBACK(on_prefs_enableJavaScript_toggled), prefs);
+- SPANNED_ADD(checkbutton, 0, 1, 2, 3);
++ INDENTED_ADD(checkbutton, 0, 1, 2, 3);
+ checkbutton = gtk_check_button_new_with_mnemonic("Enable _plugins");
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton), config->enablePlugins);
+ g_signal_connect(checkbutton, "toggled"
+@@ -504,7 +575,7 @@
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton), config->toolbarSmall);
+ g_signal_connect(checkbutton, "toggled"
+ , G_CALLBACK(on_prefs_toolbarSmall_toggled), prefs);
+- SPANNED_ADD(checkbutton, 0, 1, 1, 2);
++ INDENTED_ADD(checkbutton, 0, 1, 1, 2);
+ checkbutton = gtk_check_button_new_with_mnemonic("Show web_search");
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton), config->toolbarWebSearch);
+ g_signal_connect(checkbutton, "toggled"
+@@ -514,42 +585,34 @@
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton), config->toolbarNewTab);
+ g_signal_connect(checkbutton, "toggled"
+ , G_CALLBACK(on_prefs_toolbarNewTab_toggled), prefs);
+- SPANNED_ADD(checkbutton, 0, 1, 2, 3);
++ INDENTED_ADD(checkbutton, 0, 1, 2, 3);
+ checkbutton = gtk_check_button_new_with_mnemonic("Show _closed tabs button");
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton), config->toolbarClosedTabs);
+ g_signal_connect(checkbutton, "toggled"
+ , G_CALLBACK(on_prefs_toolbarClosedTabs_toggled), prefs);
+ SPANNED_ADD(checkbutton, 1, 2, 2, 3);
+ FRAME_NEW("Miscellaneous");
+- TABLE_NEW(3, 2);
+- checkbutton = gtk_check_button_new_with_mnemonic
+- ("Show close _buttons on tabs");
++ TABLE_NEW(2, 2);
++ checkbutton = gtk_check_button_new_with_mnemonic("Close _buttons on tabs");
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton), config->tabClose);
+ g_signal_connect(checkbutton, "toggled"
+ , G_CALLBACK(on_prefs_tabClose_toggled), prefs);
+- SPANNED_ADD(checkbutton, 0, 1, 0, 1);
++ INDENTED_ADD(checkbutton, 0, 1, 0, 1);
+ hbox = gtk_hbox_new(FALSE, 4);
+ gtk_box_pack_start(GTK_BOX(hbox)
+- , gtk_label_new_with_mnemonic("Tab Si_ze"), FALSE, FALSE, 0);
++ , gtk_label_new_with_mnemonic("Tab Si_ze"), FALSE, FALSE, 4);
+ spinbutton = gtk_spin_button_new_with_range(0, 36, 1);
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbutton), config->tabSize);
+ g_signal_connect(spinbutton, "changed"
+ , G_CALLBACK(on_prefs_tabSize_changed), prefs);
+ gtk_box_pack_start(GTK_BOX(hbox), spinbutton, FALSE, FALSE, 0);
+ FILLED_ADD(hbox, 1, 2, 0, 1);
+- INDENTED_ADD(gtk_label_new_with_mnemonic("Tabbar _placement"), 0, 1, 1, 2);
+- combobox = gtk_combo_box_new_text();
+- sokoke_combo_box_add_strings(GTK_COMBO_BOX(combobox)
+- , "Left", "Top", "Right", "Bottom", NULL);
+- gtk_combo_box_set_active(GTK_COMBO_BOX(combobox), 1); //...
+- gtk_widget_set_sensitive(combobox, FALSE); //...
+- FILLED_ADD(combobox, 1, 2, 1, 2);
+- INDENTED_ADD(gtk_label_new_with_mnemonic("_Location search engine"), 0, 1, 2, 3);
++ INDENTED_ADD(gtk_label_new_with_mnemonic("_Location search engine"), 0, 1, 1, 2);
+ entry = gtk_entry_new();
+ gtk_entry_set_text(GTK_ENTRY(entry), config->locationSearch);
+ g_signal_connect(entry, "focus-out-event"
+ , G_CALLBACK(on_prefs_locationsearch_focus_out), prefs);
+- FILLED_ADD(entry, 1, 2, 2, 3);
++ FILLED_ADD(entry, 1, 2, 1, 2);
+
+ // Page "Network"
+ PAGE_NEW("Network");
+diff -Nurd midori-0.0.17/src/ui.h midori/src/ui.h
+--- midori-0.0.17/src/ui.h 2008-01-20 19:16:17.000000000 +0100
++++ midori/src/ui.h 2008-03-05 10:43:08.071832738 +0100
+@@ -91,9 +91,8 @@
+ "<menuitem action='ZoomOut'/>"
+ "<menuitem action='ZoomNormal'/>"
+ "<separator/>"
+- "<menuitem action='BackgroundImage'/>"
+ "<menuitem action='SourceView'/>"
+- "<menuitem action='Properties'/>"
++ "<menuitem action='Fullscreen'/>"
+ "</menu>"
+ "<menu action='Go'>"
+ "<menuitem action='Back'/>"
+diff -Nurd midori-0.0.17/src/webSearch.h midori/src/webSearch.h
+--- midori-0.0.17/src/webSearch.h 2007-12-15 04:09:47.000000000 +0100
++++ midori/src/webSearch.h 2008-03-05 10:43:08.071832738 +0100
+@@ -16,7 +16,7 @@
+
+ #include <gtk/gtk.h>
+ #include <libsexy/sexy.h>
+-#include <webkit.h>
++#include <webkit/webkit.h>
+
+ // -- Types
+
+diff -Nurd midori-0.0.17/src/webView.c midori/src/webView.c
+--- midori-0.0.17/src/webView.c 2008-01-13 02:47:38.000000000 +0100
++++ midori/src/webView.c 2008-03-05 10:43:08.071832738 +0100
+@@ -1,5 +1,5 @@
+ /*
+- Copyright (C) 2007 Christian Dywan <christian@twotoasts.de>
++ Copyright (C) 2007-2008 Christian Dywan <christian@twotoasts.de>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+@@ -251,6 +251,27 @@
+ return FALSE;
+ }
+
++gboolean on_webView_button_press_after(GtkWidget* webView, GdkEventButton* event
++ , CBrowser* browser)
++{
++ if(event->button == 2 && config->middleClickGoto)
++ {
++ GtkClipboard* clipboard = gtk_clipboard_get(GDK_SELECTION_PRIMARY);
++ gchar* text = gtk_clipboard_wait_for_text(clipboard);
++ gchar* uri = NULL;
++ if(text && strchr(text, '.') && !strchr(text, ' '))
++ uri = magic_uri(text, FALSE);
++ g_free(text);
++ if(uri)
++ {
++ webkit_web_view_open(WEBKIT_WEB_VIEW(browser->webView), uri);
++ g_free(uri);
++ return TRUE;
++ }
++ }
++ return FALSE;
++}
++
+ void on_webView_popup(GtkWidget* webView, CBrowser* browser)
+ {
+ webView_popup(webView, NULL, browser);
+diff -Nurd midori-0.0.17/src/webView.h midori/src/webView.h
+--- midori-0.0.17/src/webView.h 2008-01-04 08:46:44.000000000 +0100
++++ midori/src/webView.h 2008-03-05 10:43:08.071832738 +0100
+@@ -16,7 +16,7 @@
+ #include "browser.h"
+ #include "debug.h"
+
+-#include <webkit.h>
++#include <webkit/webkit.h>
+
+ WebKitNavigationResponse
+ on_webView_navigation_requested(GtkWidget* webView, WebKitWebFrame* frame
+@@ -60,6 +60,9 @@
+ gboolean
+ on_webView_button_press(GtkWidget*, GdkEventButton*, CBrowser*);
+
++gboolean
++on_webView_button_press_after(GtkWidget*, GdkEventButton*, CBrowser*);
++
+ void
+ on_webView_popup(GtkWidget*, CBrowser*);
+
+--- midori-0.0.17/configure.in 2008-01-24 03:47:18.000000000 +0100
++++ midori/configure.in 2008-03-05 10:43:08.025165254 +0100
+@@ -52,15 +52,15 @@
+ GTK_VER=`pkg-config --modversion gtk+-2.0`
+ AC_DEFINE_UNQUOTED([GTK_VER], "$GTK_VER", [GTK+ version])
+
+-# Checks for WebKitGtk
+-PKG_CHECK_MODULES(WEBKIT, WebKitGtk, have_webkit=true, have_webkit=false)
++# Checks for WebKit
++PKG_CHECK_MODULES(WEBKIT, webkit-1.0, have_webkit=true, have_webkit=false)
+ if test "x${have_webkit}" = "xfalse" ; then
+- AC_MSG_ERROR([No WebKitGtk package information found])
++ AC_MSG_ERROR([No WebKit package information found])
+ fi
+ AC_SUBST(WEBKIT_CFLAGS)
+ AC_SUBST(WEBKIT_LIBS)
+-WEBKIT_VER=`pkg-config --modversion WebKitGtk`
+-AC_DEFINE_UNQUOTED([WEBKIT_VER], "$WEBKITGTK_VER", [WebKitGtk version])
++WEBKIT_VER=`pkg-config --modversion webkit-1.0`
++AC_DEFINE_UNQUOTED([WEBKIT_VER], "$WEBKIT_VER", [WebKit version])
+
+ # Checks for libsexy
+ PKG_CHECK_MODULES(LIBSEXY, libsexy, have_libsexy=true, have_libsexy=false)
diff --git a/recipes/gtk-webcore/midori-0.0.18/desktop.patch b/recipes/gtk-webcore/midori-0.0.18/desktop.patch
new file mode 100644
index 0000000000..bb1225432a
--- /dev/null
+++ b/recipes/gtk-webcore/midori-0.0.18/desktop.patch
@@ -0,0 +1,7 @@
+--- midori-0.0.18/midori.desktop.in-orig 2008-03-19 14:34:52.000000000 -0700
++++ midori-0.0.18/midori.desktop.in 2008-03-19 14:21:56.000000000 -0700
+@@ -1,4 +1,3 @@
+-
+ [Desktop Entry]
+ Version=1.0
+ Encoding=UTF-8
diff --git a/recipes/gtk-webcore/midori.inc b/recipes/gtk-webcore/midori.inc
new file mode 100644
index 0000000000..793590babb
--- /dev/null
+++ b/recipes/gtk-webcore/midori.inc
@@ -0,0 +1,10 @@
+DESCRIPTION = "Midori is a lightweight web browser."
+LICENSE = "GPLv2"
+
+DEPENDS = "webkit-gtk libsoup-2.4 libsexy"
+
+inherit autotools gtk-icon-cache pkgconfig
+
+SRC_URI = "http://software.twotoasts.de/media/midori/midori-${PV}.tar.gz"
+
+
diff --git a/recipes/gtk-webcore/midori_0.0.10.bb b/recipes/gtk-webcore/midori_0.0.10.bb
new file mode 100644
index 0000000000..86904de5d5
--- /dev/null
+++ b/recipes/gtk-webcore/midori_0.0.10.bb
@@ -0,0 +1,3 @@
+require midori.inc
+
+
diff --git a/recipes/gtk-webcore/midori_0.0.11.bb b/recipes/gtk-webcore/midori_0.0.11.bb
new file mode 100644
index 0000000000..b879fef57b
--- /dev/null
+++ b/recipes/gtk-webcore/midori_0.0.11.bb
@@ -0,0 +1 @@
+require midori.inc
diff --git a/recipes/gtk-webcore/midori_0.0.12.bb b/recipes/gtk-webcore/midori_0.0.12.bb
new file mode 100644
index 0000000000..b879fef57b
--- /dev/null
+++ b/recipes/gtk-webcore/midori_0.0.12.bb
@@ -0,0 +1 @@
+require midori.inc
diff --git a/recipes/gtk-webcore/midori_0.0.13.bb b/recipes/gtk-webcore/midori_0.0.13.bb
new file mode 100644
index 0000000000..b879fef57b
--- /dev/null
+++ b/recipes/gtk-webcore/midori_0.0.13.bb
@@ -0,0 +1 @@
+require midori.inc
diff --git a/recipes/gtk-webcore/midori_0.0.15.bb b/recipes/gtk-webcore/midori_0.0.15.bb
new file mode 100644
index 0000000000..b879fef57b
--- /dev/null
+++ b/recipes/gtk-webcore/midori_0.0.15.bb
@@ -0,0 +1 @@
+require midori.inc
diff --git a/recipes/gtk-webcore/midori_0.0.17.bb b/recipes/gtk-webcore/midori_0.0.17.bb
new file mode 100644
index 0000000000..1278d21cbf
--- /dev/null
+++ b/recipes/gtk-webcore/midori_0.0.17.bb
@@ -0,0 +1,5 @@
+require midori.inc
+
+SRC_URI += "file://webkit-update.patch;patch=1"
+
+
diff --git a/recipes/gtk-webcore/midori_0.0.18.bb b/recipes/gtk-webcore/midori_0.0.18.bb
new file mode 100644
index 0000000000..bb144f8600
--- /dev/null
+++ b/recipes/gtk-webcore/midori_0.0.18.bb
@@ -0,0 +1,6 @@
+require midori.inc
+
+PR = "r2"
+
+SRC_URI += "file://desktop.patch;patch=1"
+
diff --git a/recipes/gtk-webcore/midori_0.0.21.bb b/recipes/gtk-webcore/midori_0.0.21.bb
new file mode 100644
index 0000000000..e10d92bd78
--- /dev/null
+++ b/recipes/gtk-webcore/midori_0.0.21.bb
@@ -0,0 +1,5 @@
+require midori.inc
+
+SRC_URI = "http://goodies.xfce.org/releases/midori/midori-${PV}.tar.bz2"
+
+
diff --git a/recipes/gtk-webcore/midori_0.0.8.bb b/recipes/gtk-webcore/midori_0.0.8.bb
new file mode 100644
index 0000000000..23d0179375
--- /dev/null
+++ b/recipes/gtk-webcore/midori_0.0.8.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "Midori is a lightweight web browser."
+LICENSE = "GPLv2"
+
+DEPENDS = "webkit-gtk libsexy"
+
+inherit autotools pkgconfig
+
+SRC_URI = "http://software.twotoasts.de/media/midori/midori-${PV}.tar.gz \
+ "
+
+
diff --git a/recipes/gtk-webcore/midori_0.1.2.bb b/recipes/gtk-webcore/midori_0.1.2.bb
new file mode 100644
index 0000000000..42ac708d01
--- /dev/null
+++ b/recipes/gtk-webcore/midori_0.1.2.bb
@@ -0,0 +1,29 @@
+require midori.inc
+
+DEPENDS += "python-native python-docutils-native"
+
+SRC_URI = "http://goodies.xfce.org/releases/midori/midori-${PV}.tar.bz2"
+
+
+do_configure() {
+ ./configure \
+ --prefix=${prefix} \
+ --bindir=${bindir} \
+ --sbindir=${sbindir} \
+ --libexecdir=${libexecdir} \
+ --datadir=${datadir} \
+ --sysconfdir=${sysconfdir} \
+ --sharedstatedir=${sharedstatedir} \
+ --localstatedir=${localstatedir} \
+ --libdir=${libdir} \
+ --includedir=${includedir} \
+ --infodir=${infodir} \
+ --mandir=${mandir} \
+ ${EXTRA_OECONF}
+
+ sed -i /LINK_CC/d ./_build_/c4che/default.cache.py
+ echo "LINK_CC = '${CXX}'" >> ./_build_/c4che/default.cache.py
+}
+
+
+
diff --git a/recipes/gtk-webcore/midori_git.bb b/recipes/gtk-webcore/midori_git.bb
new file mode 100644
index 0000000000..f4039a414f
--- /dev/null
+++ b/recipes/gtk-webcore/midori_git.bb
@@ -0,0 +1,33 @@
+require midori.inc
+
+DEPENDS += "python-native python-docutils-native"
+
+# increment PR every time SRCREV is updated!
+PR = "r0"
+PV = "0.1.2+${PR}+gitr${SRCREV}"
+
+SRC_URI = "http://git.xfce.org/kalikiana/midori/snapshot/midori-${SRCREV}.tar.bz2"
+S = "${WORKDIR}/midori-${SRCREV}"
+
+do_configure() {
+ ./configure \
+ --prefix=${prefix} \
+ --bindir=${bindir} \
+ --sbindir=${sbindir} \
+ --libexecdir=${libexecdir} \
+ --datadir=${datadir} \
+ --sysconfdir=${sysconfdir} \
+ --sharedstatedir=${sharedstatedir} \
+ --localstatedir=${localstatedir} \
+ --libdir=${libdir} \
+ --includedir=${includedir} \
+ --infodir=${infodir} \
+ --mandir=${mandir} \
+ ${EXTRA_OECONF}
+
+ sed -i /LINK_CC/d ./_build_/c4che/default.cache.py
+ echo "LINK_CC = '${CXX}'" >> ./_build_/c4che/default.cache.py
+}
+
+
+
diff --git a/recipes/gtk-webcore/osb-browser-0.5.0/no-pedantic.patch b/recipes/gtk-webcore/osb-browser-0.5.0/no-pedantic.patch
new file mode 100644
index 0000000000..faabbbf15f
--- /dev/null
+++ b/recipes/gtk-webcore/osb-browser-0.5.0/no-pedantic.patch
@@ -0,0 +1,11 @@
+--- osb-browser-0.5.0.orig/configure.in 2004-10-18 17:40:28.000000000 +0200
++++ osb-browser-0.5.0/configure.in 2004-10-24 01:23:26.000000000 +0200
+@@ -54,7 +54,7 @@
+ if test "x$GCC" = "xyes"; then
+ case " $CFLAGS " in
+ *[\ \ ]-Wall[\ \ ]*) ;;
+- *) CFLAGS="$CFLAGS -Wall -Werror -ansi -pedantic" ;;
++ *) CFLAGS="$CFLAGS -Wall -Werror -ansi" ;;
+ esac
+ fi
+ changequote([,])dnl
diff --git a/recipes/gtk-webcore/osb-browser_0.5.0.bb b/recipes/gtk-webcore/osb-browser_0.5.0.bb
new file mode 100644
index 0000000000..a401de6129
--- /dev/null
+++ b/recipes/gtk-webcore/osb-browser_0.5.0.bb
@@ -0,0 +1,11 @@
+LICENSE = "GPL"
+DESCRIPTION = "Gtk+ WebCore - reference browser"
+HOMEPAGE = "http://gtk-webcore.sourceforge.net/"
+PRIORITY = "optional"
+DEPENDS = "osb-nrcit gtk+ glib-2.0 libglade"
+SECTION = "gpe"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/gtk-webcore/osb-browser-${PV}.tar.gz \
+ file://no-pedantic.patch;patch=1"
+
+inherit autotools
diff --git a/recipes/gtk-webcore/osb-browser_20050430.bb b/recipes/gtk-webcore/osb-browser_20050430.bb
new file mode 100644
index 0000000000..749698eba5
--- /dev/null
+++ b/recipes/gtk-webcore/osb-browser_20050430.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "Gtk+ WebCore - reference browser"
+HOMEPAGE = "http://gtk-webcore.sourceforge.net/"
+LICENSE = "GPL"
+PRIORITY = "optional"
+SECTION = "gpe"
+
+FIXEDSRCDATE = "${@bb.data.getVar('FILE', d, 1).split('_')[-1].split('.')[0]}"
+PV = "0.5.0+cvs${FIXEDSRCDATE}"
+PR = "r1"
+
+DEPENDS = "osb-nrcit gtk+ glib-2.0 libglade"
+RRECOMMENDS = "gdk-pixbuf-loader-gif gdk-pixbuf-loader-ico gdk-pixbuf-loader-jpeg gdk-pixbuf-loader-png"
+
+SRC_URI = "cvs://anonymous@gtk-webcore.cvs.sourceforge.net/cvsroot/gtk-webcore;module=osb-browser;date=${FIXEDSRCDATE} \
+ file://no-pedantic.patch;patch=1"
+S = "${WORKDIR}/osb-browser"
+
+inherit autotools
diff --git a/recipes/gtk-webcore/osb-browser_20060212.bb b/recipes/gtk-webcore/osb-browser_20060212.bb
new file mode 100644
index 0000000000..608b3ec014
--- /dev/null
+++ b/recipes/gtk-webcore/osb-browser_20060212.bb
@@ -0,0 +1,20 @@
+DESCRIPTION = "Gtk+ WebCore - reference browser"
+HOMEPAGE = "http://gtk-webcore.sourceforge.net/"
+LICENSE = "GPL"
+PRIORITY = "optional"
+SECTION = "gpe"
+
+FIXEDSRCDATE = "${@bb.data.getVar('FILE', d, 1).split('_')[-1].split('.')[0]}"
+PV = "0.5.0+cvs${FIXEDSRCDATE}"
+PR = "r0"
+
+DEPENDS = "osb-nrcit gtk+ glib-2.0 libglade"
+RRECOMMENDS = "gdk-pixbuf-loader-gif gdk-pixbuf-loader-ico gdk-pixbuf-loader-jpeg gdk-pixbuf-loader-png"
+
+SRC_URI = "cvs://anonymous@gtk-webcore.cvs.sourceforge.net/cvsroot/gtk-webcore;module=osb-browser;date=${FIXEDSRCDATE} \
+ file://no-pedantic.patch;patch=1"
+S = "${WORKDIR}/osb-browser"
+
+DEFAULT_PREFERENCE = "${@['-1', '1'][not bb.data.getVar('PREFERRED_VERSION_gcc-cross', d, 1) or bb.data.getVar('PREFERRED_VERSION_gcc-cross', d, 1).split('.')[0] == '4']}"
+
+inherit autotools
diff --git a/recipes/gtk-webcore/osb-browser_svn.bb b/recipes/gtk-webcore/osb-browser_svn.bb
new file mode 100644
index 0000000000..912215cfbd
--- /dev/null
+++ b/recipes/gtk-webcore/osb-browser_svn.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "Gtk+ WebCore - reference browser"
+HOMEPAGE = "http://gtk-webcore.sourceforge.net/"
+SECTION = "gpe"
+PRIORITY = "optional"
+LICENSE = "GPL"
+DEPENDS = "osb-nrcit gtk+ glib-2.0 libglade"
+RRECOMMENDS = "gdk-pixbuf-loader-gif gdk-pixbuf-loader-ico gdk-pixbuf-loader-jpeg gdk-pixbuf-loader-png"
+PV = "0.5.0+svnr${SRCREV}"
+PR = "r0"
+
+inherit autotools
+
+SRC_URI = "svn://gtk-webcore.svn.sourceforge.net/svnroot/gtk-webcore/trunk;module=osb-browser;proto=https"
+
+S = "${WORKDIR}/osb-browser"
+
+DEFAULT_PREFERENCE = "-1"
+
diff --git a/recipes/gtk-webcore/osb-jscore-0.5.0/gcc4-fno-threadsafe-statics.patch b/recipes/gtk-webcore/osb-jscore-0.5.0/gcc4-fno-threadsafe-statics.patch
new file mode 100644
index 0000000000..44e69b2707
--- /dev/null
+++ b/recipes/gtk-webcore/osb-jscore-0.5.0/gcc4-fno-threadsafe-statics.patch
@@ -0,0 +1,11 @@
+--- osb-jscore-0.5.0/configure.in_orig 2006-09-18 00:37:27.000000000 +0000
++++ osb-jscore-0.5.0/configure.in 2006-09-18 00:37:51.000000000 +0000
+@@ -61,7 +61,7 @@
+ fi
+ changequote([,])dnl
+
+-CXXFLAGS="$CXXFLAGS -fno-exceptions -fno-rtti -nostdinc++"
++CXXFLAGS="$CXXFLAGS -fno-exceptions -fno-rtti -nostdinc++ -fno-threadsafe-statics"
+ LDFLAGS="$LDFLAGS -nodefaultlibs -lgcc -lc -lm"
+
+ CPPFLAGS="$CPPFLAGS -I\$(top_srcdir)/kjs -I\$(top_srcdir)/pcre -I\$(top_srcdir)/"
diff --git a/recipes/gtk-webcore/osb-jscore-0.5.0/libm.patch b/recipes/gtk-webcore/osb-jscore-0.5.0/libm.patch
new file mode 100644
index 0000000000..b0c0cc6af2
--- /dev/null
+++ b/recipes/gtk-webcore/osb-jscore-0.5.0/libm.patch
@@ -0,0 +1,13 @@
+Index: osb-jscore-0.5.0/configure.in
+===================================================================
+--- osb-jscore-0.5.0.orig/configure.in 2004-10-18 11:39:43.000000000 -0400
++++ osb-jscore-0.5.0/configure.in 2005-02-02 17:36:36.551550088 -0500
+@@ -18,6 +18,8 @@
+ AC_CHECK_HEADERS(string.h strings.h float.h)
+
+
++# isnan & friends generally come from libm, so link to it if its available
++AC_CHECK_LIB(m, sin)
+
+ AC_CHECK_FUNCS(isnan,[
+ AC_DEFINE(HAVE_FUNC_ISNAN,[],[Define to 1 if you have isnan function.])
diff --git a/recipes/gtk-webcore/osb-jscore-0.5.0/missing-includes.patch b/recipes/gtk-webcore/osb-jscore-0.5.0/missing-includes.patch
new file mode 100644
index 0000000000..42d6ebc9f8
--- /dev/null
+++ b/recipes/gtk-webcore/osb-jscore-0.5.0/missing-includes.patch
@@ -0,0 +1,10 @@
+--- osb-jscore-0.5.0.orig/kjs/lookup.h 2004-09-23 10:27:54.000000000 +0200
++++ osb-jscore-0.5.0/kjs/lookup.h 2004-10-23 22:09:47.000000000 +0200
+@@ -24,6 +24,7 @@
+ #define _KJSLOOKUP_H_
+
+ #include "identifier.h"
++#include "object.h"
+ #include "value.h"
+ #include <stdio.h>
+
diff --git a/recipes/gtk-webcore/osb-jscore-0.5.0/superh-aclocal.patch b/recipes/gtk-webcore/osb-jscore-0.5.0/superh-aclocal.patch
new file mode 100644
index 0000000000..706dead8c3
--- /dev/null
+++ b/recipes/gtk-webcore/osb-jscore-0.5.0/superh-aclocal.patch
@@ -0,0 +1,11 @@
+--- osb-jscore-0.5.0/aclocal.m4_orig 2006-09-18 00:49:32.000000000 +0000
++++ osb-jscore-0.5.0/aclocal.m4 2006-09-18 00:49:52.000000000 +0000
+@@ -4299,7 +4299,7 @@
+ # This must be Linux ELF.
+ linux-gnu*)
+ case $host_cpu in
+- alpha* | hppa* | i*86 | mips | mipsel | powerpc* | sparc* | ia64* | s390* | x86_64*)
++ alpha* | hppa* | i*86 | mips | mipsel | powerpc* | sparc* | ia64* | s390* | sh* | x86_64*)
+ lt_cv_deplibs_check_method=pass_all ;;
+ *)
+ # glibc up to 2.1.1 does not perform some relocations on ARM
diff --git a/recipes/gtk-webcore/osb-jscore-0.5.0/superh-ustring-declaration-error.patch b/recipes/gtk-webcore/osb-jscore-0.5.0/superh-ustring-declaration-error.patch
new file mode 100644
index 0000000000..c0c52444c8
--- /dev/null
+++ b/recipes/gtk-webcore/osb-jscore-0.5.0/superh-ustring-declaration-error.patch
@@ -0,0 +1,47 @@
+--- osb-jscore-0.5.0/kjs/ustring.cpp_orig 2006-09-18 01:29:11.000000000 +0000
++++ osb-jscore-0.5.0/kjs/ustring.cpp 2006-09-18 01:29:46.000000000 +0000
+@@ -132,7 +132,7 @@
+ return *this;
+ }
+
+-bool KJS::operator==(const KJS::CString& c1, const KJS::CString& c2)
++bool operator==(const KJS::CString& c1, const KJS::CString& c2)
+ {
+ int len = c1.size();
+ return len == c2.size() && (len == 0 || memcmp(c1.c_str(), c2.c_str(), len) == 0);
+@@ -1094,7 +1094,7 @@
+ rep->deref();
+ }
+
+-bool KJS::operator==(const UString& s1, const UString& s2)
++bool operator==(const UString& s1, const UString& s2)
+ {
+ if (s1.rep->len != s2.rep->len)
+ return false;
+@@ -1103,7 +1103,7 @@
+ s1.rep->len * sizeof(UChar)) == 0);
+ }
+
+-bool KJS::operator==(const UString& s1, const char *s2)
++bool operator==(const UString& s1, const char *s2)
+ {
+ if (s2 == 0) {
+ return s1.isEmpty();
+@@ -1121,7 +1121,7 @@
+ return u == uend && *s2 == 0;
+ }
+
+-bool KJS::operator<(const UString& s1, const UString& s2)
++bool operator<(const UString& s1, const UString& s2)
+ {
+ const int l1 = s1.size();
+ const int l2 = s2.size();
+@@ -1140,7 +1140,7 @@
+ return (l1 < l2);
+ }
+
+-int KJS::compare(const UString& s1, const UString& s2)
++int compare(const UString& s1, const UString& s2)
+ {
+ const int l1 = s1.size();
+ const int l2 = s2.size();
diff --git a/recipes/gtk-webcore/osb-jscore_0.5.0.bb b/recipes/gtk-webcore/osb-jscore_0.5.0.bb
new file mode 100644
index 0000000000..434c39fde3
--- /dev/null
+++ b/recipes/gtk-webcore/osb-jscore_0.5.0.bb
@@ -0,0 +1,36 @@
+LICENSE = "GPL"
+DESCRIPTION = "Gtk+ WebCore - JavaScriptCore"
+HOMEPAGE = "http://gtk-webcore.sourceforge.net/"
+PRIORITY = "optional"
+SECTION = "gpe"
+PR = "r3"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/gtk-webcore/osb-jscore-${PV}.tar.gz \
+ file://missing-includes.patch;patch=1 \
+ file://libm.patch;patch=1"
+
+SRC_URI_append_sh3 = " file://superh-aclocal.patch;patch=1 \
+ file://gcc4-fno-threadsafe-statics.patch;patch=1 \
+ file://superh-ustring-declaration-error.patch;patch=1"
+
+inherit autotools pkgconfig
+
+do_configure () {
+ autotools_do_configure
+ cd ${S}
+
+ # prevent libtool from linking libs against libstdc++, libgcc, ...
+ cat ${TARGET_PREFIX}libtool | sed -e 's/postdeps=".*"/postdeps=""/' > ${TARGET_PREFIX}libtool.tmp
+ mv ${TARGET_PREFIX}libtool.tmp ${TARGET_PREFIX}libtool
+}
+
+do_stage () {
+ oe_libinstall -so -C kjs libjscore ${STAGING_LIBDIR}
+
+ autotools_stage_includes
+
+ install -d ${STAGING_INCDIR}/osb/JavaScriptCore
+ for i in ${S}/kjs/*.h ${S}/kjs/new; do
+ install -m 0644 $i ${STAGING_INCDIR}/osb/JavaScriptCore
+ done
+}
diff --git a/recipes/gtk-webcore/osb-jscore_20050430.bb b/recipes/gtk-webcore/osb-jscore_20050430.bb
new file mode 100644
index 0000000000..f024bbfa02
--- /dev/null
+++ b/recipes/gtk-webcore/osb-jscore_20050430.bb
@@ -0,0 +1,38 @@
+DESCRIPTION = "Gtk+ WebCore - JavaScriptCore"
+HOMEPAGE = "http://gtk-webcore.sourceforge.net/"
+LICENSE = "GPL"
+PRIORITY = "optional"
+SECTION = "gpe"
+
+FIXEDSRCDATE = "${@bb.data.getVar('FILE', d, 1).split('_')[-1].split('.')[0]}"
+PV = "0.5.0+cvs${FIXEDSRCDATE}"
+PR = "r1"
+
+SRC_URI = "cvs://anonymous@gtk-webcore.cvs.sourceforge.net/cvsroot/gtk-webcore;module=JavaScriptCore;date=${FIXEDSRCDATE} \
+ file://libm.patch;patch=1"
+S = "${WORKDIR}/JavaScriptCore"
+
+inherit autotools pkgconfig
+
+# zap CPPFLAGS to avoid trouble with internal vs. pcre from staging
+CPPFLAGS = ""
+
+do_configure () {
+ autotools_do_configure
+ cd ${S}
+
+ # prevent libtool from linking libs against libstdc++, libgcc, ...
+ cat ${TARGET_PREFIX}libtool | sed -e 's/postdeps=".*"/postdeps=""/' > ${TARGET_PREFIX}libtool.tmp
+ mv ${TARGET_PREFIX}libtool.tmp ${TARGET_PREFIX}libtool
+}
+
+do_stage () {
+ oe_libinstall -so -C kjs libjscore ${STAGING_LIBDIR}
+
+ autotools_stage_includes
+
+ install -d ${STAGING_INCDIR}/osb/JavaScriptCore
+ for i in ${S}/kjs/*.h ${S}/kjs/new; do
+ install -m 0644 $i ${STAGING_INCDIR}/osb/JavaScriptCore
+ done
+}
diff --git a/recipes/gtk-webcore/osb-jscore_20070816.bb b/recipes/gtk-webcore/osb-jscore_20070816.bb
new file mode 100644
index 0000000000..672b0ba0a7
--- /dev/null
+++ b/recipes/gtk-webcore/osb-jscore_20070816.bb
@@ -0,0 +1,40 @@
+DESCRIPTION = "Gtk+ WebCore - JavaScriptCore"
+HOMEPAGE = "http://gtk-webcore.sourceforge.net/"
+LICENSE = "GPL"
+PRIORITY = "optional"
+SECTION = "gpe"
+
+FIXEDSRCDATE = "${@bb.data.getVar('FILE', d, 1).split('_')[-1].split('.')[0]}"
+PV = "0.5.0+cvs${FIXEDSRCDATE}"
+PR = "r0"
+
+SRC_URI = "cvs://anonymous@gtk-webcore.cvs.sourceforge.net/cvsroot/gtk-webcore;module=JavaScriptCore;date=${FIXEDSRCDATE} \
+ file://gcc4-fno-threadsafe-statics-JavaScriptCore.patch;patch=1"
+S = "${WORKDIR}/JavaScriptCore"
+
+DEFAULT_PREFERENCE = "-1"
+
+inherit autotools pkgconfig
+
+# zap CPPFLAGS to avoid trouble with internal vs. pcre from staging
+CPPFLAGS = ""
+
+do_configure () {
+ autotools_do_configure
+ cd ${S}
+
+ # prevent libtool from linking libs against libstdc++, libgcc, ...
+ cat ${TARGET_PREFIX}libtool | sed -e 's/postdeps=".*"/postdeps=""/' > ${TARGET_PREFIX}libtool.tmp
+ mv ${TARGET_PREFIX}libtool.tmp ${TARGET_PREFIX}libtool
+}
+
+do_stage () {
+ oe_libinstall -so -C kjs libjscore ${STAGING_LIBDIR}
+
+ autotools_stage_includes
+
+ install -d ${STAGING_INCDIR}/osb/JavaScriptCore
+ for i in ${S}/kjs/*.h ${S}/kjs/new; do
+ install -m 0644 $i ${STAGING_INCDIR}/osb/JavaScriptCore
+ done
+}
diff --git a/recipes/gtk-webcore/osb-jscore_svn.bb b/recipes/gtk-webcore/osb-jscore_svn.bb
new file mode 100644
index 0000000000..554ab5b96d
--- /dev/null
+++ b/recipes/gtk-webcore/osb-jscore_svn.bb
@@ -0,0 +1,39 @@
+DESCRIPTION = "Gtk+ WebCore - JavaScriptCore"
+HOMEPAGE = "http://gtk-webcore.sourceforge.net/"
+LICENSE = "GPL"
+PRIORITY = "optional"
+
+PV = "0.5.2+svnr${SRCREV}"
+PR = "r1"
+
+SRC_URI = "svn://gtk-webcore.svn.sourceforge.net/svnroot/gtk-webcore/trunk;module=JavaScriptCore;proto=https \
+ file://gcc4-fno-threadsafe-statics-JavaScriptCore.patch;patch=1"
+
+S = "${WORKDIR}/JavaScriptCore"
+
+inherit autotools pkgconfig
+
+# zap CPPFLAGS to avoid trouble with internal vs. pcre from staging
+CPPFLAGS = ""
+
+do_configure () {
+ autotools_do_configure
+ cd ${S}
+
+ # prevent libtool from linking libs against libstdc++, libgcc, ...
+ cat ${TARGET_PREFIX}libtool | sed -e 's/postdeps=".*"/postdeps=""/' > ${TARGET_PREFIX}libtool.tmp
+ mv ${TARGET_PREFIX}libtool.tmp ${TARGET_PREFIX}libtool
+}
+
+do_stage () {
+ oe_libinstall -so -C kjs libgtk_webcore_jscore ${STAGING_LIBDIR}
+
+ autotools_stage_includes
+
+ install -d ${STAGING_INCDIR}/osb/JavaScriptCore
+ for i in ${S}/kjs/*.h ${S}/kjs/new; do
+ install -m 0644 $i ${STAGING_INCDIR}/osb/JavaScriptCore
+ install -d ${STAGING_INCDIR}/../share/gtk-webcore-jscore
+ install -m 0755 ${S}/kjs/create_hash_table ${STAGING_INCDIR}/../share/gtk-webcore-jscore
+ done
+}
diff --git a/recipes/gtk-webcore/osb-nrcit/pkgconfig_fix.patch b/recipes/gtk-webcore/osb-nrcit/pkgconfig_fix.patch
new file mode 100644
index 0000000000..d26009bbb7
--- /dev/null
+++ b/recipes/gtk-webcore/osb-nrcit/pkgconfig_fix.patch
@@ -0,0 +1,13 @@
+Index: NRCit/gtk-webcore-nrcit.pc.in
+===================================================================
+--- NRCit.orig/gtk-webcore-nrcit.pc.in 2008-02-29 13:46:41.000000000 +0000
++++ NRCit/gtk-webcore-nrcit.pc.in 2008-02-29 13:46:51.000000000 +0000
+@@ -6,6 +6,6 @@
+ Name: gtk-webcore-nrcit
+ Description: Gtk+-WebCore HTML rendering engine, browser interface
+ Version: @VERSION@
+-Requires: gtk-webcore-jscore gtk-webcore-nrcore xft fontconfig gdk-2.0 gtk+-2.0 glib-2.0
+-Libs: -L${libdir} -lgtk_webcore_nrcore -lgtk_webcore_nrcit -lgthread-2.0 -lgobject-2.0 @LIBCURL_LIBS@
++Requires: gtk-webcore-jscore gtk-webcore-nrcore xft fontconfig gdk-2.0 gtk+-2.0 glib-2.0 libcurl
++Libs: -L${libdir} -lgtk_webcore_nrcore -lgtk_webcore_nrcit -lgthread-2.0 -lgobject-2.0
+ Cflags: -I${includedir}/gtk-webcore/webi -I${includedir}/gtk-webcore
diff --git a/recipes/gtk-webcore/osb-nrcit_0.5.0.bb b/recipes/gtk-webcore/osb-nrcit_0.5.0.bb
new file mode 100644
index 0000000000..ca0a845c2a
--- /dev/null
+++ b/recipes/gtk-webcore/osb-nrcit_0.5.0.bb
@@ -0,0 +1,30 @@
+DESCRIPTION = "Gtk+ WebCore - NRCit embeddable browser component"
+LICENSE = "nokia"
+HOMEPAGE = "http://gtk-webcore.sourceforge.net/"
+PRIORITY = "optional"
+DEPENDS = "curl osb-nrcore"
+SECTION = "gpe"
+PR = "r2"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/gtk-webcore/osb-nrcit-${PV}.tar.gz"
+
+inherit autotools pkgconfig
+
+do_configure () {
+ autotools_do_configure
+ cd ${S}
+
+ # prevent libtool from linking libs against libstdc++, libgcc, ...
+ cat ${TARGET_PREFIX}libtool | sed -e 's/postdeps=".*"/postdeps=""/' > ${TARGET_PREFIX}libtool.tmp
+ mv ${TARGET_PREFIX}libtool.tmp ${TARGET_PREFIX}libtool
+}
+
+do_stage () {
+ oe_libinstall -so -C src libnrcit ${STAGING_LIBDIR}
+
+ autotools_stage_includes
+
+ install -d ${STAGING_INCDIR}/osb
+ install -m 0644 ${S}/src/gtk/gtk-khtml.h ${STAGING_INCDIR}/osb
+ install -m 0644 ${S}/src/osb.h ${STAGING_INCDIR}/osb
+}
diff --git a/recipes/gtk-webcore/osb-nrcit_20050430.bb b/recipes/gtk-webcore/osb-nrcit_20050430.bb
new file mode 100644
index 0000000000..261b52f01b
--- /dev/null
+++ b/recipes/gtk-webcore/osb-nrcit_20050430.bb
@@ -0,0 +1,39 @@
+DESCRIPTION = "Gtk+ WebCore - NRCit embeddable browser component"
+HOMEPAGE = "http://gtk-webcore.sourceforge.net/"
+LICENSE = "nokia"
+PRIORITY = "optional"
+SECTION = "gpe"
+
+FIXEDSRCDATE = "${@bb.data.getVar('FILE', d, 1).split('_')[-1].split('.')[0]}"
+PV = "0.5.0+cvs${FIXEDSRCDATE}"
+PR = "r3"
+
+DEPENDS = "curl librsvg osb-nrcore"
+
+SRC_URI = "cvs://anonymous@gtk-webcore.cvs.sourceforge.net/cvsroot/gtk-webcore;module=NRCit;date=${FIXEDSRCDATE} \
+ file://stop-load.image-loading.patch;patch=1 \
+ file://gdk-colorspace.diff;patch=1 \
+ file://fix-loading-error-report.patch;patch=1"
+
+S = "${WORKDIR}/NRCit"
+
+inherit autotools pkgconfig
+
+do_configure () {
+ autotools_do_configure
+ cd ${S}
+
+ # prevent libtool from linking libs against libstdc++, libgcc, ...
+ cat ${TARGET_PREFIX}libtool | sed -e 's/postdeps=".*"/postdeps=""/' > ${TARGET_PREFIX}libtool.tmp
+ mv ${TARGET_PREFIX}libtool.tmp ${TARGET_PREFIX}libtool
+}
+
+do_stage () {
+ oe_libinstall -so -C src libnrcit ${STAGING_LIBDIR}
+
+ autotools_stage_includes
+
+ install -d ${STAGING_INCDIR}/osb
+ install -m 0644 ${S}/src/gtk/gtk-khtml.h ${STAGING_INCDIR}/osb
+ install -m 0644 ${S}/src/osb.h ${STAGING_INCDIR}/osb
+}
diff --git a/recipes/gtk-webcore/osb-nrcit_20070816.bb b/recipes/gtk-webcore/osb-nrcit_20070816.bb
new file mode 100644
index 0000000000..3441d1d508
--- /dev/null
+++ b/recipes/gtk-webcore/osb-nrcit_20070816.bb
@@ -0,0 +1,39 @@
+DESCRIPTION = "Gtk+ WebCore - NRCit embeddable browser component"
+HOMEPAGE = "http://gtk-webcore.sourceforge.net/"
+LICENSE = "nokia"
+PRIORITY = "optional"
+SECTION = "gpe"
+
+FIXEDSRCDATE = "${@bb.data.getVar('FILE', d, 1).split('_')[-1].split('.')[0]}"
+PV = "0.5.0+cvs${FIXEDSRCDATE}"
+PR = "r0"
+
+DEPENDS = "curl librsvg osb-nrcore"
+
+SRC_URI = "cvs://anonymous@gtk-webcore.cvs.sourceforge.net/cvsroot/gtk-webcore;module=NRCit;date=${FIXEDSRCDATE} \
+ file://stop-load.image-loading.patch;patch=1 \
+ file://gcc4-fno-threadsafe-statics-NRCit.patch;patch=1"
+S = "${WORKDIR}/NRCit"
+
+DEFAULT_PREFERENCE = "-1"
+
+inherit autotools pkgconfig
+
+do_configure () {
+ autotools_do_configure
+ cd ${S}
+
+ # prevent libtool from linking libs against libstdc++, libgcc, ...
+ cat ${TARGET_PREFIX}libtool | sed -e 's/postdeps=".*"/postdeps=""/' > ${TARGET_PREFIX}libtool.tmp
+ mv ${TARGET_PREFIX}libtool.tmp ${TARGET_PREFIX}libtool
+}
+
+do_stage () {
+ oe_libinstall -so -C src libnrcit ${STAGING_LIBDIR}
+
+ autotools_stage_includes
+
+ install -d ${STAGING_INCDIR}/osb
+ install -m 0644 ${S}/src/gtk/gtk-khtml.h ${STAGING_INCDIR}/osb
+ install -m 0644 ${S}/src/osb.h ${STAGING_INCDIR}/osb
+}
diff --git a/recipes/gtk-webcore/osb-nrcit_svn.bb b/recipes/gtk-webcore/osb-nrcit_svn.bb
new file mode 100644
index 0000000000..57bb096183
--- /dev/null
+++ b/recipes/gtk-webcore/osb-nrcit_svn.bb
@@ -0,0 +1,39 @@
+DESCRIPTION = "Gtk+ WebCore - NRCit embeddable browser component"
+HOMEPAGE = "http://gtk-webcore.sourceforge.net/"
+LICENSE = "nokia"
+PRIORITY = "optional"
+SECTION = "gpe"
+
+PV = "0.5.2+svnr${SRCREV}"
+PR = "r1"
+
+DEPENDS = "curl librsvg osb-nrcore pango"
+
+SRC_URI = "svn://gtk-webcore.svn.sourceforge.net/svnroot/gtk-webcore/trunk;module=NRCit;proto=https \
+ file://pkgconfig_fix.patch;patch=1 \
+ file://gcc4-fno-threadsafe-statics-NRCit.patch;patch=1"
+
+inherit autotools pkgconfig
+
+S = "${WORKDIR}/NRCit"
+
+EXTRA_OECONF = " --enable-pango "
+
+do_configure () {
+ autotools_do_configure
+ cd ${S}
+
+ # prevent libtool from linking libs against libstdc++, libgcc, ...
+ cat ${TARGET_PREFIX}libtool | sed -e 's/postdeps=".*"/postdeps=""/' > ${TARGET_PREFIX}libtool.tmp
+ mv ${TARGET_PREFIX}libtool.tmp ${TARGET_PREFIX}libtool
+}
+
+do_stage () {
+ oe_libinstall -so -C src libgtk_webcore_nrcit ${STAGING_LIBDIR}
+
+ autotools_stage_includes
+
+ install -d ${STAGING_INCDIR}/osb
+ install -m 0644 ${S}/src/gtk/gtk-khtml.h ${STAGING_INCDIR}/osb
+ install -m 0644 ${S}/src/osb.h ${STAGING_INCDIR}/osb
+}
diff --git a/recipes/gtk-webcore/osb-nrcore-0.5.0/KWQDictImpl.patch b/recipes/gtk-webcore/osb-nrcore-0.5.0/KWQDictImpl.patch
new file mode 100644
index 0000000000..8f43d00a38
--- /dev/null
+++ b/recipes/gtk-webcore/osb-nrcore-0.5.0/KWQDictImpl.patch
@@ -0,0 +1,375 @@
+Index: NRCore/kwiq/KWQDictImpl.cpp
+===================================================================
+--- NRCore/kwiq/KWQDictImpl.cpp 2004/10/18 18:39:48 1.3
++++ NRCore/kwiq/KWQDictImpl.cpp 2004/10/25 10:08:30
+@@ -30,26 +30,90 @@
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
++#include <string.h>
+
+ #include "KWQDictImpl.h"
++#include "KWQAssertions.h"
++#include "KWQMap.h"
+ #include <CoreFoundation/CoreFoundation.h>
++
++typedef void (* DeleteFunction) (void *);
++
++class KWQDictPrivate
++{
++public:
++ KWQDictPrivate(int size, bool caseSensitive, DeleteFunction);
++ KWQDictPrivate(const KWQDictPrivate &dp);
++ ~KWQDictPrivate();
++
++ QMap<QString,void*> map;
++ DeleteFunction deleteFunc;
++ bool modifyCase;
++ KWQDictIteratorPrivate *iterators;
++};
++
++class KWQDictIteratorPrivate
++{
++public:
++ KWQDictIteratorPrivate(KWQDictPrivate *);
++ ~KWQDictIteratorPrivate();
++
++ void remove(const QString &key);
++ void dictDestroyed();
++
++ uint count;
++ uint pos;
++ QString **keys;
++ void **values;
++ KWQDictPrivate *dict;
++ KWQDictIteratorPrivate *next;
++ KWQDictIteratorPrivate *prev;
++};
++
++KWQDictPrivate::KWQDictPrivate(int size, bool caseSensitive,
++ DeleteFunction _deleteFunc)
++ : deleteFunc(_deleteFunc),
++ modifyCase(!caseSensitive),
++ iterators(0)
++{
++}
++
++KWQDictPrivate::KWQDictPrivate(const KWQDictPrivate &dp)
++ : map(dp.map),
++ deleteFunc(dp.deleteFunc),
++ modifyCase(dp.modifyCase),
++ iterators(0)
++{
++}
++
++KWQDictPrivate::~KWQDictPrivate()
++{
++ for (KWQDictIteratorPrivate *it = iterators; it; it = it->next) {
++ it->dictDestroyed();
++ }
++}
++
++
+ /*
+ * No KWQDictImpl::~KWQDictImpl() because QDict::~QDict calls KWQDictImpl::clear()
+ * on
+ */
+ KWQDictImpl::KWQDictImpl(int size, bool caseSensitive, void (*deleteFunc_)(void *))
+- : deleteFunc(deleteFunc_)
+- , modifyCase(!caseSensitive)
++ : d(new KWQDictPrivate(size, caseSensitive, deleteFunc_))
+ {
++}
+
++KWQDictImpl::~KWQDictImpl()
++{
++ delete d;
+ }
+
+ void KWQDictImpl::insert(const QString &key, const void *value)
+ {
+- if (modifyCase)
+- map.insert(key.lower(), const_cast<void*>(value));
++ if (d->modifyCase)
++ d->map.insert(key.lower(), const_cast<void*>(value));
+ else
+- map.insert(key, const_cast<void*>(value) );
++ d->map.insert(key, const_cast<void*>(value) );
+ }
+
+ bool KWQDictImpl::remove(const QString &key, bool deleteItem)
+@@ -57,21 +121,26 @@
+ QMapIterator<QString, void*> i;
+ void* data;
+
+- if (modifyCase)
+- i = map.find(key.lower());
++ if (d->modifyCase)
++ i = d->map.find(key.lower());
+ else
+- i = map.find(key);
++ i = d->map.find(key);
+
+- if (i == map.end())
++ if (i == d->map.end())
+ return false;
+
+ data = *i;
+
+- map.remove(i);
+- if (deleteItem && deleteFunc) {
+- deleteFunc(data);
++ d->map.remove(i);
++ if (deleteItem && d->deleteFunc) {
++ d->deleteFunc(data);
+ return true;
+ }
++
++ for (KWQDictIteratorPrivate *it = d->iterators; it; it = it->next) {
++ it->remove(key);
++ }
++
+ return false;
+ }
+
+@@ -79,71 +148,159 @@
+ {
+ if (deleteItem)
+ {
+- QMapIterator<QString,void*> i = map.begin();
+- QMapIterator<QString,void*> end = map.end();
++ QMapIterator<QString,void*> i = d->map.begin();
++ QMapIterator<QString,void*> end = d->map.end();
+ void *data;
+ while (i!=end)
+ {
+ data=*i;
+- if (deleteFunc) deleteFunc(data);
++ if (d->deleteFunc) d->deleteFunc(data);
+ ++i;
+ }
+ }
+
+- map.clear();
++ d->map.clear();
+ }
+
+ uint KWQDictImpl::count() const
+ {
+- return map.count();
++ return d->map.count();
+ }
+
+ void *KWQDictImpl::find(const QString &key) const
+ {
+ QMapConstIterator<QString,void*> i;
+- if (modifyCase)
+- i = map.find(key.lower());
++ if (d->modifyCase)
++ i = d->map.find(key.lower());
+ else
+- i = map.find(key);
++ i = d->map.find(key);
+
+- if (i == map.end())
++ if (i == d->map.end())
+ return 0;
+ return *i;
+ }
+
++void KWQDictImpl::swap(KWQDictImpl &di)
++{
++ KWQDictPrivate *tmp;
++
++ tmp = di.d;
++ di.d = d;
++ d = tmp;
++}
++
++KWQDictImpl &KWQDictImpl::assign(const KWQDictImpl &di, bool deleteItems)
++{
++ KWQDictImpl tmp(di);
++
++ if (deleteItems) {
++ clear(true);
++ }
++
++ swap(tmp);
++
++ return *this;
++}
++
++
++KWQDictIteratorImpl::KWQDictIteratorImpl(const KWQDictImpl &di)
++ : d(new KWQDictIteratorPrivate(di.d))
++{
++}
++
+ uint KWQDictIteratorImpl::count() const
+ {
+- return dict->map.count();
++ return d->count;
+ }
+
+ void* KWQDictIteratorImpl::current() const
+ {
+- if (i == dict->map.end())
+- return 0;
+- return *i;
++ if (d->pos >= d->count) {
++ return NULL;
++ }
++ return d->values[d->pos];
+ }
+
+ void* KWQDictIteratorImpl::toFirst()
+ {
+- i=dict->map.begin();
+- if (i == dict->map.end())
+- return 0;
+-
+- return *i;
++ d->pos = 0;
++ return current();
+ }
++
+ void* KWQDictIteratorImpl::operator++()
+ {
+- ++i;
+- if (i==dict->map.end())
+- return 0;
+- return *i;
++ ++d->pos;
++ return current();
+ }
+
+ QString KWQDictIteratorImpl::currentStringKey() const
++{
++ if (d->pos >= d->count) {
++ return QString();
++ }
++ return QString(*d->keys[d->pos]);
++}
++
++
++KWQDictIteratorPrivate::KWQDictIteratorPrivate(KWQDictPrivate *d) :
++ count(d->map.count()),
++ pos(0),
++ keys(new QString * [count]),
++ values(new void * [count]),
++ dict(d),
++ next(d->iterators),
++ prev(0)
++{
++ d->iterators = this;
++ if (next) {
++ next->prev = this;
++ }
++
++ unsigned int i = 0;
++ QMap<QString,void*>::Iterator it = d->map.begin();
++ QMap<QString,void*>::Iterator end = d->map.end();
++ while (it != end) {
++ keys[i] = new QString(it.key());
++ values[i] = it.data();
++ ++i;
++ ++it;
++ }
++ ASSERT(i==count);
++}
++
++KWQDictIteratorPrivate::~KWQDictIteratorPrivate()
+ {
+- if (i == dict->map.end() )
+- return QString();
++ if (prev) {
++ prev->next = next;
++ } else if (dict) {
++ dict->iterators = next;
++ }
++ if (next) {
++ next->prev = prev;
++ }
++
++ delete [] keys;
++ delete [] values;
++}
+
+- return QString(i.key());
++void KWQDictIteratorPrivate::remove(const QString &key)
++{
++ for (uint i = 0; i < count; ) {
++ if (*keys[i] != key) {
++ ++i;
++ } else {
++ --count;
++ if (pos > i) {
++ --pos;
++ }
++ memmove(&keys[i], &keys[i+1], sizeof(keys[i]) * (count - i));
++ memmove(&values[i], &values[i+1], sizeof(values[i]) * (count - i));
++ }
++ }
+ }
+
++void KWQDictIteratorPrivate::dictDestroyed()
++{
++ count = 0;
++ dict = 0;
++}
+Index: NRCore/kwiq/KWQDictImpl.h
+===================================================================
+--- NRCore/kwiq/KWQDictImpl.h 2004/09/23 08:27:53 1.1.1.1
++++ NRCore/kwiq/KWQDictImpl.h 2004/10/25 10:08:30
+@@ -29,36 +29,42 @@
+ #include "KWQMap.h"
+ #include "KWQString.h"
+
++class KWQDictPrivate;
++class KWQDictIteratorPrivate;
++
+ class KWQDictImpl {
+ public:
+ KWQDictImpl(int size, bool caseSensitive, void (*deleteFunc)(void *));
++ ~KWQDictImpl();
+ void insert(const QString &key, const void *value);
+ bool remove(const QString &key, bool deleteItems);
+
+ void *find(const QString &key) const;
+ void clear(bool deleteItem);
+ uint count() const;
+- private:
+- void (*deleteFunc)(void*);
+- QMap<QString,void*> map;
+- bool modifyCase;
++
++ KWQDictImpl &assign(const KWQDictImpl &pdi, bool deleteItems);
++private:
++ void swap(KWQDictImpl &di);
++ KWQDictPrivate *d;
+ friend class KWQDictIteratorImpl;
+ };
+
+ class KWQDictIteratorImpl {
+- const KWQDictImpl *dict;
+- QMapConstIterator<QString,void*> i;
+ public:
+- KWQDictIteratorImpl(const KWQDictImpl &di) :dict(&di), i(di.map.begin()) { }
++ KWQDictIteratorImpl(const KWQDictImpl &di);
+ uint count() const ;
+ void *current() const;
++
++ void* toFirst();
+
+- void* toFirst();
+-
+ void *operator++();
+
+
+ QString currentStringKey() const;
++private:
++ KWQDictIteratorPrivate *d;
++
+ };
+
+ #endif
diff --git a/recipes/gtk-webcore/osb-nrcore.inc b/recipes/gtk-webcore/osb-nrcore.inc
new file mode 100644
index 0000000000..eca304959f
--- /dev/null
+++ b/recipes/gtk-webcore/osb-nrcore.inc
@@ -0,0 +1,46 @@
+DESCRIPTION = "Gtk+ WebCore - rendering engine"
+HOMEPAGE = "http://gtk-webcore.sourceforge.net/"
+PRIORITY = "optional"
+SECTION = "gpe"
+LICENSE = "GPL"
+DEPENDS = "glib-2.0 gtk+ pango osb-jscore libxt gperf-native"
+
+LEAD_SONAME = "libnrcore.so"
+
+inherit autotools pkgconfig
+
+#/khtml/css/cssproperties.h failes to generate properly with high parallel makes
+PARALLEL_MAKE = ""
+
+EXTRA_OECONF += "--with-javascriptcore-prefix=${STAGING_EXECPREFIXDIR}"
+
+do_configure () {
+ autotools_do_configure
+ cd ${S}
+
+ # prevent libtool from linking libs against libstdc++, libgcc, ...
+ cat ${TARGET_PREFIX}libtool | sed -e 's/postdeps=".*"/postdeps=""/' > ${TARGET_PREFIX}libtool.tmp
+ mv ${TARGET_PREFIX}libtool.tmp ${TARGET_PREFIX}libtool
+}
+
+do_install_append() {
+ #backward compat for some apps
+ ln -sf ${datadir}/gtk-webcore-nrcore ${D}${datadir}/osb-nrcore
+}
+
+FILES_${PN} += "${datadir}/gtk-webcore-nrcore"
+
+
+do_stage () {
+ oe_libinstall -so libnrcore ${STAGING_LIBDIR}
+ oe_libinstall -so -C kwiq libnrcore_kwiq_gtk ${STAGING_LIBDIR}
+
+ autotools_stage_includes
+
+ install -d ${STAGING_INCDIR}/osb/NRCore
+ for i in ${S}/kwiq/WebCore*.h ${S}/kwiq/KWIQ*.h; do
+ install -m 0644 $i ${STAGING_INCDIR}/osb/NRCore
+ done
+}
+
+
diff --git a/recipes/gtk-webcore/osb-nrcore_0.5.0.bb b/recipes/gtk-webcore/osb-nrcore_0.5.0.bb
new file mode 100644
index 0000000000..37800f3f78
--- /dev/null
+++ b/recipes/gtk-webcore/osb-nrcore_0.5.0.bb
@@ -0,0 +1,6 @@
+require osb-nrcore.inc
+
+PR = "r2"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/gtk-webcore/osb-nrcore-${PV}.tar.gz \
+ file://KWQDictImpl.patch;patch=1"
diff --git a/recipes/gtk-webcore/osb-nrcore_20050430.bb b/recipes/gtk-webcore/osb-nrcore_20050430.bb
new file mode 100644
index 0000000000..c79f2b9fbd
--- /dev/null
+++ b/recipes/gtk-webcore/osb-nrcore_20050430.bb
@@ -0,0 +1,11 @@
+require osb-nrcore.inc
+
+FIXEDSRCDATE = "${@bb.data.getVar('FILE', d, 1).split('_')[-1].split('.')[0]}"
+PV = "0.5.0+cvs${FIXEDSRCDATE}"
+PR = "r1"
+
+SRC_URI = "cvs://anonymous@gtk-webcore.cvs.sourceforge.net/cvsroot/gtk-webcore;module=NRCore;date=${FIXEDSRCDATE} \
+ file://KWIQ-mimetype-segfault.patch;patch=1 \
+ file://setHandle_segfault-fix.patch;patch=1"
+
+S = "${WORKDIR}/NRCore"
diff --git a/recipes/gtk-webcore/osb-nrcore_20070816.bb b/recipes/gtk-webcore/osb-nrcore_20070816.bb
new file mode 100644
index 0000000000..1c946d05c6
--- /dev/null
+++ b/recipes/gtk-webcore/osb-nrcore_20070816.bb
@@ -0,0 +1,14 @@
+require osb-nrcore.inc
+
+FIXEDSRCDATE = "${@bb.data.getVar('FILE', d, 1).split('_')[-1].split('.')[0]}"
+PV = "0.5.0+cvs${FIXEDSRCDATE}"
+PR = "r0"
+
+SRC_URI = "cvs://anonymous@gtk-webcore.cvs.sourceforge.net/cvsroot/gtk-webcore;module=NRCore;date=${FIXEDSRCDATE} \
+ file://KWIQ-mimetype-segfault.patch;patch=1 \
+ file://KWQKURL-urlcmp.patch;patch=1 \
+ file://gcc4-fno-threadsafe-statics-NRCore.patch;patch=1"
+
+S = "${WORKDIR}/NRCore"
+
+DEFAULT_PREFERENCE = "-1"
diff --git a/recipes/gtk-webcore/osb-nrcore_svn.bb b/recipes/gtk-webcore/osb-nrcore_svn.bb
new file mode 100644
index 0000000000..b85c06e422
--- /dev/null
+++ b/recipes/gtk-webcore/osb-nrcore_svn.bb
@@ -0,0 +1,23 @@
+require osb-nrcore.inc
+
+PV = "0.5.2+svnr${SRCREV}"
+PR = "r3"
+
+SRC_URI = "svn://gtk-webcore.svn.sourceforge.net/svnroot/gtk-webcore/trunk;module=NRCore;proto=https \
+ file://gcc4-fno-threadsafe-statics-NRCore.patch;patch=1 \
+ file://build_silence.patch;patch=0;maxdate=20070401 \
+ file://path_fixes.patch;patch=1"
+
+S = "${WORKDIR}/NRCore"
+
+do_stage () {
+ oe_libinstall -so libgtk_webcore_nrcore ${STAGING_LIBDIR}
+ oe_libinstall -so -C kwiq libgtk_webcore_nrcore_kwiq_gtk ${STAGING_LIBDIR}
+
+ autotools_stage_includes
+
+ install -d ${STAGING_INCDIR}/osb/NRCore
+ for i in ${S}/kwiq/WebCore*.h ${S}/kwiq/KWIQ*.h; do
+ install -m 0644 $i ${STAGING_INCDIR}/osb/NRCore
+ done
+}