summaryrefslogtreecommitdiffstats
path: root/src/tab-page.c
diff options
context:
space:
mode:
authorPatrick McDermott <pj@pehjota.net>2017-10-28 15:14:14 (EDT)
committer Patrick McDermott <pj@pehjota.net>2017-10-28 15:14:14 (EDT)
commit447ad98001a15dcade36b1c3e87b9f9302cae9df (patch)
treede61d1aab921a746111afa47980ac94e8153b01e /src/tab-page.c
parente83d832f3106c0cfdd5bbcff84baecc0395731ae (diff)
downloadmarquee-447ad98001a15dcade36b1c3e87b9f9302cae9df.zip
marquee-447ad98001a15dcade36b1c3e87b9f9302cae9df.tar.gz
marquee-447ad98001a15dcade36b1c3e87b9f9302cae9df.tar.bz2
mq_tab_page_save(): New function
Diffstat (limited to 'src/tab-page.c')
-rw-r--r--src/tab-page.c51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/tab-page.c b/src/tab-page.c
index b1bdc77..9d32c31 100644
--- a/src/tab-page.c
+++ b/src/tab-page.c
@@ -305,6 +305,57 @@ mq_tab_page_open(MqTabPage *tab_page)
gtk_widget_show_all(dialog);
}
+static void
+save_async_cb(WebKitWebView *web_view, GAsyncResult *result)
+{
+ webkit_web_view_save_to_file_finish(web_view, result, NULL);
+}
+
+static void
+save_response_cb(GtkWidget *dialog, gint response_id, MqTabPage *tab_page)
+{
+ gchar *filename;
+ GFile *file;
+
+ if (response_id == GTK_RESPONSE_ACCEPT) {
+ filename = gtk_file_chooser_get_filename(
+ GTK_FILE_CHOOSER(dialog));
+ file = g_file_new_for_path(filename);
+ g_free(filename);
+ /* TODO: HTML-only file format? */
+ webkit_web_view_save_to_file(tab_page->web_view, file,
+ WEBKIT_SAVE_MODE_MHTML, NULL,
+ (GAsyncReadyCallback) save_async_cb, NULL);
+ }
+
+ gtk_widget_destroy(dialog);
+}
+
+void
+mq_tab_page_save(MqTabPage *tab_page)
+{
+ GtkWidget *dialog;
+ GtkFileChooser *chooser;
+ gchar *filename;
+
+ dialog = gtk_file_chooser_dialog_new("Save File",
+ GTK_WINDOW(tab_page->window),
+ GTK_FILE_CHOOSER_ACTION_SAVE,
+ "_Cancel", GTK_RESPONSE_CANCEL,
+ "_Save", GTK_RESPONSE_ACCEPT,
+ NULL);
+ chooser = GTK_FILE_CHOOSER(dialog);
+ gtk_file_chooser_set_do_overwrite_confirmation(chooser, TRUE);
+ /* TODO: gtk_file_chooser_set_current_folder() */
+ /* TODO: Clean up title for file name. */
+ filename = g_strconcat(tab_page->title, ".mhtml", NULL);
+ gtk_file_chooser_set_current_name(chooser, filename);
+ g_free(filename);
+ g_signal_connect(dialog, "response",
+ G_CALLBACK(save_response_cb), tab_page);
+ gtk_widget_show_all(dialog);
+}
+
void
mq_tab_page_scroll_tab_labels(MqTabPage *node)
{