Hi!

Inspired from the suckkless surf browser, I added the patch to show the
webinspector in a vertical and resizable pane of the current window. This make
the inspection easier in context with tabbed.

Daniel
From ff08cd0de69488d99ef71506f815f18177737b99 Mon Sep 17 00:00:00 2001
From: Daniel Carl <[email protected]>
Date: Mon, 28 Jan 2013 21:14:11 +0100
Subject: [PATCH] Open inspector in a pane of current window.

---
 main.c |   81 +++++++++++++++++++++++++++++++++++++++++++++++-----------------
 1 file changed, 60 insertions(+), 21 deletions(-)

diff --git a/main.c b/main.c
index f6531f7..8f8cc77 100644
--- a/main.c
+++ b/main.c
@@ -37,7 +37,10 @@ static void inputbox_activate_cb(GtkEntry *entry, gpointer user_data);
 static gboolean inputbox_keypress_cb(GtkEntry *entry, GdkEventKey *event);
 static gboolean inputbox_keyrelease_cb(GtkEntry *entry, GdkEventKey *event);
 static gboolean inputbox_changed_cb(GtkEditable *entry, gpointer user_data);
-static WebKitWebView* inspector_inspect_web_view_cb(gpointer inspector, WebKitWebView* web_view);
+static WebKitWebView* inspector_new_cb(WebKitWebInspector* inspector, WebKitWebView* web_view);
+static gboolean inspector_show_cb(WebKitWebInspector *inspector);
+static gboolean inspector_close_cb(WebKitWebInspector *inspector);
+static void inspector_finished_cb(WebKitWebInspector *inspector);
 static gboolean notify_event_cb(GtkWidget *widget, GdkEvent *event, gpointer user_data);
 static gboolean webview_console_cb(WebKitWebView *webview, char *message, int line, char *source, gpointer user_data);
 static gboolean webview_download_cb(WebKitWebView *webview, WebKitDownload *download, gpointer user_data);
@@ -125,6 +128,7 @@ static GtkAdjustment *adjust_h;
 static GtkAdjustment *adjust_v;
 static GtkWidget *inputbox;
 static GtkWidget *eventbox;
+static GtkWidget *pane;
 static GtkBox *statusbar;
 static GtkWidget *status_url;
 static GtkWidget *status_state;
@@ -153,6 +157,7 @@ static char followTarget[8] = "";
 char *error_msg = NULL;
 char *config_base = NULL;
 static gboolean manual_focus = FALSE;
+static gboolean is_inspecting = FALSE;
 
 GList *activeDownloads, *colon_aliases = NULL;
 
@@ -289,25 +294,46 @@ webview_mimetype_cb(WebKitWebView *webview, WebKitWebFrame *frame, WebKitNetwork
 }
 
 static WebKitWebView*
