From a9eaa49d880f9302749d2429b2bf85daabcaa6c2 Mon Sep 17 00:00:00 2001 From: Federico Mena Quintero Date: Sat, 6 Sep 2003 00:50:33 +0000 Subject: [PATCH] New function. (create_directory_tree): New function. (create_file_list): 2003-09-05 Federico Mena Quintero * gtkfilechooserimpldefault.c (create_filter): New function. (create_directory_tree): New function. (create_file_list): New function. (create_filename_entry): New function. (gtk_file_chooser_impl_default_constructor): Use the functions above rather than creating the whole file chooser megawidget here, for readability. This will also let us rearrange the user interface more easily. --- gtk/gtkfilechooserdefault.c | 386 +++++++++++++++++++++--------------- 1 file changed, 230 insertions(+), 156 deletions(-) diff --git a/gtk/gtkfilechooserdefault.c b/gtk/gtkfilechooserdefault.c index b1f5acc87e..dcc52eed57 100644 --- a/gtk/gtkfilechooserdefault.c +++ b/gtk/gtkfilechooserdefault.c @@ -69,10 +69,10 @@ struct _GtkFileChooserImplDefault GtkFileFilter *current_filter; GSList *filters; - + GtkFilePath *current_folder; GtkFilePath *preview_path; - + GtkWidget *preview_frame; guint folder_mode : 1; @@ -185,7 +185,7 @@ _gtk_file_chooser_impl_default_get_type (void) 0, /* n_preallocs */ (GInstanceInitFunc) gtk_file_chooser_impl_default_init, }; - + static const GInterfaceInfo file_chooser_info = { (GInterfaceInitFunc) gtk_file_chooser_impl_default_iface_init, /* interface_init */ @@ -292,45 +292,16 @@ set_preview_widget (GtkFileChooserImplDefault *impl, update_preview_widget_visibility (impl); } -static GObject* -gtk_file_chooser_impl_default_constructor (GType type, - guint n_construct_properties, - GObjectConstructParam *construct_params) +/* Creates the widgets for the filter option menu */ +static GtkWidget * +create_filter (GtkFileChooserImplDefault *impl) { - GtkFileChooserImplDefault *impl; - GtkTreeViewColumn *column; - GtkCellRenderer *renderer; - GObject *object; - GtkWidget *table; - GtkWidget *hpaned; GtkWidget *hbox; GtkWidget *label; - GtkTreeSelection *selection; -#if 0 - GList *focus_chain; -#endif - - object = parent_class->constructor (type, - n_construct_properties, - construct_params); - impl = GTK_FILE_CHOOSER_IMPL_DEFAULT (object); - - g_assert (impl->file_system); - - gtk_widget_push_composite_child (); - - table = gtk_table_new (3, 2, FALSE); - gtk_table_set_col_spacings (GTK_TABLE (table), 6); - gtk_box_pack_start (GTK_BOX (impl), table, TRUE, TRUE, 0); - gtk_widget_show (table); impl->filter_alignment = gtk_alignment_new (0.0, 0.5, 0.0, 1.0); gtk_alignment_set_padding (GTK_ALIGNMENT (impl->filter_alignment), 0, 6, 0, 0); - gtk_table_attach (GTK_TABLE (table), impl->filter_alignment, - 0, 1, 0, 1, - GTK_EXPAND | GTK_FILL, 0, - 0, 0); - /* Don't show filter initially */ + /* Don't show filter initially -- don't gtk_widget_show() the filter_alignment here */ hbox = gtk_hbox_new (FALSE, 6); gtk_container_add (GTK_CONTAINER (impl->filter_alignment), hbox); @@ -351,87 +322,37 @@ gtk_file_chooser_impl_default_constructor (GType type, g_signal_connect (impl->filter_option_menu, "changed", G_CALLBACK (filter_option_menu_changed), impl); - hpaned = gtk_hpaned_new (); - gtk_table_attach (GTK_TABLE (table), hpaned, - 0, 1, 1, 2, - GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, - 0, 0); - gtk_widget_show (hpaned); + return impl->filter_alignment; +} + +/* Creates the widgets for the directory tree */ +static GtkWidget * +create_directory_tree (GtkFileChooserImplDefault *impl) +{ + GtkTreeSelection *selection; + + /* Scrolled window */ impl->tree_scrollwin = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (impl->tree_scrollwin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (impl->tree_scrollwin), GTK_SHADOW_IN); - gtk_paned_add1 (GTK_PANED (hpaned), impl->tree_scrollwin); gtk_widget_show (impl->tree_scrollwin); - + + /* Tree */ + impl->tree = gtk_tree_view_new (); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (impl->tree), FALSE); - + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->tree)); g_signal_connect (selection, "changed", G_CALLBACK (tree_selection_changed), impl); - gtk_paned_set_position (GTK_PANED (hpaned), 200); - gtk_container_add (GTK_CONTAINER (impl->tree_scrollwin), impl->tree); gtk_widget_show (impl->tree); - - impl->list_scrollwin = gtk_scrolled_window_new (NULL, NULL); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (impl->list_scrollwin), - GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (impl->list_scrollwin), - GTK_SHADOW_IN); - gtk_paned_add2 (GTK_PANED (hpaned), impl->list_scrollwin); - gtk_widget_show (impl->list_scrollwin); - - impl->list = gtk_tree_view_new (); - gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (impl->list), TRUE); - gtk_container_add (GTK_CONTAINER (impl->list_scrollwin), impl->list); - gtk_widget_show (impl->list); - - selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->list)); - g_signal_connect (selection, "changed", - G_CALLBACK (list_selection_changed), impl); - hbox = gtk_hbox_new (FALSE, 6); - gtk_table_attach (GTK_TABLE (table), hbox, - 0, 2, 2, 3, - GTK_EXPAND | GTK_FILL, 0, - 0, 6); - gtk_widget_show (hbox); - - label = gtk_label_new_with_mnemonic ("_Location:"); - gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); - gtk_widget_show (label); - - impl->entry = _gtk_file_chooser_entry_new (); - gtk_entry_set_activates_default (GTK_ENTRY (impl->entry), TRUE); - g_signal_connect (impl->entry, "activate", - G_CALLBACK (entry_activate), impl); - - gtk_box_pack_start (GTK_BOX (hbox), impl->entry, TRUE, TRUE, 0); - gtk_widget_show (impl->entry); - - gtk_label_set_mnemonic_widget (GTK_LABEL (label), impl->entry); - - impl->preview_frame = gtk_frame_new ("Preview"); - gtk_table_attach (GTK_TABLE (table), impl->preview_frame, - 1, 2, 0, 2, - 0, GTK_EXPAND | GTK_FILL, - 0, 0); - /* Don't show preview frame initially */ - -#if 0 - focus_chain = g_list_append (NULL, impl->entry); - focus_chain = g_list_append (focus_chain, impl->tree); - focus_chain = g_list_append (focus_chain, impl->list); - gtk_container_set_focus_chain (GTK_CONTAINER (impl), focus_chain); - g_list_free (focus_chain); -#endif - - gtk_widget_pop_composite_child (); + /* Model */ impl->tree_model = _gtk_file_system_model_new (impl->file_system, NULL, -1, GTK_FILE_INFO_DISPLAY_NAME); @@ -440,6 +361,8 @@ gtk_file_chooser_impl_default_constructor (GType type, gtk_tree_view_set_model (GTK_TREE_VIEW (impl->tree), GTK_TREE_MODEL (impl->tree_model)); + /* Column */ + gtk_tree_view_insert_column_with_data_func (GTK_TREE_VIEW (impl->tree), 0, "File name", gtk_cell_renderer_text_new (), @@ -447,25 +370,62 @@ gtk_file_chooser_impl_default_constructor (GType type, gtk_tree_view_set_search_column (GTK_TREE_VIEW (impl->tree), GTK_FILE_SYSTEM_MODEL_DISPLAY_NAME); + return impl->tree_scrollwin; +} + +/* Creates the widgets for the directory tree */ +static GtkWidget * +create_file_list (GtkFileChooserImplDefault *impl) +{ + GtkTreeSelection *selection; + GtkTreeViewColumn *column; + GtkCellRenderer *renderer; + + /* Scrolled window */ + + impl->list_scrollwin = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (impl->list_scrollwin), + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (impl->list_scrollwin), + GTK_SHADOW_IN); + gtk_widget_show (impl->list_scrollwin); + + /* Tree/list view */ + + impl->list = gtk_tree_view_new (); + /* FIXME: hide the headers; look at create_directory_tree() */ + gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (impl->list), TRUE); + gtk_container_add (GTK_CONTAINER (impl->list_scrollwin), impl->list); + gtk_widget_show (impl->list); + + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->list)); + g_signal_connect (selection, "changed", + G_CALLBACK (list_selection_changed), impl); + + /* Filename column */ + column = gtk_tree_view_column_new (); - gtk_tree_view_column_set_title (column, "File name"); + gtk_tree_view_column_set_title (column, "File name"); renderer = gtk_cell_renderer_pixbuf_new (); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_cell_data_func (column, renderer, list_icon_data_func, impl, NULL); gtk_tree_view_column_set_sort_column_id (column, 0); - + renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_cell_data_func (column, renderer, list_name_data_func, impl, NULL); gtk_tree_view_column_set_sort_column_id (column, 0); - + gtk_tree_view_append_column (GTK_TREE_VIEW (impl->list), column); - + + /* Size column */ + column = gtk_tree_view_column_new (); - gtk_tree_view_column_set_title (column, "Size"); + gtk_tree_view_column_set_title (column, "Size"); + renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_cell_data_func (column, renderer, @@ -473,8 +433,122 @@ gtk_file_chooser_impl_default_constructor (GType type, gtk_tree_view_column_set_sort_column_id (column, 1); gtk_tree_view_append_column (GTK_TREE_VIEW (impl->list), column); + return impl->list_scrollwin; +} + +static GtkWidget * +create_filename_entry (GtkFileChooserImplDefault *impl) +{ + GtkWidget *hbox; + GtkWidget *label; + + hbox = gtk_hbox_new (FALSE, 6); + gtk_widget_show (hbox); + + label = gtk_label_new_with_mnemonic ("_Location:"); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + gtk_widget_show (label); + + impl->entry = _gtk_file_chooser_entry_new (); + gtk_entry_set_activates_default (GTK_ENTRY (impl->entry), TRUE); + g_signal_connect (impl->entry, "activate", + G_CALLBACK (entry_activate), impl); _gtk_file_chooser_entry_set_file_system (GTK_FILE_CHOOSER_ENTRY (impl->entry), impl->file_system); + + gtk_box_pack_start (GTK_BOX (hbox), impl->entry, TRUE, TRUE, 0); + gtk_widget_show (impl->entry); + + gtk_label_set_mnemonic_widget (GTK_LABEL (label), impl->entry); + + return hbox; +} + +static GObject* +gtk_file_chooser_impl_default_constructor (GType type, + guint n_construct_properties, + GObjectConstructParam *construct_params) +{ + GtkFileChooserImplDefault *impl; + GObject *object; + GtkWidget *table; + GtkWidget *hpaned; + GtkWidget *widget; +#if 0 + GList *focus_chain; +#endif + + object = parent_class->constructor (type, + n_construct_properties, + construct_params); + impl = GTK_FILE_CHOOSER_IMPL_DEFAULT (object); + + g_assert (impl->file_system); + + gtk_widget_push_composite_child (); + + /* Basic table */ + + table = gtk_table_new (3, 2, FALSE); + gtk_table_set_col_spacings (GTK_TABLE (table), 6); + gtk_box_pack_start (GTK_BOX (impl), table, TRUE, TRUE, 0); + gtk_widget_show (table); + + /* Filter */ + + widget = create_filter (impl); + gtk_table_attach (GTK_TABLE (table), widget, + 0, 1, 0, 1, + GTK_EXPAND | GTK_FILL, 0, + 0, 0); + + /* Paned widget */ + + hpaned = gtk_hpaned_new (); + gtk_table_attach (GTK_TABLE (table), hpaned, + 0, 1, 1, 2, + GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, + 0, 0); + gtk_paned_set_position (GTK_PANED (hpaned), 200); /* FIXME: this sucks */ + gtk_widget_show (hpaned); + + /* Directory tree */ + + widget = create_directory_tree (impl); + gtk_paned_add1 (GTK_PANED (hpaned), widget); + + /* File list */ + + widget = create_file_list (impl); + gtk_paned_add2 (GTK_PANED (hpaned), widget); + + /* Location/filename entry */ + + widget = create_filename_entry (impl); + gtk_table_attach (GTK_TABLE (table), widget, + 0, 2, 2, 3, + GTK_EXPAND | GTK_FILL, 0, + 0, 6); + + /* Preview */ + + impl->preview_frame = gtk_frame_new ("Preview"); + gtk_table_attach (GTK_TABLE (table), impl->preview_frame, + 1, 2, 0, 2, + 0, GTK_EXPAND | GTK_FILL, + 0, 0); + /* Don't show preview frame initially */ + +#if 0 + focus_chain = g_list_append (NULL, impl->entry); + focus_chain = g_list_append (focus_chain, impl->tree); + focus_chain = g_list_append (focus_chain, impl->list); + gtk_container_set_focus_chain (GTK_CONTAINER (impl), focus_chain); + g_list_free (focus_chain); +#endif + + gtk_widget_pop_composite_child (); + return object; } @@ -502,10 +576,10 @@ gtk_file_chooser_impl_default_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) - + { GtkFileChooserImplDefault *impl = GTK_FILE_CHOOSER_IMPL_DEFAULT (object); - + switch (prop_id) { case GTK_FILE_CHOOSER_PROP_ACTION: @@ -528,7 +602,7 @@ gtk_file_chooser_impl_default_set_property (GObject *object, set_current_filter (impl, g_value_get_object (value)); break; case GTK_FILE_CHOOSER_PROP_FOLDER_MODE: - { + { gboolean folder_mode = g_value_get_boolean (value); if (folder_mode != impl->folder_mode) { @@ -559,7 +633,7 @@ gtk_file_chooser_impl_default_set_property (GObject *object, if (select_multiple != impl->select_multiple) { GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->list)); - + impl->select_multiple = select_multiple; gtk_tree_selection_set_mode (selection, (select_multiple ? @@ -582,7 +656,7 @@ gtk_file_chooser_impl_default_set_property (GObject *object, break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; + break; } } @@ -593,7 +667,7 @@ gtk_file_chooser_impl_default_get_property (GObject *object, GParamSpec *pspec) { GtkFileChooserImplDefault *impl = GTK_FILE_CHOOSER_IMPL_DEFAULT (object); - + switch (prop_id) { case GTK_FILE_CHOOSER_PROP_ACTION: @@ -625,7 +699,7 @@ gtk_file_chooser_impl_default_get_property (GObject *object, break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; + break; } } @@ -708,7 +782,7 @@ gtk_file_chooser_impl_default_select_path (GtkFileChooser *chooser, { GtkFileChooserImplDefault *impl = GTK_FILE_CHOOSER_IMPL_DEFAULT (chooser); GtkFilePath *parent_path; - + if (!gtk_file_system_get_parent (impl->file_system, path, &parent_path, NULL)) /* NULL-GError */ return; @@ -768,7 +842,7 @@ gtk_file_chooser_impl_default_unselect_all (GtkFileChooser *chooser) { GtkFileChooserImplDefault *impl = GTK_FILE_CHOOSER_IMPL_DEFAULT (chooser); GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->list)); - + gtk_tree_selection_unselect_all (selection); } @@ -781,16 +855,16 @@ get_paths_foreach (GtkTreeModel *model, GtkTreePath *child_path; GtkTreeIter child_iter; const GtkFilePath *file_path; - + struct { GSList *result; GtkFileChooserImplDefault *impl; } *info = data; - + child_path = gtk_tree_model_sort_convert_path_to_child_path (info->impl->sort_model, path); gtk_tree_model_get_iter (GTK_TREE_MODEL (info->impl->list_model), &child_iter, child_path); gtk_tree_path_free (child_path); - + file_path = _gtk_file_system_model_get_path (info->impl->list_model, &child_iter); info->result = g_slist_prepend (info->result, gtk_file_path_copy (file_path)); } @@ -800,7 +874,7 @@ gtk_file_chooser_impl_default_get_paths (GtkFileChooser *chooser) { GtkFileChooserImplDefault *impl = GTK_FILE_CHOOSER_IMPL_DEFAULT (chooser); GtkTreeSelection *selection; - + struct { GSList *result; GtkFileChooserImplDefault *impl; @@ -810,7 +884,7 @@ gtk_file_chooser_impl_default_get_paths (GtkFileChooser *chooser) return NULL; selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->list)); - + info.impl = impl; gtk_tree_selection_selected_foreach (selection, get_paths_foreach, &info); @@ -821,7 +895,7 @@ static GtkFilePath * gtk_file_chooser_impl_default_get_preview_path (GtkFileChooser *chooser) { GtkFileChooserImplDefault *impl = GTK_FILE_CHOOSER_IMPL_DEFAULT (chooser); - + if (impl->preview_path) return gtk_file_path_copy (impl->preview_path); else @@ -861,7 +935,7 @@ find_filter_menu_item (GtkFileChooserImplDefault *impl, } g_list_free (children); - + return NULL; } @@ -887,11 +961,11 @@ gtk_file_chooser_impl_default_add_filter (GtkFileChooser *chooser, name = gtk_file_filter_get_name (filter); if (!name) name = "Untitled filter"; /* Place-holder, doesn't need to be marked for translation */ - + menu_item = gtk_menu_item_new_with_label (name); g_object_set_data (G_OBJECT (menu_item), "gtk-file-filter", filter); gtk_widget_show (menu_item); - + menu = gtk_option_menu_get_menu (GTK_OPTION_MENU (impl->filter_option_menu)); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); /* Option menus don't react to menu size changes properly */ @@ -910,7 +984,7 @@ gtk_file_chooser_impl_default_remove_filter (GtkFileChooser *chooser, GtkFileChooserImplDefault *impl = GTK_FILE_CHOOSER_IMPL_DEFAULT (chooser); GtkWidget *menu; GtkWidget *menu_item; - + if (!g_slist_find (impl->filters, filter)) { g_warning ("gtk_file_chooser_remove_filter() called on filter not in list\n"); @@ -933,7 +1007,7 @@ gtk_file_chooser_impl_default_remove_filter (GtkFileChooser *chooser, gtk_widget_destroy (menu_item); /* Option menus don't react to menu size changes properly */ gtk_widget_size_request (menu, NULL); - + g_object_unref (filter); if (!impl->filters) @@ -958,14 +1032,14 @@ list_model_filter_func (GtkFileSystemModel *model, GtkFileFilterInfo filter_info; GtkFileFilterFlags needed; gboolean result; - + if (!impl->current_filter) return TRUE; filter_info.contains = GTK_FILE_FILTER_DISPLAY_NAME | GTK_FILE_FILTER_MIME_TYPE; - + needed = gtk_file_filter_get_needed (impl->current_filter); - + filter_info.display_name = gtk_file_info_get_display_name (file_info); filter_info.mime_type = gtk_file_info_get_mime_type (file_info); @@ -1019,7 +1093,7 @@ set_current_filter (GtkFileChooserImplDefault *impl, find_filter_menu_item (impl, filter, &menu_item_index); if (impl->filters && menu_item_index < 0) return; - + if (impl->current_filter) g_object_unref (impl->current_filter); impl->current_filter = filter; @@ -1028,7 +1102,7 @@ set_current_filter (GtkFileChooserImplDefault *impl, g_object_ref (impl->current_filter); gtk_object_sink (GTK_OBJECT (filter)); } - + if (impl->filters) gtk_option_menu_set_history (GTK_OPTION_MENU (impl->filter_option_menu), menu_item_index); @@ -1101,7 +1175,7 @@ open_and_close (GtkTreeView *tree_view, { GtkTreeIter parent_iter; GtkTreeIter next_iter; - + next_iter = iter; if (gtk_tree_model_iter_next (model, &next_iter)) { @@ -1119,7 +1193,7 @@ open_and_close (GtkTreeView *tree_view, next: ; } - + out: gtk_tree_path_free (path); } @@ -1146,11 +1220,11 @@ update_chooser_entry (GtkFileChooserImplDefault *impl) &iter); info = _gtk_file_system_model_get_info (impl->list_model, &child_iter); - + _gtk_file_chooser_entry_set_file_part (GTK_FILE_CHOOSER_ENTRY (impl->entry), gtk_file_info_get_display_name (info)); } - + static void filter_option_menu_changed (GtkOptionMenu *option_menu, GtkFileChooserImplDefault *impl) @@ -1175,31 +1249,31 @@ check_preview_change (GtkFileChooserImplDefault *impl) { GtkTreeSelection *selection; GtkTreeIter iter; - + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->list)); if (gtk_tree_selection_get_selected (selection, NULL, &iter)) { GtkTreeIter child_iter; - + gtk_tree_model_sort_convert_iter_to_child_iter (impl->sort_model, &child_iter, &iter); - + new_path = _gtk_file_system_model_get_path (impl->list_model, &child_iter); } } - + if (new_path != impl->preview_path && !(new_path && impl->preview_path && gtk_file_path_compare (new_path, impl->preview_path) == 0)) { if (impl->preview_path) gtk_file_path_free (impl->preview_path); - + if (new_path) impl->preview_path = gtk_file_path_copy (new_path); else impl->preview_path = NULL; - + g_signal_emit_by_name (impl, "update-preview"); } } @@ -1218,46 +1292,46 @@ tree_selection_changed (GtkTreeSelection *selection, file_path = _gtk_file_system_model_get_path (impl->tree_model, &iter); if (impl->current_folder && gtk_file_path_compare (file_path, impl->current_folder) == 0) return; - + if (impl->current_folder) gtk_file_path_free (impl->current_folder); impl->current_folder = gtk_file_path_copy (file_path); _gtk_file_chooser_entry_set_base_folder (GTK_FILE_CHOOSER_ENTRY (impl->entry), file_path); - + if (impl->list_model) { g_object_unref (impl->list_model); impl->list_model = NULL; - + g_object_unref (impl->sort_model); impl->sort_model = NULL; } - + /* Close the tree up to only the parents of the newly selected * node and it's immediate children are visible. */ path = gtk_tree_model_get_path (GTK_TREE_MODEL (impl->tree_model), &iter); open_and_close (GTK_TREE_VIEW (impl->tree), path); gtk_tree_path_free (path); - + /* Now update the list view to show the new row. */ file_path = _gtk_file_system_model_get_path (impl->tree_model, &iter); - + impl->list_model = _gtk_file_system_model_new (impl->file_system, file_path, 0, GTK_FILE_INFO_ICON | GTK_FILE_INFO_DISPLAY_NAME | - GTK_FILE_INFO_SIZE); + GTK_FILE_INFO_SIZE); _gtk_file_system_model_set_show_folders (impl->list_model, FALSE); install_list_model_filter (impl); - + impl->sort_model = (GtkTreeModelSort *)gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (impl->list_model)); gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (impl->sort_model), 0, name_sort_func, impl, NULL); gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (impl->sort_model), 1, size_sort_func, impl, NULL); gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (impl->sort_model), name_sort_func, impl, NULL); - + gtk_tree_view_set_model (GTK_TREE_VIEW (impl->list), GTK_TREE_MODEL (impl->sort_model)); gtk_tree_view_set_search_column (GTK_TREE_VIEW (impl->list), @@ -1277,7 +1351,7 @@ list_selection_changed (GtkTreeSelection *selection, { update_chooser_entry (impl); check_preview_change (impl); - + g_signal_emit_by_name (impl, "selection-changed", 0); } @@ -1301,12 +1375,12 @@ entry_activate (GtkEntry *entry, GtkFileFolder *folder = NULL; GtkFilePath *subfolder_path = NULL; GtkFileInfo *info = NULL; - + folder = gtk_file_system_get_folder (impl->file_system, folder_path, GTK_FILE_INFO_IS_FOLDER, NULL); /* NULL-GError */ - + if (folder) subfolder_path = gtk_file_system_make_path (impl->file_system, folder_path, @@ -1387,7 +1461,7 @@ list_icon_data_func (GtkTreeViewColumn *tree_column, { GtkWidget *widget = GTK_TREE_VIEW_COLUMN (tree_column)->tree_view; GdkPixbuf *pixbuf = gtk_file_info_render_icon (info, widget, 36); - + g_object_set (cell, "pixbuf", pixbuf, NULL); @@ -1429,7 +1503,7 @@ list_size_data_func (GtkTreeViewColumn *tree_column, { gint64 size = gtk_file_info_get_size (info); gchar *str; - + if (size < (gint64)1024) str = g_strdup_printf ("%d bytes", (gint)size); else if (size < (gint64)1024*1024) @@ -1442,7 +1516,7 @@ list_size_data_func (GtkTreeViewColumn *tree_column, g_object_set (cell, "text", str, NULL); - + g_free (str); }