[Xfce4-commits] <midori:master> Refactor webkit_web_view_download_requested_cb
Christian Dywan
noreply at xfce.org
Mon Apr 16 20:02:07 CEST 2012
Updating branch refs/heads/master
to 0b8a080695ea839352f7a040d6caf65a10af4909 (commit)
from 6cbf8031bfbec67437040d42ac9d2befbd438a57 (commit)
commit 0b8a080695ea839352f7a040d6caf65a10af4909
Author: Martin Natano <natano at natano.net>
Date: Mon Apr 16 19:46:26 2012 +0200
Refactor webkit_web_view_download_requested_cb
See: https://bugs.launchpad.net/midori/+bug/973646
midori/midori-browser.c | 12 ++++-
midori/midori-view.c | 112 +++++++++++++++++++++++-----------------------
2 files changed, 66 insertions(+), 58 deletions(-)
diff --git a/midori/midori-browser.c b/midori/midori-browser.c
index 6d052f6..a409663 100644
--- a/midori/midori-browser.c
+++ b/midori/midori-browser.c
@@ -1458,7 +1458,15 @@ midori_view_download_requested_cb (GtkWidget* view,
WebKitDownload* download,
MidoriBrowser* browser)
{
- if (g_object_get_data (G_OBJECT (download), "open-in-viewer"))
+ gboolean handled;
+
+ g_return_val_if_fail (MIDORI_IS_VIEW (view), FALSE);
+ handled = TRUE;
+ if (g_object_get_data (G_OBJECT (download), "cancel-download"))
+ {
+ handled = FALSE;
+ }
+ else if (g_object_get_data (G_OBJECT (download), "open-in-viewer"))
{
gchar* destination_uri =
midori_browser_download_prepare_destination_uri (download, NULL);
@@ -1506,7 +1514,7 @@ midori_view_download_requested_cb (GtkWidget* view,
g_free (destination_uri);
}
}
- return TRUE;
+ return handled;
}
static void
diff --git a/midori/midori-view.c b/midori/midori-view.c
index c19ee02..2d848e3 100644
--- a/midori/midori-view.c
+++ b/midori/midori-view.c
@@ -200,6 +200,13 @@ enum {
LAST_SIGNAL
};
+enum {
+ DOWNLOAD_SAVE = 1,
+ DOWNLOAD_SAVE_AS,
+ DOWNLOAD_CANCEL,
+ DOWNLOAD_OPEN,
+};
+
static guint signals[LAST_SIGNAL];
static gchar* speeddial_markup = NULL;
@@ -2843,27 +2850,6 @@ webkit_web_view_mime_type_decision_cb (GtkWidget* web_view,
WebKitWebPolicyDecision* decision,
MidoriView* view)
{
- GtkWidget* dialog;
- gchar* content_type;
- gchar* description;
- gchar* file_type;
- gchar* name;
- gchar* file_name;
- WebKitDownload *download;
- WebKitWebDataSource* datasource;
- WebKitNetworkRequest* original_request;
- const gchar* original_uri;
- gchar* fingerprint;
- gchar* fplabel;
- #if GTK_CHECK_VERSION (2, 14, 0)
- GIcon* icon;
- GtkWidget* image;
- #endif
- gchar* title;
- GdkScreen* screen;
- GtkIconTheme* icon_theme;
- gint response;
-
if (webkit_web_view_can_show_mime_type (WEBKIT_WEB_VIEW (web_view), mime_type))
{
gboolean view_source = FALSE;
@@ -2883,10 +2869,45 @@ webkit_web_view_mime_type_decision_cb (GtkWidget* web_view,
return FALSE;
}
+ g_object_set_data(G_OBJECT (view), "download-mime-type", (gpointer)mime_type);
+ webkit_web_policy_decision_download (decision);
+ g_object_set_data(G_OBJECT (view), "download-mime-type", NULL);
+ return TRUE;
+}
+
+static gboolean
+webkit_web_view_download_requested_cb (GtkWidget* web_view,
+ WebKitDownload* download,
+ MidoriView* view)
+{
+ GtkWidget* dialog;
+ gchar* content_type;
+ gchar* description;
+ gchar* file_type;
+ gchar* name;
+ gchar* file_name;
+ WebKitWebFrame* web_frame;
+ const gchar* mime_type;
+ WebKitWebDataSource* datasource;
+ WebKitNetworkRequest* request;
+ WebKitNetworkRequest* original_request;
+ const gchar* original_uri;
+ gchar* fingerprint;
+ gchar* fplabel;
+ #if GTK_CHECK_VERSION (2, 14, 0)
+ GIcon* icon;
+ GtkWidget* image;
+ #endif
+ gchar* title;
+ GdkScreen* screen;
+ GtkIconTheme* icon_theme;
+ gint response;
+ gboolean handled;
dialog = gtk_message_dialog_new (
NULL, 0, GTK_MESSAGE_WARNING, GTK_BUTTONS_NONE,
_("Open or download file"));
+ mime_type = g_object_get_data(G_OBJECT (view), "download-mime-type");
content_type = g_content_type_from_mime_type (mime_type);
if (!content_type)
#ifdef G_OS_WIN32
@@ -2910,14 +2931,13 @@ webkit_web_view_mime_type_decision_cb (GtkWidget* web_view,
file_type = g_strdup_printf (_("File Type: %s ('%s')"), description, mime_type);
g_free (description);
- download = webkit_download_new (request);
name = sokoke_get_download_filename (download);
file_name = g_strdup_printf (_("File Name: %s"), name);
g_free (name);
- g_object_unref (download);
/* Link Fingerprint */
/* We look at the original URI because redirection would lose the fragment */
+ web_frame = webkit_web_view_get_main_frame (WEBKIT_WEB_VIEW (web_view));
datasource = webkit_web_frame_get_provisional_data_source (web_frame);
original_request = webkit_web_data_source_get_initial_request (datasource);
original_uri = webkit_network_request_get_uri (original_request);
@@ -2931,6 +2951,7 @@ webkit_web_view_mime_type_decision_cb (GtkWidget* web_view,
gtk_window_set_skip_taskbar_hint (GTK_WINDOW (dialog), FALSE);
/* i18n: A file open dialog title, ie. "Open http://fila.com/manual.tgz" */
+ request = webkit_download_get_network_request (download);
title = g_strdup_printf (_("Open %s"),
webkit_network_request_get_uri (request));
gtk_window_set_title (GTK_WINDOW (dialog), title);
@@ -2945,55 +2966,34 @@ webkit_web_view_mime_type_decision_cb (GtkWidget* web_view,
gtk_window_set_icon_name (GTK_WINDOW (dialog), GTK_STOCK_OPEN);
}
gtk_dialog_add_buttons (GTK_DIALOG (dialog),
- GTK_STOCK_SAVE, 1,
- GTK_STOCK_SAVE_AS, 4,
- GTK_STOCK_CANCEL, 2,
- GTK_STOCK_OPEN, 3,
+ GTK_STOCK_SAVE, DOWNLOAD_SAVE,
+ GTK_STOCK_SAVE_AS, DOWNLOAD_SAVE_AS,
+ GTK_STOCK_CANCEL, DOWNLOAD_CANCEL,
+ GTK_STOCK_OPEN, DOWNLOAD_OPEN,
NULL);
response = gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
- g_object_set_data (G_OBJECT (view), "open-download", (gpointer)0);
switch (response)
{
- case 4:
- g_object_set_data (G_OBJECT (view), "save-as-download", (gpointer)1);
- webkit_web_policy_decision_download (decision);
+ case DOWNLOAD_SAVE_AS:
+ g_object_set_data (G_OBJECT (download), "save-as-download", (gpointer)1);
break;
- case 3:
- g_object_set_data (G_OBJECT (view), "open-download", (gpointer)1);
- case 1:
- webkit_web_policy_decision_download (decision);
+ case DOWNLOAD_OPEN:
+ g_object_set_data (G_OBJECT (download), "open-download", (gpointer)1);
+ case DOWNLOAD_SAVE:
break;
- case 2:
+ case DOWNLOAD_CANCEL:
case GTK_RESPONSE_DELETE_EVENT:
- webkit_web_policy_decision_ignore (decision);
+ g_object_set_data (G_OBJECT (download), "cancel-download", (gpointer)1);
break;
default:
g_warn_if_reached ();
}
- return TRUE;
-}
-static gboolean
-webkit_web_view_download_requested_cb (GtkWidget* web_view,
- WebKitDownload* download,
- MidoriView* view)
-{
- gboolean handled;
/* Propagate original URI to make it available when the download finishes */
- WebKitWebFrame* web_frame = webkit_web_view_get_main_frame (WEBKIT_WEB_VIEW (web_view));
- WebKitWebDataSource* datasource = webkit_web_frame_get_provisional_data_source (web_frame);
- WebKitNetworkRequest* original_request = webkit_web_data_source_get_initial_request (datasource);
- const gchar* original_uri = webkit_network_request_get_uri (original_request);
- WebKitNetworkRequest* request = webkit_download_get_network_request (download);
g_object_set_data_full (G_OBJECT (request), "midori-original-uri",
g_strdup (original_uri), g_free);
- g_object_set_data (G_OBJECT (download), "open-download",
- g_object_get_data (G_OBJECT (view), "open-download"));
- g_object_set_data (G_OBJECT (download), "save-as-download",
- g_object_get_data (G_OBJECT (view), "save-as-download"));
- g_object_set_data (G_OBJECT (view), "open-download", (gpointer)0);
- g_object_set_data (G_OBJECT (view), "save-as-download", (gpointer)0);
+
g_signal_emit (view, signals[DOWNLOAD_REQUESTED], 0, download, &handled);
return handled;
}
More information about the Xfce4-commits
mailing list