[gedit] Remember filechooser location also for remote files
- From: Paolo Borelli <pborelli src gnome org>
- To: svn-commits-list gnome org
- Subject: [gedit] Remember filechooser location also for remote files
- Date: Mon, 18 May 2009 19:47:02 -0400 (EDT)
commit 44cad26ff64cb3b224e032e147cbc3b0d7daf76b
Author: Paolo Borelli <porelli gnome org>
Date: Tue May 19 01:45:17 2009 +0200
Remember filechooser location also for remote files
With gnomevfs we special cased remote files and in that case we did not
store the current file chooser dir, since that triggered blocking
behavior when opening the file chooser. Lift that limitations in the
hope that gvfs works better. Also convert all related code to deal with
GFiles directly. Bug #549465.
---
gedit/gedit-commands-file.c | 139 +++++++++++++++++++++++++-----------------
gedit/gedit-window-private.h | 12 ++--
gedit/gedit-window.c | 44 +++++--------
gedit/gedit-window.h | 7 +-
4 files changed, 109 insertions(+), 93 deletions(-)
diff --git a/gedit/gedit-commands-file.c b/gedit/gedit-commands-file.c
index 647858a..18b713e 100644
--- a/gedit/gedit-commands-file.c
+++ b/gedit/gedit-commands-file.c
@@ -343,16 +343,33 @@ gedit_commands_load_uris (GeditWindow *window,
const GSList *uris,
const GeditEncoding *encoding,
gint line_pos)
-{
+{
g_return_val_if_fail (GEDIT_IS_WINDOW (window), 0);
g_return_val_if_fail ((uris != NULL) && (uris->data != NULL), 0);
-
+
gedit_debug (DEBUG_COMMANDS);
-
+
return load_uri_list (window, uris, encoding, line_pos, FALSE);
}
/*
+ * This should become public once we convert all api to GFile:
+ */
+static gint
+gedit_commands_load_files (GeditWindow *window,
+ GSList *files,
+ const GeditEncoding *encoding,
+ gint line_pos)
+{
+ g_return_val_if_fail (GEDIT_IS_WINDOW (window), 0);
+ g_return_val_if_fail ((files != NULL) && (files->data != NULL), 0);
+
+ gedit_debug (DEBUG_COMMANDS);
+
+ return load_file_list (window, files, encoding, line_pos, FALSE);
+}
+
+/*
* From the command line we can specify a line position for the
* first doc. Beside specifying a not existing uri creates a
* titled document.
@@ -384,7 +401,7 @@ open_dialog_response_cb (GeditFileChooserDialog *dialog,
gint response_id,
GeditWindow *window)
{
- GSList *uris;
+ GSList *files;
const GeditEncoding *encoding;
gedit_debug (DEBUG_COMMANDS);
@@ -396,33 +413,33 @@ open_dialog_response_cb (GeditFileChooserDialog *dialog,
return;
}
- uris = gtk_file_chooser_get_uris (GTK_FILE_CHOOSER (dialog));
- g_return_if_fail (uris != NULL);
+ files = gtk_file_chooser_get_files (GTK_FILE_CHOOSER (dialog));
+ g_return_if_fail (files != NULL);
encoding = gedit_file_chooser_dialog_get_encoding (dialog);
gtk_widget_destroy (GTK_WIDGET (dialog));
/* Remember the folder we navigated to */
- _gedit_window_set_default_path (window, uris->data);
+ _gedit_window_set_default_location (window, files->data);
- gedit_commands_load_uris (window,
- uris,
- encoding,
- 0);
+ gedit_commands_load_files (window,
+ files,
+ encoding,
+ 0);
- g_slist_foreach (uris, (GFunc) g_free, NULL);
- g_slist_free (uris);
+ g_slist_foreach (files, (GFunc) g_object_unref, NULL);
+ g_slist_free (files);
}
void
_gedit_cmd_file_open (GtkAction *action,
GeditWindow *window)
{
- GtkWidget *open_dialog;
- gpointer data;
+ GtkWidget *open_dialog;
+ gpointer data;
GeditDocument *doc;
- gchar *default_path = NULL;
+ GFile *default_path = NULL;
gedit_debug (DEBUG_COMMANDS);
@@ -458,35 +475,33 @@ _gedit_cmd_file_open (GtkAction *action,
doc = gedit_window_get_active_document (window);
if (doc != NULL)
{
- gchar *uri;
+ GFile *file;
- uri = gedit_document_get_uri (doc);
+ file = gedit_document_get_location (doc);
- if ((uri != NULL) &&
- gedit_utils_uri_has_file_scheme (uri))
+ if (file != NULL)
{
- default_path = g_path_get_dirname (uri);
+ default_path = g_file_get_parent (file);
+ g_return_if_fail (default_path != NULL); /* file cannot be / */
- g_return_if_fail (strlen (default_path) >= 5 /* strlen ("file:") */);
- if (strcmp (default_path, "file:") == 0)
- {
- g_free (default_path);
-
- default_path = g_strdup ("file:///");
- }
+ g_object_unref (file);
}
-
- g_free (uri);
}
if (default_path == NULL)
- default_path = g_strdup (_gedit_window_get_default_path (window));
+ default_path = _gedit_window_get_default_location (window);
if (default_path != NULL)
+ {
+ gchar *uri;
+
+ uri = g_file_get_uri (default_path);
gtk_file_chooser_set_current_folder_uri (GTK_FILE_CHOOSER (open_dialog),
- default_path);
+ uri);
- g_free (default_path);
+ g_free (uri);
+ g_object_unref (default_path);
+ }
g_signal_connect (open_dialog,
"response",
@@ -587,11 +602,11 @@ save_dialog_response_cb (GeditFileChooserDialog *dialog,
gint response_id,
GeditWindow *window)
{
- gchar *uri;
+ GFile *file;
const GeditEncoding *encoding;
- GeditTab *tab;
- gpointer data;
- GSList *tabs_to_save_as;
+ GeditTab *tab;
+ gpointer data;
+ GSList *tabs_to_save_as;
gedit_debug (DEBUG_COMMANDS);
@@ -605,8 +620,8 @@ save_dialog_response_cb (GeditFileChooserDialog *dialog,
goto save_next_tab;
}
- uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (dialog));
- g_return_if_fail (uri != NULL);
+ file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog));
+ g_return_if_fail (file != NULL);
encoding = gedit_file_chooser_dialog_get_encoding (dialog);
@@ -615,28 +630,32 @@ save_dialog_response_cb (GeditFileChooserDialog *dialog,
if (tab != NULL)
{
GeditDocument *doc;
- gchar *uri_for_display;
+ gchar *parse_name;
+ gchar *uri;
doc = gedit_tab_get_document (tab);
g_return_if_fail (GEDIT_IS_DOCUMENT (doc));
- uri_for_display = gedit_utils_uri_for_display (uri);
+ parse_name = g_file_get_parse_name (file);
gedit_statusbar_flash_message (GEDIT_STATUSBAR (window->priv->statusbar),
window->priv->generic_message_cid,
_("Saving file '%s'\342\200\246"),
- uri_for_display);
+ parse_name);
- g_free (uri_for_display);
+ g_free (parse_name);
/* let's remember the dir we navigated too,
* even if the saving fails... */
- _gedit_window_set_default_path (window, uri);
+ _gedit_window_set_default_location (window, file);
+ // FIXME: pass the GFile to tab when api is there
+ uri = g_file_get_uri (file);
_gedit_tab_save_as (tab, uri, encoding);
+ g_free (uri);
}
- g_free (uri);
+ g_object_unref (file);
save_next_tab:
@@ -719,7 +738,7 @@ file_save_as (GeditTab *tab,
GtkWidget *save_dialog;
GtkWindowGroup *wg;
GeditDocument *doc;
- gchar *uri;
+ GFile *file;
gboolean uri_set = FALSE;
const GeditEncoding *encoding;
@@ -753,28 +772,37 @@ file_save_as (GeditTab *tab,
/* Set the suggested file name */
doc = gedit_tab_get_document (tab);
- uri = gedit_document_get_uri (doc);
+ file = gedit_document_get_location (doc);
- if ((uri != NULL) &&
- gedit_utils_uri_has_file_scheme (uri))
+ if (file != NULL)
{
- uri_set = gtk_file_chooser_set_uri (GTK_FILE_CHOOSER (save_dialog),
- uri);
+ uri_set = gtk_file_chooser_set_file (GTK_FILE_CHOOSER (save_dialog),
+ file,
+ NULL);
+
+ g_object_unref (file);
}
- g_free (uri);
if (!uri_set)
{
- const gchar *default_path;
+ GFile *default_path;
gchar *docname;
- default_path = _gedit_window_get_default_path (window);
+ default_path = _gedit_window_get_default_location (window);
docname = gedit_document_get_short_name_for_display (doc);
if (default_path != NULL)
+ {
+ gchar *uri;
+
+ uri = g_file_get_uri (default_path);
gtk_file_chooser_set_current_folder_uri (GTK_FILE_CHOOSER (save_dialog),
- default_path);
+ uri);
+
+ g_free (uri);
+ g_object_unref (default_path);
+ }
gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (save_dialog),
docname);
@@ -789,7 +817,6 @@ file_save_as (GeditTab *tab,
gedit_file_chooser_dialog_set_encoding (GEDIT_FILE_CHOOSER_DIALOG (save_dialog),
encoding);
-
g_object_set_data (G_OBJECT (save_dialog),
GEDIT_TAB_TO_SAVE_AS,
tab);
diff --git a/gedit/gedit-window-private.h b/gedit/gedit-window-private.h
index 872d49d..1f64a51 100644
--- a/gedit/gedit-window-private.h
+++ b/gedit/gedit-window-private.h
@@ -93,19 +93,19 @@ struct _GeditWindowPrivate
gint height;
GdkWindowState window_state;
- gint side_panel_size;
- gint bottom_panel_size;
+ gint side_panel_size;
+ gint bottom_panel_size;
GeditWindowState state;
- gint bottom_panel_item_removed_handler_id;
+ gint bottom_panel_item_removed_handler_id;
GtkWindowGroup *window_group;
- gchar *default_path;
+ GFile *default_location;
- gboolean removing_tabs : 1;
- gboolean dispose_has_run : 1;
+ gboolean removing_tabs : 1;
+ gboolean dispose_has_run : 1;
};
G_END_DECLS
diff --git a/gedit/gedit-window.c b/gedit/gedit-window.c
index 378a2d6..e9bae27 100644
--- a/gedit/gedit-window.c
+++ b/gedit/gedit-window.c
@@ -244,7 +244,8 @@ gedit_window_finalize (GObject *object)
window = GEDIT_WINDOW (object);
- g_free (window->priv->default_path);
+ if (window->priv->default_location != NULL)
+ g_object_unref (window->priv->default_location);
G_OBJECT_CLASS (gedit_window_parent_class)->finalize (object);
}
@@ -4298,42 +4299,31 @@ gedit_window_get_state (GeditWindow *window)
return window->priv->state;
}
-G_CONST_RETURN gchar *
-_gedit_window_get_default_path (GeditWindow *window)
+GFile *
+_gedit_window_get_default_location (GeditWindow *window)
{
g_return_val_if_fail (GEDIT_IS_WINDOW (window), NULL);
-
- return window->priv->default_path;
+
+ return window->priv->default_location != NULL ?
+ g_object_ref (window->priv->default_location) : NULL;
}
void
-_gedit_window_set_default_path (GeditWindow *window,
- const gchar *uri)
+_gedit_window_set_default_location (GeditWindow *window,
+ GFile *location)
{
- g_return_if_fail (uri != NULL);
-
- if (gedit_utils_uri_has_file_scheme (uri))
- {
- gchar *default_path;
-
- // CHECK: does it work with uri chaining? - Paolo
- default_path = g_path_get_dirname (uri);
+ GFile *dir;
- g_return_if_fail (strlen (default_path) >= 5 /* strlen ("file:") */);
- if (strcmp (default_path, "file:") == 0)
- {
- g_free (default_path);
-
- default_path = g_strdup ("file:///");
- }
+ g_return_if_fail (GEDIT_IS_WINDOW (window));
+ g_return_if_fail (G_IS_FILE (location));
- g_free (window->priv->default_path);
+ dir = g_file_get_parent (location);
+ g_return_if_fail (dir != NULL);
- window->priv->default_path = default_path;
+ if (window->priv->default_location != NULL)
+ g_object_unref (window->priv->default_location);
- gedit_debug_message (DEBUG_WINDOW,
- "New default path: %s", default_path);
- }
+ window->priv->default_location = dir;
}
/**
diff --git a/gedit/gedit-window.h b/gedit/gedit-window.h
index b6b8f03..e8c7eef 100644
--- a/gedit/gedit-window.h
+++ b/gedit/gedit-window.h
@@ -169,11 +169,10 @@ GeditWindow *_gedit_window_move_tab_to_new_window (GeditWindow *window,
GeditTab *tab);
gboolean _gedit_window_is_removing_tabs (GeditWindow *window);
-G_CONST_RETURN gchar
- *_gedit_window_get_default_path (GeditWindow *window);
+GFile *_gedit_window_get_default_location (GeditWindow *window);
-void _gedit_window_set_default_path (GeditWindow *window,
- const gchar *uri);
+void _gedit_window_set_default_location (GeditWindow *window,
+ GFile *location);
void _gedit_window_set_saving_session_state (GeditWindow *window,
gboolean saving_session);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]