Can't restore files from the trash can if it contains spaces...

Axel FILMORE axel.filmore at
Thu Jun 21 13:16:18 UTC 2012

Hey hackers,

I found this problem with LibFm, tested with last sources from git master.

Create a file called "New1".
Create a file called "New 1".
Create a file with special characters, like accentuated ones,
for example : "Accentué"

Trash these files, then from the Trash Can click restore.

On my system I can only restore "New1", I get an error with other files.
(Tested with src/libfm-demo)

I fixed it this way :

GFile *fm_path_to_gfile (FmPath *path)
     GFile *gf;

     char *str = fm_path_to_str (path);

     if (fm_path_is_native (path))
         gf = g_file_new_for_path (str);
         // Escape the path so that it supports spaces and special 
characters like accentuated ones...
         char *tmp_str = g_uri_escape_string (str, 

         gf = g_file_new_for_uri (tmp_str);
         g_free (tmp_str);

     g_free (str);

     return gf;

g_uri_escape_string adds escape characters,


becomes :


That's what you get if you copy the file from Nautilus or Thunar and 
paste the string in a text editor.

I found also a problem in fm_str_replace

I fixed it this way :

char *fm_str_replace (char *str, char *old, char *new)
     int i;
     int len = strlen (str);
     int old_len = strlen (old);

     GString *buf = g_string_sized_new (len);

     char *found;
     while (found = strstr (str, old))
         g_string_append_len (buf, str,  (found - str));
         g_string_append (buf, new);
         str = found + old_len;
     for (; *str; ++str)
         g_string_append_c (buf, *str);
     return g_string_free (buf, FALSE);

"str = found + old_len;" instead of "str = found + 1;"


  Vala - Compiler For The GObject Type System

More information about the Lubuntu-users mailing list