[epiphany] ephy-embed: don't use g_signal_connect_object



commit 11411217fe5f2653994cfd94a3daf315ed1199e6
Author: Diego Escalante Urrelo <descalante igalia com>
Date:   Tue Feb 16 23:30:46 2010 -0500

    ephy-embed: don't use g_signal_connect_object
    
    It doesn't do what we expect it to do to keep the download object alive, a
    simple g_signal_connect does the right thing instead.
    This fixes the downloads not moving to final destination problem.
    
    Bug #609263

 embed/ephy-embed.c |   38 ++++++++++++++++++++++++--------------
 1 files changed, 24 insertions(+), 14 deletions(-)
---
diff --git a/embed/ephy-embed.c b/embed/ephy-embed.c
index c7e6ae5..7d2af54 100644
--- a/embed/ephy-embed.c
+++ b/embed/ephy-embed.c
@@ -561,6 +561,8 @@ define_destination_uri (WebKitDownload *download,
 
   destination_uri = g_strconcat ("file://", destination_filename, NULL);
 
+  LOG ("define_destination_uri: Downloading to %s", destination_filename);
+
   webkit_download_set_destination_uri (download, destination_uri);
 
   g_free (tmp_dir);
@@ -779,7 +781,7 @@ confirm_action_from_mime (WebKitWebView *web_view,
 static void
 download_status_changed_cb (GObject *object,
                             GParamSpec *pspec,
-                            WebKitWebView *web_view)
+                            EphyEmbed *embed)
 {
   WebKitDownload *download = WEBKIT_DOWNLOAD (object);
 
@@ -794,9 +796,11 @@ download_status_changed_cb (GObject *object,
     destination_uri = g_object_get_data (G_OBJECT (download),
                                          "user-destination-uri");
 
+    LOG ("download_status_changed_cb: finished, moving temp file %s to %s",
+         temp_uri, destination_uri);
+
     /* No user-destination-uri is set, hence this is an auto download and we
-     * have nothing else to do.
-     */
+     * have nothing else to do. */
     if (destination_uri == NULL) return;
 
     temp = g_file_new_for_uri (temp_uri);
@@ -826,8 +830,11 @@ download_status_changed_cb (GObject *object,
       return;
     }
 
-    g_object_ref (download); /* balanced in confirm_action_response_cb */
-    confirm_action_from_mime (web_view, download, DOWNLOAD_ACTION_DOWNLOAD);
+    /* Balanced in confirm_action_response_cb. */
+    g_object_ref (download);
+
+    confirm_action_from_mime (EPHY_GET_WEBKIT_WEB_VIEW_FROM_EMBED (embed),
+                              download, DOWNLOAD_ACTION_DOWNLOAD);
   }
 }
 
@@ -836,15 +843,18 @@ download_error_cb (WebKitDownload *download,
                    gint error_code,
                    gint error_detail,
                    const gchar *reason,
-                   WebKitWebView *view)
+                   EphyEmbed *embed)
 {
-  /* FIXME: handle download errors and notify the user */
+  /* FIXME: handle download errors and notify the user. */
+  LOG ("download_error_cb: Error (%d:%d): %s", error_code, error_detail, reason);
+
   return FALSE;
 }
 
 static gboolean
 download_requested_cb (WebKitWebView *web_view,
-                       WebKitDownload *download)
+                       WebKitDownload *download,
+                       EphyEmbed *embed)
 {
   /* Is download locked down? */
   if (eel_gconf_get_boolean (CONF_LOCKDOWN_DISABLE_SAVE_TO_DISK))
@@ -852,12 +862,12 @@ download_requested_cb (WebKitWebView *web_view,
 
   /* Wait for the request to be sent in all cases, so that we have a
    * response which may contain a suggested filename */
-  g_signal_connect_object (download, "notify::status",
-                           G_CALLBACK (download_status_changed_cb),
-                           web_view, 0);
-  g_signal_connect_object (download, "error",
-                           G_CALLBACK (download_error_cb),
-                           web_view, 0);
+  g_signal_connect (download, "notify::status",
+                    G_CALLBACK (download_status_changed_cb),
+                    embed);
+  g_signal_connect (download, "error",
+                    G_CALLBACK (download_error_cb),
+                    embed);
 
   /* If we are not performing an auto-download, we will ask the user
    * where they want the file to go to; we will start downloading to a



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]