Commit 39f74017 authored by Michael Natterer's avatar Michael Natterer 😴

app: change Gimp->default_folder from being a path to a GFile

Also fix GimpFileDialog to actually start with that folder, and not in
its parent folder.
parent ef539211
......@@ -523,8 +523,8 @@ file_open_dialog_show (Gimp *gimp,
if (file)
gtk_file_chooser_set_file (GTK_FILE_CHOOSER (dialog), file, NULL);
else if (gimp->default_folder)
gtk_file_chooser_set_current_folder_uri (GTK_FILE_CHOOSER (dialog),
gimp->default_folder);
gtk_file_chooser_set_current_folder_file (GTK_FILE_CHOOSER (dialog),
gimp->default_folder, NULL);
gimp_file_dialog_set_open_image (GIMP_FILE_DIALOG (dialog),
image, open_as_layers);
......
......@@ -162,14 +162,14 @@ app_run (const gchar *full_prog_name,
Gimp *gimp;
GMainLoop *loop;
GMainLoop *run_loop;
gchar *default_folder = NULL;
GFile *default_folder = NULL;
if (filenames && filenames[0] && ! filenames[1] &&
g_file_test (filenames[0], G_FILE_TEST_IS_DIR))
{
if (g_path_is_absolute (filenames[0]))
{
default_folder = g_filename_to_uri (filenames[0], NULL, NULL);
default_folder = g_file_new_for_path (filenames[0]);
}
else
{
......@@ -177,7 +177,7 @@ app_run (const gchar *full_prog_name,
g_get_current_dir (),
filenames[0],
NULL);
default_folder = g_filename_to_uri (absolute, NULL, NULL);
default_folder = g_file_new_for_path (absolute);
g_free (absolute);
}
......@@ -200,6 +200,9 @@ app_run (const gchar *full_prog_name,
stack_trace_mode,
pdb_compat_mode);
if (default_folder)
g_object_unref (default_folder);
gimp_cpu_accel_set_use (use_cpu_accel);
errors_init (gimp, full_prog_name, use_debug_handler, stack_trace_mode);
......
......@@ -460,7 +460,7 @@ gimp_finalize (GObject *object)
if (gimp->default_folder)
{
g_free (gimp->default_folder);
g_object_unref (gimp->default_folder);
gimp->default_folder = NULL;
}
......@@ -755,7 +755,7 @@ gimp_real_exit (Gimp *gimp,
Gimp *
gimp_new (const gchar *name,
const gchar *session_name,
const gchar *default_folder,
GFile *default_folder,
gboolean be_verbose,
gboolean no_data,
gboolean no_fonts,
......@@ -774,8 +774,10 @@ gimp_new (const gchar *name,
"name", name,
NULL);
if (default_folder)
gimp->default_folder = g_object_ref (default_folder);
gimp->session_name = g_strdup (session_name);
gimp->default_folder = g_strdup (default_folder);
gimp->be_verbose = be_verbose ? TRUE : FALSE;
gimp->no_data = no_data ? TRUE : FALSE;
gimp->no_fonts = no_fonts ? TRUE : FALSE;
......
......@@ -41,7 +41,7 @@ struct _Gimp
* for the preferences dialog
*/
gchar *session_name;
gchar *default_folder;
GFile *default_folder;
gboolean be_verbose;
gboolean no_data;
......@@ -146,7 +146,7 @@ GType gimp_get_type (void) G_GNUC_CONST;
Gimp * gimp_new (const gchar *name,
const gchar *session_name,
const gchar *default_folder,
GFile *default_folder,
gboolean be_verbose,
gboolean no_data,
gboolean no_fonts,
......
......@@ -122,8 +122,8 @@ static void gimp_file_dialog_help_func (const gchar *help_
static void gimp_file_dialog_help_clicked (GtkWidget *widget,
gpointer dialog);
static gchar * gimp_file_dialog_pattern_from_extension (const gchar *extension);
static GFile * gimp_file_dialog_get_default_file (Gimp *gimp);
static gchar * gimp_file_dialog_pattern_from_extension (const gchar *extension);
static GFile * gimp_file_dialog_get_default_folder (Gimp *gimp);
G_DEFINE_TYPE_WITH_CODE (GimpFileDialog, gimp_file_dialog,
......@@ -490,15 +490,11 @@ gimp_file_dialog_set_save_image (GimpFileDialog *dialog,
GFile *dir_file = NULL;
GFile *name_file = NULL;
GFile *ext_file = NULL;
GFile *default_file;
GFile *parent_file;
gchar *basename;
g_return_if_fail (GIMP_IS_FILE_DIALOG (dialog));
g_return_if_fail (GIMP_IS_IMAGE (image));
default_file = gimp_file_dialog_get_default_file (gimp);
dialog->image = image;
dialog->save_a_copy = save_a_copy;
dialog->export = export;
......@@ -538,7 +534,7 @@ gimp_file_dialog_set_save_image (GimpFileDialog *dialog,
GIMP_FILE_SAVE_LAST_FILE_KEY);
if (! dir_file)
dir_file = default_file;
dir_file = gimp_file_dialog_get_default_folder (gimp);
/* Priority of default basenames for Save:
......@@ -610,7 +606,7 @@ gimp_file_dialog_set_save_image (GimpFileDialog *dialog,
GIMP_FILE_EXPORT_LAST_FILE_KEY);
if (! dir_file)
dir_file = default_file;
dir_file = gimp_file_dialog_get_default_folder (gimp);
/* Priority of default basenames for Export:
......@@ -664,10 +660,19 @@ gimp_file_dialog_set_save_image (GimpFileDialog *dialog,
basename = g_path_get_basename (gimp_file_get_utf8_name (name_file));
}
parent_file = g_file_get_parent (dir_file);
gtk_file_chooser_set_current_folder_file (GTK_FILE_CHOOSER (dialog),
parent_file, NULL);
g_object_unref (parent_file);
if (g_file_query_file_type (dir_file, G_FILE_QUERY_INFO_NONE, NULL) ==
G_FILE_TYPE_DIRECTORY)
{
gtk_file_chooser_set_current_folder_file (GTK_FILE_CHOOSER (dialog),
dir_file, NULL);
}
else
{
GFile *parent_file = g_file_get_parent (dir_file);
gtk_file_chooser_set_current_folder_file (GTK_FILE_CHOOSER (dialog),
parent_file, NULL);
g_object_unref (parent_file);
}
gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), basename);
}
......@@ -1140,32 +1145,40 @@ gimp_file_dialog_pattern_from_extension (const gchar *extension)
}
static GFile *
gimp_file_dialog_get_default_file (Gimp *gimp)
gimp_file_dialog_get_default_folder (Gimp *gimp)
{
if (gimp->default_folder)
{
return g_file_new_for_path (gimp->default_folder);
return gimp->default_folder;
}
else
{
GFile *file;
gchar *path;
GFile *file = g_object_get_data (G_OBJECT (gimp),
"gimp-documents-folder");
/* Make sure it ends in '/' */
path = g_build_path (G_DIR_SEPARATOR_S,
g_get_user_special_dir (G_USER_DIRECTORY_DOCUMENTS),
G_DIR_SEPARATOR_S,
NULL);
/* Paranoia fallback, see bug #722400 */
if (! path)
path = g_build_path (G_DIR_SEPARATOR_S,
g_get_home_dir (),
G_DIR_SEPARATOR_S,
NULL);
file = g_file_new_for_path (path);
g_free (path);
if (! file)
{
gchar *path;
/* Make sure it ends in '/' */
path = g_build_path (G_DIR_SEPARATOR_S,
g_get_user_special_dir (G_USER_DIRECTORY_DOCUMENTS),
G_DIR_SEPARATOR_S,
NULL);
/* Paranoia fallback, see bug #722400 */
if (! path)
path = g_build_path (G_DIR_SEPARATOR_S,
g_get_home_dir (),
G_DIR_SEPARATOR_S,
NULL);
file = g_file_new_for_path (path);
g_free (path);
g_object_set_data_full (G_OBJECT (gimp), "gimp-documents-folder",
file, (GDestroyNotify) g_object_unref);
}
return file;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment