diff options
Diffstat (limited to 'embed')
-rw-r--r-- | embed/downloader-view.c | 46 | ||||
-rw-r--r-- | embed/ephy-embed-popup-control.c | 3 | ||||
-rw-r--r-- | embed/mozilla/EphyHeaderSniffer.cpp | 43 |
3 files changed, 80 insertions, 12 deletions
diff --git a/embed/downloader-view.c b/embed/downloader-view.c index e557422ca..d67577989 100644 --- a/embed/downloader-view.c +++ b/embed/downloader-view.c @@ -438,24 +438,58 @@ downloader_view_remove_download (DownloaderView *dv, EphyDownload *download) { GtkTreeRowReference *row_ref; GtkTreePath *path = NULL; - GtkTreeIter iter; + GtkTreeIter iter, iter2; row_ref = get_row_from_download (dv, download); g_return_if_fail (row_ref); + /* Get the row we'll select after removal ("smart" selection) */ + path = gtk_tree_row_reference_get_path (row_ref); gtk_tree_model_get_iter (GTK_TREE_MODEL (dv->priv->model), &iter, path); + gtk_tree_path_free (path); - gtk_list_store_remove (GTK_LIST_STORE (dv->priv->model), &iter); - - /* FIXME: smart selection */ + row_ref = NULL; + iter2 = iter; + if (gtk_tree_model_iter_next (GTK_TREE_MODEL (dv->priv->model), &iter)) + { + path = gtk_tree_model_get_path (GTK_TREE_MODEL (dv->priv->model), &iter); + row_ref = gtk_tree_row_reference_new (GTK_TREE_MODEL (dv->priv->model), path); + } + else + { + path = gtk_tree_model_get_path (GTK_TREE_MODEL (dv->priv->model), &iter2); + if (gtk_tree_path_prev (path)) + { + row_ref = gtk_tree_row_reference_new (GTK_TREE_MODEL (dv->priv->model), + path); + } + } + gtk_tree_path_free (path); + /* Removal */ + + gtk_list_store_remove (GTK_LIST_STORE (dv->priv->model), &iter2); g_hash_table_remove (dv->priv->downloads_hash, download); - gtk_tree_path_free (path); - + /* Actual selection */ + + if (row_ref != NULL) + { + path = gtk_tree_row_reference_get_path (row_ref); + if (path != NULL) + { + gtk_tree_view_set_cursor (GTK_TREE_VIEW (dv->priv->treeview), + path, NULL, FALSE); + gtk_tree_path_free (path); + } + gtk_tree_row_reference_free (row_ref); + } + + /* Close the dialog if there are no more downloads */ + if (!g_hash_table_size (dv->priv->downloads_hash)) g_object_unref (G_OBJECT (dv)); } diff --git a/embed/ephy-embed-popup-control.c b/embed/ephy-embed-popup-control.c index 5cda121e1..650534d86 100644 --- a/embed/ephy-embed-popup-control.c +++ b/embed/ephy-embed-popup-control.c @@ -544,8 +544,7 @@ embed_popup_download_link_cmd (BonoboUIComponent *uic, { save_property_url (popup, _("Download Link"), - eel_gconf_get_boolean - (CONF_ASK_DOWNLOAD_DEST), + FALSE, "link"); } diff --git a/embed/mozilla/EphyHeaderSniffer.cpp b/embed/mozilla/EphyHeaderSniffer.cpp index fb185a0c7..939394bd1 100644 --- a/embed/mozilla/EphyHeaderSniffer.cpp +++ b/embed/mozilla/EphyHeaderSniffer.cpp @@ -67,6 +67,7 @@ #include "nsIDownload.h" #include <bonobo/bonobo-i18n.h> +#include <libgnomevfs/gnome-vfs-utils.h> EphyHeaderSniffer::EphyHeaderSniffer (nsIWebBrowserPersist* aPersist, MozillaEmbedPersist *aEmbedPersist, nsIFile* aFile, nsIURI* aURL, nsIDOMDocument* aDocument, nsIInputStream* aPostData) @@ -203,6 +204,7 @@ filechooser_response_cb (EphyFileChooser *dialog, gint response, EphyHeaderSniff nsresult EphyHeaderSniffer::PerformSave (nsIURI* inOriginalURI) { nsresult rv; + char *path, *download_dir; EmbedPersistFlags flags; PRBool askDownloadDest; @@ -302,13 +304,46 @@ nsresult EphyHeaderSniffer::PerformSave (nsIURI* inOriginalURI) return NS_OK; } - /* FIXME ask user if overwriting ? */ /* FIXME: how to inform user of failed save ? */ - nsCOMPtr<nsILocalFile> destFile; - rv = NS_NewLocalFile(defaultFileName, PR_TRUE, getter_AddRefs(destFile)); - if (NS_FAILED(rv) || !destFile) return NS_ERROR_FAILURE; + + download_dir = eel_gconf_get_string (CONF_STATE_DOWNLOADING_DIR); + if (!download_dir) + { + /* Emergency download destination */ + download_dir = g_strdup (g_get_home_dir ()); + } + + if (!strcmp (download_dir, "Desktop")) + { + if (eel_gconf_get_boolean (CONF_DESKTOP_IS_HOME_DIR)) + { + path = g_build_filename + (g_get_home_dir (), + NS_ConvertUCS2toUTF8 (defaultFileName).get(), + NULL); + } + else + { + path = g_build_filename + (g_get_home_dir (), "Desktop", + NS_ConvertUCS2toUTF8 (defaultFileName).get(), + NULL); + } + } + else + { + path = g_build_filename + (gnome_vfs_expand_initial_tilde (download_dir), + NS_ConvertUCS2toUTF8 (defaultFileName).get(), + NULL); + } + g_free (download_dir); + + nsCOMPtr<nsILocalFile> destFile = do_CreateInstance (NS_LOCAL_FILE_CONTRACTID); + destFile->InitWithNativePath (nsDependentCString (path)); + g_free (path); return InitiateDownload (destFile); } |