[Goodies-commits] r7694 - xfburn/trunk/xfburn

David Mohr squisher at xfce.org
Wed Jul 8 16:18:32 CEST 2009


Author: squisher
Date: 2009-07-08 14:18:32 +0000 (Wed, 08 Jul 2009)
New Revision: 7694

Modified:
   xfburn/trunk/xfburn/xfburn-audio-composition.c
   xfburn/trunk/xfburn/xfburn-data-composition.c
   xfburn/trunk/xfburn/xfburn-directory-browser.c
   xfburn/trunk/xfburn/xfburn-fs-browser.c
Log:
Properly handle encoding of file names; work around poor gtk docs

Modified: xfburn/trunk/xfburn/xfburn-audio-composition.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-audio-composition.c	2009-07-08 13:14:25 UTC (rev 7693)
+++ xfburn/trunk/xfburn/xfburn-audio-composition.c	2009-07-08 14:18:32 UTC (rev 7694)
@@ -318,7 +318,7 @@
 
   GtkTargetEntry gte_src[] =  { { "XFBURN_TREE_PATHS", GTK_TARGET_SAME_WIDGET, AUDIO_COMPOSITION_DND_TARGET_INSIDE } };
   GtkTargetEntry gte_dest[] = { { "XFBURN_TREE_PATHS", GTK_TARGET_SAME_WIDGET, AUDIO_COMPOSITION_DND_TARGET_INSIDE },
-                                { "text/plain", 0, AUDIO_COMPOSITION_DND_TARGET_TEXT_PLAIN },
+                                { "text/plain;charset=utf-8", 0, AUDIO_COMPOSITION_DND_TARGET_TEXT_PLAIN },
                                 { "text/uri-list", 0, AUDIO_COMPOSITION_DND_TARGET_TEXT_URI_LIST },
                               };
 
@@ -1688,20 +1688,23 @@
     xfburn_default_cursor (priv->content);
   }
   /* drag from the file selector */
