gimp r25913 - in trunk: . plug-ins/help-browser
- From: neo svn gnome org
- To: svn-commits-list gnome org
- Subject: gimp r25913 - in trunk: . plug-ins/help-browser
- Date: Tue, 10 Jun 2008 15:55:28 +0000 (UTC)
Author: neo
Date: Tue Jun 10 15:55:28 2008
New Revision: 25913
URL: http://svn.gnome.org/viewvc/gimp?rev=25913&view=rev
Log:
2008-06-10 Sven Neumann <sven gimp org>
* configure.in: removed check for gtkhtml2 and added a check for
wekbit instead.
* INSTALL: document the changed dependency.
* plug-ins/help-browser/Makefile.am
* plug-ins/help-browser/dialog.[ch]: ported the help-browser to
webkit. Offers the same functionality as before and some more.
* plug-ins/help-browser/help-browser.c: some cleanup.
Modified:
trunk/ChangeLog
trunk/INSTALL
trunk/configure.in
trunk/plug-ins/help-browser/Makefile.am
trunk/plug-ins/help-browser/dialog.c
trunk/plug-ins/help-browser/dialog.h
trunk/plug-ins/help-browser/help-browser.c
Modified: trunk/INSTALL
==============================================================================
--- trunk/INSTALL (original)
+++ trunk/INSTALL Tue Jun 10 15:55:28 2008
@@ -56,7 +56,7 @@
7. You may want to install other third party libraries or programs
that are needed for some of the available plugins. We recommend
to check that the following libraries are installed: libpng,
- libjpeg, libpoppler, libtiff, gtkhtml-2, libmng, librsvg, libwmf.
+ libjpeg, libpoppler, libtiff, webkit, libmng, librsvg, libwmf.
8. The Python extension requires Python development headers to be
present. You will also need PyGTK and the respective development
@@ -150,8 +150,8 @@
use --without-mng to disable it expliticely. The same switch exists
for aalib, use --without-aa if you run into problems.
- --without-gtkhtml2. If for some reason you don't want to build the
- helpbrowser plug-in, you can use --without-gtkhtml2 to disable
+ --without-webkit. If for some reason you don't want to build the
+ helpbrowser plug-in, you can use --without-webkit to disable
it explicitly.
--without-svg. If for some reason you want to build GIMP without
Modified: trunk/configure.in
==============================================================================
--- trunk/configure.in (original)
+++ trunk/configure.in Tue Jun 10 15:55:28 2008
@@ -49,7 +49,7 @@
m4_define([fontconfig_required_version], [2.2.0])
m4_define([cairo_required_version], [1.4.10])
m4_define([gtkdoc_required_version], [1.0])
-m4_define([gtkhtml2_required_version], [2.0.0])
+m4_define([webkit_required_version], [0.1])
m4_define([alsa_required_version], [1.0.0])
m4_define([rsvg_required_version], [2.14.0])
m4_define([wmf_required_version], [0.2.8])
@@ -1202,23 +1202,29 @@
AC_SUBST(LIBXPM)
-####################
-# Check for gtkhtml2
-####################
+######################
+# Check for webkit-1.0
+######################
-AC_ARG_WITH(gtkhtml2, [ --without-gtkhtml2 build without gtkhtml2 support])
+AC_ARG_WITH(webkit, [ --without-webkit don't build the help-browser plug-in])
-have_gtkhtml2=no
-if test "x$with_gtkhtml2" != xno; then
- PKG_CHECK_MODULES(GTKHTML2, libgtkhtml-2.0 >= gtkhtml2_required_version,
- have_gtkhtml2=yes,
+have_webkit=no
+if test "x$with_webkit" != xno; then
+ PKG_CHECK_MODULES(WEBKIT, webkit-1.0 >= webkit_required_version,
+ have_webkit=yes,
AC_MSG_RESULT([no])
- have_gtkhtml2="no (GtkHtml2 not found)")
+ have_webkit="no (WebKit not found)")
else
- have_gtkhtml2="no (GtkHtml2 support disabled)"
+ have_webkit="no (WebKit support disabled)"
+fi
+
+if test "x$have_webkit" = xyes; then
+ AC_CHECK_LIB(webkit-1.0, webkit_web_view_set_zoom_level,
+ [AC_DEFINE(HAVE_WEBKIT_ZOOM_API, 1,
+ [Define to 1 if webkit has zoom API])])
fi
-AM_CONDITIONAL(BUILD_HELP_BROWSER, test "x$have_gtkhtml2" = xyes)
+AM_CONDITIONAL(BUILD_HELP_BROWSER, test "x$have_webkit" = xyes)
###################
@@ -2095,7 +2101,7 @@
Optional Plug-Ins:
Ascii Art: $have_libaa
- Help Browser: $have_gtkhtml2
+ Help Browser: $have_webkit
LCMS: $have_lcms
JPEG: $jpeg_ok
MNG: $have_libmng
Modified: trunk/plug-ins/help-browser/Makefile.am
==============================================================================
--- trunk/plug-ins/help-browser/Makefile.am (original)
+++ trunk/plug-ins/help-browser/Makefile.am Tue Jun 10 15:55:28 2008
@@ -1,13 +1,14 @@
## Process this file with automake to produce Makefile.in
-libgimphelp = $(top_builddir)/plug-ins/help/libgimphelp.a
-libgimpui = $(top_builddir)/libgimp/libgimpui-$(GIMP_API_VERSION).la
-libgimpconfig = $(top_builddir)/libgimpconfig/libgimpconfig-$(GIMP_API_VERSION).la
-libgimpwidgets = $(top_builddir)/libgimpwidgets/libgimpwidgets-$(GIMP_API_VERSION).la
libgimp = $(top_builddir)/libgimp/libgimp-$(GIMP_API_VERSION).la
-libgimpcolor = $(top_builddir)/libgimpcolor/libgimpcolor-$(GIMP_API_VERSION).la
libgimpbase = $(top_builddir)/libgimpbase/libgimpbase-$(GIMP_API_VERSION).la
+libgimpcolor = $(top_builddir)/libgimpcolor/libgimpcolor-$(GIMP_API_VERSION).la
+libgimpconfig = $(top_builddir)/libgimpconfig/libgimpconfig-$(GIMP_API_VERSION).la
libgimpmath = $(top_builddir)/libgimpmath/libgimpmath-$(GIMP_API_VERSION).la
+libgimpui = $(top_builddir)/libgimp/libgimpui-$(GIMP_API_VERSION).la
+libgimpwidgets = $(top_builddir)/libgimpwidgets/libgimpwidgets-$(GIMP_API_VERSION).la
+
+libgimphelp = $(top_builddir)/plug-ins/help/libgimphelp.a
if OS_WIN32
mwindows = -mwindows
@@ -21,7 +22,7 @@
INCLUDES = \
-I$(top_srcdir) \
- $(GTKHTML2_CFLAGS) \
+ $(WEBKIT_CFLAGS) \
-I$(includedir)
LDADD = \
@@ -33,7 +34,7 @@
$(libgimpcolor) \
$(libgimpmath) \
$(libgimpbase) \
- $(GTKHTML2_LIBS) \
+ $(WEBKIT_LIBS) \
$(GIO_LIBS) \
$(RT_LIBS) \
$(INTLLIBS)
@@ -46,8 +47,6 @@
help-browser.c \
dialog.c \
dialog.h \
- queue.c \
- queue.h \
uri.c \
uri.h
Modified: trunk/plug-ins/help-browser/dialog.c
==============================================================================
--- trunk/plug-ins/help-browser/dialog.c (original)
+++ trunk/plug-ins/help-browser/dialog.c Tue Jun 10 15:55:28 2008
@@ -2,7 +2,7 @@
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
*
* GIMP Help Browser
- * Copyright (C) 1999-2005 Sven Neumann <sven gimp org>
+ * Copyright (C) 1999-2008 Sven Neumann <sven gimp org>
* Michael Natterer <mitch gimp org>
*
* dialog.c
@@ -24,8 +24,10 @@
#include "config.h"
+#include <stdlib.h>
#include <string.h>
#include <errno.h>
+
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
@@ -34,9 +36,7 @@
#include <gtk/gtk.h>
-#undef GDK_PIXBUF_DISABLE_SINGLE_INCLUDES
-#include <libgtkhtml/gtkhtml.h>
-#define GDK_PIXBUF_DISABLE_SINGLE_INCLUDES
+#include <webkit/webkit.h>
#include "libgimpwidgets/gimpwidgets.h"
@@ -53,7 +53,6 @@
#include "gimpthrobberaction.h"
#include "dialog.h"
-#include "queue.h"
#include "uri.h"
#include "logo-pixbuf.h"
@@ -84,14 +83,15 @@
/* local function prototypes */
static GtkUIManager * ui_manager_new (GtkWidget *window);
-static void browser_dialog_404 (HtmlDocument *doc,
- const gchar *uri,
- const gchar *message);
static void back_callback (GtkAction *action,
gpointer data);
static void forward_callback (GtkAction *action,
gpointer data);
+static void reload_callback (GtkAction *action,
+ gpointer data);
+static void stop_callback (GtkAction *action,
+ gpointer data);
static void index_callback (GtkAction *action,
gpointer data);
static void zoom_in_callback (GtkAction *action,
@@ -100,10 +100,10 @@
gpointer data);
static void close_callback (GtkAction *action,
gpointer data);
-static void online_callback (GtkAction *action,
+static void website_callback (GtkAction *action,
gpointer data);
-static void update_toolbar (void);
+static void update_actions (void);
static void combo_changed (GtkWidget *widget,
gpointer data);
@@ -131,45 +131,33 @@
static gboolean view_button_press (GtkWidget *widget,
GdkEventButton *event);
-static void title_changed (HtmlDocument *doc,
- const gchar *new_title,
- gpointer data);
-static void link_clicked (HtmlDocument *doc,
- const gchar *uri,
- gpointer data);
-static gboolean request_url (HtmlDocument *doc,
- const gchar *uri,
- HtmlStream *stream,
- GError **error);
-static gboolean io_handler (GIOChannel *io,
- GIOCondition condition,
- gpointer data);
-static void load_remote_page (const gchar *uri);
+static void title_changed (GtkWidget *view,
+ WebKitWebFrame *frame,
+ const gchar *title,
+ GtkWidget *combo);
+static void load_started (GtkWidget *view,
+ WebKitWebFrame *frame);
+static void load_finished (GtkWidget *view,
+ WebKitWebFrame *frame);
+
+static void select_index (const gchar *uri);
static void history_add (GtkComboBox *combo,
const gchar *uri,
const gchar *title);
-static gboolean has_case_prefix (const gchar *haystack,
- const gchar *needle);
-
-static gchar * filename_from_uri (const gchar *uri);
/* private variables */
-static const gchar *eek_png_tag = "<h1>Eeek!</h1>";
+static GHashTable *uri_hash_table = NULL;
-static Queue *queue = NULL;
-static gchar *current_uri = NULL;
-static GHashTable *uri_hash_table = NULL;
-
-static GtkWidget *html = NULL;
-static GtkWidget *tree_view = NULL;
-static GtkUIManager *ui_manager = NULL;
-static GtkWidget *button_prev = NULL;
-static GtkWidget *button_next = NULL;
-static GdkCursor *busy_cursor = NULL;
+static GtkWidget *view = NULL;
+static GtkWidget *tree_view = NULL;
+static GtkUIManager *ui_manager = NULL;
+static GtkWidget *button_prev = NULL;
+static GtkWidget *button_next = NULL;
+static GdkCursor *busy_cursor = NULL;
static const GtkTargetEntry help_dnd_target_table[] =
{
@@ -188,7 +176,7 @@
GtkWidget *toolbar;
GtkWidget *paned;
GtkWidget *hbox;
- GtkWidget *scroll;
+ GtkWidget *scrolled;
GtkWidget *drag_source;
GtkWidget *image;
GtkWidget *combo;
@@ -198,22 +186,12 @@
GtkListStore *history;
GtkCellRenderer *cell;
GdkPixbuf *pixbuf;
- gchar *eek_png_path;
DialogData data = { 720, 560, 240, 1.0 };
gimp_ui_init ("helpbrowser", TRUE);
gimp_get_data (GIMP_HELP_BROWSER_DIALOG_DATA, &data);
- eek_png_path = g_build_filename (gimp_data_directory (),
- "themes", "Default", "images",
- "stock-wilber-eek-64.png", NULL);
-
- if (g_file_test (eek_png_path, G_FILE_TEST_EXISTS))
- eek_png_tag = g_strdup_printf ("<img src=\"%s\">", eek_png_path);
-
- g_free (eek_png_path);
-
/* the dialog window */
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), _("GIMP Help Browser"));
@@ -266,7 +244,7 @@
gtk_tool_item_set_expand (item, TRUE);
button = gtk_ui_manager_get_widget (ui_manager,
- "/help-browser-toolbar/online");
+ "/help-browser-toolbar/website");
gimp_throbber_set_image (GIMP_THROBBER (button),
gtk_image_new_from_pixbuf (pixbuf));
@@ -275,16 +253,16 @@
gtk_box_pack_start (GTK_BOX (vbox), paned, TRUE, TRUE, 0);
gtk_widget_show (paned);
- scroll = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll),
+ scrolled = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled),
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
- gtk_paned_add1 (GTK_PANED (paned), scroll);
+ gtk_paned_add1 (GTK_PANED (paned), scrolled);
gtk_paned_set_position (GTK_PANED (paned), data.paned_position);
- gtk_widget_show (scroll);
+ gtk_widget_show (scrolled);
tree_view = gtk_tree_view_new ();
gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (tree_view), FALSE);
- gtk_container_add (GTK_CONTAINER (scroll), tree_view);
+ gtk_container_add (GTK_CONTAINER (scrolled), tree_view);
gtk_widget_show (tree_view);
gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view), -1,
@@ -350,176 +328,65 @@
NULL);
/* HTML view */
- html = html_view_new ();
- queue = queue_new ();
-
- gtk_widget_set_size_request (html, 300, 200);
-
- scroll =
- gtk_scrolled_window_new (gtk_layout_get_hadjustment (GTK_LAYOUT (html)),
- gtk_layout_get_vadjustment (GTK_LAYOUT (html)));
-
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll),
+ scrolled = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled),
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
- gtk_box_pack_start (GTK_BOX (vbox), scroll, TRUE, TRUE, 0);
- gtk_widget_show (scroll);
- gtk_container_add (GTK_CONTAINER (scroll), html);
- gtk_widget_show (html);
+ gtk_widget_set_size_request (scrolled, 300, 200);
+ gtk_box_pack_start (GTK_BOX (vbox), scrolled, TRUE, TRUE, 0);
+ gtk_widget_show (scrolled);
+
+ view = webkit_web_view_new ();
+ webkit_web_view_set_maintains_back_forward_list (WEBKIT_WEB_VIEW (view),
+ TRUE);
+ gtk_container_add (GTK_CONTAINER (scrolled), view);
+ gtk_widget_show (view);
- g_signal_connect (html, "realize",
+ g_signal_connect (view, "realize",
G_CALLBACK (view_realize),
NULL);
- g_signal_connect (html, "unrealize",
+ g_signal_connect (view, "unrealize",
G_CALLBACK (view_unrealize),
NULL);
- g_signal_connect (html, "popup-menu",
+ g_signal_connect (view, "popup-menu",
G_CALLBACK (view_popup_menu),
NULL);
- g_signal_connect (html, "button-press-event",
+ g_signal_connect (view, "button-press-event",
G_CALLBACK (view_button_press),
NULL);
- html_view_set_magnification (HTML_VIEW (html), data.zoom);
- html_view_set_document (HTML_VIEW (html), html_document_new ());
+#if HAVE_WEBKIT_ZOOM_API
+ webkit_web_view_set_zoom_level (WEBKIT_WEB_VIEW (view), data.zoom);
+#endif
- g_signal_connect (HTML_VIEW (html)->document, "title-changed",
+ g_signal_connect (view, "title-changed",
G_CALLBACK (title_changed),
combo);
- g_signal_connect (HTML_VIEW (html)->document, "link-clicked",
- G_CALLBACK (link_clicked),
+ g_signal_connect (view, "load-started",
+ G_CALLBACK (load_started),
NULL);
- g_signal_connect (HTML_VIEW (html)->document, "request-url",
- G_CALLBACK (request_url),
+ g_signal_connect (view, "load-finished",
+ G_CALLBACK (load_finished),
NULL);
- gtk_widget_grab_focus (html);
+ gtk_widget_grab_focus (view);
g_signal_connect (window, "unmap",
G_CALLBACK (dialog_unmap),
paned);
}
-static gboolean
-idle_jump_to_anchor (const gchar *anchor)
-{
- if (html && anchor)
- html_view_jump_to_anchor (HTML_VIEW (html), anchor);
-
- return FALSE;
-}
-
-static gboolean
-idle_scroll_to_pos (gpointer data)
-{
- gint offset = GPOINTER_TO_INT (data);
-
- if (html)
- {
- GtkAdjustment *adj = gtk_layout_get_vadjustment (GTK_LAYOUT (html));
-
- gtk_adjustment_set_value (adj,
- (gdouble) offset / (1 << 16) * adj->upper);
- }
-
- return FALSE;
-}
-
void
-browser_dialog_load (const gchar *uri,
- gboolean add_to_queue)
+browser_dialog_load (const gchar *uri)
{
- HtmlDocument *doc = HTML_VIEW (html)->document;
- GtkAdjustment *adj = gtk_layout_get_vadjustment (GTK_LAYOUT (html));
- gchar *abs;
- gchar *new_uri;
- gchar *anchor;
- gchar *tmp;
-
g_return_if_fail (uri != NULL);
- if (! current_uri)
- {
- gchar *slash;
-
- current_uri = g_strdup (uri);
-
- slash = strrchr (current_uri, '/');
-
- if (slash)
- *slash = '\0';
- }
-
- abs = uri_to_abs (uri, current_uri);
- if (! abs)
- return;
+ webkit_web_view_open (WEBKIT_WEB_VIEW (view), uri);
- anchor = strchr (uri, '#');
- if (anchor && anchor[0] && anchor[1])
- {
- new_uri = g_strconcat (abs, anchor, NULL);
- anchor += 1;
- }
- else
- {
- new_uri = g_strdup (abs);
- anchor = NULL;
- }
+ select_index (uri);
- if (uri_hash_table)
- browser_dialog_goto_index (new_uri);
-
- if (! has_case_prefix (abs, "file:/"))
- {
- load_remote_page (uri);
- return;
- }
-
- tmp = uri_to_abs (current_uri, current_uri);
- if (!tmp || strcmp (tmp, abs))
- {
- GError *error = NULL;
-
- html_document_clear (doc);
- html_document_open_stream (doc, "text/html");
- gtk_adjustment_set_value (adj, 0.0);
-
- if (anchor)
- g_idle_add_full (G_PRIORITY_LOW,
- (GSourceFunc) idle_jump_to_anchor,
- g_strdup (anchor), (GDestroyNotify) g_free);
-
- if (request_url (doc, abs, doc->current_stream, &error))
- {
- if (html->window)
- gdk_window_set_cursor (html->window, busy_cursor);
- }
- else
- {
- browser_dialog_404 (doc, abs, error->message);
- g_error_free (error);
- }
- }
- else
- {
- if (anchor)
- html_view_jump_to_anchor (HTML_VIEW (html), anchor);
- else
- gtk_adjustment_set_value (adj, 0.0);
- }
-
- g_free (tmp);
-
- g_free (current_uri);
- current_uri = new_uri;
-
- if (add_to_queue)
- queue_add (queue, new_uri);
-
- update_toolbar ();
-
- gtk_window_present (GTK_WINDOW (gtk_widget_get_toplevel (html)));
+ gtk_window_present (GTK_WINDOW (gtk_widget_get_toplevel (view)));
}
static void
@@ -657,25 +524,25 @@
add_child (store, domain, locale, NULL, item);
}
- gtk_tree_view_set_model (GTK_TREE_VIEW (tree_view),
- GTK_TREE_MODEL (store));
+ gtk_tree_view_set_model (GTK_TREE_VIEW (tree_view), GTK_TREE_MODEL (store));
g_object_unref (store);
}
-void
-browser_dialog_goto_index (const gchar *ref)
+static void
+select_index (const gchar *uri)
{
- GtkTreeIter *iter = g_hash_table_lookup (uri_hash_table, ref);
+ GtkTreeSelection *selection;
+ GtkTreeIter *iter;
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view));
+
+ iter = g_hash_table_lookup (uri_hash_table, uri);
if (iter)
{
- GtkTreeSelection *selection;
- GtkTreeModel *model;
- GtkTreePath *path;
- GtkTreePath *scroll_path;
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view));
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree_view));
+ GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree_view));
+ GtkTreePath *path;
+ GtkTreePath *scroll_path;
path = gtk_tree_model_get_path (model, iter);
scroll_path = gtk_tree_path_copy (path);
@@ -690,6 +557,10 @@
gtk_tree_selection_select_iter (selection, iter);
}
+ else
+ {
+ gtk_tree_selection_unselect_all (selection);
+ }
}
@@ -716,6 +587,16 @@
G_CALLBACK (index_callback)
},
{
+ "reload", GTK_STOCK_REFRESH,
+ N_("Reload"), "<control>R", N_("Reload current page"),
+ G_CALLBACK (reload_callback)
+ },
+ {
+ "stop", GTK_STOCK_CANCEL,
+ N_("Stop"), "Escape", N_("Stop loading this page"),
+ G_CALLBACK (stop_callback)
+ },
+ {
"zoom-in", GTK_STOCK_ZOOM_IN,
NULL, "<control>plus", NULL,
G_CALLBACK (zoom_in_callback)
@@ -745,12 +626,12 @@
gtk_action_group_set_translation_domain (group, NULL);
gtk_action_group_add_actions (group, actions, G_N_ELEMENTS (actions), NULL);
- action = gimp_throbber_action_new ("online",
+ action = gimp_throbber_action_new ("website",
"docs.gimp.org",
_("Visit the GIMP documentation website"),
GIMP_STOCK_WILBER);
g_signal_connect_closure (action, "activate",
- g_cclosure_new (G_CALLBACK (online_callback),
+ g_cclosure_new (G_CALLBACK (website_callback),
NULL, NULL),
FALSE);
gtk_action_group_add_action (group, action);
@@ -766,9 +647,11 @@
gtk_ui_manager_add_ui_from_string (ui_manager,
"<ui>"
" <toolbar name=\"help-browser-toolbar\">"
+ " <toolitem action=\"reload\" />"
+ " <toolitem action=\"stop\" />"
" <toolitem action=\"index\" />"
" <separator name=\"space\" />"
- " <toolitem action=\"online\" />"
+ " <toolitem action=\"website\" />"
" </toolbar>"
" <accelerator action=\"close\" />"
" <accelerator action=\"quit\" />"
@@ -786,10 +669,14 @@
" <popup name=\"help-browser-popup\">"
" <menuitem action=\"back\" />"
" <menuitem action=\"forward\" />"
+ " <menuitem action=\"reload\" />"
+ " <menuitem action=\"stop\" />"
" <menuitem action=\"index\" />"
+#ifdef HAVE_WEBKIT_ZOOM_API
" <separator />"
" <menuitem action=\"zoom-in\" />"
" <menuitem action=\"zoom-out\" />"
+#endif
" <separator />"
" <menuitem action=\"close\" />"
" </popup>"
@@ -806,132 +693,120 @@
}
static void
-browser_dialog_404 (HtmlDocument *doc,
- const gchar *uri,
- const gchar *message)
-{
- gchar *msg = g_strdup_printf
- ("<html>"
- "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />"
- "<head><title>%s</title></head>"
- "<body bgcolor=\"white\">"
- "<div align=\"center\">"
- "<div>%s</div>"
- "<h3>%s</h3>"
- "<tt>%s</tt>"
- "<h3>%s</h3>"
- "</div>"
- "</body>"
- "</html>",
- _("Document not found"),
- eek_png_tag,
- _("The requested URL could not be loaded:"),
- uri,
- message);
-
- html_document_write_stream (doc, msg, strlen (msg));
-
- g_free (msg);
-}
-
-static void
back_callback (GtkAction *action,
gpointer data)
{
- gdouble pos;
- const gchar *uri = queue_prev (queue, GPOINTER_TO_INT (data), &pos);
-
- if (uri)
- {
- browser_dialog_load (uri, FALSE);
-
- g_idle_add ((GSourceFunc) idle_scroll_to_pos,
- GINT_TO_POINTER ((gint) (pos * (1 << 16))));
-
- queue_move_prev (queue, GPOINTER_TO_INT (data));
- }
-
- update_toolbar ();
+ webkit_web_view_go_back (WEBKIT_WEB_VIEW (view));
}
static void
forward_callback (GtkAction *action,
gpointer data)
{
- gdouble pos;
- const gchar *uri = queue_next (queue, GPOINTER_TO_INT (data), &pos);
-
- if (uri)
- {
- browser_dialog_load (uri, FALSE);
-
- g_idle_add ((GSourceFunc) idle_scroll_to_pos,
- GINT_TO_POINTER ((gint) (pos * (1 << 16))));
+ webkit_web_view_go_forward (WEBKIT_WEB_VIEW (view));
+}
- queue_move_next (queue, GPOINTER_TO_INT (data));
- }
+static void
+reload_callback (GtkAction *action,
+ gpointer data)
+{
+ webkit_web_view_reload (WEBKIT_WEB_VIEW (view));
+}
- update_toolbar ();
+static void
+stop_callback (GtkAction *action,
+ gpointer data)
+{
+ webkit_web_view_stop_loading (WEBKIT_WEB_VIEW (view));
}
static void
index_callback (GtkAction *action,
gpointer data)
{
- browser_dialog_load ("index.html", TRUE);
+ GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree_view));
+ GimpHelpDomain *domain = g_object_get_data (G_OBJECT (model), "domain");
+ GimpHelpLocale *locale = g_object_get_data (G_OBJECT (model), "locale");
+
+ if (domain && locale)
+ {
+ gchar *uri = g_strconcat (domain->help_uri, "/",
+ locale->locale_id, "/",
+ gimp_help_locale_map (locale,
+ GIMP_HELP_DEFAULT_ID),
+ NULL);
+ browser_dialog_load (uri);
+ g_free (uri);
+ }
}
static void
zoom_in_callback (GtkAction *action,
gpointer data)
{
- html_view_zoom_in (HTML_VIEW (html));
+#ifdef HAVE_WEBKIT_ZOOM_API
+ webkit_web_view_zoom_in (WEBKIT_WEB_VIEW (view));
+#endif
}
static void
zoom_out_callback (GtkAction *action,
gpointer data)
{
- html_view_zoom_out (HTML_VIEW (html));
+#ifdef HAVE_WEBKIT_ZOOM_API
+ webkit_web_view_zoom_out (WEBKIT_WEB_VIEW (view));
+#endif
}
static void
-online_callback (GtkAction *action,
- gpointer data)
+website_callback (GtkAction *action,
+ gpointer data)
{
- load_remote_page ("http://docs.gimp.org/");
+ browser_dialog_load ("http://docs.gimp.org/");
}
static void
close_callback (GtkAction *action,
gpointer data)
{
- gtk_widget_destroy (gtk_widget_get_toplevel (html));
+ gtk_widget_destroy (gtk_widget_get_toplevel (view));
}
+static void
+menu_callback (GtkWidget *menu,
+ WebKitWebHistoryItem *item)
+{
+ browser_dialog_load (webkit_web_history_item_get_uri (item));
+}
+
+/* this function unrefs the items and frees the list */
static GtkWidget *
-build_menu (GList *list,
- GCallback callback)
+build_menu (GList *list)
{
GtkWidget *menu;
- gint i;
if (! list)
return NULL;
menu = gtk_menu_new ();
- for (i = 0; list && i < 15; list = g_list_next (list), i++)
+ do
{
- GtkWidget *menu_item = gtk_menu_item_new_with_label (list->data);
+ WebKitWebHistoryItem *item = list->data;
+ GtkWidget *menu_item;
+
+ menu_item = gtk_menu_item_new_with_label (webkit_web_history_item_get_title (item));
gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
gtk_widget_show (menu_item);
- g_signal_connect (menu_item, "activate",
- G_CALLBACK (callback),
- GINT_TO_POINTER (i));
+ g_signal_connect_object (menu_item, "activate",
+ G_CALLBACK (menu_callback),
+ item, 0);
+
+ g_object_unref (item);
}
+ while ((list = g_list_next (list)));
g_list_free (list);
@@ -939,29 +814,55 @@
}
static void
-update_toolbar (void)
+update_actions (void)
{
- GtkAction *action;
+ GtkAction *action;
+ WebKitWebBackForwardList *back_forward_list;
+
+ back_forward_list =
+ webkit_web_view_get_back_forward_list (WEBKIT_WEB_VIEW (view));
/* update the back button and its menu */
action = gtk_ui_manager_get_action (ui_manager,
"/ui/help-browser-popup/back");
- gtk_action_set_sensitive (action, queue_has_prev (queue));
+ gtk_action_set_sensitive (action,
+ webkit_web_view_can_go_back (WEBKIT_WEB_VIEW (view)));
+
+ if (back_forward_list)
+ {
+ GList *list;
- gtk_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (button_prev),
- build_menu (queue_list_prev (queue),
- G_CALLBACK (back_callback)));
+ list = webkit_web_back_forward_list_get_back_list_with_limit (back_forward_list,
+ 12);
+ gtk_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (button_prev),
+ build_menu (list));
+ }
+ else
+ {
+ gtk_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (button_prev), NULL);
+ }
/* update the forward button and its menu */
action = gtk_ui_manager_get_action (ui_manager,
"/ui/help-browser-popup/forward");
- gtk_action_set_sensitive (action, queue_has_next (queue));
+ gtk_action_set_sensitive (action,
+ webkit_web_view_can_go_forward (WEBKIT_WEB_VIEW (view)));
- gtk_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (button_next),
- build_menu (queue_list_next (queue),
- G_CALLBACK (forward_callback)));
+ if (back_forward_list)
+ {
+ GList *list;
+
+ list = webkit_web_back_forward_list_get_forward_list_with_limit (back_forward_list,
+ 12);
+ gtk_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (button_next),
+ build_menu (list));
+ }
+ else
+ {
+ gtk_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (button_next), NULL);
+ }
}
static void
@@ -975,10 +876,10 @@
{
GValue value = { 0, };
- gtk_tree_model_get_value (gtk_combo_box_get_model (combo),
- &iter, HISTORY_URI, &value);
+ gtk_tree_model_get_value (gtk_combo_box_get_model (combo), &iter,
+ HISTORY_URI, &value);
- browser_dialog_load (g_value_get_string (&value), TRUE);
+ browser_dialog_load (g_value_get_string (&value));
g_value_unset (&value);
}
@@ -1000,7 +901,13 @@
guint time,
gpointer data)
{
- if (! current_uri)
+ WebKitWebFrame *frame;
+ const gchar *uri;
+
+ frame = webkit_web_view_get_main_frame (WEBKIT_WEB_VIEW (view));
+ uri = webkit_web_frame_get_uri (frame);
+
+ if (! uri)
return;
if (selection_data->target ==
@@ -1008,7 +915,7 @@
{
gchar *uris[2];
- uris[0] = current_uri;
+ uris[0] = (gchar *) uri;
uris[1] = NULL;
gtk_selection_data_set_uris (selection_data, uris);
@@ -1018,7 +925,7 @@
{
gtk_selection_data_set (selection_data,
selection_data->target,
- 8, (guchar *) current_uri, strlen (current_uri));
+ 8, (guchar *) uri, strlen (uri));
}
}
@@ -1048,7 +955,7 @@
item->ref,
NULL);
- browser_dialog_load (uri, TRUE);
+ browser_dialog_load (uri);
g_free (uri);
}
@@ -1063,7 +970,12 @@
data.paned_position = gtk_paned_get_position (GTK_PANED (paned));
- data.zoom = html ? html_view_get_magnification (HTML_VIEW (html)) : 1.0;
+#ifdef HAVE_WEBKIT_ZOOM_API
+ data.zoom = (view ?
+ webkit_web_view_get_zoom_level (WEBKIT_WEB_VIEW (view)) : 1.0);
+#else
+ data.zoom = 1.0;
+#endif
gimp_set_data (GIMP_HELP_BROWSER_DIALOG_DATA, &data, sizeof (data));
@@ -1116,162 +1028,36 @@
}
static void
-title_changed (HtmlDocument *doc,
- const gchar *new_title,
- gpointer data)
+title_changed (GtkWidget *view,
+ WebKitWebFrame *frame,
+ const gchar *title,
+ GtkWidget *combo)
{
- gchar *title = NULL;
-
- if (new_title)
- {
- gchar *c;
-
- title = g_strdup (new_title);
-
- for (c = title; *c; c++)
- {
- if (*c == '\n' || *c == '\r')
- *c = ' ';
- }
-
- title = g_strstrip (title);
- if (! strlen (title))
- {
- g_free (title);
- title = NULL;
- }
- }
-
- history_add (GTK_COMBO_BOX (data),
- current_uri, title ? title : _("Untitled"));
-
- if (title)
- queue_set_title (queue, title);
+ history_add (GTK_COMBO_BOX (combo),
+ webkit_web_frame_get_uri (frame),
+ title ? title : _("Untitled"));
- g_free (title);
+ update_actions ();
}
static void
-link_clicked (HtmlDocument *doc,
- const gchar *uri,
- gpointer data)
+load_started (GtkWidget *view,
+ WebKitWebFrame *frame)
{
- GtkAdjustment *adj = gtk_layout_get_vadjustment (GTK_LAYOUT (html));
-
- if (adj->upper > 0.0)
- queue_set_scroll_offset (queue, adj->value / adj->upper);
-
- browser_dialog_load (uri, TRUE);
-}
-
-static gboolean
-request_url (HtmlDocument *doc,
- const gchar *uri,
- HtmlStream *stream,
- GError **error)
-{
- gchar *abs;
- gchar *filename;
-
- g_return_val_if_fail (uri != NULL, TRUE);
- g_return_val_if_fail (stream != NULL, TRUE);
-
- abs = uri_to_abs (uri, current_uri);
- if (! abs)
- return TRUE;
-
- filename = filename_from_uri (abs);
- g_free (abs);
-
- if (filename)
- {
- gint fd = g_open (filename, O_RDONLY | _O_BINARY, 0);
-
- if (fd != -1)
- {
- GIOChannel *io = g_io_channel_unix_new (fd);
-
- g_io_channel_set_close_on_unref (io, TRUE);
- g_io_channel_set_encoding (io, NULL, NULL);
-
- g_io_add_watch (io, G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL,
- io_handler, stream);
- }
-
- g_free (filename);
-
- if (fd == -1)
- {
- g_set_error (error,
- G_FILE_ERROR, g_file_error_from_errno (errno),
- g_strerror (errno));
- return FALSE;
- }
- }
-
- return TRUE;
-}
-
-static gboolean
-io_handler (GIOChannel *io,
- GIOCondition condition,
- gpointer data)
-{
- HtmlStream *stream = data;
- gchar buffer[8192];
- gsize bytes;
-
- if (condition & G_IO_IN)
- {
- if (g_io_channel_read_chars (io, buffer, sizeof (buffer),
- &bytes, NULL) != G_IO_STATUS_ERROR
- && bytes > 0)
- {
- html_stream_write (stream, buffer, bytes);
- }
- else
- {
- goto error;
- }
-
- if (condition & G_IO_HUP)
- {
- while (g_io_channel_read_chars (io, buffer, sizeof (buffer),
- &bytes, NULL) != G_IO_STATUS_ERROR
- && bytes > 0)
- {
- html_stream_write (stream, buffer, bytes);
- }
- }
- }
-
- if (condition & (G_IO_ERR | G_IO_HUP | G_IO_NVAL))
- {
- error:
- html_stream_close (stream);
- g_io_channel_unref (io);
-
- if (html->window)
- gdk_window_set_cursor (html->window, NULL);
-
- return FALSE;
- }
-
- return TRUE;
+ GtkAction *action = gtk_ui_manager_get_action (ui_manager,
+ "/ui/help-browser-popup/stop");
+ gtk_action_set_sensitive (action, TRUE);
}
static void
-load_remote_page (const gchar *uri)
+load_finished (GtkWidget *view,
+ WebKitWebFrame *frame)
{
- GimpParam *return_vals;
- gint nreturn_vals;
+ GtkAction *action = gtk_ui_manager_get_action (ui_manager,
+ "/ui/help-browser-popup/stop");
+ gtk_action_set_sensitive (action, FALSE);
- /* try to call the user specified web browser */
- return_vals = gimp_run_procedure ("plug-in-web-browser",
- &nreturn_vals,
- GIMP_PDB_STRING, uri,
- GIMP_PDB_END);
- gimp_destroy_params (return_vals, nreturn_vals);
+ update_actions ();
}
static void
@@ -1313,58 +1099,3 @@
gtk_combo_box_set_active_iter (combo, &iter);
g_signal_handlers_unblock_by_func (combo, combo_changed, NULL);
}
-
-/* Taken from glib/gconvert.c:
- * Test of haystack has the needle prefix, comparing case
- * insensitive. haystack may be UTF-8, but needle must
- * contain only ascii.
- */
-static gboolean
-has_case_prefix (const gchar *haystack, const gchar *needle)
-{
- const gchar *h = haystack;
- const gchar *n = needle;
-
- while (*n && *h && g_ascii_tolower (*n) == g_ascii_tolower (*h))
- {
- n++;
- h++;
- }
-
- return (*n == '\0');
-}
-
-static gchar *
-filename_from_uri (const gchar *uri)
-{
- gchar *filename;
- gchar *hostname;
-
- g_return_val_if_fail (uri != NULL, NULL);
-
- filename = g_filename_from_uri (uri, &hostname, NULL);
-
- if (!filename)
- return NULL;
-
- if (hostname)
- {
- /* we have a file: URI with a hostname */
-#ifdef G_OS_WIN32
- /* on Win32, create a valid UNC path and use it as the filename */
-
- gchar *tmp = g_build_filename ("//", hostname, filename, NULL);
-
- g_free (filename);
- filename = tmp;
-#else
- /* otherwise return NULL, caller should use URI then */
- g_free (filename);
- filename = NULL;
-#endif
-
- g_free (hostname);
- }
-
- return filename;
-}
Modified: trunk/plug-ins/help-browser/dialog.h
==============================================================================
--- trunk/plug-ins/help-browser/dialog.h (original)
+++ trunk/plug-ins/help-browser/dialog.h Tue Jun 10 15:55:28 2008
@@ -27,12 +27,10 @@
void browser_dialog_open (void);
-void browser_dialog_load (const gchar *ref,
- gboolean add_to_queue);
+void browser_dialog_load (const gchar *uri);
void browser_dialog_make_index (GimpHelpDomain *domain,
GimpHelpLocale *locale);
-void browser_dialog_goto_index (const gchar *ref);
#endif /* ! __DIALOG_H__ */
Modified: trunk/plug-ins/help-browser/help-browser.c
==============================================================================
--- trunk/plug-ins/help-browser/help-browser.c (original)
+++ trunk/plug-ins/help-browser/help-browser.c Tue Jun 10 15:55:28 2008
@@ -46,19 +46,23 @@
/* forward declarations */
-static void query (void);
-static void run (const gchar *name,
- gint nparams,
- const GimpParam *param,
- gint *nreturn_vals,
- GimpParam **return_vals);
-
-static void temp_proc_install (void);
-static void temp_proc_run (const gchar *name,
- gint nparams,
- const GimpParam *param,
- gint *nreturn_vals,
- GimpParam **return_vals);
+static void query (void);
+static void run (const gchar *name,
+ gint nparams,
+ const GimpParam *param,
+ gint *nreturn_vals,
+ GimpParam **return_vals);
+
+static void temp_proc_install (void);
+static void temp_proc_run (const gchar *name,
+ gint nparams,
+ const GimpParam *param,
+ gint *nreturn_vals,
+ GimpParam **return_vals);
+
+static gboolean help_browser_show_help (const gchar *help_domain,
+ const gchar *help_locales,
+ const gchar *help_id);
/* local variables */
@@ -110,7 +114,7 @@
GimpParam **return_vals)
{
GimpRunMode run_mode = param[0].data.d_int32;
- GimpPDBStatusType status = GIMP_PDB_SUCCESS;
+ GimpPDBStatusType status = GIMP_PDB_SUCCESS;
static GimpParam values[1];
@@ -209,7 +213,6 @@
/* make sure all the arguments are there */
if (nparams == 3)
{
- GimpHelpDomain *domain;
const gchar *help_domain = GIMP_HELP_DEFAULT_DOMAIN;
const gchar *help_locales = NULL;
const gchar *help_id = GIMP_HELP_DEFAULT_ID;
@@ -223,36 +226,51 @@
if (param[2].data.d_string && strlen (param[2].data.d_string))
help_id = param[2].data.d_string;
- domain = gimp_help_lookup_domain (help_domain);
-
- if (domain)
+ if (! help_browser_show_help (help_domain, help_locales, help_id))
{
- GList *locales = gimp_help_parse_locales (help_locales);
- GimpHelpLocale *locale;
- gchar *full_uri;
- gboolean fatal_error;
+ gtk_main_quit ();
+ }
+ }
- full_uri = gimp_help_domain_map (domain, locales, help_id, NULL,
- &locale, &fatal_error);
+ values[0].type = GIMP_PDB_STATUS;
+ values[0].data.d_status = status;
+}
- if (full_uri)
- {
- browser_dialog_load (full_uri, TRUE);
- browser_dialog_make_index (domain, locale);
- browser_dialog_goto_index (full_uri);
+static gboolean
+help_browser_show_help (const gchar *help_domain,
+ const gchar *help_locales,
+ const gchar *help_id)
+{
+ GimpHelpDomain *domain;
+ gboolean success = TRUE;
- g_free (full_uri);
- }
- else if (fatal_error)
- {
- gtk_main_quit ();
- }
+ domain = gimp_help_lookup_domain (help_domain);
- g_list_foreach (locales, (GFunc) g_free, NULL);
- g_list_free (locales);
+ if (domain)
+ {
+ GList *locales = gimp_help_parse_locales (help_locales);
+ GimpHelpLocale *locale;
+ gchar *uri;
+ gboolean fatal_error;
+
+ uri = gimp_help_domain_map (domain, locales, help_id, NULL,
+ &locale, &fatal_error);
+
+ if (uri)
+ {
+ browser_dialog_make_index (domain, locale);
+ browser_dialog_load (uri);
+
+ g_free (uri);
}
+ else if (fatal_error)
+ {
+ success = FALSE;
+ }
+
+ g_list_foreach (locales, (GFunc) g_free, NULL);
+ g_list_free (locales);
}
- values[0].type = GIMP_PDB_STATUS;
- values[0].data.d_status = status;
+ return success;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]