-inspector_inspect_web_view_cb(gpointer inspector, WebKitWebView* web_view) {
-    gchar*     inspector_title;
-    GtkWidget* inspector_window;
-    GtkWidget* inspector_view;
+inspector_new_cb(WebKitWebInspector *inspector, WebKitWebView* web_view) {
+    return WEBKIT_WEB_VIEW(webkit_web_view_new());
+}
 
-    /* just enough code to show the inspector - no signal handling etc. */
-    inspector_title = g_strdup_printf("Inspect page - %s - Vimprobable2", webkit_web_view_get_uri(web_view));
-    if (embed) {
-        inspector_window = gtk_plug_new(embed);
-    } else {
-        inspector_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
-        gtk_window_set_wmclass(window, "vimprobable2", "Vimprobable2");
+static gboolean
+inspector_show_cb(WebKitWebInspector *inspector) {
+    WebKitWebView *webview;
+
+    if (is_inspecting) {
+        return FALSE;
+    }
+
+    webview = webkit_web_inspector_get_web_view(inspector);
+    gtk_paned_pack2(GTK_PANED(pane), GTK_WIDGET(webview), TRUE, TRUE);
+    gtk_widget_show(GTK_WIDGET(webview));
+
+    is_inspecting = TRUE;
+
+    return TRUE;
+}
+
+static gboolean
+inspector_close_cb(WebKitWebInspector *inspector) {
+    GtkWidget *widget;
+
+    if (!is_inspecting) {
+        return FALSE;
     }
-    gtk_window_set_title(GTK_WINDOW(inspector_window), inspector_title);
-    g_free(inspector_title);
-    inspector_view = webkit_web_view_new();
-    gtk_container_add(GTK_CONTAINER(inspector_window), inspector_view);
-    gtk_widget_show_all(inspector_window);
-    return WEBKIT_WEB_VIEW(inspector_view);
+    widget = GTK_WIDGET(webkit_web_inspector_get_web_view(inspector));
+    gtk_widget_hide(widget);
+    gtk_widget_destroy(widget);
+
+    is_inspecting = FALSE;
+
+    return TRUE;
+}
+
+static void
+inspector_finished_cb(WebKitWebInspector *inspector) {
+    g_free(inspector);
 }
 
 gboolean
@@ -1077,7 +1103,11 @@ open_inspector(const Arg * arg) {
     settings = webkit_web_view_get_settings(webview);
     g_object_get(G_OBJECT(settings), "enable-developer-extras", &inspect_enabled, NULL);
     if (inspect_enabled) {
-        webkit_web_inspector_show(inspector);
+        if (is_inspecting) {
+            webkit_web_inspector_close(inspector);
+        } else {
+            webkit_web_inspector_show(inspector);
+        }
         return TRUE;
     } else {
         echo_message(Error, "Webinspector is not enabled");
@@ -2539,6 +2569,9 @@ setup_gui() {
     GtkWidget *viewport = gtk_scrolled_window_new(adjust_h, adjust_v);
 #endif
 
+    pane = gtk_vpaned_new();
+    gtk_paned_pack1(GTK_PANED(pane), GTK_WIDGET(box), TRUE, TRUE);
+
     setup_signals();
     gtk_container_add(GTK_CONTAINER(viewport), GTK_WIDGET(webview));
 
@@ -2560,7 +2593,7 @@ setup_gui() {
     gtk_box_pack_start(box, eventbox, FALSE, FALSE, 0);
     gtk_entry_set_has_frame(GTK_ENTRY(inputbox), FALSE);
     gtk_box_pack_end(box, inputbox, FALSE, FALSE, 0);
-    gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(box));
+    gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(pane));
     gtk_widget_grab_focus(GTK_WIDGET(webview));
     gtk_widget_show_all(GTK_WIDGET(window));
     set_widget_font_and_color(inputbox, urlboxfont[0], urlboxbgcolor[0], urlboxcolor[0]);
@@ -2640,7 +2673,13 @@ setup_signals() {
     NULL);
     /* inspector */
     g_signal_connect(G_OBJECT(inspector),
-        "inspect-web-view",                             G_CALLBACK(inspector_inspect_web_view_cb),   NULL);
+        "inspect-web-view",                             G_CALLBACK(inspector_new_cb),                NULL);
+    g_signal_connect(G_OBJECT(inspector),
+        "show-window",                                  G_CALLBACK(inspector_show_cb),               NULL);
+    g_signal_connect(G_OBJECT(inspector),
+        "close-window",                                 G_CALLBACK(inspector_close_cb),              NULL);
+    g_signal_connect(G_OBJECT(inspector),
+        "finished",                                     G_CALLBACK(inspector_finished_cb),           NULL);
 }
 
 #ifdef ENABLE_USER_SCRIPTFILE
-- 
1.7.9.5

Attachment: signature.asc
Description: Digital signature

------------------------------------------------------------------------------
Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS,
MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current
with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft
MVPs and experts. ON SALE this month only -- learn more at:
http://p.sf.net/sfu/learnnow-d2d
_______________________________________________
Vimprobable-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/vimprobable-users

Reply via email to