-  else if (sd->target == gdk_atom_intern ("text/plain", FALSE)) {
+  else if (sd->target == gdk_atom_intern ("text/plain;charset=utf-8", FALSE)) {
     ThreadAddFilesDragParams *params;
     const gchar *file = NULL;
     gboolean ret = FALSE;
+    gchar *full_paths;
 
     xfburn_adding_progress_show (XFBURN_ADDING_PROGRESS (priv->progress));
     
-    file = strtok ((gchar *) sd->data, "\n");
+    full_paths = (gchar *) gtk_selection_data_get_text (sd);
+
+    file = strtok ((gchar *) full_paths, "\n");
     while (file) {
       gchar *full_path;
 
       if (g_str_has_prefix (file, "file://"))
         full_path = g_build_filename (&file[7], NULL);
-      else if (g_str_has_prefix ((gchar *) sd->data, "file:"))
+      else if (g_str_has_prefix (file, "file:"))
         full_path = g_build_filename (&file[5], NULL);
       else
         full_path = g_build_filename (file, NULL);
@@ -1723,6 +1726,7 @@
 
       file = strtok (NULL, "\n");
     }
+    g_free (full_paths);
 
     /* paths actually get sent to us in reverse order,
      * so no reverse is necessary to add them in the same order as selected.

Modified: xfburn/trunk/xfburn/xfburn-data-composition.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-data-composition.c	2009-07-08 13:14:25 UTC (rev 7693)
+++ xfburn/trunk/xfburn/xfburn-data-composition.c	2009-07-08 14:18:32 UTC (rev 7694)
@@ -283,7 +283,7 @@
 
   GtkTargetEntry gte_src[] =  { { "XFBURN_TREE_PATHS", GTK_TARGET_SAME_WIDGET, DATA_COMPOSITION_DND_TARGET_INSIDE } };
   GtkTargetEntry gte_dest[] = { { "XFBURN_TREE_PATHS", GTK_TARGET_SAME_WIDGET, DATA_COMPOSITION_DND_TARGET_INSIDE },
-                                { "text/plain", 0, DATA_COMPOSITION_DND_TARGET_TEXT_PLAIN },
+                                { "text/plain;charset=utf-8", 0, DATA_COMPOSITION_DND_TARGET_TEXT_PLAIN },
 #ifdef HAVE_THUNAR_VFS
                                 { "text/uri-list", 0, DATA_COMPOSITION_DND_TARGET_TEXT_URI_LIST },
 #endif
@@ -1604,19 +1604,22 @@
     xfburn_default_cursor (priv->content);
   }
   /* drag from the file selector */
-  else if (sd->target == gdk_atom_intern ("text/plain", FALSE)) {
+  else if (sd->target == gdk_atom_intern ("text/plain;charset=utf-8", FALSE)) {
     ThreadAddFilesDragParams *params;
     const gchar *file = NULL;
+    gchar *full_paths;
 
     xfburn_adding_progress_show (XFBURN_ADDING_PROGRESS (priv->progress));
+
+    full_paths = (gchar *) gtk_selection_data_get_text (sd);
     
-    file = strtok ((gchar *) sd->data, "\n");
+    file = strtok ((gchar *) full_paths, "\n");
     while (file) {
       gchar *full_path;
 
       if (g_str_has_prefix (file, "file://"))
         full_path = g_build_filename (&file[7], NULL);
-      else if (g_str_has_prefix ((gchar *) sd->data, "file:"))
+      else if (g_str_has_prefix (file, "file:"))
         full_path = g_build_filename (&file[5], NULL);
       else
         full_path = g_build_filename (file, NULL);
@@ -1629,6 +1632,7 @@
 
       file = strtok (NULL, "\n");
     }
+    g_free (full_paths);
 
     priv->full_paths_to_add = g_list_reverse (priv->full_paths_to_add);
     priv->path_where_insert = path_where_insert;

Modified: xfburn/trunk/xfburn/xfburn-directory-browser.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-directory-browser.c	2009-07-08 13:14:25 UTC (rev 7693)
+++ xfburn/trunk/xfburn/xfburn-directory-browser.c	2009-07-08 14:18:32 UTC (rev 7694)
@@ -116,7 +116,7 @@
   GtkCellRenderer *cell_icon, *cell_file;
   GtkTreeSelection *selection;
 
-  GtkTargetEntry gte[] = { {"text/plain", 0, DATA_COMPOSITION_DND_TARGET_TEXT_PLAIN} };
+  GtkTargetEntry gte[] = { {"text/plain;charset=utf-8", 0, DATA_COMPOSITION_DND_TARGET_TEXT_PLAIN} };
     
   model = gtk_list_store_new (DIRECTORY_BROWSER_N_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING,
                               G_TYPE_UINT64, G_TYPE_STRING, G_TYPE_STRING);
@@ -270,6 +270,22 @@
 
     if (dir_entry[0] != '.' && (stat (full_path, &s) == 0)) {
       gchar *humansize;
+
+      gchar *path_utf8;
+      GError *conv_error = NULL;
+
+      /* from the g_dir_read_name () docs: most of the time Linux stores 
+         filenames in utf8, but older versions might not, so convert here */
+
+      path_utf8 = g_filename_to_utf8 (full_path, -1, NULL, NULL, &conv_error);
+
+      if (!path_utf8 || conv_error) {
+        g_warning ("Failed to convert filename '%s' to utf8: %s. Falling back to native encoding.", full_path, conv_error->message);
+        path_utf8 = g_strdup (full_path);
+
+        if (conv_error)
+          g_error_free (conv_error);
+      }
       
       humansize = xfburn_humanreadable_filesize (s.st_size);
       
@@ -282,7 +298,7 @@
                             DIRECTORY_BROWSER_COLUMN_FILE, dir_entry,
                             DIRECTORY_BROWSER_COLUMN_HUMANSIZE, humansize,
                             DIRECTORY_BROWSER_COLUMN_SIZE, (guint64) s.st_size,
-                            DIRECTORY_BROWSER_COLUMN_TYPE, _(DIRECTORY), DIRECTORY_BROWSER_COLUMN_PATH, full_path, -1);
+                            DIRECTORY_BROWSER_COLUMN_TYPE, _(DIRECTORY), DIRECTORY_BROWSER_COLUMN_PATH, path_utf8, -1);
       }
       else if ((s.st_mode & S_IFREG)) {
         GtkTreeIter iter;
@@ -298,7 +314,7 @@
 		
 #ifdef HAVE_THUNAR_VFS
 		mime_database = thunar_vfs_mime_database_get_default ();
-		mime_info = thunar_vfs_mime_database_get_info_for_file (mime_database, full_path, NULL);
+		mime_info = thunar_vfs_mime_database_get_info_for_file (mime_database, path_utf8, NULL);
 		
 		mime_icon_name = thunar_vfs_mime_info_lookup_icon_name (mime_info, icon_theme);
 		mime_icon = gtk_icon_theme_load_icon (icon_theme, mime_icon_name, x, 0, NULL);
@@ -310,7 +326,7 @@
                             DIRECTORY_BROWSER_COLUMN_FILE, dir_entry,
                             DIRECTORY_BROWSER_COLUMN_HUMANSIZE, humansize,
                             DIRECTORY_BROWSER_COLUMN_SIZE, (guint64) s.st_size,
-                            DIRECTORY_BROWSER_COLUMN_TYPE, mime_str, DIRECTORY_BROWSER_COLUMN_PATH, full_path, -1);
+                            DIRECTORY_BROWSER_COLUMN_TYPE, mime_str, DIRECTORY_BROWSER_COLUMN_PATH, path_utf8, -1);
 		
 		if (G_LIKELY (G_IS_OBJECT (mime_icon)))
 		  g_object_unref (mime_icon);
@@ -322,10 +338,11 @@
                             DIRECTORY_BROWSER_COLUMN_FILE, dir_entry,
                             DIRECTORY_BROWSER_COLUMN_HUMANSIZE, humansize,
                             DIRECTORY_BROWSER_COLUMN_SIZE, (guint64) s.st_size,
-                            DIRECTORY_BROWSER_COLUMN_TYPE, _("File"), DIRECTORY_BROWSER_COLUMN_PATH, full_path, -1);
+                            DIRECTORY_BROWSER_COLUMN_TYPE, _("File"), DIRECTORY_BROWSER_COLUMN_PATH, path_utf8, -1);
 #endif
       }
       g_free (humansize);
+      g_free (path_utf8);
     }
     g_free (full_path);
   }

Modified: xfburn/trunk/xfburn/xfburn-fs-browser.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-fs-browser.c	2009-07-08 13:14:25 UTC (rev 7693)
+++ xfburn/trunk/xfburn/xfburn-fs-browser.c	2009-07-08 14:18:32 UTC (rev 7694)
@@ -84,7 +84,7 @@
   GtkCellRenderer *cell_icon, *cell_directory;
   GtkTreeSelection *selection;
 
-  GtkTargetEntry gte[] = { {"text/plain", 0, DATA_COMPOSITION_DND_TARGET_TEXT_PLAIN} };
+  GtkTargetEntry gte[] = { {"text/plain;charset=utf-8", 0, DATA_COMPOSITION_DND_TARGET_TEXT_PLAIN} };
 
   model = gtk_tree_store_new (FS_BROWSER_N_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING);
   gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (model), FS_BROWSER_COLUMN_DIRECTORY, GTK_SORT_ASCENDING);




More information about the Goodies-commits mailing list