diff --git a/src/ghtml-webkit.c b/src/ghtml-webkit.c index ced102e..8602850 100644 --- a/src/ghtml-webkit.c +++ b/src/ghtml-webkit.c @@ -27,6 +27,7 @@ #include "common/url.c" #include "../config.h" #define _(string) gettext(string) +#define WITH_INSPECTOR (defined(DEBUG) && WEBKIT_CHECK_VERSION(1, 0, 3)) /* private */ @@ -36,6 +37,9 @@ typedef struct _GHtml Surfer * surfer; GtkWidget * widget; GtkWidget * view; +#if WITH_INSPECTOR + GtkWidget * inspector; +#endif char * status; gboolean ssl; } GHtml; @@ -99,6 +103,9 @@ GtkWidget * ghtml_new(Surfer * surfer) widget = gtk_scrolled_window_new(NULL, NULL); ghtml->widget = widget; ghtml->view = webkit_web_view_new(); +#if WITH_INSPECTOR + ghtml->inspector = NULL; +#endif g_object_set_data(G_OBJECT(widget), "ghtml", ghtml); /* view */ g_signal_connect(G_OBJECT(ghtml->view), "console-message", G_CALLBACK( @@ -178,8 +185,8 @@ static void _new_init(GHtml * ghtml) return; } #endif - surfer_warning(ghtml->surfer, "Could not load certificate bundle:\n" - "SSL certificates will not be verified."); + surfer_warning(ghtml->surfer, _("Could not load certificate bundle:\n" + "SSL certificates will not be verified.")); } @@ -454,6 +461,15 @@ gboolean ghtml_go_forward(GtkWidget * widget) /* ghtml_load_url */ +#if WITH_INSPECTOR +static WebKitWebView * _load_inspector_inspect(WebKitWebInspector * inspector, + WebKitWebView * view, gpointer data); +static gboolean _load_inspector_inspected_uri(WebKitWebInspector * inspector, + gpointer data); +static gboolean _load_inspector_show(WebKitWebInspector * inspector, + gpointer data); +#endif + void ghtml_load_url(GtkWidget * widget, char const * url) { GHtml * ghtml; @@ -461,8 +477,12 @@ void ghtml_load_url(GtkWidget * widget, char const * url) char * q = NULL; const char about[] = "\nAbout " PACKAGE "" "\n\n
\n

" PACKAGE " " VERSION "

\n" - "

Copyright (c) 2011 Pierre Pronchery <khorben@" + "

Copyright (c) 2012 Pierre Pronchery <khorben@" "defora.org>

\n
\n\n"; +#if WITH_INSPECTOR + WebKitWebSettings * settings; + WebKitWebInspector * inspector; +#endif ghtml = g_object_get_data(G_OBJECT(widget), "ghtml"); if((p = _ghtml_make_url(NULL, url)) != NULL) @@ -481,6 +501,23 @@ void ghtml_load_url(GtkWidget * widget, char const * url) webkit_web_view_open(WEBKIT_WEB_VIEW(ghtml->view), url); #endif } +#if WITH_INSPECTOR + if(ghtml->inspector == NULL) + { + settings = webkit_web_view_get_settings(WEBKIT_WEB_VIEW( + ghtml->view)); + g_object_set(settings, "enable-developer-extras", TRUE, NULL); + inspector = webkit_web_view_get_inspector(WEBKIT_WEB_VIEW( + ghtml->view)); + g_signal_connect(G_OBJECT(inspector), "inspect-web-view", + G_CALLBACK(_load_inspector_inspect), ghtml); + g_signal_connect(G_OBJECT(inspector), "show-window", G_CALLBACK( + _load_inspector_show), ghtml); + g_signal_connect(G_OBJECT(inspector), "notify::inspected-uri", + G_CALLBACK(_load_inspector_inspected_uri), + ghtml); + } +#endif g_free(p); g_free(q); surfer_set_progress(ghtml->surfer, 0.0); @@ -488,6 +525,47 @@ void ghtml_load_url(GtkWidget * widget, char const * url) _ghtml_set_status(widget, _("Connecting...")); } +#if WITH_INSPECTOR +static WebKitWebView * _load_inspector_inspect(WebKitWebInspector * inspector, + WebKitWebView * view, gpointer data) +{ + GHtml * ghtml = data; + + ghtml->inspector = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_default_size(GTK_WINDOW(ghtml->inspector), 800, 600); + gtk_window_set_title(GTK_WINDOW(ghtml->inspector), + _("WebKit Web Inspector")); + view = webkit_web_view_new(); + /* FIXME implement more signals and really implement "web-view-ready" */ + g_signal_connect_swapped(view, "web-view-ready", gtk_widget_show_all, + ghtml->inspector); + gtk_container_add(GTK_CONTAINER(ghtml->inspector), GTK_WIDGET(view)); + return view; +} + +static gboolean _load_inspector_show(WebKitWebInspector * inspector, + gpointer data) +{ + GHtml * ghtml = data; + + gtk_window_present(GTK_WINDOW(ghtml->inspector)); + return TRUE; +} + +static gboolean _load_inspector_inspected_uri(WebKitWebInspector * inspector, + gpointer data) +{ + GHtml * ghtml = data; + char buf[256]; + char const * url; + + url = webkit_web_inspector_get_inspected_uri(inspector); + snprintf(buf, sizeof(buf), "%s%s%s", _("WebKit Web Inspector"), + (url != NULL) ? " - " : "", (url != NULL) ? url : ""); + return FALSE; +} +#endif + /* ghtml_paste */ void ghtml_paste(GtkWidget * widget)