Do not allow setting select_multiple when in Save mode. (set_list_model):

2004-01-16  Federico Mena Quintero  <federico@ximian.com>

	* gtk/gtkfilechooserdefault.c
	(gtk_file_chooser_default_set_property): Do not allow setting
	select_multiple when in Save mode.
	(set_list_model): No need to nullify the list_model and
	sort_model.
	(gtk_file_chooser_default_get_paths): Handle folder mode as well.
	(get_paths_foreach): Likewise.

	* gtk/gtkfilechooser.c (gtk_file_chooser_get_filename): Clarify
	documentation about folder mode.
	(gtk_file_chooser_get_uri): Likewise.
This commit is contained in:
Federico Mena Quintero 2004-01-16 05:12:21 +00:00 committed by Federico Mena Quintero
parent f2f12b9aae
commit c6860c111b
7 changed files with 132 additions and 39 deletions

View File

@ -1,3 +1,17 @@
2004-01-16 Federico Mena Quintero <federico@ximian.com>
* gtk/gtkfilechooserdefault.c
(gtk_file_chooser_default_set_property): Do not allow setting
select_multiple when in Save mode.
(set_list_model): No need to nullify the list_model and
sort_model.
(gtk_file_chooser_default_get_paths): Handle folder mode as well.
(get_paths_foreach): Likewise.
* gtk/gtkfilechooser.c (gtk_file_chooser_get_filename): Clarify
documentation about folder mode.
(gtk_file_chooser_get_uri): Likewise.
2004-01-16 Federico Mena Quintero <federico@ximian.com> 2004-01-16 Federico Mena Quintero <federico@ximian.com>
* gtk/gtkfilesystem.h (struct _GtkFileSystemIface): New * gtk/gtkfilesystem.h (struct _GtkFileSystemIface): New

View File

@ -1,3 +1,17 @@
2004-01-16 Federico Mena Quintero <federico@ximian.com>
* gtk/gtkfilechooserdefault.c
(gtk_file_chooser_default_set_property): Do not allow setting
select_multiple when in Save mode.
(set_list_model): No need to nullify the list_model and
sort_model.
(gtk_file_chooser_default_get_paths): Handle folder mode as well.
(get_paths_foreach): Likewise.
* gtk/gtkfilechooser.c (gtk_file_chooser_get_filename): Clarify
documentation about folder mode.
(gtk_file_chooser_get_uri): Likewise.
2004-01-16 Federico Mena Quintero <federico@ximian.com> 2004-01-16 Federico Mena Quintero <federico@ximian.com>
* gtk/gtkfilesystem.h (struct _GtkFileSystemIface): New * gtk/gtkfilesystem.h (struct _GtkFileSystemIface): New

View File

@ -1,3 +1,17 @@
2004-01-16 Federico Mena Quintero <federico@ximian.com>
* gtk/gtkfilechooserdefault.c
(gtk_file_chooser_default_set_property): Do not allow setting
select_multiple when in Save mode.
(set_list_model): No need to nullify the list_model and
sort_model.
(gtk_file_chooser_default_get_paths): Handle folder mode as well.
(get_paths_foreach): Likewise.
* gtk/gtkfilechooser.c (gtk_file_chooser_get_filename): Clarify
documentation about folder mode.
(gtk_file_chooser_get_uri): Likewise.
2004-01-16 Federico Mena Quintero <federico@ximian.com> 2004-01-16 Federico Mena Quintero <federico@ximian.com>
* gtk/gtkfilesystem.h (struct _GtkFileSystemIface): New * gtk/gtkfilesystem.h (struct _GtkFileSystemIface): New

View File

@ -1,3 +1,17 @@
2004-01-16 Federico Mena Quintero <federico@ximian.com>
* gtk/gtkfilechooserdefault.c
(gtk_file_chooser_default_set_property): Do not allow setting
select_multiple when in Save mode.
(set_list_model): No need to nullify the list_model and
sort_model.
(gtk_file_chooser_default_get_paths): Handle folder mode as well.
(get_paths_foreach): Likewise.
* gtk/gtkfilechooser.c (gtk_file_chooser_get_filename): Clarify
documentation about folder mode.
(gtk_file_chooser_get_uri): Likewise.
2004-01-16 Federico Mena Quintero <federico@ximian.com> 2004-01-16 Federico Mena Quintero <federico@ximian.com>
* gtk/gtkfilesystem.h (struct _GtkFileSystemIface): New * gtk/gtkfilesystem.h (struct _GtkFileSystemIface): New

View File

@ -1,3 +1,17 @@
2004-01-16 Federico Mena Quintero <federico@ximian.com>
* gtk/gtkfilechooserdefault.c
(gtk_file_chooser_default_set_property): Do not allow setting
select_multiple when in Save mode.
(set_list_model): No need to nullify the list_model and
sort_model.
(gtk_file_chooser_default_get_paths): Handle folder mode as well.
(get_paths_foreach): Likewise.
* gtk/gtkfilechooser.c (gtk_file_chooser_get_filename): Clarify
documentation about folder mode.
(gtk_file_chooser_get_uri): Likewise.
2004-01-16 Federico Mena Quintero <federico@ximian.com> 2004-01-16 Federico Mena Quintero <federico@ximian.com>
* gtk/gtkfilesystem.h (struct _GtkFileSystemIface): New * gtk/gtkfilesystem.h (struct _GtkFileSystemIface): New

View File

