On Sat, Jan 26, 2013 at 04:07:08PM +0100, Christoph Lohmann wrote:
> [...]
> I applied your patch. It seems to work, but not inside of tabbed. Could
> you reconsider to maybe force the inspector into some vertical tiling in
> surf? That’s how chromium does it and this would not need some communi‐
> cation between two X11 windows.
> [...]
The attached patch does that. It also changes the inspector function to
toggle between displaying and hiding the inspector.
--
Gregor Best
>From 70ec8826d68e31bbf1994bc4aa844b786f74bd92 Mon Sep 17 00:00:00 2001
From: Gregor Best <[email protected]>
Date: Sat, 26 Jan 2013 20:46:59 +0100
Subject: [PATCH] Show the WebKit inspector in the main window
Signed-off-by: Gregor Best <[email protected]>
---
surf.c | 38 +++++++++++++++++++++++++-------------
1 file changed, 25 insertions(+), 13 deletions(-)
diff --git a/surf.c b/surf.c
index 682c1e2..7156c1d 100644
--- a/surf.c
+++ b/surf.c
@@ -42,14 +42,14 @@ union Arg {
};
typedef struct Client {
- GtkWidget *win, *scroll, *vbox, *indicator;
+ GtkWidget *win, *scroll, *vbox, *indicator, *pane;
WebKitWebView *view;
WebKitWebInspector *inspector;
char *title, *linkhover;
const char *uri, *needle;
gint progress;
struct Client *next;
- gboolean zoomed, fullscreen, isinspector, sslfailed;
+ gboolean zoomed, fullscreen, isinspecting, sslfailed;
} Client;
typedef struct {
@@ -506,28 +506,35 @@ initdownload(WebKitWebView *view, WebKitDownload *o,
Client *c) {
static void
inspector(Client *c, const Arg *arg) {
- if(c->isinspector)
- return;
- webkit_web_inspector_show(c->inspector);
+ if(c->isinspecting)
+ webkit_web_inspector_close(c->inspector);
+ else
+ webkit_web_inspector_show(c->inspector);
}
static WebKitWebView *
inspector_new(WebKitWebInspector *i, WebKitWebView *v, Client *c) {
- Client *n = newclient();
- n->isinspector = true;
-
- return n->view;
+ return WEBKIT_WEB_VIEW(webkit_web_view_new());
}
static gboolean
inspector_show(WebKitWebInspector *i, Client *c) {
- gtk_widget_show(GTK_WIDGET(webkit_web_inspector_get_web_view(i)));
+ if (c->isinspecting)
+ return false;
+ WebKitWebView *w = webkit_web_inspector_get_web_view(i);
+ gtk_paned_pack2(GTK_PANED(c->pane), GTK_WIDGET(w), TRUE, TRUE);
+ gtk_widget_show(GTK_WIDGET(w));
+ c->isinspecting = true;
return true;
}
static gboolean
inspector_close(WebKitWebInspector *i, Client *c) {
- gtk_widget_hide(GTK_WIDGET(webkit_web_inspector_get_web_view(i)));
+ if (!c->isinspecting)
+ return false;
+ GtkWidget *w = GTK_WIDGET(webkit_web_inspector_get_web_view(i));
+ gtk_widget_hide(w);
+ c->isinspecting = false;
return true;
}
@@ -671,8 +678,12 @@ newclient(void) {
"key-press-event",
G_CALLBACK(keypress), c);
+ /* Pane */
+ c->pane = gtk_vpaned_new();
+
/* VBox */
c->vbox = gtk_vbox_new(FALSE, 0);
+ gtk_paned_pack1(GTK_PANED(c->pane), c->vbox, TRUE, TRUE);
/* Scrolled Window */
c->scroll = gtk_scrolled_window_new(NULL, NULL);
@@ -726,7 +737,7 @@ newclient(void) {
/* Arranging */
gtk_container_add(GTK_CONTAINER(c->scroll), GTK_WIDGET(c->view));
- gtk_container_add(GTK_CONTAINER(c->win), c->vbox);
+ gtk_container_add(GTK_CONTAINER(c->win), c->pane);
gtk_container_add(GTK_CONTAINER(c->vbox), c->scroll);
gtk_container_add(GTK_CONTAINER(c->vbox), c->indicator);
@@ -736,6 +747,7 @@ newclient(void) {
gtk_box_set_child_packing(GTK_BOX(c->vbox), c->scroll, TRUE,
TRUE, 0, GTK_PACK_START);
gtk_widget_grab_focus(GTK_WIDGET(c->view));
+ gtk_widget_show(c->pane);
gtk_widget_show(c->vbox);
gtk_widget_show(c->scroll);
gtk_widget_show(GTK_WIDGET(c->view));
@@ -776,7 +788,7 @@ newclient(void) {
G_CALLBACK(inspector_close), c);
g_signal_connect(G_OBJECT(c->inspector), "finished",
G_CALLBACK(inspector_finished), c);
- c->isinspector = false;
+ c->isinspecting = false;
}
g_free(uri);
--
1.8.0.1