From: Daniel Carl Date: Mon, 28 Jan 2013 19:45:29 +0000 (+0100) Subject: Open inspector into a pane within the current window. X-Git-Url: https://git.owens.tech/git.owens.tech/git.owens.tech/git?a=commitdiff_plain;h=db12927fceafd9054f24c6dab35778a58d7049b9;p=vimb.git Open inspector into a pane within the current window. --- diff --git a/doc/vimp.1.txt b/doc/vimp.1.txt index 5212ce5..ba2b2fd 100644 --- a/doc/vimp.1.txt +++ b/doc/vimp.1.txt @@ -235,7 +235,7 @@ Yank the selected text into the primary and secondary clipboard. Set configuration values. .TP .B inspect -Open the webinspector for current page. This is only available if the config +Toggles the webinspector for current page. This is only available if the config "webinspector" is enabled. .TP .B quit diff --git a/src/command.c b/src/command.c index 4645b2e..8593052 100644 --- a/src/command.c +++ b/src/command.c @@ -287,7 +287,11 @@ gboolean command_inspect(const Arg* arg) settings = webkit_web_view_get_settings(vp.gui.webview); g_object_get(G_OBJECT(settings), "enable-developer-extras", &enabled, NULL); if (enabled) { - webkit_web_inspector_show(vp.gui.inspector); + if (vp.state.is_inspecting) { + webkit_web_inspector_close(vp.gui.inspector); + } else { + webkit_web_inspector_show(vp.gui.inspector); + } return TRUE; } else { vp_echo(VP_MSG_ERROR, TRUE, "enable-developer-extras not enabled"); diff --git a/src/config.h b/src/config.h index dd30068..6e7f077 100644 --- a/src/config.h +++ b/src/config.h @@ -29,6 +29,7 @@ const struct { char* command; } default_config[] = { {"nmap gf=source"}, + {"nmap gF=inspect"}, {"nmap =input"}, {"nmap o=inputopen"}, {"nmap t=inputtabopen"}, diff --git a/src/main.c b/src/main.c index 6bf0dc6..aa24f2f 100644 --- a/src/main.c +++ b/src/main.c @@ -213,39 +213,37 @@ static void vp_gotheaders_cb(SoupMessage* message, gpointer data) static WebKitWebView* vp_inspector_new(WebKitWebInspector* inspector, WebKitWebView* webview) { - gchar* title = NULL; - GtkWidget* window; - GtkWidget* view; - - /* TODO allow to use a new inspector window event if embed is used */ - if (vp.state.embed) { - window = gtk_plug_new(vp.state.embed); - } else { - window = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_window_set_wmclass(GTK_WINDOW(window), "vimp", "Vimp"); - } - - title = g_strdup_printf("Inspect page - %s", CURRENT_URL()); - gtk_window_set_title(GTK_WINDOW(window), title); - g_free(title); - - view = webkit_web_view_new(); - gtk_container_add(GTK_CONTAINER(window), view); - gtk_widget_show_all(window); - - return WEBKIT_WEB_VIEW(view); + return WEBKIT_WEB_VIEW(webkit_web_view_new()); } static gboolean vp_inspector_show(WebKitWebInspector* inspector) { - gtk_widget_show(GTK_WIDGET(webkit_web_inspector_get_web_view(inspector))); + WebKitWebView* webview; + + if (vp.state.is_inspecting) { + return FALSE; + } + webview = webkit_web_inspector_get_web_view(inspector); + gtk_paned_pack2(GTK_PANED(vp.gui.pane), GTK_WIDGET(webview), TRUE, TRUE); + gtk_widget_show(GTK_WIDGET(webview)); + + vp.state.is_inspecting = TRUE; return TRUE; } static gboolean vp_inspector_close(WebKitWebInspector* inspector) { - gtk_widget_hide(GTK_WIDGET(webkit_web_inspector_get_web_view(inspector))); + WebKitWebView* webview; + + if (!vp.state.is_inspecting) { + return FALSE; + } + webview = webkit_web_inspector_get_web_view(inspector); + gtk_widget_hide(GTK_WIDGET(webview)); + gtk_widget_destroy(GTK_WIDGET(webview)); + + vp.state.is_inspecting = FALSE; return TRUE; } @@ -647,11 +645,11 @@ static void vp_init_gui(void) soup_session_remove_feature_by_type(vp.net.soup_session, soup_cookie_jar_get_type()); /* Create a scrollable area */ - gui->viewport = gtk_scrolled_window_new(NULL, NULL); - gui->adjust_h = gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(gui->viewport)); - gui->adjust_v = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(gui->viewport)); + gui->scroll = gtk_scrolled_window_new(NULL, NULL); + gui->adjust_h = gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(gui->scroll)); + gui->adjust_v = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(gui->scroll)); - /* Prepare the imputbox */ + /* Prepare the inputbox */ gui->inputbox = gtk_entry_new(); gtk_entry_set_inner_border(GTK_ENTRY(gui->inputbox), NULL); g_object_set(gtk_widget_get_settings(gui->inputbox), "gtk-entry-select-on-focus", FALSE, NULL); @@ -669,18 +667,21 @@ static void vp_init_gui(void) /* Prepare the event box */ gui->eventbox = gtk_event_box_new(); + gui->pane = gtk_vpaned_new(); + gtk_paned_pack1(GTK_PANED(gui->pane), GTK_WIDGET(gui->box), TRUE, TRUE); + vp_setup_signals(); /* Put all part together */ - gtk_container_add(GTK_CONTAINER(gui->viewport), GTK_WIDGET(gui->webview)); + gtk_container_add(GTK_CONTAINER(gui->scroll), GTK_WIDGET(gui->webview)); gtk_container_add(GTK_CONTAINER(gui->eventbox), GTK_WIDGET(gui->statusbar.box)); - gtk_container_add(GTK_CONTAINER(gui->window), GTK_WIDGET(gui->box)); + gtk_container_add(GTK_CONTAINER(gui->window), GTK_WIDGET(gui->pane)); gtk_misc_set_alignment(GTK_MISC(gui->statusbar.left), 0.0, 0.0); gtk_misc_set_alignment(GTK_MISC(gui->statusbar.right), 1.0, 0.0); gtk_box_pack_start(gui->statusbar.box, gui->statusbar.left, TRUE, TRUE, 2); gtk_box_pack_start(gui->statusbar.box, gui->statusbar.right, FALSE, FALSE, 2); - gtk_box_pack_start(gui->box, gui->viewport, TRUE, TRUE, 0); + gtk_box_pack_start(gui->box, gui->scroll, TRUE, TRUE, 0); gtk_box_pack_start(gui->box, gui->eventbox, FALSE, FALSE, 0); gtk_entry_set_has_frame(GTK_ENTRY(gui->inputbox), FALSE); gtk_box_pack_end(gui->box, gui->inputbox, FALSE, FALSE, 0); diff --git a/src/main.h b/src/main.h index 0a0ddd1..240204a 100644 --- a/src/main.h +++ b/src/main.h @@ -185,13 +185,14 @@ typedef struct { /* gui */ typedef struct { GtkWidget* window; + GtkWidget* scroll; WebKitWebView* webview; WebKitWebInspector* inspector; - GtkWidget* viewport; GtkBox* box; GtkWidget* eventbox; GtkWidget* inputbox; GtkWidget* compbox; + GtkWidget* pane; StatusBar statusbar; GtkScrollbar* sb_h; GtkScrollbar* sb_v; @@ -207,6 +208,7 @@ typedef struct { GdkNativeWindow embed; guint progress; StatusType status; + gboolean is_inspecting; } State; /* behaviour */