@ -361,6 +361,9 @@ gtk_file_chooser_get_select_multiple (GtkFileChooser *chooser)
* Gets the filename for the currently selected file in * Gets the filename for the currently selected file in
* the file selector. If multiple files are selected, * the file selector. If multiple files are selected,
* one of the filenames will be returned at random. * one of the filenames will be returned at random.
*
* If the file chooser is in folder mode, this function returns the selected
* folder.
* *
* Return value: The currently selected filename, or %NULL * Return value: The currently selected filename, or %NULL
* if no file is selected, or the selected file can't * if no file is selected, or the selected file can't
@ -629,6 +632,9 @@ gtk_file_chooser_set_current_name (GtkFileChooser *chooser,
* the file selector. If multiple files are selected, * the file selector. If multiple files are selected,
* one of the filenames will be returned at random. * one of the filenames will be returned at random.
* *
* If the file chooser is in folder mode, this function returns the selected
* folder.
*
* Return value: The currently selected URI, or %NULL * Return value: The currently selected URI, or %NULL
* if no file is selected. Free with g_free() * if no file is selected. Free with g_free()
* *

View File

@ -1615,6 +1615,12 @@ gtk_file_chooser_default_set_property (GObject *object,
case GTK_FILE_CHOOSER_PROP_SELECT_MULTIPLE: case GTK_FILE_CHOOSER_PROP_SELECT_MULTIPLE:
{ {
gboolean select_multiple = g_value_get_boolean (value); gboolean select_multiple = g_value_get_boolean (value);
if (impl->action == GTK_FILE_CHOOSER_ACTION_SAVE && select_multiple)
{
g_warning ("Multiple selection mode is not allowed in Save mode");
return;
}
if (select_multiple != impl->select_multiple) if (select_multiple != impl->select_multiple)
{ {
GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->list)); GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->list));
@ -1855,10 +1861,7 @@ set_list_model (GtkFileChooserDefault *impl)
if (impl->list_model) if (impl->list_model)
{ {
g_object_unref (impl->list_model); g_object_unref (impl->list_model);
impl->list_model = NULL;
g_object_unref (impl->sort_model); g_object_unref (impl->sort_model);
impl->sort_model = NULL;
} }
impl->list_model = _gtk_file_system_model_new (impl->file_system, impl->list_model = _gtk_file_system_model_new (impl->file_system,
@ -2117,22 +2120,29 @@ struct get_paths_closure {
static void static void
get_paths_foreach (GtkTreeModel *model, get_paths_foreach (GtkTreeModel *model,
GtkTreePath *path, GtkTreePath *path,
GtkTreeIter *iter, GtkTreeIter *iter,
gpointer data) gpointer data)
{ {
GtkTreePath *child_path;
GtkTreeIter child_iter;
const GtkFilePath *file_path;
struct get_paths_closure *info; struct get_paths_closure *info;
const GtkFilePath *file_path;
GtkFileSystemModel *fs_model;
GtkTreeIter sel_iter;
info = data; info = data;
child_path = gtk_tree_model_sort_convert_path_to_child_path (info->impl->sort_model, path); if (info->impl->folder_mode)
gtk_tree_model_get_iter (GTK_TREE_MODEL (info->impl->list_model), &child_iter, child_path); {
gtk_tree_path_free (child_path); fs_model = info->impl->tree_model;
sel_iter = *iter;
}
else
{
fs_model = info->impl->list_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 (info->impl->list_model, &child_iter); file_path = _gtk_file_system_model_get_path (fs_model, &sel_iter);
info->result = g_slist_prepend (info->result, gtk_file_path_copy (file_path)); info->result = g_slist_prepend (info->result, gtk_file_path_copy (file_path));
} }
@ -2145,41 +2155,48 @@ gtk_file_chooser_default_get_paths (GtkFileChooser *chooser)
if (gtk_file_chooser_get_action (chooser) == GTK_FILE_CHOOSER_ACTION_SAVE) if (gtk_file_chooser_get_action (chooser) == GTK_FILE_CHOOSER_ACTION_SAVE)
{ {
if (!gtk_file_chooser_get_select_multiple (chooser)) GtkFileChooserEntry *chooser_entry = GTK_FILE_CHOOSER_ENTRY (impl->entry);
const GtkFilePath *folder_path = _gtk_file_chooser_entry_get_current_folder (chooser_entry);
const gchar *file_part = _gtk_file_chooser_entry_get_file_part (chooser_entry);
if (file_part != NULL && file_part[0] != '\0')
{ {
GtkFileChooserEntry *chooser_entry = GTK_FILE_CHOOSER_ENTRY (impl->entry); GtkFilePath *selected;
const GtkFilePath *folder_path = _gtk_file_chooser_entry_get_current_folder (chooser_entry); GError *error = NULL;
const gchar *file_part = _gtk_file_chooser_entry_get_file_part (chooser_entry);
if (file_part != NULL && file_part[0] != '\0') selected = gtk_file_system_make_path (impl->file_system, folder_path, file_part, &error);
if (!selected)
{ {
GtkFilePath *selected; char *msg;
GError *error = NULL;
selected = gtk_file_system_make_path (impl->file_system, folder_path, file_part, &error); msg = g_strdup_printf (_("Could not build file name from '%s' and '%s':\n%s"),
gtk_file_path_get_string (folder_path),
if (!selected) file_part,
{ error->message);
char *msg; error_message (impl, msg);
g_free (msg);
msg = g_strdup_printf (_("Could not build file name from '%s' and '%s':\n%s"), return NULL;
gtk_file_path_get_string (folder_path),
file_part,
error->message);
error_message (impl, msg);
g_free (msg);
return NULL;
}
return g_slist_append (NULL, selected);
} }
return g_slist_append (NULL, selected);
} }
} }
if (!impl->sort_model) if (impl->folder_mode)
return NULL; {
if (!impl->tree_model)
return NULL;
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->list)); selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->tree));
}
else
{
if (!impl->sort_model)
return NULL;
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->list));
}
info.result = NULL; info.result = NULL;
info.impl = impl; info.impl = impl;