diff options
author | Federico Mena Quintero <federico@ximian.com> | 2004-03-15 23:15:31 +0000 |
---|---|---|
committer | Federico Mena Quintero <federico@src.gnome.org> | 2004-03-15 23:15:31 +0000 |
commit | 7cd0c2686dbcc2fe318e78d99d7b53cde621b2a4 (patch) | |
tree | f752ad144ae75408768c9984cabeb99acd101890 /gtk | |
parent | 5d2b6bc1b646d9a73b5aca046c538672b3a44668 (diff) | |
download | gdk-pixbuf-7cd0c2686dbcc2fe318e78d99d7b53cde621b2a4.tar.gz |
Only hide the "create folder" button in OPEN mode; all the others should
2004-03-15 Federico Mena Quintero <federico@ximian.com>
* gtk/gtkfilechooserdefault.c (update_appearance): Only hide the
"create folder" button in OPEN mode; all the others should show it
it.
(get_paths_foreach): Handle the editable row.
* gtk/gtkfilesystemunix.c (gtk_file_system_unix_create_folder):
Force a re-get of the folder so that the new directory gets added
to its hash table of file info.
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/gtkfilechooserdefault.c | 13 | ||||
-rw-r--r-- | gtk/gtkfilesystemunix.c | 25 |
2 files changed, 29 insertions, 9 deletions
diff --git a/gtk/gtkfilechooserdefault.c b/gtk/gtkfilechooserdefault.c index 667a0a547..fb79fa860 100644 --- a/gtk/gtkfilechooserdefault.c +++ b/gtk/gtkfilechooserdefault.c @@ -1216,7 +1216,7 @@ shortcuts_add_volumes (GtkFileChooserDefault *impl) GtkFileSystemVolume *volume; volume = l->data; - + if (impl->local_only) { GtkFilePath *base_path = gtk_file_system_volume_get_base_path (impl->file_system, volume); @@ -3155,8 +3155,7 @@ update_appearance (GtkFileChooserDefault *impl) _gtk_file_system_model_set_show_files (impl->browse_files_model, TRUE); } - if (impl->action == GTK_FILE_CHOOSER_ACTION_OPEN - || impl->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER) + if (impl->action == GTK_FILE_CHOOSER_ACTION_OPEN) gtk_widget_hide (impl->browse_new_folder_button); else gtk_widget_show (impl->browse_new_folder_button); @@ -3700,7 +3699,7 @@ gtk_file_chooser_default_set_current_folder (GtkFileChooser *chooser, GTK_FILE_SYSTEM_ERROR, GTK_FILE_SYSTEM_ERROR_FAILED, _("Can't change to folder because it isn't local")); - + return FALSE; } @@ -3913,6 +3912,8 @@ get_paths_foreach (GtkTreeModel *model, gtk_tree_model_sort_convert_iter_to_child_iter (info->impl->sort_model, &sel_iter, iter); file_path = _gtk_file_system_model_get_path (GTK_FILE_SYSTEM_MODEL (fs_model), &sel_iter); + if (!file_path) + return; /* We are on the editable row */ if (!info->path_from_entry || gtk_file_path_compare (info->path_from_entry, file_path) != 0) @@ -5018,7 +5019,7 @@ location_popup_handler (GtkFileChooserDefault *impl) { title = _("Open Location"); } - else + else { g_assert (impl->action == GTK_FILE_CHOOSER_ACTION_SAVE || impl->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER); @@ -5062,7 +5063,7 @@ location_popup_handler (GtkFileChooserDefault *impl) { gtk_widget_grab_focus (impl->browse_files_tree_view); } - else + else { g_assert (impl->action == GTK_FILE_CHOOSER_ACTION_SAVE || impl->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER); diff --git a/gtk/gtkfilesystemunix.c b/gtk/gtkfilesystemunix.c index 5a6d6cf0b..01528ce53 100644 --- a/gtk/gtkfilesystemunix.c +++ b/gtk/gtkfilesystemunix.c @@ -501,12 +501,31 @@ gtk_file_system_unix_create_folder (GtkFileSystem *file_system, folder_unix = g_hash_table_lookup (system_unix->folder_hash, parent); if (folder_unix) { + GtkFileInfoType types; + GtkFilePath *parent_path; GSList *paths; + GtkFileFolder *folder; - paths = g_slist_append (NULL, (GtkFilePath *) path); - g_signal_emit_by_name (folder_unix, "files-added", paths); - g_slist_free (paths); + /* This is sort of a hack. We re-get the folder, to ensure that the + * newly-created directory gets read into the folder's info hash table. + */ + + types = folder_unix->types; + + parent_path = gtk_file_path_new_dup (parent); + folder = gtk_file_system_get_folder (file_system, parent_path, types, NULL); + gtk_file_path_free (parent_path); + + if (folder) + { + paths = g_slist_append (NULL, (GtkFilePath *) path); + g_signal_emit_by_name (folder, "files-added", paths); + g_slist_free (paths); + g_object_unref (folder); + } } + + g_free (parent); } return TRUE; |