[Xfce4-commits] <midori:master> Fallback for missing filename in midori_browser_save_uri

Christian Dywan noreply at xfce.org
Tue May 22 00:04:03 CEST 2012


Updating branch refs/heads/master
         to 94f729f6b3eb5871f5da1909d1b8bbf94a52c940 (commit)
       from 7a172fff27319df51bb99337f90ced75fa419e9c (commit)

commit 94f729f6b3eb5871f5da1909d1b8bbf94a52c940
Author: Christian Dywan <christian at twotoasts.de>
Date:   Tue May 22 00:00:57 2012 +0200

    Fallback for missing filename in midori_browser_save_uri
    
    If there's only a path, eg. pastebin services do this, take
    the URI as a fallback and add an extension if it makes sense.

 midori/midori-browser.c |   23 ++++++++++++++++++++---
 midori/midori-view.c    |    4 +++-
 midori/midori-view.h    |    4 ++++
 3 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/midori/midori-browser.c b/midori/midori-browser.c
index de250d4..d1ae4e8 100644
--- a/midori/midori-browser.c
+++ b/midori/midori-browser.c
@@ -1017,7 +1017,6 @@ midori_browser_save_uri (MidoriBrowser* browser,
     gboolean folder_set = FALSE;
     GtkWidget* dialog;
     gchar* filename;
-    gchar* dirname;
     gchar* last_slash;
 
     if (!gtk_widget_get_visible (GTK_WIDGET (browser)))
@@ -1029,6 +1028,8 @@ midori_browser_save_uri (MidoriBrowser* browser,
 
     if (uri)
     {
+        gchar* dirname;
+
         /* Base the start folder on the current view's uri if it is local */
         filename = g_filename_from_uri (uri, NULL, NULL);
         if (filename)
@@ -1043,13 +1044,29 @@ midori_browser_save_uri (MidoriBrowser* browser,
             g_free (dirname);
             g_free (filename);
         }
+    }
+
+    if (uri == NULL)
+        uri = midori_view_get_display_uri (view);
 
         /* Try to provide a good default filename, UTF-8 encoded */
         filename = soup_uri_decode (uri);
         last_slash = g_strrstr (filename, "/") + 1;
-        gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), last_slash);
+        /* Take the rest of the URI if needed */
+        if (*last_slash == '\0')
+        {
+            const gchar* extension = midori_view_fallback_extension (view, NULL);
+            gchar* guessed;
+            gchar* no_scheme;
+            last_slash = g_strdelimit (filename, "/\\<>:\"|?*", '-');
+            guessed = g_strconcat (filename, extension, NULL);
+            no_scheme = strstr (guessed, "---") + 3;
+            gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), no_scheme);
+            g_free (guessed);
+        }
+        else
+            gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), last_slash);
         g_free (filename);
-    }
 
     if (!folder_set && last_dir && *last_dir)
         gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), last_dir);
diff --git a/midori/midori-view.c b/midori/midori-view.c
index 4db44ba..b6fe7ff 100644
--- a/midori/midori-view.c
+++ b/midori/midori-view.c
@@ -5318,7 +5318,7 @@ midori_view_get_uri_extension (const gchar* uri)
     return g_strdup (period);
 }
 
-static const gchar*
+const gchar*
 midori_view_fallback_extension (MidoriView* view,
                                 const gchar* extension)
 {
@@ -5332,6 +5332,8 @@ midori_view_fallback_extension (MidoriView* view,
         return ".js";
     if (strstr (view->mime_type, "html"))
         return ".htm";
+    if (strstr (view->mime_type, "plain"))
+        return ".txt";
     return "";
 }
 
diff --git a/midori/midori-view.h b/midori/midori-view.h
index feba052..7c943d8 100644
--- a/midori/midori-view.h
+++ b/midori/midori-view.h
@@ -272,6 +272,10 @@ void
 midori_view_save_speed_dial_config     (MidoriView*        view,
                                         GKeyFile*          key_file);
 
+const gchar*
+midori_view_fallback_extension         (MidoriView*        view,
+                                        const gchar*       extension);
+
 G_END_DECLS
 
 #endif /* __MIDORI_VIEW_H__ */


More information about the Xfce4-commits mailing list