diff options
Diffstat (limited to 'gtk/gtk_scaffolding.c')
-rw-r--r-- | gtk/gtk_scaffolding.c | 52 |
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); |