> + folder = g_filename_to_uri (g_path_get_dirname (tmp), NULL,
> &error);
g_path_get_dirname() would needs be freed.
The following might be an idea with your patch.
--- screenshot-dialog.c.orig 2009-03-11 17:41:15.947565000 +0900
+++ screenshot-dialog.c 2009-03-11 21:58:42.085745000 +0900
@@ -336,12 +336,11 @@
char *
screenshot_dialog_get_uri (ScreenshotDialog *dialog)
{
- gchar *folder;
+ gchar *folder = NULL;
const gchar *file_name;
- gchar *uri, *file, *tmp;
+ gchar *uri = NULL, *file = NULL, *tmp;
GError *error;
- folder = gtk_file_chooser_get_current_folder_uri (GTK_FILE_CHOOSER
(dialog->save_widget));
file_name = gtk_entry_get_text (GTK_ENTRY (dialog->filename_entry));
error = NULL;
@@ -356,8 +355,33 @@
tmp = g_strdup (_("Screenshot.png"));
}
- file = g_uri_escape_string (tmp, NULL, FALSE);
- uri = g_build_filename (folder, file, NULL);
+ if (g_path_is_absolute(tmp))
+ {
+ error = NULL;
+ uri = g_filename_to_uri (tmp, NULL, &error);
+ if (error)
+ {
+ g_warning ("Unable to convert `%s' to valid UTF-8: %s\n"
+ "Falling back to default file.",
+ file_name,
+ error->message);
+ g_error_free (error);
+ g_free (tmp);
+ tmp = g_strdup (_("Screenshot.png"));
+ file = g_uri_escape_string (tmp, NULL, FALSE);
+ }
+
+ }
+ else
+ {
+ file = g_uri_escape_string (tmp, NULL, FALSE);
+ }
+
+ if (uri == NULL)
+ {
+ folder = gtk_file_chooser_get_current_folder_uri (GTK_FILE_CHOOSER
(dialog->save_widget));
+ uri = g_build_filename (folder, file, NULL);
+ }
g_free (folder);
g_free (tmp);
Rohini-san wrote (03/11/09 09:54 PM):
> Abhijit,
>
> Thanks for pointing out. Changed.
>
> --- gnome-utils-2.25.90.orig/gnome-screenshot/screenshot-dialog.c
> 2009-03-06 11:04:59.021848933 +0530
> +++ gnome-utils-2.25.90/gnome-screenshot/screenshot-dialog.c
> 2009-03-11 18:01:57.997458129 +0530
> @@ -338,10 +338,9 @@
> {
> gchar *folder;
> const gchar *file_name;
> - gchar *uri, *file, *tmp;
> + gchar *uri, *file, *tmp, *tmp1;
> GError *error;
>
> - folder = gtk_file_chooser_get_current_folder_uri (GTK_FILE_CHOOSER
> (dialog->save_widget));
> file_name = gtk_entry_get_text (GTK_ENTRY (dialog->filename_entry));
>
> error = NULL;
> @@ -356,7 +355,34 @@
> tmp = g_strdup (_("Screenshot.png"));
> }
>
> - file = g_uri_escape_string (tmp, NULL, FALSE);
> + if (g_path_is_absolute(tmp))
> + {
> + error = NULL;
> + folder = g_filename_to_uri (g_path_get_dirname (tmp), NULL,
> &error);
> + if (error)
> + {
> + g_warning ("Unable to convert folder to valid UTF-8: %s\n"
> + "Falling back to default file.",
> + error->message);
> + g_error_free (error);
> + folder = gtk_file_chooser_get_current_folder_uri
> (GTK_FILE_CHOOSER (dialog->save_widget));
> + tmp1 = g_strdup (_("Screenshot.png"));
> + file = g_uri_escape_string (tmp1, NULL, FALSE);
> + g_free (tmp1);
> + }
> + else
> + {
> + tmp1 = g_path_get_basename (tmp);
> + file = g_uri_escape_string (tmp1, NULL, FALSE);
> + g_free (tmp1);
> + }
> + }
> + else
> + {
> + folder = gtk_file_chooser_get_current_folder_uri
> (GTK_FILE_CHOOSER (dialog->save_widget));
> + file = g_uri_escape_string (tmp, NULL, FALSE);
> + }
> +
> uri = g_build_filename (folder, file, NULL);
>
> g_free (folder);
>
>
>
> abhijit nath - Sun Microsystems - Bangalore India wrote:
>> Hi,
>> On 03/11/09 18:05, Rohini wrote:
>>> Apologies for the spam. The previous fix was incorrect. Resending.
>>>
>>> Fix:
>>> ---
>>> gnome-utils-2.25.90.orig/gnome-screenshot/screenshot-dialog.c
>>> 2009-03-06 11:04:59.021848933 +0530
>>> +++ gnome-utils-2.25.90/gnome-screenshot/screenshot-dialog.c
>>> 2009-03-11 18:01:57.997458129 +0530
>>> @@ -338,10 +338,9 @@
>>> {
>>> gchar *folder;
>>> const gchar *file_name;
>>> - gchar *uri, *file, *tmp;
>>> + gchar *uri, *file, *tmp, *tmp1;
>>> GError *error;
>>>
>>> - folder = gtk_file_chooser_get_current_folder_uri (GTK_FILE_CHOOSER
>>> (dialog->save_widget));
>>> file_name = gtk_entry_get_text (GTK_ENTRY (dialog->filename_entry));
>>>
>>> error = NULL;
>>> @@ -356,7 +355,34 @@
>>> tmp = g_strdup (_("Screenshot.png"));
>>> }
>>>
>>> - file = g_uri_escape_string (tmp, NULL, FALSE);
>>> + if (g_path_is_absolute(tmp))
>>> + {
>>> + error = NULL;
>>> + folder = g_filename_to_uri (g_path_get_dirname (tmp), NULL,
>>> &error);
>>> + if (error)
>>> + {
>>> + g_warning ("Unable to convert folder to valid UTF-8:
>>> %s\n"
>>> + "Falling back to default file.",
>>> + error->message);
>>> + g_error_free (error);
>>> + folder = gtk_file_chooser_get_current_folder_uri
>>> (GTK_FILE_CHOOSER (dialog->save_widget));
>>> + tmp1 = g_strdup (_("Screenshot.png"));
>>> + file = g_uri_escape_string (tmp1, NULL, FALSE);
>>> + g_free (tmp1);
>>> + }
>>> + else
>>> + {
>>> + tmp1 = g_path_get_basename (tmp);
>>> + file = g_uri_escape_string (g_path_get_basename
>>> (tmp), NULL, FALSE);
>> g_path_get_basename() API returns gchar*. So it should be freed.
>>
>>> + g_free (tmp1);
>>> + }
>>> + }
>>> + else
>>> + {
>>> + folder = gtk_file_chooser_get_current_folder_uri
>>> (GTK_FILE_CHOOSER (dialog->save_widget));
>>> + file = g_uri_escape_string (tmp, NULL, FALSE);
>>> + }
>>> +
>>> uri = g_build_filename (folder, file, NULL);
>>>
>>> g_free (folder);
>>>
>>>
>>> abhijit nath - Sun Microsystems - Bangalore India wrote:
>>>> Rohini,
>>>>
>>>> On 03/11/09 14:46, Takao Fujiwara - Tokyo S/W Center wrote:
>>>>> Rohini-san wrote (03/11/09 03:24 PM):
>>>>>> CR: gnome screenshot refuses to allow different dir unless mouse
>>>>>> is used
>>>>>>
>>>>>> Description:
>>>>>> Added a check to verify if filename is absolute and ignoring
>>>>>> folder if absolute path is specified.
>>>>>>
>>>>>> Fix:
>>>>>> diff -urN
>>>>>> gnome-utils-2.25.90.orig/gnome-screenshot/screenshot-dialog.c
>>>>>> gnome-utils-2.25.90/gnome-screenshot/screenshot-dialog.c
>>>>>> ---
>>>>>> gnome-utils-2.25.90.orig/gnome-screenshot/screenshot-dialog.c
>>>>>> 2009-03-06 11:04:59.021848933 +0530
>>>>>> +++ gnome-utils-2.25.90/gnome-screenshot/screenshot-dialog.c
>>>>>> 2009-03-06 11:57:56.734246867 +0530
>>>>>> @@ -356,6 +356,26 @@
>>>>>> tmp = g_strdup (_("Screenshot.png"));
>>>>>> }
>>>>>>
>>>>>> + if (g_path_is_absolute(tmp))
>>>>>> + {
>>>>>> + error = NULL;
>>>>>> + folder = g_filename_to_uri (g_path_get_dirname (tmp),
>>>>>> NULL, &error);
>>>>>> + if (error)
>>>>>> + {
>>>>>> + g_warning ("Unable to convert `%s' to valid UTF-8:
>>>>>> %s\n"
>>>>>> + "Falling back to default file.",
>>>>>> + folder,
>>>>>> + error->message);
>>>>>> + g_error_free (error);
>>>>>> + folder = gtk_file_chooser_get_current_folder_uri
>>>>>> (GTK_FILE_CHOOSER (dialog->save_widget));
>>>>>> + tmp = g_strdup (_("Screenshot.png"));
>>>> I guess, in this line also it leaks memory as memory is allocated in
>>>> line 356 for tmp and it is not getting freed.
>>>>>> +
>>>>>> + }
>>>>>> + else
>>>>>> + tmp = g_path_get_basename (tmp);
>>>>>
>>>>> I think tmp and folder needs to be freed before you change the values.
>>>>>
>>>>>
>>>>>> +
>>>>>> + }
>>>>>> +
>>>>>> file = g_uri_escape_string (tmp, NULL, FALSE);
>>>>>> uri = g_build_filename (folder, file, NULL);
>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>
>