#include <webkit2/webkit2.h>
-#include "downloads.h"
+#include "chorizo.h"
gboolean download_handle(WebKitDownload *, gchar *, gpointer);
void download_click(GtkToolButton *, gpointer);
gint downloads = 0;
-struct DownloadItem {
- GtkToolButton *tb;
- WebKitDownload *download;
-};
gboolean
key_downloadmanager(GtkWidget *widget, GdkEvent *event, gpointer data)
{
GtkToolItem *tb;
GtkWidget *chooser = gtk_file_chooser_dialog_new(
- "Choose download location", GTK_WINDOW(dm.win),
- GTK_FILE_CHOOSER_ACTION_SAVE, "Save file", GTK_RESPONSE_ACCEPT,
- "Cancel", GTK_RESPONSE_CANCEL, NULL);
+ "Save File", GTK_WINDOW(dm.win), GTK_FILE_CHOOSER_ACTION_SAVE,
+ "Cancel", GTK_RESPONSE_CANCEL, "Save", GTK_RESPONSE_ACCEPT,
+ NULL);
gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(chooser),
(char *)data);
gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(chooser),
gtk_file_chooser_set_do_overwrite_confirmation(
GTK_FILE_CHOOSER(chooser), TRUE);
gint res = gtk_dialog_run(GTK_DIALOG(chooser));
- switch (res) {
- case GTK_RESPONSE_ACCEPT:
+
+ if (res != GTK_RESPONSE_ACCEPT) {
+ gtk_widget_destroy(chooser);
+ } else {
uri = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(chooser));
- webkit_download_set_destination(
- download,
- gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(chooser)));
- break;
- case GTK_RESPONSE_CANCEL:
- return FALSE;
- default:
- return FALSE;
+ webkit_download_set_destination(download, uri);
+
+ remove(uri + 7); // Remove before overwrite
+
+ gtk_widget_destroy(chooser);
+
+ tb = gtk_tool_button_new(NULL, NULL);
+ gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tb),
+ "network-receive");
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(tb), uri);
+ gtk_toolbar_insert(GTK_TOOLBAR(dm.toolbar), tb, 0);
+ gtk_widget_show_all(dm.win);
+
+ g_signal_connect(G_OBJECT(download),
+ "notify::estimated-progress",
+ G_CALLBACK(changed_download_progress), tb);
+
+ downloads++;
+ g_signal_connect(G_OBJECT(download), "finished",
+ G_CALLBACK(download_finished), tb);
+
+ g_object_ref(download);
+
+ struct DownloadItem *payload = malloc(sizeof(*payload));
+ payload->tb = (GtkToolButton *)tb;
+ payload->download = download;
+ g_signal_connect(G_OBJECT(tb), "clicked",
+ G_CALLBACK(download_click), payload);
+ g_signal_connect(G_OBJECT(payload->download), "failed",
+ G_CALLBACK(download_cancel), payload);
+ g_signal_connect(G_OBJECT(tb), "destroy_event",
+ G_CALLBACK(g_free), payload);
}
-
- gtk_widget_destroy(chooser);
-
- remove(uri + 7);
- tb = gtk_tool_button_new(NULL, NULL);
- gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tb), "network-receive");
- gtk_tool_button_set_label(GTK_TOOL_BUTTON(tb), uri);
- gtk_toolbar_insert(GTK_TOOLBAR(dm.toolbar), tb, 0);
- gtk_widget_show_all(dm.win);
-
- g_signal_connect(G_OBJECT(download), "notify::estimated-progress",
- G_CALLBACK(changed_download_progress), tb);
-
- downloads++;
- g_signal_connect(G_OBJECT(download), "finished",
- G_CALLBACK(download_finished), tb);
-
- g_object_ref(download);
-
- struct DownloadItem *payload = malloc(sizeof(*payload));
- payload->tb = (GtkToolButton *)tb;
- payload->download = download;
- g_signal_connect(G_OBJECT(tb), "clicked", G_CALLBACK(download_click),
- payload);
- g_signal_connect(G_OBJECT(tb), "failed", G_CALLBACK(download_cancel),
- payload);
- g_signal_connect(G_OBJECT(tb), "destroy_event", G_CALLBACK(g_free),
- payload);
-
- //Propagate-- to whom it may concern.
return FALSE;
}
webkit_download_cancel(payload->download);
}
+const char *
+download_get_path(struct DownloadItem *payload)
+{
+ const char *path = webkit_download_get_destination(payload->download);
+ return path += 7;
+}
+
void
-download_remove(GtkMenuItem *tb, gpointer data)
+download_hide(GtkMenuItem *tb, gpointer data)
{
struct DownloadItem *payload = data;
g_object_unref(payload->download);
gtk_widget_destroy(GTK_WIDGET(payload->tb));
}
+void
+download_delete(GtkMenuItem *tb, gpointer data)
+{
+ remove(download_get_path((struct DownloadItem *)data));
+ download_hide(tb, data);
+}
+
void
download_copy_url(GtkMenuItem *tb, gpointer data)
{
void
download_copy_path(GtkMenuItem *tb, gpointer data)
{
- struct DownloadItem *payload = data;
- const gchar *path = webkit_download_get_destination(payload->download);
- gtk_clipboard_set_text(gtk_clipboard_get(GDK_SELECTION_CLIPBOARD),
- path + 7, strlen(path) - 7);
- //Offset by 7 to remove "file://"
+ const char *path = download_get_path((struct DownloadItem *)data);
+ gtk_clipboard_set_text(gtk_clipboard_get(GDK_SELECTION_CLIPBOARD), path,
+ strlen(path));
}
void
gtk_widget_show(option);
gtk_menu_shell_append(GTK_MENU_SHELL(pmenu), option);
} else {
- option = gtk_menu_item_new_with_label("Remove download");
+ option =
+ gtk_menu_item_new_with_label("Hide download from list");
+ g_signal_connect(G_OBJECT(option), "activate",
+ G_CALLBACK(download_hide), data);
+ gtk_widget_show(option);
+ gtk_menu_shell_append(GTK_MENU_SHELL(pmenu), option);
+
+ option = gtk_menu_item_new_with_label("Delete downloaded file");
g_signal_connect(G_OBJECT(option), "activate",
- G_CALLBACK(download_remove), data);
+ G_CALLBACK(download_delete), data);
gtk_widget_show(option);
gtk_menu_shell_append(GTK_MENU_SHELL(pmenu), option);
gboolean
downloadmanager_delete(GtkWidget *obj, gpointer data)
{
- if (!quit_if_nothing_active())
- gtk_widget_hide(dm.win);
+ if (!quit_if_nothing_active()) gtk_widget_hide(dm.win);
return TRUE;
}