summaryrefslogtreecommitdiff
path: root/gtk/gtk_scaffolding.c
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2008-09-08 21:55:20 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2008-09-08 21:55:20 +0000
commitc6ac553d3d45bc390ccfdd0b41907d29818e4219 (patch)
treee799cdd46797cfc68bc568870b074ebe64319ae2 /gtk/gtk_scaffolding.c
parent402f53f0a5ff12c76c7737b42717742ab6dd1b51 (diff)
downloadnetsurf-c6ac553d3d45bc390ccfdd0b41907d29818e4219.tar.gz
netsurf-c6ac553d3d45bc390ccfdd0b41907d29818e4219.tar.bz2
Enable dumping of DOM tree
svn path=/trunk/netsurf/; revision=5289
Diffstat (limited to 'gtk/gtk_scaffolding.c')
-rw-r--r--gtk/gtk_scaffolding.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/gtk/gtk_scaffolding.c b/gtk/gtk_scaffolding.c
index 69b0c4f9a..7f988c4a9 100644
--- a/gtk/gtk_scaffolding.c
+++ b/gtk/gtk_scaffolding.c
@@ -23,6 +23,7 @@
#include <string.h>
#include <gtk/gtk.h>
#include <glade/glade.h>
+#include <libxml/debugXML.h>
#include "content/content.h"
#include "desktop/browser.h"
#include "desktop/history_core.h"
@@ -176,6 +177,7 @@ MENUPROTO(downloads);
MENUPROTO(save_window_size);
MENUPROTO(toggle_debug_rendering);
MENUPROTO(save_box_tree);
+MENUPROTO(save_dom_tree);
/* navigate menu */
MENUPROTO(back);
@@ -228,6 +230,7 @@ static struct menu_events menu_events[] = {
MENUEVENT(save_window_size),
MENUEVENT(toggle_debug_rendering),
MENUEVENT(save_box_tree),
+ MENUEVENT(save_dom_tree),
/* navigate menu */
MENUEVENT(back),
@@ -868,6 +871,55 @@ MENUHANDLER(save_box_tree)
gtk_widget_destroy(save_dialog);
}
+MENUHANDLER(save_dom_tree)
+{
+ GtkWidget *save_dialog;
+ struct gtk_scaffolding *gw = (struct gtk_scaffolding *)g;
+
+ save_dialog = gtk_file_chooser_dialog_new("Save File", gw->window,
+ GTK_FILE_CHOOSER_ACTION_SAVE,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
+ NULL);
+
+ gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(save_dialog),
+ getenv("HOME") ? getenv("HOME") : "/");
+
+ gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(save_dialog),
+ "domtree.txt");
+
+ if (gtk_dialog_run(GTK_DIALOG(save_dialog)) == GTK_RESPONSE_ACCEPT) {
+ char *filename = gtk_file_chooser_get_filename(
+ GTK_FILE_CHOOSER(save_dialog));
+ FILE *fh;
+ LOG(("Saving dom tree to %s...\n", filename));
+
+ fh = fopen(filename, "w");
+ if (fh == NULL) {
+ warn_user("Error saving box tree dump.",
+ "Unable to open file for writing.");
+ } else {
+ struct browser_window *bw;
+ bw = nsgtk_get_browser_window(gw->top_level);
+
+ if (bw->current_content &&
+ bw->current_content->type ==
+ CONTENT_HTML) {
+ xmlDebugDumpDocument(fh,
+ bw->current_content->
+ data.html.document);
+ }
+
+ fclose(fh);
+ }
+
+ g_free(filename);
+ }
+
+ gtk_widget_destroy(save_dialog);
+}
+
+
MENUHANDLER(stop)
{
return nsgtk_window_stop_button_clicked(GTK_WIDGET(widget), g);