Skip to content

Commit

Permalink
gtk-webkit: implement debug option
Browse files Browse the repository at this point in the history
  • Loading branch information
zserge committed Nov 27, 2017
1 parent ee50122 commit 15391f2
Showing 1 changed file with 48 additions and 2 deletions.
50 changes: 48 additions & 2 deletions webview.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ struct webview_priv {
GtkWidget *window;
GtkWidget *scroller;
GtkWidget *webview;
GtkWidget *inspector_window;
int should_exit;
};
#elif defined(WEBVIEW_WINAPI)
Expand Down Expand Up @@ -59,6 +60,7 @@ struct webview {
int width;
int height;
int resizable;
int debug;
webview_external_invoke_cb_t external_invoke_cb;
struct webview_priv priv;
void *userdata;
Expand Down Expand Up @@ -182,6 +184,35 @@ static void webview_window_object_cleared_cb(WebKitWebView *webview,
JSObjectSetProperty(context, glob, s, obj, kJSPropertyAttributeNone, NULL);
}

static WebKitWebView *webview_inspector_create_cb(WebKitWebInspector *inspector,
WebKitWebView *view,
gpointer arg) {
struct webview *w = (struct webview *)arg;
w->priv.inspector_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(w->priv.inspector_window), "WebInspector");
gtk_window_set_default_size(GTK_WINDOW(w->priv.inspector_window), 640, 480);
GtkWidget *scroll = gtk_scrolled_window_new(NULL, NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll),
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_container_add(GTK_CONTAINER(w->priv.inspector_window), scroll);
gtk_widget_show(scroll);
GtkWidget *webview = webkit_web_view_new();
gtk_container_add(GTK_CONTAINER(scroll), webview);
return WEBKIT_WEB_VIEW(webview);
}

static gboolean webview_inspector_show_cb(WebKitWebInspector *inspector,
gpointer arg) {
gtk_widget_show(((struct webview *)arg)->priv.inspector_window);
return TRUE;
}

static gboolean webview_inspector_hide_cb(WebKitWebInspector *inspector,
gpointer arg) {
gtk_widget_hide(((struct webview *)arg)->priv.inspector_window);
return TRUE;
}

static int webview_init(struct webview *w) {
if (gtk_init_check(0, NULL) == FALSE) {
return -1;
Expand All @@ -207,12 +238,27 @@ static int webview_init(struct webview *w) {
webkit_web_view_load_uri(WEBKIT_WEB_VIEW(w->priv.webview), w->url);
gtk_container_add(GTK_CONTAINER(w->priv.scroller), w->priv.webview);

if (w->debug) {
WebKitWebSettings *settings =
webkit_web_view_get_settings(WEBKIT_WEB_VIEW(w->priv.webview));
g_object_set(G_OBJECT(settings), "enable-developer-extras", TRUE, NULL);
WebKitWebInspector *inspector =
webkit_web_view_get_inspector(WEBKIT_WEB_VIEW(w->priv.webview));
g_signal_connect(G_OBJECT(inspector), "inspect-web-view",
G_CALLBACK(webview_inspector_create_cb), w);
g_signal_connect(G_OBJECT(inspector), "show-window",
G_CALLBACK(webview_inspector_show_cb), w);
g_signal_connect(G_OBJECT(inspector), "hide-window",
G_CALLBACK(webview_inspector_hide_cb), w);
} else {
g_signal_connect(G_OBJECT(w->priv.webview), "context-menu",
G_CALLBACK(webview_context_menu_cb), w);
}

gtk_widget_show_all(w->priv.window);

g_signal_connect(G_OBJECT(w->priv.window), "destroy",
G_CALLBACK(webview_desroy_cb), w);
g_signal_connect(G_OBJECT(w->priv.webview), "context-menu",
G_CALLBACK(webview_context_menu_cb), w);
g_signal_connect(G_OBJECT(w->priv.webview), "window-object-cleared",
G_CALLBACK(webview_window_object_cleared_cb), w);
return 0;
Expand Down

0 comments on commit 15391f2

Please sign in to comment.