diff options
Diffstat (limited to 'inspector.c')
-rw-r--r-- | inspector.c | 90 |
1 files changed, 75 insertions, 15 deletions
diff --git a/inspector.c b/inspector.c index 25e155d..6b8f114 100644 --- a/inspector.c +++ b/inspector.c @@ -30,6 +30,11 @@ inspector_close_window(WebKitWebInspector *inspector, struct tab *t) { DNPRINTF(XT_D_INSPECTOR, "%s: tab %d\n", __func__, t->tab_id); + if (t->inspector_window) { + gtk_widget_hide(t->inspector_window); + return (TRUE); /* handled */ + } + return (FALSE); /* NOT handled */ } @@ -41,27 +46,31 @@ inspector_detach_window(WebKitWebInspector *inspector, struct tab *t) return (FALSE); /* NOT handled */ } -void -inspector_finished(WebKitWebInspector *inspector, struct tab *t) +gboolean +inspector_delete(GtkWidget *inspector_window, GdkEvent *e, struct tab *t) { - DNPRINTF(XT_D_INSPECTOR, "%s: tab %d\n", __func__, t->tab_id); + inspector_close_window(t->inspector, t); + + return (TRUE); /* handled */ } WebKitWebView* inspector_inspect_web_view_cb(WebKitWebInspector *inspector, WebKitWebView* wv, struct tab *t) { - GtkWidget *inspector_window; - GtkWidget *inspector_view; - DNPRINTF(XT_D_INSPECTOR, "%s: tab %d\n", __func__, t->tab_id); - inspector_window = create_window("inspector"); - inspector_view = webkit_web_view_new(); - gtk_container_add(GTK_CONTAINER(inspector_window), inspector_view); - gtk_widget_show_all(inspector_window); + if (t->inspector_window) + goto done; - return WEBKIT_WEB_VIEW(inspector_view); + t->inspector_window = create_window("inspector"); + t->inspector_view = webkit_web_view_new(); + gtk_container_add(GTK_CONTAINER(t->inspector_window), t->inspector_view); + + g_signal_connect(t->inspector_window, + "delete-event", G_CALLBACK(inspector_delete), t); +done: + return WEBKIT_WEB_VIEW(t->inspector_view); } gboolean @@ -69,19 +78,51 @@ inspector_show_window(WebKitWebInspector *inspector, struct tab *t) { DNPRINTF(XT_D_INSPECTOR, "%s: tab %d\n", __func__, t->tab_id); + if (t->inspector_window) { + g_signal_emit_by_name(inspector, "attach-window", t); + gtk_widget_show_all(t->inspector_window); + gtk_window_present(GTK_WINDOW(t->inspector_window)); + return (TRUE); /* handled */ + } + return (FALSE); /* NOT handled */ } void +inspector_finished(WebKitWebInspector *inspector, struct tab *t) +{ + DNPRINTF(XT_D_INSPECTOR, "%s: tab %d\n", __func__, t->tab_id); + + if (t->inspector_window) { + g_signal_handlers_disconnect_by_func( + t->inspector, inspector_attach_window, t); + g_signal_handlers_disconnect_by_func( + t->inspector, inspector_close_window, t); + g_signal_handlers_disconnect_by_func( + t->inspector, inspector_detach_window, t); + g_signal_handlers_disconnect_by_func( + t->inspector, inspector_finished, t); + g_signal_handlers_disconnect_by_func( + t->inspector, inspector_inspect_web_view_cb, t); + g_signal_handlers_disconnect_by_func( + t->inspector, inspector_show_window, t); + + gtk_widget_hide(t->inspector_window); + + /* XXX it seems that the window is disposed automatically */ + t->inspector_window = NULL; + t->inspector_view = NULL; + } +} + +void setup_inspector(struct tab *t) { - WebKitWebInspector *inspector; DNPRINTF(XT_D_INSPECTOR, "%s: tab %d\n", __func__, t->tab_id); - inspector = webkit_web_view_get_inspector(WEBKIT_WEB_VIEW(t->wv)); - - g_object_connect(G_OBJECT(inspector), + t->inspector = webkit_web_view_get_inspector(WEBKIT_WEB_VIEW(t->wv)); + g_object_connect(G_OBJECT(t->inspector), "signal::attach-window", G_CALLBACK(inspector_attach_window), t, "signal::close-window", G_CALLBACK(inspector_close_window), t, "signal::detach-window", G_CALLBACK(inspector_detach_window), t, @@ -89,4 +130,23 @@ setup_inspector(struct tab *t) "signal::inspect-web-view", G_CALLBACK(inspector_inspect_web_view_cb), t, "signal::show-window", G_CALLBACK(inspector_show_window), t, (char *)NULL); + +} + +int +inspector_cmd(struct tab *t, struct karg *args) +{ + DNPRINTF(XT_D_INSPECTOR, "%s: tab %d\n", __func__, t->tab_id); + + if (t == NULL) + return (1); + + if (args->i & XT_INS_SHOW) + webkit_web_inspector_show(t->inspector); + else if (args->i & XT_INS_HIDE) + webkit_web_inspector_close(t->inspector); + else if (args->i & XT_INS_CLOSE) + inspector_finished(t->inspector, t); + + return (XT_CB_PASSTHROUGH); } |