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 <g...@ring0.de> Date: Sat, 26 Jan 2013 20:46:59 +0100 Subject: [PATCH] Show the WebKit inspector in the main window Signed-off-by: Gregor Best <g...@ring0.de> --- 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