Summary Files Commits Branches @commit @diff @stats
path: root / badwolf.c
diff options
context:
space:
mode:
1 files changed, 33 insertions, 39 deletions
-rw-r--r--badwolf.c72
diff --git a/badwolf.c b/badwolf.c
index 75296e4..147658f 100644
--- a/badwolf.c
+++ b/badwolf.c
@@ -5,6 +5,7 @@
#include "badwolf.h"
#include "config.h"
+#include "downloads.h"
#include "keybindings.h"
#include "uri.h"
@@ -50,9 +51,6 @@ static gboolean WebViewCb_decide_policy(WebKitWebView *web_view,
static void web_contextCb_download_started(WebKitWebContext *web_context,
WebKitDownload *download,
gpointer user_data);
-static gboolean downloadCb_decide_destination(WebKitDownload *download,
- gchar *suggested_filename,
- gpointer user_data);
static gboolean locationCb_activate(GtkEntry *location, gpointer user_data);
static gboolean javascriptCb_toggled(GtkButton *javascript, gpointer user_data);
static gboolean SearchEntryCb_next__match(GtkSearchEntry *search, gpointer user_data);
@@ -408,44 +406,34 @@ WebViewCb_load_failed_with_tls_errors(WebKitWebView *web_view,
static void
web_contextCb_download_started(WebKitWebContext *web_context,
- WebKitDownload *download,
+ WebKitDownload *webkit_download,
gpointer user_data)
{
(void)web_context;
+ struct Client *browser = (struct Client *)user_data;
+ struct Download *download = malloc(sizeof(struct Client));
- g_signal_connect(G_OBJECT(download),
- "decide-destination",
- G_CALLBACK(downloadCb_decide_destination),
- user_data);
-}
-
-static gboolean
-downloadCb_decide_destination(WebKitDownload *download,
- gchar *suggested_filename,
- gpointer user_data)
-{
- struct Client *browser = (struct Client *)user_data;
- gint chooser_response;
- GtkWindow *parent_window = GTK_WINDOW(browser->window->main_window);
-
- GtkFileChooserNative *file_dialog =
- gtk_file_chooser_native_new(NULL, parent_window, GTK_FILE_CHOOSER_ACTION_SAVE, NULL, NULL);
- GtkFileChooser *file_chooser = GTK_FILE_CHOOSER(file_dialog);
-
- gtk_file_chooser_set_current_name(file_chooser, suggested_filename);
- gtk_file_chooser_set_do_overwrite_confirmation(file_chooser, TRUE);
- webkit_download_set_allow_overwrite(download, TRUE);
+ if(download != NULL)
+ {
+ download->window = browser->window;
- chooser_response = gtk_native_dialog_run(GTK_NATIVE_DIALOG(file_dialog));
+ download_new_entry(webkit_download, download);
- if(chooser_response == GTK_RESPONSE_ACCEPT)
- webkit_download_set_destination(download, gtk_file_chooser_get_uri(file_chooser));
- else
- webkit_download_cancel(download);
-
- g_object_unref(file_dialog);
+ g_signal_connect(
+ G_OBJECT(webkit_download), "received-data", G_CALLBACK(downloadCb_received_data), download);
+ g_signal_connect(G_OBJECT(webkit_download),
+ "created-destination",
+ G_CALLBACK(downloadCb_created_destination),
+ download);
+ g_signal_connect(G_OBJECT(webkit_download), "failed", G_CALLBACK(downloadCb_failed), download);
+ g_signal_connect(
+ G_OBJECT(webkit_download), "finished", G_CALLBACK(downloadCb_finished), download);
+ }
- return FALSE; /* Let it propagate */
+ g_signal_connect(G_OBJECT(webkit_download),
+ "decide-destination",
+ G_CALLBACK(downloadCb_decide_destination),
+ user_data);
}
static gboolean
@@ -786,6 +774,7 @@ main(int argc, char *argv[])
window->main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
window->notebook = gtk_notebook_new();
window->new_tab = gtk_button_new_from_icon_name("tab-new-symbolic", GTK_ICON_SIZE_SMALL_TOOLBAR);
+ window->downloads_tab = badwolf_downloads_tab_new();
gtk_window_set_default_size(
GTK_WINDOW(window->main_window), BADWOLF_DEFAULT_WIDTH, BADWOLF_DEFAULT_HEIGHT);
@@ -824,12 +813,9 @@ main(int argc, char *argv[])
gtk_notebook_popup_enable(GTK_NOTEBOOK(window->notebook));
gtk_container_add(GTK_CONTAINER(window->main_window), window->notebook);
+ gtk_widget_queue_draw(window->notebook);
- if(argc == 1)
- badwolf_new_tab(GTK_NOTEBOOK(window->notebook), new_browser(window, NULL, NULL));
- else
- for(int i = 1; i < argc; ++i)
- badwolf_new_tab(GTK_NOTEBOOK(window->notebook), new_browser(window, argv[i], NULL));
+ badwolf_downloads_tab_attach(window);
g_signal_connect(
window->main_window, "key-press-event", G_CALLBACK(main_windowCb_key_press_event), window);
@@ -841,6 +827,14 @@ main(int argc, char *argv[])
gtk_widget_show(window->new_tab);
gtk_widget_show_all(window->main_window);
+ if(argc == 1)
+ badwolf_new_tab(GTK_NOTEBOOK(window->notebook), new_browser(window, NULL, NULL));
+ else
+ for(int i = 1; i < argc; ++i)
+ badwolf_new_tab(GTK_NOTEBOOK(window->notebook), new_browser(window, argv[i], NULL));
+
+ gtk_notebook_set_current_page(GTK_NOTEBOOK(window->notebook), 1);
+
gtk_main();
#if 0