diff --git a/demos/constraint-editor/constraint-editor-window.c b/demos/constraint-editor/constraint-editor-window.c index 48d092c9da..c4b545c2d8 100644 --- a/demos/constraint-editor/constraint-editor-window.c +++ b/demos/constraint-editor/constraint-editor-window.c @@ -221,9 +221,12 @@ open_cb (GtkWidget *button, GTK_FILE_CHOOSER_ACTION_OPEN, "_Load", "_Cancel"); - gtk_native_dialog_set_modal (GTK_NATIVE_DIALOG (dialog), TRUE); - gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), "."); + + GFile *cwd = g_file_new_for_path ("."); + gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), cwd, NULL); + g_object_unref (cwd); + g_signal_connect (dialog, "response", G_CALLBACK (open_response_cb), self); gtk_native_dialog_show (GTK_NATIVE_DIALOG (dialog)); } @@ -290,14 +293,20 @@ save_response_cb (GtkNativeDialog *dialog, if (response == GTK_RESPONSE_ACCEPT) { GListModel *model; - char *text, *filename; + GFile *file; + char *text; GError *error = NULL; model = constraint_view_get_model (CONSTRAINT_VIEW (self->view)); text = serialize_model (model); - - filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); - if (!g_file_set_contents (filename, text, -1, &error)) + file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog)); + g_file_replace_contents (file, text, -1, + NULL, FALSE, + G_FILE_CREATE_NONE, + NULL, + NULL, + &error); + if (error != NULL) { GtkWidget *dialog; @@ -312,7 +321,9 @@ save_response_cb (GtkNativeDialog *dialog, gtk_widget_show (dialog); g_error_free (error); } - g_free (filename); + + g_free (text); + g_object_unref (file); } gtk_native_dialog_destroy (dialog); @@ -329,9 +340,12 @@ save_cb (GtkWidget *button, GTK_FILE_CHOOSER_ACTION_SAVE, "_Save", "_Cancel"); - gtk_native_dialog_set_modal (GTK_NATIVE_DIALOG (dialog), TRUE); - gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), "."); + + GFile *cwd = g_file_new_for_path ("."); + gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), cwd, NULL); + g_object_unref (cwd); + g_signal_connect (dialog, "response", G_CALLBACK (save_response_cb), self); gtk_native_dialog_show (GTK_NATIVE_DIALOG (dialog)); } diff --git a/demos/gtk-demo/pickers.c b/demos/gtk-demo/pickers.c index fe739f7671..0aebc46809 100644 --- a/demos/gtk-demo/pickers.c +++ b/demos/gtk-demo/pickers.c @@ -50,7 +50,6 @@ do_pickers (GtkWidget *do_widget) gtk_widget_set_hexpand (label, TRUE); picker = gtk_file_chooser_button_new ("Pick a File", GTK_FILE_CHOOSER_ACTION_OPEN); - gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (picker), FALSE); gtk_grid_attach (GTK_GRID (table), label, 0, 2, 1, 1); gtk_grid_attach (GTK_GRID (table), picker, 1, 2, 1, 1); diff --git a/demos/node-editor/node-editor-window.c b/demos/node-editor/node-editor-window.c index 9e880354f3..491b956c41 100644 --- a/demos/node-editor/node-editor-window.c +++ b/demos/node-editor/node-editor-window.c @@ -385,7 +385,11 @@ show_open_filechooser (NodeEditorWindow *self) gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT); gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); - gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), "."); + + GFile *cwd = g_file_new_for_path ("."); + gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), cwd, NULL); + g_object_unref (cwd); + g_signal_connect (dialog, "response", G_CALLBACK (open_response_cb), self); gtk_widget_show (dialog); } @@ -406,13 +410,20 @@ save_response_cb (GtkWidget *dialog, if (response == GTK_RESPONSE_ACCEPT) { - char *text, *filename; + GFile *file; + char *text; GError *error = NULL; text = get_current_text (self->text_buffer); - filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); - if (!g_file_set_contents (filename, text, -1, &error)) + file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog)); + g_file_replace_contents (file, text, -1, + NULL, FALSE, + G_FILE_CREATE_NONE, + NULL, + NULL, + &error); + if (error != NULL) { GtkWidget *dialog; @@ -427,7 +438,9 @@ save_response_cb (GtkWidget *dialog, gtk_widget_show (dialog); g_error_free (error); } - g_free (filename); + + g_free (text); + g_object_unref (file); } gtk_widget_destroy (dialog); @@ -448,8 +461,11 @@ save_cb (GtkWidget *button, gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT); gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); - gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE); - gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), "."); + + GFile *cwd = g_file_new_for_path ("."); + gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), cwd, NULL); + g_object_unref (cwd); + g_signal_connect (dialog, "response", G_CALLBACK (save_response_cb), self); gtk_widget_show (dialog); } @@ -523,10 +539,10 @@ export_image_response_cb (GtkWidget *dialog, if (response == GTK_RESPONSE_ACCEPT) { - char *filename; + GFile *file; - filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); - if (!gdk_texture_save_to_png (texture, filename)) + file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog)); + if (!gdk_texture_save_to_png (texture, g_file_peek_path (file))) { GtkWidget *message_dialog; @@ -538,7 +554,8 @@ export_image_response_cb (GtkWidget *dialog, g_signal_connect (message_dialog, "response", G_CALLBACK (gtk_widget_destroy), NULL); gtk_widget_show (message_dialog); } - g_free (filename); + + g_object_unref (file); } gtk_widget_destroy (dialog); @@ -565,7 +582,6 @@ export_image_cb (GtkWidget *button, gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT); gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); - gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE); g_signal_connect (dialog, "response", G_CALLBACK (export_image_response_cb), texture); gtk_widget_show (dialog); } diff --git a/docs/reference/gtk/gtk4-sections.txt b/docs/reference/gtk/gtk4-sections.txt index 548c4921d1..d186f6ffb9 100644 --- a/docs/reference/gtk/gtk4-sections.txt +++ b/docs/reference/gtk/gtk4-sections.txt @@ -1128,63 +1128,33 @@ GTK_FILE_CHOOSER_ERROR GtkFileChooserError gtk_file_chooser_set_action gtk_file_chooser_get_action -gtk_file_chooser_set_local_only -gtk_file_chooser_get_local_only gtk_file_chooser_set_select_multiple gtk_file_chooser_get_select_multiple -gtk_file_chooser_set_show_hidden -gtk_file_chooser_get_show_hidden -gtk_file_chooser_set_do_overwrite_confirmation -gtk_file_chooser_get_do_overwrite_confirmation gtk_file_chooser_set_create_folders gtk_file_chooser_get_create_folders gtk_file_chooser_set_current_name gtk_file_chooser_get_current_name -gtk_file_chooser_get_filename -gtk_file_chooser_set_filename -gtk_file_chooser_select_filename -gtk_file_chooser_unselect_filename + +gtk_file_chooser_get_file +gtk_file_chooser_set_file +gtk_file_chooser_select_file +gtk_file_chooser_unselect_file gtk_file_chooser_select_all gtk_file_chooser_unselect_all -gtk_file_chooser_get_filenames +gtk_file_chooser_get_files gtk_file_chooser_set_current_folder gtk_file_chooser_get_current_folder -gtk_file_chooser_get_uri -gtk_file_chooser_set_uri -gtk_file_chooser_select_uri -gtk_file_chooser_unselect_uri -gtk_file_chooser_get_uris -gtk_file_chooser_set_current_folder_uri -gtk_file_chooser_get_current_folder_uri -gtk_file_chooser_set_preview_widget -gtk_file_chooser_get_preview_widget -gtk_file_chooser_set_preview_widget_active -gtk_file_chooser_get_preview_widget_active -gtk_file_chooser_set_use_preview_label -gtk_file_chooser_get_use_preview_label -gtk_file_chooser_get_preview_filename -gtk_file_chooser_get_preview_uri -gtk_file_chooser_set_extra_widget -gtk_file_chooser_get_extra_widget + gtk_file_chooser_add_filter gtk_file_chooser_remove_filter gtk_file_chooser_list_filters gtk_file_chooser_set_filter gtk_file_chooser_get_filter + gtk_file_chooser_add_shortcut_folder gtk_file_chooser_remove_shortcut_folder gtk_file_chooser_list_shortcut_folders -gtk_file_chooser_add_shortcut_folder_uri -gtk_file_chooser_remove_shortcut_folder_uri -gtk_file_chooser_list_shortcut_folder_uris -gtk_file_chooser_get_current_folder_file -gtk_file_chooser_get_file -gtk_file_chooser_get_files -gtk_file_chooser_get_preview_file -gtk_file_chooser_select_file -gtk_file_chooser_set_current_folder_file -gtk_file_chooser_set_file -gtk_file_chooser_unselect_file + gtk_file_chooser_add_choice gtk_file_chooser_remove_choice gtk_file_chooser_set_choice diff --git a/docs/reference/gtk/migrating-3to4.xml b/docs/reference/gtk/migrating-3to4.xml index e08d97f316..26a2a0ec6a 100644 --- a/docs/reference/gtk/migrating-3to4.xml +++ b/docs/reference/gtk/migrating-3to4.xml @@ -946,7 +946,40 @@ as gdk_drop_read_value_async() or gdk_drop_read_text_async(). + +
+ Update to GtkFileChooser API changes + + GtkFileChooser moved to a GFile-based API. If you need to convert a + path or a URI, use g_file_new_for_path(), g_file_new_for_commandline_arg(), + or g_file_new_for_uri(); similarly, if you need to get a path or a URI + from a GFile, use g_file_get_path(), or g_file_get_uri(). With the + removal or path and URI-based functions, the "local-only" property has + been removed; GFile can be used to access non-local as well as local + resources. + + + The GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER action has been removed. Use + %GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, instead. If a new folder is needed, + the user can create one. + + + The "confirm-overwrite" signal, and the "do-overwrite-confirmation" + property have been removed from GtkFileChooser. The file chooser widgets + will automatically handle the confirmation of overwriting a file when + using GTK_FILE_CHOOSER_ACTION_SAVE. + + + GtkFileChooser does not support a custom extra widget any more. If you + need to add extra widgets, use gtk_file_chooser_add_choice() instead. + + + GtkFileChooser does not support a custom preview widget any more. If + you need to show a custom preview, you can create your own GtkDialog + with a GtkFileChooserWidget and your own preview widget that you + update whenever the #GtkFileChooser::selection-changed signal is + emitted. + +
- - diff --git a/gtk/gtkfilechooser.c b/gtk/gtkfilechooser.c index b858f83251..549c56279b 100644 --- a/gtk/gtkfilechooser.c +++ b/gtk/gtkfilechooser.c @@ -58,125 +58,24 @@ * # File Names and Encodings * * When the user is finished selecting files in a - * #GtkFileChooser, your program can get the selected names - * either as filenames or as URIs. For URIs, the normal escaping - * rules are applied if the URI contains non-ASCII characters. - * However, filenames are always returned in - * the character set specified by the - * `G_FILENAME_ENCODING` environment variable. - * Please see the GLib documentation for more details about this - * variable. + * #GtkFileChooser, your program can get the selected filenames as + * #GFiles. * - * This means that while you can pass the result of - * gtk_file_chooser_get_filename() to open() or fopen(), - * you may not be able to directly set it as the text of a - * #GtkLabel widget unless you convert it first to UTF-8, - * which all GTK+ widgets expect. You should use g_filename_to_utf8() - * to convert filenames into strings that can be passed to GTK+ - * widgets. - * - * # Adding a Preview Widget - * - * You can add a custom preview widget to a file chooser and then - * get notification about when the preview needs to be updated. - * To install a preview widget, use - * gtk_file_chooser_set_preview_widget(). Then, connect to the - * #GtkFileChooser::update-preview signal to get notified when - * you need to update the contents of the preview. - * - * Your callback should use - * gtk_file_chooser_get_preview_filename() to see what needs - * previewing. Once you have generated the preview for the - * corresponding file, you must call - * gtk_file_chooser_set_preview_widget_active() with a boolean - * flag that indicates whether your callback could successfully - * generate a preview. - * - * ## Example: Using a Preview Widget ## {#gtkfilechooser-preview} - * |[ - * { - * GtkImage *preview; - * - * ... - * - * preview = gtk_image_new (); - * - * gtk_file_chooser_set_preview_widget (my_file_chooser, preview); - * g_signal_connect (my_file_chooser, "update-preview", - * G_CALLBACK (update_preview_cb), preview); - * } - * - * static void - * update_preview_cb (GtkFileChooser *file_chooser, gpointer data) - * { - * GtkWidget *preview; - * char *filename; - * GdkPixbuf *pixbuf; - * gboolean have_preview; - * - * preview = GTK_WIDGET (data); - * filename = gtk_file_chooser_get_preview_filename (file_chooser); - * - * pixbuf = gdk_pixbuf_new_from_file_at_size (filename, 128, 128, NULL); - * have_preview = (pixbuf != NULL); - * g_free (filename); - * - * gtk_image_set_from_pixbuf (GTK_IMAGE (preview), pixbuf); - * if (pixbuf) - * g_object_unref (pixbuf); - * - * gtk_file_chooser_set_preview_widget_active (file_chooser, have_preview); - * } - * ]| - * - * # Adding Extra Widgets + * # Adding options * * You can add extra widgets to a file chooser to provide options - * that are not present in the default design. For example, you - * can add a toggle button to give the user the option to open a - * file in read-only mode. You can use - * gtk_file_chooser_set_extra_widget() to insert additional - * widgets in a file chooser. - * - * An example for adding extra widgets: - * |[ - * - * GtkWidget *toggle; - * - * ... - * - * toggle = gtk_check_button_new_with_label ("Open file read-only"); - * gtk_widget_show (toggle); - * gtk_file_chooser_set_extra_widget (my_file_chooser, toggle); - * } - * ]| - * - * If you want to set more than one extra widget in the file - * chooser, you can a container such as a #GtkBox or a #GtkGrid - * and include your widgets in it. Then, set the container as - * the whole extra widget. + * that are not present in the default design, by using + * gtk_file_chooser_add_choice(). Each choice has an identifier and + * a user visible label; additionally, each choice can have multiple + * options. If a choice has no option, it will be rendered as a + * check button with the given label; if a choice has options, it will + * be rendered as a combo box. */ typedef GtkFileChooserIface GtkFileChooserInterface; G_DEFINE_INTERFACE (GtkFileChooser, gtk_file_chooser, G_TYPE_OBJECT); -static gboolean -confirm_overwrite_accumulator (GSignalInvocationHint *ihint, - GValue *return_accu, - const GValue *handler_return, - gpointer dummy) -{ - gboolean continue_emission; - GtkFileChooserConfirmation conf; - - conf = g_value_get_enum (handler_return); - g_value_set_enum (return_accu, conf); - continue_emission = (conf == GTK_FILE_CHOOSER_CONFIRMATION_CONFIRM); - - return continue_emission; -} - static void gtk_file_chooser_default_init (GtkFileChooserInterface *iface) { @@ -197,16 +96,14 @@ gtk_file_chooser_default_init (GtkFileChooserInterface *iface) * * See also: gtk_file_chooser_set_current_folder(), * gtk_file_chooser_get_current_folder(), - * gtk_file_chooser_set_current_folder_uri(), - * gtk_file_chooser_get_current_folder_uri(). */ g_signal_new (I_("current-folder-changed"), - iface_type, - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (GtkFileChooserIface, current_folder_changed), - NULL, NULL, - NULL, - G_TYPE_NONE, 0); + iface_type, + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GtkFileChooserIface, current_folder_changed), + NULL, NULL, + NULL, + G_TYPE_NONE, 0); /** * GtkFileChooser::selection-changed: @@ -220,55 +117,14 @@ gtk_file_chooser_default_init (GtkFileChooserInterface *iface) * Normally you do not need to connect to this signal, as it is easier to wait * for the file chooser to finish running, and then to get the list of * selected files using the functions mentioned below. - * - * See also: gtk_file_chooser_select_filename(), - * gtk_file_chooser_unselect_filename(), gtk_file_chooser_get_filename(), - * gtk_file_chooser_get_filenames(), gtk_file_chooser_select_uri(), - * gtk_file_chooser_unselect_uri(), gtk_file_chooser_get_uri(), - * gtk_file_chooser_get_uris(). */ g_signal_new (I_("selection-changed"), - iface_type, - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (GtkFileChooserIface, selection_changed), - NULL, NULL, - NULL, - G_TYPE_NONE, 0); - - /** - * GtkFileChooser::update-preview: - * @chooser: the object which received the signal. - * - * This signal is emitted when the preview in a file chooser should be - * regenerated. For example, this can happen when the currently selected file - * changes. You should use this signal if you want your file chooser to have - * a preview widget. - * - * Once you have installed a preview widget with - * gtk_file_chooser_set_preview_widget(), you should update it when this - * signal is emitted. You can use the functions - * gtk_file_chooser_get_preview_filename() or - * gtk_file_chooser_get_preview_uri() to get the name of the file to preview. - * Your widget may not be able to preview all kinds of files; your callback - * must call gtk_file_chooser_set_preview_widget_active() to inform the file - * chooser about whether the preview was generated successfully or not. - * - * Please see the example code in - * [Using a Preview Widget][gtkfilechooser-preview]. - * - * See also: gtk_file_chooser_set_preview_widget(), - * gtk_file_chooser_set_preview_widget_active(), - * gtk_file_chooser_set_use_preview_label(), - * gtk_file_chooser_get_preview_filename(), - * gtk_file_chooser_get_preview_uri(). - */ - g_signal_new (I_("update-preview"), - iface_type, - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (GtkFileChooserIface, update_preview), - NULL, NULL, - NULL, - G_TYPE_NONE, 0); + iface_type, + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GtkFileChooserIface, selection_changed), + NULL, NULL, + NULL, + G_TYPE_NONE, 0); /** * GtkFileChooser::file-activated: @@ -282,164 +138,35 @@ gtk_file_chooser_default_init (GtkFileChooserInterface *iface) * by #GtkFileChooserDialog to know when to activate the default button in the * dialog. * - * See also: gtk_file_chooser_get_filename(), - * gtk_file_chooser_get_filenames(), gtk_file_chooser_get_uri(), - * gtk_file_chooser_get_uris(). + * See also: gtk_file_chooser_get_file(), gtk_file_chooser_get_files() */ g_signal_new (I_("file-activated"), - iface_type, - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (GtkFileChooserIface, file_activated), - NULL, NULL, - NULL, - G_TYPE_NONE, 0); - - /** - * GtkFileChooser::confirm-overwrite: - * @chooser: the object which received the signal. - * - * This signal gets emitted whenever it is appropriate to present a - * confirmation dialog when the user has selected a file name that - * already exists. The signal only gets emitted when the file - * chooser is in %GTK_FILE_CHOOSER_ACTION_SAVE mode. - * - * Most applications just need to turn on the - * #GtkFileChooser:do-overwrite-confirmation property (or call the - * gtk_file_chooser_set_do_overwrite_confirmation() function), and - * they will automatically get a standard confirmation dialog. - * Applications which need to customize this behavior should do - * that, and also connect to the #GtkFileChooser::confirm-overwrite - * signal. - * - * A signal handler for this signal must return a - * #GtkFileChooserConfirmation value, which indicates the action to - * take. If the handler determines that the user wants to select a - * different filename, it should return - * %GTK_FILE_CHOOSER_CONFIRMATION_SELECT_AGAIN. If it determines - * that the user is satisfied with his choice of file name, it - * should return %GTK_FILE_CHOOSER_CONFIRMATION_ACCEPT_FILENAME. - * On the other hand, if it determines that the standard confirmation - * dialog should be used, it should return - * %GTK_FILE_CHOOSER_CONFIRMATION_CONFIRM. The following example - * illustrates this. - * - * ## Custom confirmation ## {#gtkfilechooser-confirmation} - * - * |[ - * static GtkFileChooserConfirmation - * confirm_overwrite_callback (GtkFileChooser *chooser, gpointer data) - * { - * char *uri; - * - * uri = gtk_file_chooser_get_uri (chooser); - * - * if (is_uri_read_only (uri)) - * { - * if (user_wants_to_replace_read_only_file (uri)) - * return GTK_FILE_CHOOSER_CONFIRMATION_ACCEPT_FILENAME; - * else - * return GTK_FILE_CHOOSER_CONFIRMATION_SELECT_AGAIN; - * } else - * return GTK_FILE_CHOOSER_CONFIRMATION_CONFIRM; // fall back to the default dialog - * } - * - * ... - * - * chooser = gtk_file_chooser_dialog_new (...); - * - * gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE); - * g_signal_connect (chooser, "confirm-overwrite", - * G_CALLBACK (confirm_overwrite_callback), NULL); - * - * if (gtk_dialog_run (chooser) == GTK_RESPONSE_ACCEPT) - * save_to_file (gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (chooser)); - * - * gtk_widget_destroy (chooser); - * ]| - * - * Returns: a #GtkFileChooserConfirmation value that indicates which - * action to take after emitting the signal. - */ - g_signal_new (I_("confirm-overwrite"), - iface_type, - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (GtkFileChooserIface, confirm_overwrite), - confirm_overwrite_accumulator, NULL, - _gtk_marshal_ENUM__VOID, - GTK_TYPE_FILE_CHOOSER_CONFIRMATION, 0); - - g_object_interface_install_property (iface, - g_param_spec_enum ("action", - P_("Action"), - P_("The type of operation that the file selector is performing"), - GTK_TYPE_FILE_CHOOSER_ACTION, - GTK_FILE_CHOOSER_ACTION_OPEN, - GTK_PARAM_READWRITE)); - g_object_interface_install_property (iface, - g_param_spec_object ("filter", - P_("Filter"), - P_("The current filter for selecting which files are displayed"), - GTK_TYPE_FILE_FILTER, - GTK_PARAM_READWRITE)); - g_object_interface_install_property (iface, - g_param_spec_boolean ("local-only", - P_("Local Only"), - P_("Whether the selected file(s) should be limited to local file: URLs"), - FALSE, - GTK_PARAM_READWRITE)); - g_object_interface_install_property (iface, - g_param_spec_object ("preview-widget", - P_("Preview widget"), - P_("Application supplied widget for custom previews."), - GTK_TYPE_WIDGET, - GTK_PARAM_READWRITE)); - g_object_interface_install_property (iface, - g_param_spec_boolean ("preview-widget-active", - P_("Preview Widget Active"), - P_("Whether the application supplied widget for custom previews should be shown."), - TRUE, - GTK_PARAM_READWRITE)); - g_object_interface_install_property (iface, - g_param_spec_boolean ("use-preview-label", - P_("Use Preview Label"), - P_("Whether to display a label with the name of the previewed file."), - TRUE, - GTK_PARAM_READWRITE)); - g_object_interface_install_property (iface, - g_param_spec_object ("extra-widget", - P_("Extra widget"), - P_("Application supplied widget for extra options."), - GTK_TYPE_WIDGET, - GTK_PARAM_READWRITE)); - g_object_interface_install_property (iface, - g_param_spec_boolean ("select-multiple", - P_("Select Multiple"), - P_("Whether to allow multiple files to be selected"), - FALSE, - GTK_PARAM_READWRITE)); + iface_type, + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GtkFileChooserIface, file_activated), + NULL, NULL, + NULL, + G_TYPE_NONE, 0); g_object_interface_install_property (iface, - g_param_spec_boolean ("show-hidden", - P_("Show Hidden"), - P_("Whether the hidden files and folders should be displayed"), - FALSE, - GTK_PARAM_READWRITE)); - - /** - * GtkFileChooser:do-overwrite-confirmation: - * - * Whether a file chooser in %GTK_FILE_CHOOSER_ACTION_SAVE mode - * will present an overwrite confirmation dialog if the user - * selects a file name that already exists. - */ + g_param_spec_enum ("action", + P_("Action"), + P_("The type of operation that the file selector is performing"), + GTK_TYPE_FILE_CHOOSER_ACTION, + GTK_FILE_CHOOSER_ACTION_OPEN, + GTK_PARAM_READWRITE)); g_object_interface_install_property (iface, - g_param_spec_boolean ("do-overwrite-confirmation", - P_("Do overwrite confirmation"), - P_("Whether a file chooser in save mode " - "will present an overwrite confirmation dialog " - "if necessary."), - FALSE, - GTK_PARAM_READWRITE)); + g_param_spec_object ("filter", + P_("Filter"), + P_("The current filter for selecting which files are displayed"), + GTK_TYPE_FILE_FILTER, + GTK_PARAM_READWRITE)); + g_object_interface_install_property (iface, + g_param_spec_boolean ("select-multiple", + P_("Select Multiple"), + P_("Whether to allow multiple files to be selected"), + FALSE, + GTK_PARAM_READWRITE)); /** * GtkFileChooser:create-folders: @@ -448,12 +175,12 @@ gtk_file_chooser_default_init (GtkFileChooserInterface *iface) * will offer the user to create new folders. */ g_object_interface_install_property (iface, - g_param_spec_boolean ("create-folders", - P_("Allow folder creation"), - P_("Whether a file chooser not in open mode " - "will offer the user to create new folders."), - TRUE, - GTK_PARAM_READWRITE)); + g_param_spec_boolean ("create-folders", + P_("Allow folder creation"), + P_("Whether a file chooser not in open mode " + "will offer the user to create new folders."), + TRUE, + GTK_PARAM_READWRITE)); } /** @@ -482,7 +209,7 @@ gtk_file_chooser_error_quark (void) **/ void gtk_file_chooser_set_action (GtkFileChooser *chooser, - GtkFileChooserAction action) + GtkFileChooserAction action) { g_return_if_fail (GTK_IS_FILE_CHOOSER (chooser)); @@ -510,55 +237,6 @@ gtk_file_chooser_get_action (GtkFileChooser *chooser) return action; } -/** - * gtk_file_chooser_set_local_only: - * @chooser: a #GtkFileChooser - * @local_only: %TRUE if only local files can be selected - * - * Sets whether only local files can be selected in the - * file selector. If @local_only is %TRUE (the default is %FALSE), - * then the selected file or files are guaranteed to be - * accessible through the operating system’s native file - * system and therefore the application only - * needs to worry about the filename functions in - * #GtkFileChooser, like gtk_file_chooser_get_filename(), - * rather than the URI functions like - * gtk_file_chooser_get_uri(), - * - * On some systems non-native files may still be - * available using the native filesystem via a userspace - * filesystem (FUSE). - **/ -void -gtk_file_chooser_set_local_only (GtkFileChooser *chooser, - gboolean local_only) -{ - g_return_if_fail (GTK_IS_FILE_CHOOSER (chooser)); - - g_object_set (chooser, "local-only", local_only, NULL); -} - -/** - * gtk_file_chooser_get_local_only: - * @chooser: a #GtkFileChooser - * - * Gets whether only local files can be selected in the - * file selector. See gtk_file_chooser_set_local_only() - * - * Returns: %TRUE if only local files can be selected. - **/ -gboolean -gtk_file_chooser_get_local_only (GtkFileChooser *chooser) -{ - gboolean local_only; - - g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), FALSE); - - g_object_get (chooser, "local-only", &local_only, NULL); - - return local_only; -} - /** * gtk_file_chooser_set_select_multiple: * @chooser: a #GtkFileChooser @@ -570,7 +248,7 @@ gtk_file_chooser_get_local_only (GtkFileChooser *chooser) **/ void gtk_file_chooser_set_select_multiple (GtkFileChooser *chooser, - gboolean select_multiple) + gboolean select_multiple) { g_return_if_fail (GTK_IS_FILE_CHOOSER (chooser)); @@ -609,7 +287,7 @@ gtk_file_chooser_get_select_multiple (GtkFileChooser *chooser) **/ void gtk_file_chooser_set_create_folders (GtkFileChooser *chooser, - gboolean create_folders) + gboolean create_folders) { g_return_if_fail (GTK_IS_FILE_CHOOSER (chooser)); @@ -637,285 +315,6 @@ gtk_file_chooser_get_create_folders (GtkFileChooser *chooser) return create_folders; } -/** - * gtk_file_chooser_get_filename: - * @chooser: a #GtkFileChooser - * - * Gets the filename for the currently selected file in - * the file selector. The filename is returned as an absolute path. If - * multiple files are selected, one of the filenames will be returned at - * random. - * - * If the file chooser is in folder mode, this function returns the selected - * folder. - * - * Returns: (nullable) (type filename): The currently selected filename, - * or %NULL if no file is selected, or the selected file can't - * be represented with a local filename. Free with g_free(). - **/ -gchar * -gtk_file_chooser_get_filename (GtkFileChooser *chooser) -{ - GFile *file; - gchar *result = NULL; - - g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), NULL); - - file = gtk_file_chooser_get_file (chooser); - - if (file) - { - result = g_file_get_path (file); - g_object_unref (file); - } - - return result; -} - -/** - * gtk_file_chooser_set_filename: - * @chooser: a #GtkFileChooser - * @filename: (type filename): the filename to set as current - * - * Sets @filename as the current filename for the file chooser, by changing to - * the file’s parent folder and actually selecting the file in list; all other - * files will be unselected. If the @chooser is in - * %GTK_FILE_CHOOSER_ACTION_SAVE mode, the file’s base name will also appear in - * the dialog’s file name entry. - * - * Note that the file must exist, or nothing will be done except - * for the directory change. - * - * You should use this function only when implementing a save - * dialog for which you already have a file name to which - * the user may save. For example, when the user opens an existing file and - * then does Save As... to save a copy or - * a modified version. If you don’t have a file name already — for - * example, if the user just created a new file and is saving it for the first - * time, do not call this function. Instead, use something similar to this: - * |[ - * if (document_is_new) - * { - * // the user just created a new document - * gtk_file_chooser_set_current_name (chooser, "Untitled document"); - * } - * else - * { - * // the user edited an existing document - * gtk_file_chooser_set_filename (chooser, existing_filename); - * } - * ]| - * - * In the first case, the file chooser will present the user with useful suggestions - * as to where to save his new file. In the second case, the file’s existing location - * is already known, so the file chooser will use it. - * - * Returns: Not useful. - **/ -gboolean -gtk_file_chooser_set_filename (GtkFileChooser *chooser, - const gchar *filename) -{ - g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), FALSE); - - gtk_file_chooser_unselect_all (chooser); - return gtk_file_chooser_select_filename (chooser, filename); -} - -/** - * gtk_file_chooser_select_filename: - * @chooser: a #GtkFileChooser - * @filename: (type filename): the filename to select - * - * Selects a filename. If the file name isn’t in the current - * folder of @chooser, then the current folder of @chooser will - * be changed to the folder containing @filename. - * - * Returns: Not useful. - * - * See also: gtk_file_chooser_set_filename() - **/ -gboolean -gtk_file_chooser_select_filename (GtkFileChooser *chooser, - const gchar *filename) -{ - GFile *file; - gboolean result; - - g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), FALSE); - g_return_val_if_fail (filename != NULL, FALSE); - - file = g_file_new_for_path (filename); - result = gtk_file_chooser_select_file (chooser, file, NULL); - g_object_unref (file); - - return result; -} - -/** - * gtk_file_chooser_unselect_filename: - * @chooser: a #GtkFileChooser - * @filename: (type filename): the filename to unselect - * - * Unselects a currently selected filename. If the filename - * is not in the current directory, does not exist, or - * is otherwise not currently selected, does nothing. - **/ -void -gtk_file_chooser_unselect_filename (GtkFileChooser *chooser, - const char *filename) -{ - GFile *file; - - g_return_if_fail (GTK_IS_FILE_CHOOSER (chooser)); - g_return_if_fail (filename != NULL); - - file = g_file_new_for_path (filename); - gtk_file_chooser_unselect_file (chooser, file); - g_object_unref (file); -} - -/* Converts a list of GFile* to a list of strings using the specified function */ -static GSList * -files_to_strings (GSList *files, - gchar * (*convert_func) (GFile *file)) -{ - GSList *strings; - - strings = NULL; - - for (; files; files = files->next) - { - GFile *file; - gchar *string; - - file = files->data; - string = (* convert_func) (file); - - if (string) - strings = g_slist_prepend (strings, string); - } - - return g_slist_reverse (strings); -} - -static gchar * -file_to_uri_with_native_path (GFile *file) -{ - gchar *result = NULL; - gchar *native; - - native = g_file_get_path (file); - if (native) - { - result = g_filename_to_uri (native, NULL, NULL); /* NULL-GError */ - g_free (native); - } - - return result; -} - -/** - * gtk_file_chooser_get_filenames: - * @chooser: a #GtkFileChooser - * - * Lists all the selected files and subfolders in the current folder of - * @chooser. The returned names are full absolute paths. If files in the current - * folder cannot be represented as local filenames they will be ignored. (See - * gtk_file_chooser_get_uris()) - * - * Returns: (element-type filename) (transfer full): a #GSList - * containing the filenames of all selected files and subfolders in - * the current folder. Free the returned list with g_slist_free(), - * and the filenames with g_free(). - **/ -GSList * -gtk_file_chooser_get_filenames (GtkFileChooser *chooser) -{ - GSList *files, *result; - - g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), NULL); - - files = gtk_file_chooser_get_files (chooser); - - result = files_to_strings (files, g_file_get_path); - g_slist_free_full (files, g_object_unref); - - return result; -} - -/** - * gtk_file_chooser_set_current_folder: - * @chooser: a #GtkFileChooser - * @filename: (type filename): the full path of the new current folder - * - * Sets the current folder for @chooser from a local filename. - * The user will be shown the full contents of the current folder, - * plus user interface elements for navigating to other folders. - * - * In general, you should not use this function. See the - * [section on setting up a file chooser dialog][gtkfilechooserdialog-setting-up] - * for the rationale behind this. - * - * Returns: Not useful. - **/ -gboolean -gtk_file_chooser_set_current_folder (GtkFileChooser *chooser, - const gchar *filename) -{ - GFile *file; - gboolean result; - - g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), FALSE); - g_return_val_if_fail (filename != NULL, FALSE); - - file = g_file_new_for_path (filename); - result = gtk_file_chooser_set_current_folder_file (chooser, file, NULL); - g_object_unref (file); - - return result; -} - -/** - * gtk_file_chooser_get_current_folder: - * @chooser: a #GtkFileChooser - * - * Gets the current folder of @chooser as a local filename. - * See gtk_file_chooser_set_current_folder(). - * - * Note that this is the folder that the file chooser is currently displaying - * (e.g. "/home/username/Documents"), which is not the same - * as the currently-selected folder if the chooser is in - * %GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER mode - * (e.g. "/home/username/Documents/selected-folder/". To get the - * currently-selected folder in that mode, use gtk_file_chooser_get_uri() as the - * usual way to get the selection. - * - * Returns: (nullable) (type filename): the full path of the current - * folder, or %NULL if the current path cannot be represented as a local - * filename. Free with g_free(). This function will also return - * %NULL if the file chooser was unable to load the last folder that - * was requested from it; for example, as would be for calling - * gtk_file_chooser_set_current_folder() on a nonexistent folder. - **/ -gchar * -gtk_file_chooser_get_current_folder (GtkFileChooser *chooser) -{ - GFile *file; - gchar *filename; - - g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), NULL); - - file = gtk_file_chooser_get_current_folder_file (chooser); - if (!file) - return NULL; - - filename = g_file_get_path (file); - g_object_unref (file); - - return filename; -} - /** * gtk_file_chooser_set_current_name: * @chooser: a #GtkFileChooser @@ -928,13 +327,14 @@ gtk_file_chooser_get_current_folder (GtkFileChooser *chooser) * pass “Untitled.doc” or a similarly suitable suggestion for the @name. * * If you want to preselect a particular existing file, you should use - * gtk_file_chooser_set_filename() or gtk_file_chooser_set_uri() instead. + * gtk_file_chooser_set_file() instead. + * * Please see the documentation for those functions for an example of using * gtk_file_chooser_set_current_name() as well. **/ void gtk_file_chooser_set_current_name (GtkFileChooser *chooser, - const gchar *name) + const gchar *name) { g_return_if_fail (GTK_IS_FILE_CHOOSER (chooser)); g_return_if_fail (name != NULL); @@ -950,10 +350,7 @@ gtk_file_chooser_set_current_name (GtkFileChooser *chooser, * text entry for “Name”. * * This is meant to be used in save dialogs, to get the currently typed filename - * when the file itself does not exist yet. For example, an application that - * adds a custom extra widget to the file chooser for “file format” may want to - * change the extension of the typed filename based on the chosen format, say, - * from “.jpg” to “.png”. + * when the file itself does not exist yet. * * Returns: The raw text from the file chooser’s “Name” entry. Free this with * g_free(). Note that this string is not a full pathname or URI; it is @@ -968,145 +365,6 @@ gtk_file_chooser_get_current_name (GtkFileChooser *chooser) return GTK_FILE_CHOOSER_GET_IFACE (chooser)->get_current_name (chooser); } -/** - * gtk_file_chooser_get_uri: - * @chooser: a #GtkFileChooser - * - * Gets the URI for the currently selected file in - * the file selector. If multiple files are selected, - * one of the filenames will be returned at random. - * - * If the file chooser is in folder mode, this function returns the selected - * folder. - * - * Returns: (nullable) (transfer full): The currently selected URI, or %NULL - * if no file is selected. If gtk_file_chooser_set_local_only() is set to - * %TRUE (the default) a local URI will be returned for any FUSE locations. - * Free with g_free() - **/ -gchar * -gtk_file_chooser_get_uri (GtkFileChooser *chooser) -{ - GFile *file; - gchar *result = NULL; - - g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), NULL); - - file = gtk_file_chooser_get_file (chooser); - if (file) - { - if (gtk_file_chooser_get_local_only (chooser)) - result = file_to_uri_with_native_path (file); - else - result = g_file_get_uri (file); - - g_object_unref (file); - } - - return result; -} - -/** - * gtk_file_chooser_set_uri: - * @chooser: a #GtkFileChooser - * @uri: the URI to set as current - * - * Sets the file referred to by @uri as the current file for the file chooser, - * by changing to the URI’s parent folder and actually selecting the URI in the - * list. If the @chooser is %GTK_FILE_CHOOSER_ACTION_SAVE mode, the URI’s base - * name will also appear in the dialog’s file name entry. - * - * Note that the URI must exist, or nothing will be done except for the - * directory change. - * - * You should use this function only when implementing a save - * dialog for which you already have a file name to which - * the user may save. For example, when the user opens an existing file and then - * does Save As... to save a copy or a - * modified version. If you don’t have a file name already — for example, - * if the user just created a new file and is saving it for the first time, do - * not call this function. Instead, use something similar to this: - * |[ - * if (document_is_new) - * { - * // the user just created a new document - * gtk_file_chooser_set_current_name (chooser, "Untitled document"); - * } - * else - * { - * // the user edited an existing document - * gtk_file_chooser_set_uri (chooser, existing_uri); - * } - * ]| - * - * - * In the first case, the file chooser will present the user with useful suggestions - * as to where to save his new file. In the second case, the file’s existing location - * is already known, so the file chooser will use it. - * - * Returns: Not useful. - **/ -gboolean -gtk_file_chooser_set_uri (GtkFileChooser *chooser, - const char *uri) -{ - g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), FALSE); - - gtk_file_chooser_unselect_all (chooser); - return gtk_file_chooser_select_uri (chooser, uri); -} - -/** - * gtk_file_chooser_select_uri: - * @chooser: a #GtkFileChooser - * @uri: the URI to select - * - * Selects the file to by @uri. If the URI doesn’t refer to a - * file in the current folder of @chooser, then the current folder of - * @chooser will be changed to the folder containing @filename. - * - * Returns: Not useful. - **/ -gboolean -gtk_file_chooser_select_uri (GtkFileChooser *chooser, - const char *uri) -{ - GFile *file; - gboolean result; - - g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), FALSE); - g_return_val_if_fail (uri != NULL, FALSE); - - file = g_file_new_for_uri (uri); - result = gtk_file_chooser_select_file (chooser, file, NULL); - g_object_unref (file); - - return result; -} - -/** - * gtk_file_chooser_unselect_uri: - * @chooser: a #GtkFileChooser - * @uri: the URI to unselect - * - * Unselects the file referred to by @uri. If the file - * is not in the current directory, does not exist, or - * is otherwise not currently selected, does nothing. - **/ -void -gtk_file_chooser_unselect_uri (GtkFileChooser *chooser, - const char *uri) -{ - GFile *file; - - g_return_if_fail (GTK_IS_FILE_CHOOSER (chooser)); - g_return_if_fail (uri != NULL); - - file = g_file_new_for_uri (uri); - gtk_file_chooser_unselect_file (chooser, file); - g_object_unref (file); -} - /** * gtk_file_chooser_select_all: * @chooser: a #GtkFileChooser @@ -1137,123 +395,20 @@ gtk_file_chooser_unselect_all (GtkFileChooser *chooser) } /** - * gtk_file_chooser_get_uris: - * @chooser: a #GtkFileChooser - * - * Lists all the selected files and subfolders in the current folder of - * @chooser. The returned names are full absolute URIs. - * - * Returns: (element-type utf8) (transfer full): a #GSList containing the URIs of all selected - * files and subfolders in the current folder. Free the returned list - * with g_slist_free(), and the filenames with g_free(). - **/ -GSList * -gtk_file_chooser_get_uris (GtkFileChooser *chooser) -{ - GSList *files, *result; - - g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), NULL); - - files = gtk_file_chooser_get_files (chooser); - - if (gtk_file_chooser_get_local_only (chooser)) - result = files_to_strings (files, file_to_uri_with_native_path); - else - result = files_to_strings (files, g_file_get_uri); - - g_slist_free_full (files, g_object_unref); - - return result; -} - -/** - * gtk_file_chooser_set_current_folder_uri: - * @chooser: a #GtkFileChooser - * @uri: the URI for the new current folder - * - * Sets the current folder for @chooser from an URI. - * The user will be shown the full contents of the current folder, - * plus user interface elements for navigating to other folders. - * - * In general, you should not use this function. See the - * [section on setting up a file chooser dialog][gtkfilechooserdialog-setting-up] - * for the rationale behind this. - * - * Returns: %TRUE if the folder could be changed successfully, %FALSE - * otherwise. - **/ -gboolean -gtk_file_chooser_set_current_folder_uri (GtkFileChooser *chooser, - const gchar *uri) -{ - GFile *file; - gboolean result; - - g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), FALSE); - g_return_val_if_fail (uri != NULL, FALSE); - - file = g_file_new_for_uri (uri); - result = gtk_file_chooser_set_current_folder_file (chooser, file, NULL); - g_object_unref (file); - - return result; -} - -/** - * gtk_file_chooser_get_current_folder_uri: - * @chooser: a #GtkFileChooser - * - * Gets the current folder of @chooser as an URI. - * See gtk_file_chooser_set_current_folder_uri(). - * - * Note that this is the folder that the file chooser is currently displaying - * (e.g. "file:///home/username/Documents"), which is not the same - * as the currently-selected folder if the chooser is in - * %GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER mode - * (e.g. "file:///home/username/Documents/selected-folder/". To get the - * currently-selected folder in that mode, use gtk_file_chooser_get_uri() as the - * usual way to get the selection. - * - * Returns: (nullable) (transfer full): the URI for the current folder. - * Free with g_free(). This function will also return %NULL if the file chooser - * was unable to load the last folder that was requested from it; for example, - * as would be for calling gtk_file_chooser_set_current_folder_uri() on a - * nonexistent folder. - */ -gchar * -gtk_file_chooser_get_current_folder_uri (GtkFileChooser *chooser) -{ - GFile *file; - gchar *uri; - - g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), NULL); - - file = gtk_file_chooser_get_current_folder_file (chooser); - if (!file) - return NULL; - - uri = g_file_get_uri (file); - g_object_unref (file); - - return uri; -} - -/** - * gtk_file_chooser_set_current_folder_file: + * gtk_file_chooser_set_current_folder: * @chooser: a #GtkFileChooser * @file: the #GFile for the new folder - * @error: (allow-none): location to store error, or %NULL. + * @error: location to store error, or %NULL. * * Sets the current folder for @chooser from a #GFile. - * Internal function, see gtk_file_chooser_set_current_folder_uri(). * * Returns: %TRUE if the folder could be changed successfully, %FALSE * otherwise. **/ gboolean -gtk_file_chooser_set_current_folder_file (GtkFileChooser *chooser, - GFile *file, - GError **error) +gtk_file_chooser_set_current_folder (GtkFileChooser *chooser, + GFile *file, + GError **error) { g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), FALSE); g_return_val_if_fail (G_IS_FILE (file), FALSE); @@ -1263,16 +418,15 @@ gtk_file_chooser_set_current_folder_file (GtkFileChooser *chooser, } /** - * gtk_file_chooser_get_current_folder_file: + * gtk_file_chooser_get_current_folder: * @chooser: a #GtkFileChooser * * Gets the current folder of @chooser as #GFile. - * See gtk_file_chooser_get_current_folder_uri(). * * Returns: (transfer full): the #GFile for the current folder. */ GFile * -gtk_file_chooser_get_current_folder_file (GtkFileChooser *chooser) +gtk_file_chooser_get_current_folder (GtkFileChooser *chooser) { g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), NULL); @@ -1285,8 +439,7 @@ gtk_file_chooser_get_current_folder_file (GtkFileChooser *chooser) * @file: the file to select * @error: (allow-none): location to store error, or %NULL * - * Selects the file referred to by @file. An internal function. See - * _gtk_file_chooser_select_uri(). + * Selects the file referred to by @file. * * Returns: Not useful. **/ @@ -1325,9 +478,9 @@ gtk_file_chooser_unselect_file (GtkFileChooser *chooser, * @chooser: a #GtkFileChooser * * Lists all the selected files and subfolders in the current folder of @chooser - * as #GFile. An internal function, see gtk_file_chooser_get_uris(). + * as #GFile. * - * Returns: (element-type GFile) (transfer full): a #GSList + * Returns: (element-type GFile) (transfer full): a list * containing a #GFile for each selected file and subfolder in the * current folder. Free the returned list with g_slist_free(), and * the files with g_object_unref(). @@ -1370,7 +523,7 @@ gtk_file_chooser_get_files (GtkFileChooser *chooser) * if (document_is_new) * { * // the user just created a new document - * gtk_file_chooser_set_current_folder_file (chooser, default_file_for_saving); + * gtk_file_chooser_set_current_folder (chooser, default_file_for_saving); * gtk_file_chooser_set_current_name (chooser, "Untitled document"); * } * else @@ -1429,7 +582,7 @@ gtk_file_chooser_get_file (GtkFileChooser *chooser) return result; } -/** +/*< private > * _gtk_file_chooser_get_file_system: * @chooser: a #GtkFileChooser * @@ -1447,312 +600,48 @@ _gtk_file_chooser_get_file_system (GtkFileChooser *chooser) return GTK_FILE_CHOOSER_GET_IFACE (chooser)->get_file_system (chooser); } -/* Preview widget - */ /** - * gtk_file_chooser_set_preview_widget: + * gtk_file_chooser_add_shortcut_folder: * @chooser: a #GtkFileChooser - * @preview_widget: widget for displaying preview. - * - * Sets an application-supplied widget to use to display a custom preview - * of the currently selected file. To implement a preview, after setting the - * preview widget, you connect to the #GtkFileChooser::update-preview - * signal, and call gtk_file_chooser_get_preview_filename() or - * gtk_file_chooser_get_preview_uri() on each change. If you can - * display a preview of the new file, update your widget and - * set the preview active using gtk_file_chooser_set_preview_widget_active(). - * Otherwise, set the preview inactive. - * - * When there is no application-supplied preview widget, or the - * application-supplied preview widget is not active, the file chooser - * will display no preview at all. - **/ -void -gtk_file_chooser_set_preview_widget (GtkFileChooser *chooser, - GtkWidget *preview_widget) -{ - g_return_if_fail (GTK_IS_FILE_CHOOSER (chooser)); - - g_object_set (chooser, "preview-widget", preview_widget, NULL); -} - -/** - * gtk_file_chooser_get_preview_widget: - * @chooser: a #GtkFileChooser - * - * Gets the current preview widget; see - * gtk_file_chooser_set_preview_widget(). - * - * Returns: (nullable) (transfer none): the current preview widget, or %NULL - **/ -GtkWidget * -gtk_file_chooser_get_preview_widget (GtkFileChooser *chooser) -{ - GtkWidget *preview_widget; - - g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), NULL); - - g_object_get (chooser, "preview-widget", &preview_widget, NULL); - - /* Horrid hack; g_object_get() refs returned objects but - * that contradicts the memory management conventions - * for accessors. - */ - if (preview_widget) - g_object_unref (preview_widget); - - return preview_widget; -} - -/** - * gtk_file_chooser_set_preview_widget_active: - * @chooser: a #GtkFileChooser - * @active: whether to display the user-specified preview widget - * - * Sets whether the preview widget set by - * gtk_file_chooser_set_preview_widget() should be shown for the - * current filename. When @active is set to false, the file chooser - * may display an internally generated preview of the current file - * or it may display no preview at all. See - * gtk_file_chooser_set_preview_widget() for more details. - **/ -void -gtk_file_chooser_set_preview_widget_active (GtkFileChooser *chooser, - gboolean active) -{ - g_return_if_fail (GTK_IS_FILE_CHOOSER (chooser)); - - g_object_set (chooser, "preview-widget-active", active, NULL); -} - -/** - * gtk_file_chooser_get_preview_widget_active: - * @chooser: a #GtkFileChooser - * - * Gets whether the preview widget set by gtk_file_chooser_set_preview_widget() - * should be shown for the current filename. See - * gtk_file_chooser_set_preview_widget_active(). - * - * Returns: %TRUE if the preview widget is active for the current filename. - **/ -gboolean -gtk_file_chooser_get_preview_widget_active (GtkFileChooser *chooser) -{ - gboolean active; - - g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), FALSE); - - g_object_get (chooser, "preview-widget-active", &active, NULL); - - return active; -} - -/** - * gtk_file_chooser_set_use_preview_label: - * @chooser: a #GtkFileChooser - * @use_label: whether to display a label with the name of the previewed file - * - * Sets whether the file chooser should display a label with the name of - * the file that is being previewed; the default is %TRUE. Applications that - * want to draw the whole preview area themselves should set this to %FALSE and - * display the name themselves in their preview widget. - * - * See also: gtk_file_chooser_set_preview_widget() - **/ -void -gtk_file_chooser_set_use_preview_label (GtkFileChooser *chooser, - gboolean use_label) -{ - g_return_if_fail (GTK_IS_FILE_CHOOSER (chooser)); - - g_object_set (chooser, "use-preview-label", use_label, NULL); -} - -/** - * gtk_file_chooser_get_use_preview_label: - * @chooser: a #GtkFileChooser - * - * Gets whether a label should be drawn with the name of the previewed - * file. See gtk_file_chooser_set_use_preview_label(). - * - * Returns: %TRUE if the file chooser is set to display a label with the - * name of the previewed file, %FALSE otherwise. - **/ -gboolean -gtk_file_chooser_get_use_preview_label (GtkFileChooser *chooser) -{ - gboolean use_label; - - g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), FALSE); - - g_object_get (chooser, "use-preview-label", &use_label, NULL); - - return use_label; -} - -/** - * gtk_file_chooser_get_preview_file: - * @chooser: a #GtkFileChooser - * - * Gets the #GFile that should be previewed in a custom preview - * Internal function, see gtk_file_chooser_get_preview_uri(). - * - * Returns: (nullable) (transfer full): the #GFile for the file to preview, - * or %NULL if no file is selected. Free with g_object_unref(). - **/ -GFile * -gtk_file_chooser_get_preview_file (GtkFileChooser *chooser) -{ - g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), NULL); - - return GTK_FILE_CHOOSER_GET_IFACE (chooser)->get_preview_file (chooser); -} - -/** - * _gtk_file_chooser_add_shortcut_folder: - * @chooser: a #GtkFileChooser - * @file: file for the folder to add - * @error: (allow-none): location to store error, or %NULL + * @folder: a #GFile for the folder to add + * @error: location to store error, or %NULL * * Adds a folder to be displayed with the shortcut folders in a file chooser. - * Internal function, see gtk_file_chooser_add_shortcut_folder(). * * Returns: %TRUE if the folder could be added successfully, %FALSE * otherwise. **/ gboolean -_gtk_file_chooser_add_shortcut_folder (GtkFileChooser *chooser, - GFile *file, - GError **error) +gtk_file_chooser_add_shortcut_folder (GtkFileChooser *chooser, + GFile *folder, + GError **error) { g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), FALSE); - g_return_val_if_fail (G_IS_FILE (file), FALSE); + g_return_val_if_fail (G_IS_FILE (folder), FALSE); - return GTK_FILE_CHOOSER_GET_IFACE (chooser)->add_shortcut_folder (chooser, file, error); + return GTK_FILE_CHOOSER_GET_IFACE (chooser)->add_shortcut_folder (chooser, folder, error); } /** - * _gtk_file_chooser_remove_shortcut_folder: + * gtk_file_chooser_remove_shortcut_folder: * @chooser: a #GtkFileChooser - * @file: file for the folder to remove - * @error: (allow-none): location to store error, or %NULL + * @folder: a #GFile for the folder to remove + * @error: location to store error, or %NULL * - * Removes a folder from the shortcut folders in a file chooser. Internal - * function, see gtk_file_chooser_remove_shortcut_folder(). + * Removes a folder from the shortcut folders in a file chooser. * * Returns: %TRUE if the folder could be removed successfully, %FALSE * otherwise. **/ gboolean -_gtk_file_chooser_remove_shortcut_folder (GtkFileChooser *chooser, - GFile *file, - GError **error) +gtk_file_chooser_remove_shortcut_folder (GtkFileChooser *chooser, + GFile *folder, + GError **error) { g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), FALSE); - g_return_val_if_fail (G_IS_FILE (file), FALSE); + g_return_val_if_fail (G_IS_FILE (folder), FALSE); - return GTK_FILE_CHOOSER_GET_IFACE (chooser)->remove_shortcut_folder (chooser, file, error); -} - -/** - * gtk_file_chooser_get_preview_filename: - * @chooser: a #GtkFileChooser - * - * Gets the filename that should be previewed in a custom preview - * widget. See gtk_file_chooser_set_preview_widget(). - * - * Returns: (nullable) (type filename): the filename to preview, or %NULL if - * no file is selected, or if the selected file cannot be represented - * as a local filename. Free with g_free() - **/ -char * -gtk_file_chooser_get_preview_filename (GtkFileChooser *chooser) -{ - GFile *file; - gchar *result = NULL; - - g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), NULL); - - file = gtk_file_chooser_get_preview_file (chooser); - if (file) - { - result = g_file_get_path (file); - g_object_unref (file); - } - - return result; -} - -/** - * gtk_file_chooser_get_preview_uri: - * @chooser: a #GtkFileChooser - * - * Gets the URI that should be previewed in a custom preview - * widget. See gtk_file_chooser_set_preview_widget(). - * - * Returns: (nullable) (transfer full): the URI for the file to preview, - * or %NULL if no file is selected. Free with g_free(). - **/ -char * -gtk_file_chooser_get_preview_uri (GtkFileChooser *chooser) -{ - GFile *file; - gchar *result = NULL; - - g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), NULL); - - file = gtk_file_chooser_get_preview_file (chooser); - if (file) - { - result = g_file_get_uri (file); - g_object_unref (file); - } - - return result; -} - -/** - * gtk_file_chooser_set_extra_widget: - * @chooser: a #GtkFileChooser - * @extra_widget: widget for extra options - * - * Sets an application-supplied widget to provide extra options to the user. - **/ -void -gtk_file_chooser_set_extra_widget (GtkFileChooser *chooser, - GtkWidget *extra_widget) -{ - g_return_if_fail (GTK_IS_FILE_CHOOSER (chooser)); - - g_object_set (chooser, "extra-widget", extra_widget, NULL); -} - -/** - * gtk_file_chooser_get_extra_widget: - * @chooser: a #GtkFileChooser - * - * Gets the current extra widget; see - * gtk_file_chooser_set_extra_widget(). - * - * Returns: (nullable) (transfer none): the current extra widget, or %NULL - **/ -GtkWidget * -gtk_file_chooser_get_extra_widget (GtkFileChooser *chooser) -{ - GtkWidget *extra_widget; - - g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), NULL); - - g_object_get (chooser, "extra-widget", &extra_widget, NULL); - - /* Horrid hack; g_object_get() refs returned objects but - * that contradicts the memory management conventions - * for accessors. - */ - if (extra_widget) - g_object_unref (extra_widget); - - return extra_widget; + return GTK_FILE_CHOOSER_GET_IFACE (chooser)->remove_shortcut_folder (chooser, folder, error); } /** @@ -1769,7 +658,7 @@ gtk_file_chooser_get_extra_widget (GtkFileChooser *chooser) **/ void gtk_file_chooser_add_filter (GtkFileChooser *chooser, - GtkFileFilter *filter) + GtkFileFilter *filter) { g_return_if_fail (GTK_IS_FILE_CHOOSER (chooser)); @@ -1785,7 +674,7 @@ gtk_file_chooser_add_filter (GtkFileChooser *chooser, **/ void gtk_file_chooser_remove_filter (GtkFileChooser *chooser, - GtkFileFilter *filter) + GtkFileFilter *filter) { g_return_if_fail (GTK_IS_FILE_CHOOSER (chooser)); @@ -1826,7 +715,7 @@ gtk_file_chooser_list_filters (GtkFileChooser *chooser) **/ void gtk_file_chooser_set_filter (GtkFileChooser *chooser, - GtkFileFilter *filter) + GtkFileFilter *filter) { g_return_if_fail (GTK_IS_FILE_CHOOSER (chooser)); g_return_if_fail (GTK_IS_FILE_FILTER (filter)); @@ -1860,69 +749,6 @@ gtk_file_chooser_get_filter (GtkFileChooser *chooser) return filter; } -/** - * gtk_file_chooser_add_shortcut_folder: - * @chooser: a #GtkFileChooser - * @folder: (type filename): filename of the folder to add - * @error: (allow-none): location to store error, or %NULL - * - * Adds a folder to be displayed with the shortcut folders in a file chooser. - * Note that shortcut folders do not get saved, as they are provided by the - * application. For example, you can use this to add a - * “/usr/share/mydrawprogram/Clipart” folder to the volume list. - * - * Returns: %TRUE if the folder could be added successfully, %FALSE - * otherwise. In the latter case, the @error will be set as appropriate. - **/ -gboolean -gtk_file_chooser_add_shortcut_folder (GtkFileChooser *chooser, - const char *folder, - GError **error) -{ - GFile *file; - gboolean result; - - g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), FALSE); - g_return_val_if_fail (folder != NULL, FALSE); - - file = g_file_new_for_path (folder); - result = GTK_FILE_CHOOSER_GET_IFACE (chooser)->add_shortcut_folder (chooser, file, error); - g_object_unref (file); - - return result; -} - -/** - * gtk_file_chooser_remove_shortcut_folder: - * @chooser: a #GtkFileChooser - * @folder: (type filename): filename of the folder to remove - * @error: (allow-none): location to store error, or %NULL - * - * Removes a folder from a file chooser’s list of shortcut folders. - * - * Returns: %TRUE if the operation succeeds, %FALSE otherwise. - * In the latter case, the @error will be set as appropriate. - * - * See also: gtk_file_chooser_add_shortcut_folder() - **/ -gboolean -gtk_file_chooser_remove_shortcut_folder (GtkFileChooser *chooser, - const char *folder, - GError **error) -{ - GFile *file; - gboolean result; - - g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), FALSE); - g_return_val_if_fail (folder != NULL, FALSE); - - file = g_file_new_for_path (folder); - result = GTK_FILE_CHOOSER_GET_IFACE (chooser)->remove_shortcut_folder (chooser, file, error); - g_object_unref (file); - - return result; -} - /** * gtk_file_chooser_list_shortcut_folders: * @chooser: a #GtkFileChooser @@ -1930,210 +756,17 @@ gtk_file_chooser_remove_shortcut_folder (GtkFileChooser *chooser, * Queries the list of shortcut folders in the file chooser, as set by * gtk_file_chooser_add_shortcut_folder(). * - * Returns: (nullable) (element-type filename) (transfer full): A list + * Returns: (nullable) (element-type Gio.File) (transfer full): A list * of folder filenames, or %NULL if there are no shortcut folders. - * Free the returned list with g_slist_free(), and the filenames with - * g_free(). - **/ + */ GSList * gtk_file_chooser_list_shortcut_folders (GtkFileChooser *chooser) -{ - GSList *folders; - GSList *result; - - g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), NULL); - - folders = _gtk_file_chooser_list_shortcut_folder_files (chooser); - - result = files_to_strings (folders, g_file_get_path); - g_slist_free_full (folders, g_object_unref); - - return result; -} - -/** - * gtk_file_chooser_add_shortcut_folder_uri: - * @chooser: a #GtkFileChooser - * @uri: URI of the folder to add - * @error: (allow-none): location to store error, or %NULL - * - * Adds a folder URI to be displayed with the shortcut folders in a file - * chooser. Note that shortcut folders do not get saved, as they are provided - * by the application. For example, you can use this to add a - * “file:///usr/share/mydrawprogram/Clipart” folder to the volume list. - * - * Returns: %TRUE if the folder could be added successfully, %FALSE - * otherwise. In the latter case, the @error will be set as appropriate. - **/ -gboolean -gtk_file_chooser_add_shortcut_folder_uri (GtkFileChooser *chooser, - const char *uri, - GError **error) -{ - GFile *file; - gboolean result; - - g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), FALSE); - g_return_val_if_fail (uri != NULL, FALSE); - - file = g_file_new_for_uri (uri); - result = GTK_FILE_CHOOSER_GET_IFACE (chooser)->add_shortcut_folder (chooser, file, error); - g_object_unref (file); - - return result; -} - -/** - * gtk_file_chooser_remove_shortcut_folder_uri: - * @chooser: a #GtkFileChooser - * @uri: URI of the folder to remove - * @error: (allow-none): location to store error, or %NULL - * - * Removes a folder URI from a file chooser’s list of shortcut folders. - * - * Returns: %TRUE if the operation succeeds, %FALSE otherwise. - * In the latter case, the @error will be set as appropriate. - * - * See also: gtk_file_chooser_add_shortcut_folder_uri() - **/ -gboolean -gtk_file_chooser_remove_shortcut_folder_uri (GtkFileChooser *chooser, - const char *uri, - GError **error) -{ - GFile *file; - gboolean result; - - g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), FALSE); - g_return_val_if_fail (uri != NULL, FALSE); - - file = g_file_new_for_uri (uri); - result = GTK_FILE_CHOOSER_GET_IFACE (chooser)->remove_shortcut_folder (chooser, file, error); - g_object_unref (file); - - return result; -} - -/** - * gtk_file_chooser_list_shortcut_folder_uris: - * @chooser: a #GtkFileChooser - * - * Queries the list of shortcut folders in the file chooser, as set by - * gtk_file_chooser_add_shortcut_folder_uri(). - * - * Returns: (nullable) (element-type utf8) (transfer full): A list of - * folder URIs, or %NULL if there are no shortcut folders. Free the - * returned list with g_slist_free(), and the URIs with g_free(). - **/ -GSList * -gtk_file_chooser_list_shortcut_folder_uris (GtkFileChooser *chooser) -{ - GSList *folders; - GSList *result; - - g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), NULL); - - folders = _gtk_file_chooser_list_shortcut_folder_files (chooser); - - result = files_to_strings (folders, g_file_get_uri); - g_slist_free_full (folders, g_object_unref); - - return result; -} - -GSList * -_gtk_file_chooser_list_shortcut_folder_files (GtkFileChooser *chooser) { g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), NULL); return GTK_FILE_CHOOSER_GET_IFACE (chooser)->list_shortcut_folders (chooser); } -/** - * gtk_file_chooser_set_show_hidden: - * @chooser: a #GtkFileChooser - * @show_hidden: %TRUE if hidden files and folders should be displayed. - * - * Sets whether hidden files and folders are displayed in the file selector. - **/ -void -gtk_file_chooser_set_show_hidden (GtkFileChooser *chooser, - gboolean show_hidden) -{ - g_return_if_fail (GTK_IS_FILE_CHOOSER (chooser)); - - g_object_set (chooser, "show-hidden", show_hidden, NULL); -} - -/** - * gtk_file_chooser_get_show_hidden: - * @chooser: a #GtkFileChooser - * - * Gets whether hidden files and folders are displayed in the file selector. - * See gtk_file_chooser_set_show_hidden(). - * - * Returns: %TRUE if hidden files and folders are displayed. - **/ -gboolean -gtk_file_chooser_get_show_hidden (GtkFileChooser *chooser) -{ - gboolean show_hidden; - - g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), FALSE); - - g_object_get (chooser, "show-hidden", &show_hidden, NULL); - - return show_hidden; -} - -/** - * gtk_file_chooser_set_do_overwrite_confirmation: - * @chooser: a #GtkFileChooser - * @do_overwrite_confirmation: whether to confirm overwriting in save mode - * - * Sets whether a file chooser in %GTK_FILE_CHOOSER_ACTION_SAVE mode will present - * a confirmation dialog if the user types a file name that already exists. This - * is %FALSE by default. - * - * If set to %TRUE, the @chooser will emit the - * #GtkFileChooser::confirm-overwrite signal when appropriate. - * - * If all you need is the standard confirmation dialog, set this property to %TRUE. - * You can override the way confirmation is done by actually handling the - * #GtkFileChooser::confirm-overwrite signal; please refer to its documentation - * for the details. - **/ -void -gtk_file_chooser_set_do_overwrite_confirmation (GtkFileChooser *chooser, - gboolean do_overwrite_confirmation) -{ - g_return_if_fail (GTK_IS_FILE_CHOOSER (chooser)); - - g_object_set (chooser, "do-overwrite-confirmation", do_overwrite_confirmation, NULL); -} - -/** - * gtk_file_chooser_get_do_overwrite_confirmation: - * @chooser: a #GtkFileChooser - * - * Queries whether a file chooser is set to confirm for overwriting when the user - * types a file name that already exists. - * - * Returns: %TRUE if the file chooser will present a confirmation dialog; - * %FALSE otherwise. - **/ -gboolean -gtk_file_chooser_get_do_overwrite_confirmation (GtkFileChooser *chooser) -{ - gboolean do_overwrite_confirmation; - - g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), FALSE); - - g_object_get (chooser, "do-overwrite-confirmation", &do_overwrite_confirmation, NULL); - - return do_overwrite_confirmation; -} - /** * gtk_file_chooser_add_choice: * @chooser: a #GtkFileChooser @@ -2147,8 +780,6 @@ gtk_file_chooser_get_do_overwrite_confirmation (GtkFileChooser *chooser) * a value using gtk_file_chooser_set_choice() before the dialog is shown, * and you can obtain the user-selected value in the ::response signal handler * using gtk_file_chooser_get_choice(). - * - * Compare gtk_file_chooser_set_extra_widget(). */ void gtk_file_chooser_add_choice (GtkFileChooser *chooser, diff --git a/gtk/gtkfilechooser.h b/gtk/gtkfilechooser.h index 9c13dd4032..2aff129c5d 100644 --- a/gtk/gtkfilechooser.h +++ b/gtk/gtkfilechooser.h @@ -44,9 +44,6 @@ typedef struct _GtkFileChooser GtkFileChooser; * @GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER: Indicates an Open mode for * selecting folders. The file chooser will let the user pick an * existing folder. - * @GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER: Indicates a mode for creating a - * new folder. The file chooser will let the user name an existing or - * new folder. * * Describes whether a #GtkFileChooser is being used to open existing files * or to save to a possibly new file. @@ -55,32 +52,9 @@ typedef enum { GTK_FILE_CHOOSER_ACTION_OPEN, GTK_FILE_CHOOSER_ACTION_SAVE, - GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, - GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER + GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER } GtkFileChooserAction; -/** - * GtkFileChooserConfirmation: - * @GTK_FILE_CHOOSER_CONFIRMATION_CONFIRM: The file chooser will present - * its stock dialog to confirm about overwriting an existing file. - * @GTK_FILE_CHOOSER_CONFIRMATION_ACCEPT_FILENAME: The file chooser will - * terminate and accept the user’s choice of a file name. - * @GTK_FILE_CHOOSER_CONFIRMATION_SELECT_AGAIN: The file chooser will - * continue running, so as to let the user select another file name. - * - * Used as a return value of handlers for the - * #GtkFileChooser::confirm-overwrite signal of a #GtkFileChooser. This - * value determines whether the file chooser will present the stock - * confirmation dialog, accept the user’s choice of a filename, or - * let the user choose another filename. - */ -typedef enum -{ - GTK_FILE_CHOOSER_CONFIRMATION_CONFIRM, - GTK_FILE_CHOOSER_CONFIRMATION_ACCEPT_FILENAME, - GTK_FILE_CHOOSER_CONFIRMATION_SELECT_AGAIN -} GtkFileChooserConfirmation; - GDK_AVAILABLE_IN_ALL GType gtk_file_chooser_get_type (void) G_GNUC_CONST; @@ -121,27 +95,10 @@ void gtk_file_chooser_set_action (GtkFileChooser GDK_AVAILABLE_IN_ALL GtkFileChooserAction gtk_file_chooser_get_action (GtkFileChooser *chooser); GDK_AVAILABLE_IN_ALL -void gtk_file_chooser_set_local_only (GtkFileChooser *chooser, - gboolean local_only); -GDK_AVAILABLE_IN_ALL -gboolean gtk_file_chooser_get_local_only (GtkFileChooser *chooser); -GDK_AVAILABLE_IN_ALL void gtk_file_chooser_set_select_multiple (GtkFileChooser *chooser, gboolean select_multiple); GDK_AVAILABLE_IN_ALL gboolean gtk_file_chooser_get_select_multiple (GtkFileChooser *chooser); -GDK_AVAILABLE_IN_ALL -void gtk_file_chooser_set_show_hidden (GtkFileChooser *chooser, - gboolean show_hidden); -GDK_AVAILABLE_IN_ALL -gboolean gtk_file_chooser_get_show_hidden (GtkFileChooser *chooser); - -GDK_AVAILABLE_IN_ALL -void gtk_file_chooser_set_do_overwrite_confirmation (GtkFileChooser *chooser, - gboolean do_overwrite_confirmation); -GDK_AVAILABLE_IN_ALL -gboolean gtk_file_chooser_get_do_overwrite_confirmation (GtkFileChooser *chooser); - GDK_AVAILABLE_IN_ALL void gtk_file_chooser_set_create_folders (GtkFileChooser *chooser, gboolean create_folders); @@ -156,52 +113,10 @@ void gtk_file_chooser_set_current_name (GtkFileChooser *chooser, GDK_AVAILABLE_IN_ALL gchar *gtk_file_chooser_get_current_name (GtkFileChooser *chooser); -/* Filename manipulation - */ -GDK_AVAILABLE_IN_ALL -gchar * gtk_file_chooser_get_filename (GtkFileChooser *chooser); -GDK_AVAILABLE_IN_ALL -gboolean gtk_file_chooser_set_filename (GtkFileChooser *chooser, - const char *filename); -GDK_AVAILABLE_IN_ALL -gboolean gtk_file_chooser_select_filename (GtkFileChooser *chooser, - const char *filename); -GDK_AVAILABLE_IN_ALL -void gtk_file_chooser_unselect_filename (GtkFileChooser *chooser, - const char *filename); GDK_AVAILABLE_IN_ALL void gtk_file_chooser_select_all (GtkFileChooser *chooser); GDK_AVAILABLE_IN_ALL void gtk_file_chooser_unselect_all (GtkFileChooser *chooser); -GDK_AVAILABLE_IN_ALL -GSList * gtk_file_chooser_get_filenames (GtkFileChooser *chooser); -GDK_AVAILABLE_IN_ALL -gboolean gtk_file_chooser_set_current_folder (GtkFileChooser *chooser, - const gchar *filename); -GDK_AVAILABLE_IN_ALL -gchar * gtk_file_chooser_get_current_folder (GtkFileChooser *chooser); - - -/* URI manipulation - */ -GDK_AVAILABLE_IN_ALL -gchar * gtk_file_chooser_get_uri (GtkFileChooser *chooser); -GDK_AVAILABLE_IN_ALL -gboolean gtk_file_chooser_set_uri (GtkFileChooser *chooser, - const char *uri); -GDK_AVAILABLE_IN_ALL -gboolean gtk_file_chooser_select_uri (GtkFileChooser *chooser, - const char *uri); -GDK_AVAILABLE_IN_ALL -void gtk_file_chooser_unselect_uri (GtkFileChooser *chooser, - const char *uri); -GDK_AVAILABLE_IN_ALL -GSList * gtk_file_chooser_get_uris (GtkFileChooser *chooser); -GDK_AVAILABLE_IN_ALL -gboolean gtk_file_chooser_set_current_folder_uri (GtkFileChooser *chooser, - const gchar *uri); -GDK_AVAILABLE_IN_ALL -gchar * gtk_file_chooser_get_current_folder_uri (GtkFileChooser *chooser); /* GFile manipulation */ GDK_AVAILABLE_IN_ALL @@ -220,44 +135,11 @@ void gtk_file_chooser_unselect_file (GtkFileChooser *chooser, GDK_AVAILABLE_IN_ALL GSList * gtk_file_chooser_get_files (GtkFileChooser *chooser); GDK_AVAILABLE_IN_ALL -gboolean gtk_file_chooser_set_current_folder_file (GtkFileChooser *chooser, +gboolean gtk_file_chooser_set_current_folder (GtkFileChooser *chooser, GFile *file, GError **error); GDK_AVAILABLE_IN_ALL -GFile * gtk_file_chooser_get_current_folder_file (GtkFileChooser *chooser); - -/* Preview widget - */ -GDK_AVAILABLE_IN_ALL -void gtk_file_chooser_set_preview_widget (GtkFileChooser *chooser, - GtkWidget *preview_widget); -GDK_AVAILABLE_IN_ALL -GtkWidget *gtk_file_chooser_get_preview_widget (GtkFileChooser *chooser); -GDK_AVAILABLE_IN_ALL -void gtk_file_chooser_set_preview_widget_active (GtkFileChooser *chooser, - gboolean active); -GDK_AVAILABLE_IN_ALL -gboolean gtk_file_chooser_get_preview_widget_active (GtkFileChooser *chooser); -GDK_AVAILABLE_IN_ALL -void gtk_file_chooser_set_use_preview_label (GtkFileChooser *chooser, - gboolean use_label); -GDK_AVAILABLE_IN_ALL -gboolean gtk_file_chooser_get_use_preview_label (GtkFileChooser *chooser); - -GDK_AVAILABLE_IN_ALL -char *gtk_file_chooser_get_preview_filename (GtkFileChooser *chooser); -GDK_AVAILABLE_IN_ALL -char *gtk_file_chooser_get_preview_uri (GtkFileChooser *chooser); -GDK_AVAILABLE_IN_ALL -GFile *gtk_file_chooser_get_preview_file (GtkFileChooser *chooser); - -/* Extra widget - */ -GDK_AVAILABLE_IN_ALL -void gtk_file_chooser_set_extra_widget (GtkFileChooser *chooser, - GtkWidget *extra_widget); -GDK_AVAILABLE_IN_ALL -GtkWidget *gtk_file_chooser_get_extra_widget (GtkFileChooser *chooser); +GFile * gtk_file_chooser_get_current_folder (GtkFileChooser *chooser); /* List of user selectable filters */ @@ -274,7 +156,7 @@ GSList *gtk_file_chooser_list_filters (GtkFileChooser *chooser); */ GDK_AVAILABLE_IN_ALL void gtk_file_chooser_set_filter (GtkFileChooser *chooser, - GtkFileFilter *filter); + GtkFileFilter *filter); GDK_AVAILABLE_IN_ALL GtkFileFilter *gtk_file_chooser_get_filter (GtkFileChooser *chooser); @@ -282,26 +164,15 @@ GtkFileFilter *gtk_file_chooser_get_filter (GtkFileChooser *chooser); GDK_AVAILABLE_IN_ALL gboolean gtk_file_chooser_add_shortcut_folder (GtkFileChooser *chooser, - const char *folder, + GFile *folder, GError **error); GDK_AVAILABLE_IN_ALL gboolean gtk_file_chooser_remove_shortcut_folder (GtkFileChooser *chooser, - const char *folder, + GFile *folder, GError **error); GDK_AVAILABLE_IN_ALL GSList *gtk_file_chooser_list_shortcut_folders (GtkFileChooser *chooser); -GDK_AVAILABLE_IN_ALL -gboolean gtk_file_chooser_add_shortcut_folder_uri (GtkFileChooser *chooser, - const char *uri, - GError **error); -GDK_AVAILABLE_IN_ALL -gboolean gtk_file_chooser_remove_shortcut_folder_uri (GtkFileChooser *chooser, - const char *uri, - GError **error); -GDK_AVAILABLE_IN_ALL -GSList *gtk_file_chooser_list_shortcut_folder_uris (GtkFileChooser *chooser); - GDK_AVAILABLE_IN_ALL void gtk_file_chooser_add_choice (GtkFileChooser *chooser, const char *id, diff --git a/gtk/gtkfilechooserbutton.c b/gtk/gtkfilechooserbutton.c index ff6dd9bbf3..f73f52add8 100644 --- a/gtk/gtkfilechooserbutton.c +++ b/gtk/gtkfilechooserbutton.c @@ -80,11 +80,12 @@ * |[ * { * GtkWidget *button; + * GFile *cwd = g_file_new_for_path ("/etc"); * * button = gtk_file_chooser_button_new (_("Select a file"), * GTK_FILE_CHOOSER_ACTION_OPEN); - * gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (button), - * "/etc"); + * gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (button), cwd); + * g_object_unref (cwd); * } * ]| * @@ -331,11 +332,6 @@ static void combo_box_changed_cb (GtkComboBox *combo_box, static void button_clicked_cb (GtkButton *real_button, gpointer user_data); -static void chooser_update_preview_cb (GtkFileChooser *dialog, - gpointer user_data); -static void chooser_notify_cb (GObject *dialog, - GParamSpec *pspec, - gpointer user_data); static void dialog_response_cb (GtkDialog *dialog, gint response, gpointer user_data); @@ -556,7 +552,7 @@ gtk_file_chooser_button_set_current_folder (GtkFileChooser *chooser, g_signal_emit_by_name (button, "current-folder-changed"); if (priv->active) - gtk_file_chooser_set_current_folder_file (GTK_FILE_CHOOSER (priv->chooser), file, NULL); + gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (priv->chooser), file, NULL); return TRUE; } @@ -688,7 +684,7 @@ gtk_file_chooser_button_add_shortcut_folder (GtkFileChooser *chooser, delegate = g_object_get_qdata (G_OBJECT (chooser), GTK_FILE_CHOOSER_DELEGATE_QUARK); - retval = _gtk_file_chooser_add_shortcut_folder (delegate, file, error); + retval = gtk_file_chooser_add_shortcut_folder (delegate, file, error); if (retval) { @@ -728,7 +724,7 @@ gtk_file_chooser_button_remove_shortcut_folder (GtkFileChooser *chooser, delegate = g_object_get_qdata (G_OBJECT (chooser), GTK_FILE_CHOOSER_DELEGATE_QUARK); - retval = _gtk_file_chooser_remove_shortcut_folder (delegate, file, error); + retval = gtk_file_chooser_remove_shortcut_folder (delegate, file, error); if (retval) { @@ -810,9 +806,6 @@ gtk_file_chooser_button_constructed (GObject *object) (gpointer) (&priv->dialog)); } - g_signal_connect (priv->chooser, "notify", - G_CALLBACK (chooser_notify_cb), object); - /* This is used, instead of the standard delegate, to ensure that signals are only * delegated when the OK button is pressed. */ g_object_set_qdata (object, GTK_FILE_CHOOSER_DELEGATE_QUARK, priv->chooser); @@ -879,7 +872,6 @@ gtk_file_chooser_button_set_property (GObject *object, case GTK_FILE_CHOOSER_PROP_ACTION: switch (g_value_get_enum (value)) { - case GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER: case GTK_FILE_CHOOSER_ACTION_SAVE: { GEnumClass *eclass; @@ -921,22 +913,10 @@ gtk_file_chooser_button_set_property (GObject *object, case PROP_TITLE: case GTK_FILE_CHOOSER_PROP_FILTER: - case GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET: - case GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET_ACTIVE: - case GTK_FILE_CHOOSER_PROP_USE_PREVIEW_LABEL: - case GTK_FILE_CHOOSER_PROP_EXTRA_WIDGET: - case GTK_FILE_CHOOSER_PROP_SHOW_HIDDEN: - case GTK_FILE_CHOOSER_PROP_DO_OVERWRITE_CONFIRMATION: case GTK_FILE_CHOOSER_PROP_CREATE_FOLDERS: g_object_set_property (G_OBJECT (priv->chooser), pspec->name, value); break; - case GTK_FILE_CHOOSER_PROP_LOCAL_ONLY: - g_object_set_property (G_OBJECT (priv->chooser), pspec->name, value); - fs_volumes_changed_cb (priv->fs, button); - bookmarks_changed_cb (button); - break; - case GTK_FILE_CHOOSER_PROP_SELECT_MULTIPLE: g_warning ("%s: Choosers of type '%s' do not support selecting multiple files.", G_STRFUNC, G_OBJECT_TYPE_NAME (object)); @@ -966,14 +946,7 @@ gtk_file_chooser_button_get_property (GObject *object, case PROP_TITLE: case GTK_FILE_CHOOSER_PROP_ACTION: case GTK_FILE_CHOOSER_PROP_FILTER: - case GTK_FILE_CHOOSER_PROP_LOCAL_ONLY: - case GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET: - case GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET_ACTIVE: - case GTK_FILE_CHOOSER_PROP_USE_PREVIEW_LABEL: - case GTK_FILE_CHOOSER_PROP_EXTRA_WIDGET: case GTK_FILE_CHOOSER_PROP_SELECT_MULTIPLE: - case GTK_FILE_CHOOSER_PROP_SHOW_HIDDEN: - case GTK_FILE_CHOOSER_PROP_DO_OVERWRITE_CONFIRMATION: case GTK_FILE_CHOOSER_PROP_CREATE_FOLDERS: g_object_get_property (G_OBJECT (priv->chooser), pspec->name, value); break; @@ -1285,7 +1258,6 @@ gtk_file_chooser_button_mnemonic_activate (GtkWidget *widget, return gtk_widget_mnemonic_activate (priv->combo_box, group_cycling); break; case GTK_FILE_CHOOSER_ACTION_SAVE: - case GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER: default: g_assert_not_reached (); break; @@ -1833,7 +1805,6 @@ model_add_volumes (GtkFileChooserButton *button, GtkFileChooserButtonPrivate *priv = gtk_file_chooser_button_get_instance_private (button); GtkListStore *store; gint pos; - gboolean local_only; GSList *l; if (!volumes) @@ -1841,7 +1812,6 @@ model_add_volumes (GtkFileChooserButton *button, store = GTK_LIST_STORE (priv->model); pos = model_get_type_position (button, ROW_TYPE_VOLUME); - local_only = gtk_file_chooser_get_local_only (GTK_FILE_CHOOSER (priv->chooser)); for (l = volumes; l; l = l->next) { @@ -1851,27 +1821,6 @@ model_add_volumes (GtkFileChooserButton *button, gchar *display_name; volume = l->data; - - if (local_only) - { - if (_gtk_file_system_volume_is_mounted (volume)) - { - GFile *base_file; - - base_file = _gtk_file_system_volume_get_root (volume); - if (base_file != NULL) - { - if (!_gtk_file_has_native_path (base_file)) - { - g_object_unref (base_file); - continue; - } - else - g_object_unref (base_file); - } - } - } - icon = _gtk_file_system_volume_get_icon (volume); display_name = _gtk_file_system_volume_get_display_name (volume); @@ -1901,7 +1850,6 @@ model_add_bookmarks (GtkFileChooserButton *button, GtkListStore *store; GtkTreeIter iter; gint pos; - gboolean local_only; GSList *l; if (!bookmarks) @@ -1909,7 +1857,6 @@ model_add_bookmarks (GtkFileChooserButton *button, store = GTK_LIST_STORE (priv->model); pos = model_get_type_position (button, ROW_TYPE_BOOKMARK); - local_only = gtk_file_chooser_get_local_only (GTK_FILE_CHOOSER (priv->chooser)); for (l = bookmarks; l; l = l->next) { @@ -1934,9 +1881,6 @@ model_add_bookmarks (GtkFileChooserButton *button, gchar *label; GIcon *icon; - if (local_only) - continue; - /* Don't call get_info for remote paths to avoid latency and * auth dialogs. * If we switch to a better bookmarks file format (XBEL), we @@ -2134,15 +2078,11 @@ model_remove_rows (GtkFileChooserButton *button, static gboolean test_if_file_is_visible (GtkFileSystem *fs, GFile *file, - gboolean local_only, gboolean is_folder) { if (!file) return FALSE; - if (local_only && !_gtk_file_has_native_path (file)) - return FALSE; - if (!is_folder) return FALSE; @@ -2158,11 +2098,10 @@ filter_model_visible_func (GtkTreeModel *model, GtkFileChooserButtonPrivate *priv = gtk_file_chooser_button_get_instance_private (button); gchar type; gpointer data; - gboolean local_only, retval, is_folder; + gboolean retval, is_folder; type = ROW_TYPE_INVALID; data = NULL; - local_only = gtk_file_chooser_get_local_only (GTK_FILE_CHOOSER (priv->chooser)); gtk_tree_model_get (model, iter, TYPE_COLUMN, &type, @@ -2178,30 +2117,10 @@ filter_model_visible_func (GtkTreeModel *model, case ROW_TYPE_SPECIAL: case ROW_TYPE_SHORTCUT: case ROW_TYPE_BOOKMARK: - retval = test_if_file_is_visible (priv->fs, data, local_only, is_folder); + retval = test_if_file_is_visible (priv->fs, data, is_folder); break; case ROW_TYPE_VOLUME: - { - retval = TRUE; - if (local_only) - { - if (_gtk_file_system_volume_is_mounted (data)) - { - GFile *base_file; - - base_file = _gtk_file_system_volume_get_root (data); - - if (base_file) - { - if (!_gtk_file_has_native_path (base_file)) - retval = FALSE; - g_object_unref (base_file); - } - else - retval = FALSE; - } - } - } + retval = TRUE; break; default: retval = TRUE; @@ -2550,7 +2469,7 @@ save_inactive_state (GtkFileChooserButton *button) if (priv->selection_while_inactive) g_object_unref (priv->selection_while_inactive); - priv->current_folder_while_inactive = gtk_file_chooser_get_current_folder_file (GTK_FILE_CHOOSER (priv->chooser)); + priv->current_folder_while_inactive = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (priv->chooser)); priv->selection_while_inactive = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (priv->chooser)); } @@ -2560,7 +2479,7 @@ restore_inactive_state (GtkFileChooserButton *button) GtkFileChooserButtonPrivate *priv = gtk_file_chooser_button_get_instance_private (button); if (priv->current_folder_while_inactive) - gtk_file_chooser_set_current_folder_file (GTK_FILE_CHOOSER (priv->chooser), priv->current_folder_while_inactive, NULL); + gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (priv->chooser), priv->current_folder_while_inactive, NULL); if (priv->selection_while_inactive) gtk_file_chooser_select_file (GTK_FILE_CHOOSER (priv->chooser), priv->selection_while_inactive, NULL); @@ -2614,15 +2533,6 @@ open_dialog (GtkFileChooserButton *button) { restore_inactive_state (button); priv->active = TRUE; - - /* Only handle update-preview handler if it is handled on the button */ - if (g_signal_has_handler_pending (button, - g_signal_lookup ("update-preview", GTK_TYPE_FILE_CHOOSER), - 0, TRUE)) - { - g_signal_connect (priv->chooser, "update-preview", - G_CALLBACK (chooser_update_preview_cb), button); - } } gtk_widget_set_sensitive (priv->combo_box, FALSE); @@ -2708,58 +2618,6 @@ button_clicked_cb (GtkButton *real_button, /* Dialog */ -static void -chooser_update_preview_cb (GtkFileChooser *dialog, - gpointer user_data) -{ - g_signal_emit_by_name (user_data, "update-preview"); -} - -static void -chooser_notify_cb (GObject *dialog, - GParamSpec *pspec, - gpointer user_data) -{ - gpointer iface; - - iface = g_type_interface_peek (g_type_class_peek (G_OBJECT_TYPE (dialog)), - GTK_TYPE_FILE_CHOOSER); - if (g_object_interface_find_property (iface, pspec->name)) - g_object_notify (user_data, pspec->name); - - if (g_ascii_strcasecmp (pspec->name, "local-only") == 0) - { - GtkFileChooserButton *button = GTK_FILE_CHOOSER_BUTTON (user_data); - GtkFileChooserButtonPrivate *priv = gtk_file_chooser_button_get_instance_private (button); - - if (priv->has_current_folder) - { - GtkTreeIter iter; - gint pos; - gpointer data; - - pos = model_get_type_position (user_data, - ROW_TYPE_CURRENT_FOLDER); - gtk_tree_model_iter_nth_child (priv->model, &iter, NULL, pos); - - data = NULL; - gtk_tree_model_get (priv->model, &iter, DATA_COLUMN, &data, -1); - - /* If the path isn't local but we're in local-only mode now, remove - * the custom-folder row */ - if (data && _gtk_file_has_native_path (G_FILE (data)) && - gtk_file_chooser_get_local_only (GTK_FILE_CHOOSER (priv->chooser))) - { - pos--; - model_remove_rows (user_data, pos, 2); - } - } - - gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (priv->filter_model)); - update_combo_box (user_data); - } -} - static void common_response_cb (GtkFileChooserButton *button, gint response) @@ -2780,11 +2638,7 @@ common_response_cb (GtkFileChooserButton *button, } if (priv->active) - { - priv->active = FALSE; - - g_signal_handlers_disconnect_by_func (priv->chooser, chooser_update_preview_cb, button); - } + priv->active = FALSE; update_label_and_image (button); update_combo_box (button); diff --git a/gtk/gtkfilechooserdialog.c b/gtk/gtkfilechooserdialog.c index 56d89fbb5a..36e3e3e742 100644 --- a/gtk/gtkfilechooserdialog.c +++ b/gtk/gtkfilechooserdialog.c @@ -85,11 +85,9 @@ * res = gtk_dialog_run (GTK_DIALOG (dialog)); * if (res == GTK_RESPONSE_ACCEPT) * { - * char *filename; * GtkFileChooser *chooser = GTK_FILE_CHOOSER (dialog); - * filename = gtk_file_chooser_get_filename (chooser); - * open_file (filename); - * g_free (filename); + * g_autoptr(GFile) filen = gtk_file_chooser_get_file (chooser); + * open_file (file); * } * * gtk_widget_destroy (dialog); @@ -113,23 +111,16 @@ * NULL); * chooser = GTK_FILE_CHOOSER (dialog); * - * gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); - * * if (user_edited_a_new_document) - * gtk_file_chooser_set_current_name (chooser, - * _("Untitled document")); + * gtk_file_chooser_set_current_name (chooser, _("Untitled document")); * else - * gtk_file_chooser_set_filename (chooser, - * existing_filename); + * gtk_file_chooser_set_file (chooser, existing_filename); * * res = gtk_dialog_run (GTK_DIALOG (dialog)); * if (res == GTK_RESPONSE_ACCEPT) * { - * char *filename; - * - * filename = gtk_file_chooser_get_filename (chooser); - * save_to_file (filename); - * g_free (filename); + * g_autoptr(GFile) file = gtk_file_chooser_get_file (chooser); + * save_to_file (file); * } * * gtk_widget_destroy (dialog); @@ -145,7 +136,7 @@ * and suggest a name such as “Untitled” with gtk_file_chooser_set_current_name(). * * - To save a file under a different name. Use #GTK_FILE_CHOOSER_ACTION_SAVE, - * and set the existing filename with gtk_file_chooser_set_filename(). + * and set the existing file with gtk_file_chooser_set_file(). * * - To choose a folder instead of a file. Use #GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER. * @@ -156,7 +147,7 @@ * considered to be a good policy, as now the file chooser is * able to make good suggestions on its own. In general, you * should only cause the file chooser to show a specific folder - * when it is appropriate to use gtk_file_chooser_set_filename(), + * when it is appropriate to use gtk_file_chooser_set_file(), * i.e. when you are doing a Save As command and you already * have a file saved somewhere. @@ -362,18 +353,18 @@ file_chooser_widget_selection_changed (GtkWidget *widget, { GtkFileChooserDialogPrivate *priv = gtk_file_chooser_dialog_get_instance_private (dialog); GtkWidget *button; - GSList *uris; + GSList *files; gboolean sensitive; button = get_accept_action_widget (GTK_DIALOG (dialog), FALSE); if (button == NULL) return; - uris = gtk_file_chooser_get_uris (GTK_FILE_CHOOSER (priv->widget)); - sensitive = (uris != NULL); + files = gtk_file_chooser_get_files (GTK_FILE_CHOOSER (priv->widget)); + sensitive = (files != NULL); gtk_widget_set_sensitive (button, sensitive); - g_slist_free_full (uris, g_free); + g_slist_free_full (files, g_object_unref); } static void @@ -495,8 +486,7 @@ setup_save_entry (GtkFileChooserDialog *dialog) header = gtk_dialog_get_header_bar (GTK_DIALOG (dialog)); - need_entry = action == GTK_FILE_CHOOSER_ACTION_SAVE || - action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER; + need_entry = action == GTK_FILE_CHOOSER_ACTION_SAVE; if (need_entry && !priv->has_entry) { diff --git a/gtk/gtkfilechooserentry.c b/gtk/gtkfilechooserentry.c index 09146f4963..60d6e3bff4 100644 --- a/gtk/gtkfilechooserentry.c +++ b/gtk/gtkfilechooserentry.c @@ -64,7 +64,6 @@ struct _GtkFileChooserEntry guint complete_on_load : 1; guint eat_tabs : 1; guint eat_escape : 1; - guint local_only : 1; }; enum @@ -273,8 +272,6 @@ _gtk_file_chooser_entry_init (GtkFileChooserEntry *chooser_entry) GtkEntryCompletion *comp; GtkCellRenderer *cell; - chooser_entry->local_only = FALSE; - g_object_set (chooser_entry, "truncate-multiline", TRUE, NULL); comp = gtk_entry_completion_new (); @@ -573,7 +570,6 @@ update_inline_completion (GtkFileChooserEntry *chooser_entry) gtk_entry_completion_set_inline_completion (completion, TRUE); break; case GTK_FILE_CHOOSER_ACTION_SAVE: - case GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER: default: gtk_entry_completion_set_inline_completion (completion, FALSE); break; @@ -693,11 +689,6 @@ set_completion_folder (GtkFileChooserEntry *chooser_entry, GFile *folder_file, char *dir_part) { - if (folder_file && - chooser_entry->local_only - && !_gtk_file_has_native_path (folder_file)) - folder_file = NULL; - if (((chooser_entry->current_folder_file && folder_file && g_file_equal (folder_file, chooser_entry->current_folder_file)) @@ -985,7 +976,6 @@ _gtk_file_chooser_entry_set_action (GtkFileChooserEntry *chooser_entry, gtk_entry_completion_set_popup_single_match (comp, FALSE); break; case GTK_FILE_CHOOSER_ACTION_SAVE: - case GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER: gtk_entry_completion_set_popup_single_match (comp, TRUE); break; } @@ -1061,20 +1051,6 @@ _gtk_file_chooser_entry_select_filename (GtkFileChooserEntry *chooser_entry) gtk_editable_select_region (GTK_EDITABLE (chooser_entry), 0, (gint) len); } -void -_gtk_file_chooser_entry_set_local_only (GtkFileChooserEntry *chooser_entry, - gboolean local_only) -{ - chooser_entry->local_only = local_only; - refresh_current_folder_and_file_part (chooser_entry); -} - -gboolean -_gtk_file_chooser_entry_get_local_only (GtkFileChooserEntry *chooser_entry) -{ - return chooser_entry->local_only; -} - void _gtk_file_chooser_entry_set_file_filter (GtkFileChooserEntry *chooser_entry, GtkFileFilter *filter) diff --git a/gtk/gtkfilechooserentry.h b/gtk/gtkfilechooserentry.h index 732a87a741..fb6725e9c9 100644 --- a/gtk/gtkfilechooserentry.h +++ b/gtk/gtkfilechooserentry.h @@ -43,9 +43,6 @@ const gchar * _gtk_file_chooser_entry_get_file_part (GtkFileChooserEnt gboolean _gtk_file_chooser_entry_get_is_folder (GtkFileChooserEntry *chooser_entry, GFile *file); void _gtk_file_chooser_entry_select_filename (GtkFileChooserEntry *chooser_entry); -void _gtk_file_chooser_entry_set_local_only (GtkFileChooserEntry *chooser_entry, - gboolean local_only); -gboolean _gtk_file_chooser_entry_get_local_only (GtkFileChooserEntry *chooser_entry); void _gtk_file_chooser_entry_set_file_filter (GtkFileChooserEntry *chooser_entry, GtkFileFilter *filter); diff --git a/gtk/gtkfilechoosernative.c b/gtk/gtkfilechoosernative.c index ffd0ae83d0..4db1a2743a 100644 --- a/gtk/gtkfilechoosernative.c +++ b/gtk/gtkfilechoosernative.c @@ -105,8 +105,6 @@ * "_Cancel"); * chooser = GTK_FILE_CHOOSER (native); * - * gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); - * * if (user_edited_a_new_document) * gtk_file_chooser_set_current_name (chooser, * _("Untitled document")); @@ -147,7 +145,6 @@ * * #GtkFileChooser::current-folder-changed * * #GtkFileChooser::selection-changed * * #GtkFileChooser::file-activated - * * #GtkFileChooser::confirm-overwrite * * You can also not use the methods that directly control user navigation: * * gtk_file_chooser_unselect_filename() @@ -165,10 +162,6 @@ * used. It supports many of the features that #GtkFileChooserDialog * does, but there are some things it does not handle: * - * * Extra widgets added with gtk_file_chooser_set_extra_widget(). - * - * * Use of custom previews by connecting to #GtkFileChooser::update-preview. - * * * Any #GtkFileFilter added using a mimetype or custom filter. * * If any of these features are used the regular #GtkFileChooserDialog @@ -182,10 +175,6 @@ * be a GTK+ file chooser. In this situation, the following things are not * supported and will be silently ignored: * - * * Extra widgets added with gtk_file_chooser_set_extra_widget(). - * - * * Use of custom previews by connecting to #GtkFileChooser::update-preview. - * * * Any #GtkFileFilter added with a custom filter. * * ## macOS details ## {#gtkfilechooserdialognative-macos} @@ -194,12 +183,6 @@ * file chooser dialogs. Some features provided by #GtkFileChooserDialog are * not supported: * - * * Extra widgets added with gtk_file_chooser_set_extra_widget(), unless the - * widget is an instance of GtkLabel, in which case the label text will be used - * to set the NSSavePanel message instance property. - * - * * Use of custom previews by connecting to #GtkFileChooser::update-preview. - * * * Any #GtkFileFilter added with a custom filter. * * * Shortcut folders. @@ -577,13 +560,6 @@ dialog_response_cb (GtkDialog *dialog, _gtk_native_dialog_emit_response (GTK_NATIVE_DIALOG (self), response_id); } -static void -dialog_update_preview_cb (GtkFileChooser *file_chooser, - gpointer data) -{ - g_signal_emit_by_name (data, "update-preview"); -} - static void show_dialog (GtkFileChooserNative *self) { @@ -618,11 +594,6 @@ show_dialog (GtkFileChooserNative *self) G_CALLBACK (dialog_response_cb), self); - g_signal_connect (self->dialog, - "update-preview", - G_CALLBACK (dialog_update_preview_cb), - self); - G_GNUC_BEGIN_IGNORE_DEPRECATIONS gtk_window_present (GTK_WINDOW (self->dialog)); G_GNUC_END_IGNORE_DEPRECATIONS @@ -632,7 +603,6 @@ static void hide_dialog (GtkFileChooserNative *self) { g_signal_handlers_disconnect_by_func (self->dialog, dialog_response_cb, self); - g_signal_handlers_disconnect_by_func (self->dialog, dialog_update_preview_cb, self); gtk_widget_hide (self->dialog); } @@ -644,8 +614,8 @@ gtk_file_chooser_native_set_current_folder (GtkFileChooser *chooser, GtkFileChooserNative *self = GTK_FILE_CHOOSER_NATIVE (chooser); gboolean res; - res = gtk_file_chooser_set_current_folder_file (GTK_FILE_CHOOSER (self->dialog), - file, error); + res = gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (self->dialog), + file, error); if (res) diff --git a/gtk/gtkfilechoosernativequartz.c b/gtk/gtkfilechoosernativequartz.c index 89fad7b3af..026cdf1011 100644 --- a/gtk/gtkfilechoosernativequartz.c +++ b/gtk/gtkfilechoosernativequartz.c @@ -54,9 +54,7 @@ typedef struct { gboolean folder; gboolean create_folders; gboolean modal; - gboolean overwrite_confirmation; gboolean select_multiple; - gboolean show_hidden; gboolean running; char *accept_label; @@ -266,11 +264,6 @@ filechooser_quartz_launch (FileChooserQuartzData *data) [data->panel setReleasedWhenClosed:YES]; - if (data->show_hidden) - { - [data->panel setShowsHiddenFiles:YES]; - } - if (data->accept_label) [data->panel setPrompt:[NSString stringWithUTF8String:data->accept_label]]; @@ -445,26 +438,10 @@ gtk_file_chooser_native_quartz_show (GtkFileChooserNative *self) GtkWindow *transient_for; GtkFileChooserAction action; - guint update_preview_signal; GSList *filters, *l; int n_filters, i; - GtkWidget *extra_widget = NULL; char *message = NULL; - extra_widget = gtk_file_chooser_get_extra_widget (GTK_FILE_CHOOSER (self)); - // if the extra_widget is a GtkLabel, then use its text to set the dialog message - if (extra_widget != NULL) - { - if (!GTK_IS_LABEL (extra_widget)) - return FALSE; - else - message = g_strdup (gtk_label_get_text (GTK_LABEL (extra_widget))); - } - - update_preview_signal = g_signal_lookup ("update-preview", GTK_TYPE_FILE_CHOOSER); - if (g_signal_has_handler_pending (self, update_preview_signal, 0, TRUE)) - return FALSE; - data = g_new0 (FileChooserQuartzData, 1); // examine filters! @@ -505,12 +482,10 @@ gtk_file_chooser_native_quartz_show (GtkFileChooserNative *self) action = gtk_file_chooser_get_action (GTK_FILE_CHOOSER (self->dialog)); - if (action == GTK_FILE_CHOOSER_ACTION_SAVE || - action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) + if (action == GTK_FILE_CHOOSER_ACTION_SAVE) data->save = TRUE; - if (action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER || - action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) + if (action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER) data->folder = TRUE; if ((action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER || @@ -518,13 +493,6 @@ gtk_file_chooser_native_quartz_show (GtkFileChooserNative *self) gtk_file_chooser_get_select_multiple (GTK_FILE_CHOOSER (self->dialog))) data->select_multiple = TRUE; - // overwrite confirmation appears to be always on - if (gtk_file_chooser_get_do_overwrite_confirmation (GTK_FILE_CHOOSER (self->dialog))) - data->overwrite_confirmation = TRUE; - - if (gtk_file_chooser_get_show_hidden (GTK_FILE_CHOOSER (self->dialog))) - data->show_hidden = TRUE; - transient_for = gtk_native_dialog_get_transient_for (GTK_NATIVE_DIALOG (self)); if (transient_for) { @@ -547,8 +515,7 @@ gtk_file_chooser_native_quartz_show (GtkFileChooserNative *self) if (self->current_folder) data->current_folder = g_object_ref (self->current_folder); - if (action == GTK_FILE_CHOOSER_ACTION_SAVE || - action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) + if (action == GTK_FILE_CHOOSER_ACTION_SAVE) data->current_name = g_strdup (self->current_name); } diff --git a/gtk/gtkfilechoosernativewin32.c b/gtk/gtkfilechoosernativewin32.c index 3bb81be29c..56cc5d4dcf 100644 --- a/gtk/gtkfilechoosernativewin32.c +++ b/gtk/gtkfilechoosernativewin32.c @@ -61,15 +61,13 @@ typedef struct { gboolean save; gboolean folder; gboolean modal; - gboolean overwrite_confirmation; gboolean select_multiple; - gboolean show_hidden; char *accept_label; char *cancel_label; char *title; - GSList *shortcut_uris; + GSList *shortcut_files; GArray *choices_selections; GFile *current_folder; @@ -331,7 +329,7 @@ filechooser_win32_thread_data_free (FilechooserWin32ThreadData *data) g_array_free (data->choices_selections, TRUE); data->choices_selections = NULL; } - g_slist_free_full (data->shortcut_uris, g_free); + g_slist_free_full (data->shortcut_files, g_object_unref); g_slist_free_full (data->files, g_object_unref); if (data->self) g_object_unref (data->self); @@ -497,13 +495,7 @@ filechooser_win32_thread (gpointer _data) if (data->select_multiple) flags |= FOS_ALLOWMULTISELECT; - if (data->show_hidden) - flags |= FOS_FORCESHOWHIDDEN; - - if (data->overwrite_confirmation) - flags |= FOS_OVERWRITEPROMPT; - else - flags &= ~(FOS_OVERWRITEPROMPT); + flags |= FOS_OVERWRITEPROMPT; hr = IFileDialog_SetOptions (pfd, flags); if (FAILED (hr)) @@ -538,9 +530,9 @@ filechooser_win32_thread (gpointer _data) g_free (label); } - for (l = data->shortcut_uris; l != NULL; l = l->next) + for (l = data->shortcut_files; l != NULL; l = l->next) { - IShellItem *item = get_shell_item_for_uri (l->data); + IShellItem *item = get_shell_item_for_file (l->data); if (item) { hr = IFileDialog_AddPlace (pfd, item, FDAP_BOTTOM); @@ -873,18 +865,9 @@ gtk_file_chooser_native_win32_show (GtkFileChooserNative *self) FilechooserWin32ThreadData *data; GtkWindow *transient_for; GtkFileChooserAction action; - guint update_preview_signal; GSList *filters, *l; int n_filters, i; - if (gtk_file_chooser_get_extra_widget (GTK_FILE_CHOOSER (self)) != NULL && - self->choices == NULL) - return FALSE; - - update_preview_signal = g_signal_lookup ("update-preview", GTK_TYPE_FILE_CHOOSER); - if (g_signal_has_handler_pending (self, update_preview_signal, 0, TRUE)) - return FALSE; - data = g_new0 (FilechooserWin32ThreadData, 1); filters = gtk_file_chooser_list_filters (GTK_FILE_CHOOSER (self)); @@ -911,19 +894,17 @@ gtk_file_chooser_native_win32_show (GtkFileChooserNative *self) self->mode_data = data; data->self = g_object_ref (self); - data->shortcut_uris = - gtk_file_chooser_list_shortcut_folder_uris (GTK_FILE_CHOOSER (self->dialog)); + data->shortcut_files = + gtk_file_chooser_list_shortcut_folders (GTK_FILE_CHOOSER (self->dialog)); data->accept_label = translate_mnemonics (self->accept_label); data->cancel_label = translate_mnemonics (self->cancel_label); action = gtk_file_chooser_get_action (GTK_FILE_CHOOSER (self->dialog)); - if (action == GTK_FILE_CHOOSER_ACTION_SAVE || - action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) + if (action == GTK_FILE_CHOOSER_ACTION_SAVE) data->save = TRUE; - if (action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER || - action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) + if (action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER) data->folder = TRUE; if ((action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER || @@ -931,12 +912,6 @@ gtk_file_chooser_native_win32_show (GtkFileChooserNative *self) gtk_file_chooser_get_select_multiple (GTK_FILE_CHOOSER (self->dialog))) data->select_multiple = TRUE; - if (gtk_file_chooser_get_do_overwrite_confirmation (GTK_FILE_CHOOSER (self->dialog))) - data->overwrite_confirmation = TRUE; - - if (gtk_file_chooser_get_show_hidden (GTK_FILE_CHOOSER (self->dialog))) - data->show_hidden = TRUE; - transient_for = gtk_native_dialog_get_transient_for (GTK_NATIVE_DIALOG (self)); if (transient_for) { @@ -957,8 +932,7 @@ gtk_file_chooser_native_win32_show (GtkFileChooserNative *self) if (self->current_folder) data->current_folder = g_object_ref (self->current_folder); - if (action == GTK_FILE_CHOOSER_ACTION_SAVE || - action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) + if (action == GTK_FILE_CHOOSER_ACTION_SAVE) data->current_name = g_strdup (self->current_name); } diff --git a/gtk/gtkfilechooserprivate.h b/gtk/gtkfilechooserprivate.h index fab92fc243..06a49dea03 100644 --- a/gtk/gtkfilechooserprivate.h +++ b/gtk/gtkfilechooserprivate.h @@ -73,7 +73,6 @@ struct _GtkFileChooserIface void (*select_all) (GtkFileChooser *chooser); void (*unselect_all) (GtkFileChooser *chooser); GSList * (*get_files) (GtkFileChooser *chooser); - GFile * (*get_preview_file) (GtkFileChooser *chooser); GtkFileSystem *(*get_file_system) (GtkFileChooser *chooser); void (*add_filter) (GtkFileChooser *chooser, GtkFileFilter *filter); @@ -94,7 +93,6 @@ struct _GtkFileChooserIface void (*selection_changed) (GtkFileChooser *chooser); void (*update_preview) (GtkFileChooser *chooser); void (*file_activated) (GtkFileChooser *chooser); - GtkFileChooserConfirmation (*confirm_overwrite) (GtkFileChooser *chooser); /* 3.22 additions */ void (*add_choice) (GtkFileChooser *chooser, @@ -112,14 +110,6 @@ struct _GtkFileChooserIface }; GtkFileSystem *_gtk_file_chooser_get_file_system (GtkFileChooser *chooser); -gboolean _gtk_file_chooser_add_shortcut_folder (GtkFileChooser *chooser, - GFile *folder, - GError **error); -gboolean _gtk_file_chooser_remove_shortcut_folder (GtkFileChooser *chooser, - GFile *folder, - GError **error); -GSList * _gtk_file_chooser_list_shortcut_folder_files (GtkFileChooser *chooser); - G_END_DECLS diff --git a/gtk/gtkfilechooserutils.c b/gtk/gtkfilechooserutils.c index c022306dca..afa166056e 100644 --- a/gtk/gtkfilechooserutils.c +++ b/gtk/gtkfilechooserutils.c @@ -40,7 +40,6 @@ static void delegate_unselect_file (GtkFileChooser *choose static void delegate_select_all (GtkFileChooser *chooser); static void delegate_unselect_all (GtkFileChooser *chooser); static GSList * delegate_get_files (GtkFileChooser *chooser); -static GFile * delegate_get_preview_file (GtkFileChooser *chooser); static GtkFileSystem *delegate_get_file_system (GtkFileChooser *chooser); static void delegate_add_filter (GtkFileChooser *chooser, GtkFileFilter *filter); @@ -61,13 +60,9 @@ static void delegate_current_folder_changed (GtkFileChooser *choose gpointer data); static void delegate_selection_changed (GtkFileChooser *chooser, gpointer data); -static void delegate_update_preview (GtkFileChooser *chooser, - gpointer data); static void delegate_file_activated (GtkFileChooser *chooser, gpointer data); -static GtkFileChooserConfirmation delegate_confirm_overwrite (GtkFileChooser *chooser, - gpointer data); static void delegate_add_choice (GtkFileChooser *chooser, const char *id, const char *label, @@ -99,33 +94,12 @@ _gtk_file_chooser_install_properties (GObjectClass *klass) g_object_class_override_property (klass, GTK_FILE_CHOOSER_PROP_ACTION, "action"); - g_object_class_override_property (klass, - GTK_FILE_CHOOSER_PROP_EXTRA_WIDGET, - "extra-widget"); g_object_class_override_property (klass, GTK_FILE_CHOOSER_PROP_FILTER, "filter"); - g_object_class_override_property (klass, - GTK_FILE_CHOOSER_PROP_LOCAL_ONLY, - "local-only"); - g_object_class_override_property (klass, - GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET, - "preview-widget"); - g_object_class_override_property (klass, - GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET_ACTIVE, - "preview-widget-active"); - g_object_class_override_property (klass, - GTK_FILE_CHOOSER_PROP_USE_PREVIEW_LABEL, - "use-preview-label"); g_object_class_override_property (klass, GTK_FILE_CHOOSER_PROP_SELECT_MULTIPLE, "select-multiple"); - g_object_class_override_property (klass, - GTK_FILE_CHOOSER_PROP_SHOW_HIDDEN, - "show-hidden"); - g_object_class_override_property (klass, - GTK_FILE_CHOOSER_PROP_DO_OVERWRITE_CONFIRMATION, - "do-overwrite-confirmation"); g_object_class_override_property (klass, GTK_FILE_CHOOSER_PROP_CREATE_FOLDERS, "create-folders"); @@ -154,7 +128,6 @@ _gtk_file_chooser_delegate_iface_init (GtkFileChooserIface *iface) iface->select_all = delegate_select_all; iface->unselect_all = delegate_unselect_all; iface->get_files = delegate_get_files; - iface->get_preview_file = delegate_get_preview_file; iface->get_file_system = delegate_get_file_system; iface->add_filter = delegate_add_filter; iface->remove_filter = delegate_remove_filter; @@ -193,12 +166,8 @@ _gtk_file_chooser_set_delegate (GtkFileChooser *receiver, G_CALLBACK (delegate_current_folder_changed), receiver); g_signal_connect (delegate, "selection-changed", G_CALLBACK (delegate_selection_changed), receiver); - g_signal_connect (delegate, "update-preview", - G_CALLBACK (delegate_update_preview), receiver); g_signal_connect (delegate, "file-activated", G_CALLBACK (delegate_file_activated), receiver); - g_signal_connect (delegate, "confirm-overwrite", - G_CALLBACK (delegate_confirm_overwrite), receiver); } GQuark @@ -252,12 +221,6 @@ delegate_get_files (GtkFileChooser *chooser) return gtk_file_chooser_get_files (get_delegate (chooser)); } -static GFile * -delegate_get_preview_file (GtkFileChooser *chooser) -{ - return gtk_file_chooser_get_preview_file (get_delegate (chooser)); -} - static GtkFileSystem * delegate_get_file_system (GtkFileChooser *chooser) { @@ -289,7 +252,7 @@ delegate_add_shortcut_folder (GtkFileChooser *chooser, GFile *file, GError **error) { - return _gtk_file_chooser_add_shortcut_folder (get_delegate (chooser), file, error); + return gtk_file_chooser_add_shortcut_folder (get_delegate (chooser), file, error); } static gboolean @@ -297,13 +260,13 @@ delegate_remove_shortcut_folder (GtkFileChooser *chooser, GFile *file, GError **error) { - return _gtk_file_chooser_remove_shortcut_folder (get_delegate (chooser), file, error); + return gtk_file_chooser_remove_shortcut_folder (get_delegate (chooser), file, error); } static GSList * delegate_list_shortcut_folders (GtkFileChooser *chooser) { - return _gtk_file_chooser_list_shortcut_folder_files (get_delegate (chooser)); + return gtk_file_chooser_list_shortcut_folders (get_delegate (chooser)); } static gboolean @@ -311,13 +274,13 @@ delegate_set_current_folder (GtkFileChooser *chooser, GFile *file, GError **error) { - return gtk_file_chooser_set_current_folder_file (get_delegate (chooser), file, error); + return gtk_file_chooser_set_current_folder (get_delegate (chooser), file, error); } static GFile * delegate_get_current_folder (GtkFileChooser *chooser) { - return gtk_file_chooser_get_current_folder_file (get_delegate (chooser)); + return gtk_file_chooser_get_current_folder (get_delegate (chooser)); } static void @@ -360,13 +323,6 @@ delegate_current_folder_changed (GtkFileChooser *chooser, g_signal_emit_by_name (data, "current-folder-changed"); } -static void -delegate_update_preview (GtkFileChooser *chooser, - gpointer data) -{ - g_signal_emit_by_name (data, "update-preview"); -} - static void delegate_file_activated (GtkFileChooser *chooser, gpointer data) @@ -374,16 +330,6 @@ delegate_file_activated (GtkFileChooser *chooser, g_signal_emit_by_name (data, "file-activated"); } -static GtkFileChooserConfirmation -delegate_confirm_overwrite (GtkFileChooser *chooser, - gpointer data) -{ - GtkFileChooserConfirmation conf; - - g_signal_emit_by_name (data, "confirm-overwrite", &conf); - return conf; -} - GSettings * _gtk_file_chooser_get_settings_for_widget (GtkWidget *widget) { diff --git a/gtk/gtkfilechooserutils.h b/gtk/gtkfilechooserutils.h index 6938791515..96f6658d6f 100644 --- a/gtk/gtkfilechooserutils.h +++ b/gtk/gtkfilechooserutils.h @@ -30,14 +30,7 @@ typedef enum { GTK_FILE_CHOOSER_PROP_FIRST = 0x1000, GTK_FILE_CHOOSER_PROP_ACTION = GTK_FILE_CHOOSER_PROP_FIRST, GTK_FILE_CHOOSER_PROP_FILTER, - GTK_FILE_CHOOSER_PROP_LOCAL_ONLY, - GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET, - GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET_ACTIVE, - GTK_FILE_CHOOSER_PROP_USE_PREVIEW_LABEL, - GTK_FILE_CHOOSER_PROP_EXTRA_WIDGET, GTK_FILE_CHOOSER_PROP_SELECT_MULTIPLE, - GTK_FILE_CHOOSER_PROP_SHOW_HIDDEN, - GTK_FILE_CHOOSER_PROP_DO_OVERWRITE_CONFIRMATION, GTK_FILE_CHOOSER_PROP_CREATE_FOLDERS, GTK_FILE_CHOOSER_PROP_LAST = GTK_FILE_CHOOSER_PROP_CREATE_FOLDERS } GtkFileChooserProp; diff --git a/gtk/gtkfilechooserwidget.c b/gtk/gtkfilechooserwidget.c index 532ae64e3a..d8909fb545 100644 --- a/gtk/gtkfilechooserwidget.c +++ b/gtk/gtkfilechooserwidget.c @@ -288,9 +288,6 @@ struct _GtkFileChooserWidgetPrivate { GtkWidget *extra_and_filters; GtkWidget *filter_combo_hbox; GtkWidget *filter_combo; - GtkWidget *preview_box; - GtkWidget *preview_label; - GtkWidget *preview_widget; GtkWidget *extra_align; GtkWidget *extra_widget; @@ -323,8 +320,6 @@ struct _GtkFileChooserWidgetPrivate { GtkBookmarksManager *bookmarks_manager; GFile *current_folder; - GFile *preview_file; - char *preview_display_name; GFile *renamed_file; GtkTreeViewColumn *list_name_column; @@ -359,15 +354,10 @@ struct _GtkFileChooserWidgetPrivate { /* Flags */ - guint local_only : 1; - guint preview_widget_active : 1; - guint use_preview_label : 1; guint select_multiple : 1; guint show_hidden : 1; - guint show_hidden_set : 1; guint sort_directories_first : 1; guint show_time : 1; - guint do_overwrite_confirmation : 1; guint list_sort_ascending : 1; guint shortcuts_current_folder_active : 1; guint show_size_column : 1; @@ -488,7 +478,6 @@ static void gtk_file_chooser_widget_unselect_file (GtkF static void gtk_file_chooser_widget_select_all (GtkFileChooser *chooser); static void gtk_file_chooser_widget_unselect_all (GtkFileChooser *chooser); static GSList * gtk_file_chooser_widget_get_files (GtkFileChooser *chooser); -static GFile * gtk_file_chooser_widget_get_preview_file (GtkFileChooser *chooser); static GtkFileSystem *gtk_file_chooser_widget_get_file_system (GtkFileChooser *chooser); static void gtk_file_chooser_widget_add_filter (GtkFileChooser *chooser, GtkFileFilter *filter); @@ -544,7 +533,6 @@ static void location_mode_set (GtkFileChooserWidget *impl, LocationMode new_mod static void set_current_filter (GtkFileChooserWidget *impl, GtkFileFilter *filter); -static void check_preview_change (GtkFileChooserWidget *impl); static void filter_combo_changed (GtkComboBox *combo_box, GtkFileChooserWidget *impl); @@ -621,7 +609,6 @@ gtk_file_chooser_widget_iface_init (GtkFileChooserIface *iface) iface->select_all = gtk_file_chooser_widget_select_all; iface->unselect_all = gtk_file_chooser_widget_unselect_all; iface->get_files = gtk_file_chooser_widget_get_files; - iface->get_preview_file = gtk_file_chooser_widget_get_preview_file; iface->get_file_system = gtk_file_chooser_widget_get_file_system; iface->set_current_folder = gtk_file_chooser_widget_set_current_folder; iface->get_current_folder = gtk_file_chooser_widget_get_current_folder; @@ -697,8 +684,6 @@ gtk_file_chooser_widget_finalize (GObject *object) /* stopping the load above should have cleared this */ g_assert (priv->load_timeout_id == 0); - g_free (priv->preview_display_name); - G_OBJECT_CLASS (gtk_file_chooser_widget_parent_class)->finalize (object); } @@ -812,21 +797,6 @@ error_creating_folder_dialog (GtkFileChooserWidget *impl, error); } -/* Shows an error about not being able to create a folder because a file with - * the same name is already there. - */ -static void -error_creating_folder_over_existing_file_dialog (GtkFileChooserWidget *impl, - GFile *file, - GError *error) -{ - error_dialog (impl, - _("The folder could not be created, as a file with the same " - "name already exists. Try using a different name for the " - "folder, or rename the file first."), - error); -} - static void error_with_file_under_nonfolder (GtkFileChooserWidget *impl, GFile *parent_file) @@ -913,7 +883,7 @@ change_folder_and_display_error (GtkFileChooserWidget *impl, * list_row_activated() * fetches path from model; path belongs to the model (*) * calls change_folder_and_display_error() - * calls gtk_file_chooser_set_current_folder_file() + * calls gtk_file_chooser_set_current_folder() * changing folders fails, sets model to NULL, thus freeing the path in (*) */ @@ -926,58 +896,6 @@ change_folder_and_display_error (GtkFileChooserWidget *impl, return result; } -static void -update_preview_widget_visibility (GtkFileChooserWidget *impl) -{ - GtkFileChooserWidgetPrivate *priv = gtk_file_chooser_widget_get_instance_private (impl); - - if (priv->use_preview_label) - { - if (!priv->preview_label) - { - priv->preview_label = gtk_label_new (priv->preview_display_name); - gtk_box_insert_child_after (GTK_BOX (priv->preview_box), priv->preview_label, NULL); - gtk_label_set_ellipsize (GTK_LABEL (priv->preview_label), PANGO_ELLIPSIZE_MIDDLE); - } - } - else - { - if (priv->preview_label) - { - gtk_widget_destroy (priv->preview_label); - priv->preview_label = NULL; - } - } - - if (priv->preview_widget_active && priv->preview_widget) - gtk_widget_show (priv->preview_box); - else - gtk_widget_hide (priv->preview_box); -} - -static void -set_preview_widget (GtkFileChooserWidget *impl, - GtkWidget *preview_widget) -{ - GtkFileChooserWidgetPrivate *priv = gtk_file_chooser_widget_get_instance_private (impl); - - if (preview_widget == priv->preview_widget) - return; - - if (priv->preview_widget) - gtk_container_remove (GTK_CONTAINER (priv->preview_box), - priv->preview_widget); - - priv->preview_widget = preview_widget; - if (priv->preview_widget) - { - gtk_widget_show (priv->preview_widget); - gtk_container_add (GTK_CONTAINER (priv->preview_box), priv->preview_widget); - } - - update_preview_widget_visibility (impl); -} - static void new_folder_popover_active (GtkWidget *button, GParamSpec *pspec, @@ -1247,9 +1165,7 @@ places_sidebar_open_location_cb (GtkPlacesSidebar *sidebar, /* In the Save modes, we want to preserve what the user typed in the filename * entry, so that he may choose another folder without erasing his typed name. */ - if (priv->location_entry - && !(priv->action == GTK_FILE_CHOOSER_ACTION_SAVE - || priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)) + if (priv->location_entry && priv->action != GTK_FILE_CHOOSER_ACTION_SAVE) clear_entry = TRUE; else clear_entry = FALSE; @@ -1333,14 +1249,13 @@ treeview_key_press_cb (GtkEventControllerKey *controller, return GDK_EVENT_STOP; } - if ((keyval == GDK_KEY_Return - || keyval == GDK_KEY_ISO_Enter - || keyval == GDK_KEY_KP_Enter - || keyval == GDK_KEY_space - || keyval == GDK_KEY_KP_Space) - && !(state & gtk_accelerator_get_default_mod_mask ()) - && !(priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER || - priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)) + if ((keyval == GDK_KEY_Return || + keyval == GDK_KEY_ISO_Enter || + keyval == GDK_KEY_KP_Enter || + keyval == GDK_KEY_space || + keyval == GDK_KEY_KP_Space) && + !(state & gtk_accelerator_get_default_mod_mask ()) && + priv->action != GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER) { gtk_widget_activate_default (GTK_WIDGET (impl)); return GDK_EVENT_STOP; @@ -2405,7 +2320,6 @@ location_changed_timeout_cb (gpointer user_data) GtkFileChooserWidgetPrivate *priv = gtk_file_chooser_widget_get_instance_private (impl); gtk_file_chooser_unselect_all (GTK_FILE_CHOOSER (impl)); - check_preview_change (impl); g_signal_emit_by_name (impl, "selection-changed", 0); priv->location_changed_id = 0; @@ -2462,7 +2376,6 @@ location_entry_setup (GtkFileChooserWidget *impl) g_signal_connect_swapped (priv->location_entry, "hide-entry", G_CALLBACK (location_entry_close_clicked), impl); - _gtk_file_chooser_entry_set_local_only (GTK_FILE_CHOOSER_ENTRY (priv->location_entry), priv->local_only); _gtk_file_chooser_entry_set_action (GTK_FILE_CHOOSER_ENTRY (priv->location_entry), priv->action); _gtk_file_chooser_entry_set_file_filter (GTK_FILE_CHOOSER_ENTRY (priv->location_entry), priv->current_filter); @@ -2698,12 +2611,6 @@ places_sidebar_show_other_locations_with_flags_cb (GtkPlacesSidebar *sidebar GtkPlacesOpenFlags open_flags, GtkFileChooserWidget *impl) { - GtkFileChooserWidgetPrivate *priv = gtk_file_chooser_widget_get_instance_private (impl); - - priv->preview_widget_active = FALSE; - - update_preview_widget_visibility (impl); - operation_mode_set (impl, OPERATION_MODE_OTHER_LOCATIONS); } @@ -2723,8 +2630,7 @@ location_toggle_popup_handler (GtkFileChooserWidget *impl) * If it is visible, turn it off only if it is focused. * Otherwise, switch to the entry. */ - if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE || - priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) + if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE) { gtk_widget_grab_focus (priv->location_entry); } @@ -2812,38 +2718,11 @@ switch_to_home_dir (GtkFileChooserWidget *impl) home_file = g_file_new_for_path (home); - gtk_file_chooser_set_current_folder_file (GTK_FILE_CHOOSER (impl), home_file, NULL); /* NULL-GError */ + gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (impl), home_file, NULL); /* NULL-GError */ g_object_unref (home_file); } -static void -set_local_only (GtkFileChooserWidget *impl, - gboolean local_only) -{ - GtkFileChooserWidgetPrivate *priv = gtk_file_chooser_widget_get_instance_private (impl); - - if (local_only != priv->local_only) - { - priv->local_only = local_only; - - if (priv->location_entry) - _gtk_file_chooser_entry_set_local_only (GTK_FILE_CHOOSER_ENTRY (priv->location_entry), local_only); - - gtk_places_sidebar_set_local_only (GTK_PLACES_SIDEBAR (priv->places_sidebar), local_only); - - if (local_only && priv->current_folder && - !_gtk_file_has_native_path (priv->current_folder)) - { - /* If we are pointing to a non-local folder, make an effort to change - * back to a local folder, but it's really up to the app to not cause - * such a situation, so we ignore errors. - */ - switch_to_home_dir (impl); - } - } -} - /* Sets the file chooser to multiple selection mode */ static void set_select_multiple (GtkFileChooserWidget *impl, @@ -2865,8 +2744,6 @@ set_select_multiple (GtkFileChooserWidget *impl, priv->select_multiple = select_multiple; g_object_notify (G_OBJECT (impl), "select-multiple"); - - check_preview_change (impl); } /* Takes the folder stored in a row in the recent_model, and puts it in the pathbar */ @@ -3118,8 +2995,7 @@ update_appearance (GtkFileChooserWidget *impl) { GtkFileChooserWidgetPrivate *priv = gtk_file_chooser_widget_get_instance_private (impl); - if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE || - priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) + if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE) { save_widgets_create (impl); gtk_places_sidebar_set_show_recent (GTK_PLACES_SIDEBAR (priv->places_sidebar), FALSE); @@ -3191,10 +3067,7 @@ gtk_file_chooser_widget_get_subtitle (GtkFileChooserWidget *impl) (priv->operation_mode == OPERATION_MODE_BROWSE && priv->location_mode == LOCATION_MODE_FILENAME_ENTRY)) { - if (priv->local_only) - subtitle = g_strdup (_("Enter location")); - else - subtitle = g_strdup (_("Enter location or URL")); + subtitle = g_strdup (_("Enter location or URL")); } return subtitle; @@ -3256,13 +3129,13 @@ gtk_file_chooser_widget_set_property (GObject *object, { gtk_file_chooser_widget_unselect_all (GTK_FILE_CHOOSER (impl)); - if ((action == GTK_FILE_CHOOSER_ACTION_SAVE || - action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) - && priv->select_multiple) + if (action == GTK_FILE_CHOOSER_ACTION_SAVE && + priv->select_multiple) { - g_warning ("Tried to change the file chooser action to SAVE or CREATE_FOLDER, but " - "this is not allowed in multiple selection mode. Resetting the file chooser " - "to single selection mode."); + g_warning ("Tried to change the file chooser action to SAVE, " + "but this is not allowed in multiple selection " + "mode. Resetting the file chooser to single " + "selection mode."); set_select_multiple (impl, FALSE); } priv->action = action; @@ -3277,38 +3150,16 @@ gtk_file_chooser_widget_set_property (GObject *object, set_current_filter (impl, g_value_get_object (value)); break; - case GTK_FILE_CHOOSER_PROP_LOCAL_ONLY: - set_local_only (impl, g_value_get_boolean (value)); - break; - - case GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET: - set_preview_widget (impl, g_value_get_object (value)); - break; - - case GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET_ACTIVE: - priv->preview_widget_active = g_value_get_boolean (value); - update_preview_widget_visibility (impl); - break; - - case GTK_FILE_CHOOSER_PROP_USE_PREVIEW_LABEL: - priv->use_preview_label = g_value_get_boolean (value); - update_preview_widget_visibility (impl); - break; - - case GTK_FILE_CHOOSER_PROP_EXTRA_WIDGET: - set_extra_widget (impl, g_value_get_object (value)); - break; - case GTK_FILE_CHOOSER_PROP_SELECT_MULTIPLE: { gboolean select_multiple = g_value_get_boolean (value); - if ((priv->action == GTK_FILE_CHOOSER_ACTION_SAVE || - priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) - && select_multiple) + if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE && + select_multiple) { - g_warning ("Tried to set the file chooser to multiple selection mode, but this is " - "not allowed in SAVE or CREATE_FOLDER modes. Ignoring the change and " - "leaving the file chooser in single selection mode."); + g_warning ("Tried to set the file chooser to multiple selection " + "mode, but this is not allowed in SAVE mode. Ignoring " + "the change and leaving the file chooser in single " + "selection mode."); return; } @@ -3316,18 +3167,6 @@ gtk_file_chooser_widget_set_property (GObject *object, } break; - case GTK_FILE_CHOOSER_PROP_SHOW_HIDDEN: - priv->show_hidden_set = TRUE; - set_show_hidden (impl, g_value_get_boolean (value)); - break; - - case GTK_FILE_CHOOSER_PROP_DO_OVERWRITE_CONFIRMATION: - { - gboolean do_overwrite_confirmation = g_value_get_boolean (value); - priv->do_overwrite_confirmation = do_overwrite_confirmation; - } - break; - case GTK_FILE_CHOOSER_PROP_CREATE_FOLDERS: { gboolean create_folders = g_value_get_boolean (value); @@ -3369,38 +3208,10 @@ gtk_file_chooser_widget_get_property (GObject *object, g_value_set_object (value, priv->current_filter); break; - case GTK_FILE_CHOOSER_PROP_LOCAL_ONLY: - g_value_set_boolean (value, priv->local_only); - break; - - case GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET: - g_value_set_object (value, priv->preview_widget); - break; - - case GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET_ACTIVE: - g_value_set_boolean (value, priv->preview_widget_active); - break; - - case GTK_FILE_CHOOSER_PROP_USE_PREVIEW_LABEL: - g_value_set_boolean (value, priv->use_preview_label); - break; - - case GTK_FILE_CHOOSER_PROP_EXTRA_WIDGET: - g_value_set_object (value, priv->extra_widget); - break; - case GTK_FILE_CHOOSER_PROP_SELECT_MULTIPLE: g_value_set_boolean (value, priv->select_multiple); break; - case GTK_FILE_CHOOSER_PROP_SHOW_HIDDEN: - g_value_set_boolean (value, priv->show_hidden); - break; - - case GTK_FILE_CHOOSER_PROP_DO_OVERWRITE_CONFIRMATION: - g_value_set_boolean (value, priv->do_overwrite_confirmation); - break; - case GTK_FILE_CHOOSER_PROP_CREATE_FOLDERS: g_value_set_boolean (value, priv->create_folders); break; @@ -3651,8 +3462,8 @@ settings_load (GtkFileChooserWidget *impl) date_format = g_settings_get_enum (settings, SETTINGS_KEY_DATE_FORMAT); type_format = g_settings_get_enum (settings, SETTINGS_KEY_TYPE_FORMAT); - if (!priv->show_hidden_set) - set_show_hidden (impl, show_hidden); + set_show_hidden (impl, show_hidden); + priv->show_size_column = show_size_column; gtk_tree_view_column_set_visible (priv->list_size_column, show_size_column); priv->show_type_column = show_type_column; @@ -3694,8 +3505,7 @@ settings_save (GtkFileChooserWidget *impl) /* All the other state */ g_settings_set_enum (settings, SETTINGS_KEY_LOCATION_MODE, priv->location_mode); - g_settings_set_boolean (settings, SETTINGS_KEY_SHOW_HIDDEN, - gtk_file_chooser_get_show_hidden (GTK_FILE_CHOOSER (impl))); + g_settings_set_boolean (settings, SETTINGS_KEY_SHOW_HIDDEN, priv->show_hidden); g_settings_set_boolean (settings, SETTINGS_KEY_SHOW_SIZE_COLUMN, priv->show_size_column); g_settings_set_boolean (settings, SETTINGS_KEY_SHOW_TYPE_COLUMN, priv->show_type_column); g_settings_set_boolean (settings, SETTINGS_KEY_SORT_DIRECTORIES_FIRST, priv->sort_directories_first); @@ -3714,10 +3524,12 @@ settings_save (GtkFileChooserWidget *impl) static void switch_to_cwd (GtkFileChooserWidget *impl) { - char *current_working_dir; + char *current_working_dir = g_get_current_dir (); + GFile *cwd = g_file_new_for_path (current_working_dir); - current_working_dir = g_get_current_dir (); - gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (impl), current_working_dir); + gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (impl), cwd, NULL); + + g_object_unref (cwd); g_free (current_working_dir); } @@ -4844,8 +4656,7 @@ file_system_model_set (GtkFileSystemModel *model, { gboolean sensitive = TRUE; - if (!(priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER - || priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)) + if (priv->action != GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER) { sensitive = TRUE; /* for file modes... */ } @@ -5127,7 +4938,6 @@ update_chooser_entry (GtkFileChooserWidget *impl) return; if (!(priv->action == GTK_FILE_CHOOSER_ACTION_SAVE - || priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER || ((priv->action == GTK_FILE_CHOOSER_ACTION_OPEN || priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER) && priv->location_mode == LOCATION_MODE_FILENAME_ENTRY))) @@ -5166,8 +4976,7 @@ update_chooser_entry (GtkFileChooserWidget *impl) g_strdup (g_file_info_get_display_name (info)); if (priv->action == GTK_FILE_CHOOSER_ACTION_OPEN || - priv->action == GTK_FILE_CHOOSER_ACTION_SAVE || - priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) + priv->action == GTK_FILE_CHOOSER_ACTION_SAVE) { /* Don't change the name when clicking on a folder... */ change_entry = !_gtk_file_info_consider_as_directory (info); @@ -5204,8 +5013,7 @@ update_chooser_entry (GtkFileChooserWidget *impl) } else { - g_assert (!(priv->action == GTK_FILE_CHOOSER_ACTION_SAVE || - priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)); + g_assert (priv->action != GTK_FILE_CHOOSER_ACTION_SAVE); /* Multiple selection, so just clear the entry. */ g_free (priv->browse_files_last_selected_name); @@ -5457,8 +5265,6 @@ update_current_folder_get_info_cb (GCancellable *cancellable, g_signal_emit_by_name (impl, "current-folder-changed", 0); - check_preview_change (impl); - g_signal_emit_by_name (impl, "selection-changed", 0); out: @@ -5486,18 +5292,6 @@ gtk_file_chooser_widget_update_current_folder (GtkFileChooser *chooser, operation_mode_set (impl, OPERATION_MODE_BROWSE); - if (priv->local_only && !_gtk_file_has_native_path (file)) - { - g_set_error_literal (error, - GTK_FILE_CHOOSER_ERROR, - GTK_FILE_CHOOSER_ERROR_BAD_FILENAME, - _("Cannot change to folder because it is not local")); - - g_object_unref (file); - profile_end ("end - not local", NULL); - return FALSE; - } - if (priv->update_current_folder_cancellable) g_cancellable_cancel (priv->update_current_folder_cancellable); @@ -5545,8 +5339,7 @@ gtk_file_chooser_widget_set_current_name (GtkFileChooser *chooser, GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser); GtkFileChooserWidgetPrivate *priv = gtk_file_chooser_widget_get_instance_private (impl); - g_return_if_fail (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE || - priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER); + g_return_if_fail (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE); pending_select_files_free (impl); gtk_editable_set_text (GTK_EDITABLE (priv->location_entry), name); @@ -5558,9 +5351,7 @@ gtk_file_chooser_widget_get_current_name (GtkFileChooser *chooser) GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser); GtkFileChooserWidgetPrivate *priv = gtk_file_chooser_widget_get_instance_private (impl); - g_return_val_if_fail (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE || - priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER, - NULL); + g_return_val_if_fail (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE, NULL); return g_strdup (gtk_editable_get_text (GTK_EDITABLE (priv->location_entry))); } @@ -5579,7 +5370,7 @@ gtk_file_chooser_widget_select_file (GtkFileChooser *chooser, parent_file = g_file_get_parent (file); if (!parent_file) - return gtk_file_chooser_set_current_folder_file (chooser, file, error); + return gtk_file_chooser_set_current_folder (chooser, file, error); fsmodel = GTK_FILE_SYSTEM_MODEL (gtk_tree_view_get_model (GTK_TREE_VIEW (priv->browse_files_tree_view))); @@ -5619,7 +5410,7 @@ gtk_file_chooser_widget_select_file (GtkFileChooser *chooser, { gboolean result; - result = gtk_file_chooser_set_current_folder_file (chooser, parent_file, error); + result = gtk_file_chooser_set_current_folder (chooser, parent_file, error); g_object_unref (parent_file); return result; } @@ -5736,7 +5527,6 @@ check_save_entry (GtkFileChooserWidget *impl, GError *error; g_assert (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE || - priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER || ((priv->action == GTK_FILE_CHOOSER_ACTION_OPEN || priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER) && priv->location_mode == LOCATION_MODE_FILENAME_ENTRY)); @@ -5911,8 +5701,7 @@ gtk_file_chooser_widget_get_files (GtkFileChooser *chooser) else { /* The focus is on a dialog's action area button or something else */ - if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE || - priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) + if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE) goto file_entry; else goto file_list; @@ -5928,7 +5717,7 @@ gtk_file_chooser_widget_get_files (GtkFileChooser *chooser) { GFile *current_folder; - current_folder = gtk_file_chooser_get_current_folder_file (chooser); + current_folder = gtk_file_chooser_get_current_folder (chooser); if (current_folder) info.result = g_slist_prepend (info.result, current_folder); @@ -5937,18 +5726,6 @@ gtk_file_chooser_widget_get_files (GtkFileChooser *chooser) return g_slist_reverse (info.result); } -GFile * -gtk_file_chooser_widget_get_preview_file (GtkFileChooser *chooser) -{ - GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser); - GtkFileChooserWidgetPrivate *priv = gtk_file_chooser_widget_get_instance_private (impl); - - if (priv->preview_file) - return g_object_ref (priv->preview_file); - else - return NULL; -} - static GtkFileSystem * gtk_file_chooser_widget_get_file_system (GtkFileChooser *chooser) { @@ -6282,49 +6059,24 @@ should_respond_after_confirm_overwrite (GtkFileChooserWidget *impl, GFile *parent_file) { GtkFileChooserWidgetPrivate *priv = gtk_file_chooser_widget_get_instance_private (impl); - GtkFileChooserConfirmation conf; + struct GetDisplayNameData *data; - if (!priv->do_overwrite_confirmation) - return TRUE; + g_assert (file_part != NULL); - conf = GTK_FILE_CHOOSER_CONFIRMATION_CONFIRM; + data = g_new0 (struct GetDisplayNameData, 1); + data->impl = g_object_ref (impl); + data->file_part = g_strdup (file_part); - g_signal_emit_by_name (impl, "confirm-overwrite", &conf); + if (priv->should_respond_get_info_cancellable) + g_cancellable_cancel (priv->should_respond_get_info_cancellable); - switch (conf) - { - case GTK_FILE_CHOOSER_CONFIRMATION_CONFIRM: - { - struct GetDisplayNameData *data; - - g_assert (file_part != NULL); - - data = g_new0 (struct GetDisplayNameData, 1); - data->impl = g_object_ref (impl); - data->file_part = g_strdup (file_part); - - if (priv->should_respond_get_info_cancellable) - g_cancellable_cancel (priv->should_respond_get_info_cancellable); - - priv->should_respond_get_info_cancellable = - _gtk_file_system_get_info (priv->file_system, parent_file, - "standard::display-name", - confirmation_confirm_get_info_cb, - data); - set_busy_cursor (data->impl, TRUE); - return FALSE; - } - - case GTK_FILE_CHOOSER_CONFIRMATION_ACCEPT_FILENAME: - return TRUE; - - case GTK_FILE_CHOOSER_CONFIRMATION_SELECT_AGAIN: - return FALSE; - - default: - g_assert_not_reached (); - return FALSE; - } + priv->should_respond_get_info_cancellable = + _gtk_file_system_get_info (priv->file_system, parent_file, + "standard::display-name", + confirmation_confirm_get_info_cb, + data); + set_busy_cursor (data->impl, TRUE); + return FALSE; } static void @@ -6388,8 +6140,7 @@ name_entry_get_parent_info_cb (GCancellable *cancellable, else request_response_and_add_to_recent_list (impl); } - else if (priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER - || priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) + else if (priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER) { GError *mkdir_error = NULL; @@ -6485,21 +6236,6 @@ file_exists_get_info_cb (GCancellable *cancellable, needs_parent_check = TRUE; /* file doesn't exist; see if its parent exists */ } } - else if (priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) - { - if (file_exists && !is_folder) - { - /* Oops, the user typed the name of an existing path which is not - * a folder - */ - error_creating_folder_over_existing_file_dialog (impl, data->file, - g_error_copy (error)); - } - else - { - needs_parent_check = TRUE; - } - } else if (priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER) { if (!file_exists) @@ -6657,12 +6393,11 @@ gtk_file_chooser_widget_should_respond (GtkFileChooserEmbed *chooser_embed) SAVE_ENTRY, /* Go to the code for handling the save entry */ NOT_REACHED /* Sanity check */ } ActionToTake; - static const ActionToTake what_to_do[4][3] = { + static const ActionToTake what_to_do[3][3] = { /* 0 selected 1 selected many selected */ /* ACTION_OPEN */ { NOOP, RESPOND_OR_SWITCH, ALL_FILES }, /* ACTION_SAVE */ { SAVE_ENTRY, RESPOND_OR_SWITCH, NOT_REACHED }, /* ACTION_SELECT_FOLDER */ { RESPOND, ALL_FOLDERS, ALL_FOLDERS }, - /* ACTION_CREATE_FOLDER */ { SAVE_ENTRY, ALL_FOLDERS, NOT_REACHED } }; int num_selected; @@ -6672,7 +6407,7 @@ gtk_file_chooser_widget_should_respond (GtkFileChooserEmbed *chooser_embed) file_list: - g_assert (priv->action >= GTK_FILE_CHOOSER_ACTION_OPEN && priv->action <= GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER); + g_assert (priv->action >= GTK_FILE_CHOOSER_ACTION_OPEN && priv->action < GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); if (priv->operation_mode == OPERATION_MODE_RECENT) { @@ -6750,7 +6485,6 @@ gtk_file_chooser_widget_should_respond (GtkFileChooserEmbed *chooser_embed) save_entry: g_assert (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE || - priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER || ((priv->action == GTK_FILE_CHOOSER_ACTION_OPEN || priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER) && priv->location_mode == LOCATION_MODE_FILENAME_ENTRY)); @@ -6781,8 +6515,7 @@ gtk_file_chooser_widget_should_respond (GtkFileChooserEmbed *chooser_embed) if (is_empty) { - if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE || - priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) + if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE) { /* FIXME: ERROR_NO_FILENAME */ gtk_widget_grab_focus (priv->location_entry); @@ -6801,8 +6534,7 @@ gtk_file_chooser_widget_should_respond (GtkFileChooserEmbed *chooser_embed) { change_folder_and_display_error (impl, file, TRUE); } - else if (priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER || - priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) + else if (priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER) { /* The folder already exists, so we do not need to create it. * Just respond to terminate the dialog. @@ -6864,8 +6596,7 @@ gtk_file_chooser_widget_should_respond (GtkFileChooserEmbed *chooser_embed) } else /* The focus is on a dialog's action area button or something else */ - if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE || - priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) + if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE) goto save_entry; else goto file_list; @@ -6895,8 +6626,7 @@ gtk_file_chooser_widget_initial_focus (GtkFileChooserEmbed *chooser_embed) else widget = priv->location_entry; } - else if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE || - priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) + else if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE) widget = priv->location_entry; else { @@ -7434,92 +7164,6 @@ filter_combo_changed (GtkComboBox *combo_box, new_filter); } -static void -check_preview_change (GtkFileChooserWidget *impl) -{ - GtkFileChooserWidgetPrivate *priv = gtk_file_chooser_widget_get_instance_private (impl); - GtkTreePath *path; - GFile *new_file; - char *new_display_name; - GtkTreeModel *model; - GtkTreeSelection *selection; - - model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->browse_files_tree_view)); - selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->browse_files_tree_view)); - if (gtk_tree_selection_get_mode (selection) == GTK_SELECTION_SINGLE || - gtk_tree_selection_get_mode (selection) == GTK_SELECTION_BROWSE) - { - GtkTreeIter iter; - - if (gtk_tree_selection_get_selected (selection, NULL, &iter)) - path = gtk_tree_model_get_path (model, &iter); - else - path = NULL; - } - else - { - gtk_tree_view_get_cursor (GTK_TREE_VIEW (priv->browse_files_tree_view), &path, NULL); - if (path && !gtk_tree_selection_path_is_selected (selection, path)) - { - gtk_tree_path_free (path); - path = NULL; - } - } - - if (path) - { - GtkTreeIter iter; - - gtk_tree_model_get_iter (model, &iter, path); - gtk_tree_model_get (model, &iter, - MODEL_COL_FILE, &new_file, - MODEL_COL_NAME, &new_display_name, - -1); - - gtk_tree_path_free (path); - } - else - { - new_file = NULL; - new_display_name = NULL; - } - - if (new_file != priv->preview_file && - !(new_file && priv->preview_file && - g_file_equal (new_file, priv->preview_file))) - { - if (priv->preview_file) - { - g_object_unref (priv->preview_file); - g_free (priv->preview_display_name); - } - - if (new_file) - { - priv->preview_file = new_file; - priv->preview_display_name = new_display_name; - } - else - { - priv->preview_file = NULL; - priv->preview_display_name = NULL; - g_free (new_display_name); - } - - if (priv->use_preview_label && priv->preview_label) - gtk_label_set_text (GTK_LABEL (priv->preview_label), priv->preview_display_name); - - g_signal_emit_by_name (impl, "update-preview"); - } - else - { - if (new_file) - g_object_unref (new_file); - - g_free (new_display_name); - } -} - static gboolean list_select_func (GtkTreeSelection *selection, GtkTreeModel *model, @@ -7530,8 +7174,7 @@ list_select_func (GtkTreeSelection *selection, GtkFileChooserWidget *impl = data; GtkFileChooserWidgetPrivate *priv = gtk_file_chooser_widget_get_instance_private (impl); - if (priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER || - priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) + if (priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER) { GtkTreeIter iter; gboolean is_sensitive; @@ -7564,18 +7207,9 @@ list_selection_changed (GtkTreeSelection *selection, location_bar_update (impl); - check_preview_change (impl); - g_signal_emit_by_name (impl, "selection-changed", 0); } -static void -list_cursor_changed (GtkTreeView *list, - GtkFileChooserWidget *impl) -{ - check_preview_change (impl); -} - static gboolean browse_files_tree_view_keynav_failed_cb (GtkWidget *widget, GtkDirectionType direction, @@ -7740,8 +7374,7 @@ location_popup_handler (GtkFileChooserWidget *impl, location_mode_set (impl, LOCATION_MODE_FILENAME_ENTRY); location_set_user_text (impl, path); } - else if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE || - priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) + else if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE) { gtk_widget_grab_focus (priv->location_entry); if (path != NULL) @@ -7781,6 +7414,7 @@ static void desktop_folder_handler (GtkFileChooserWidget *impl) { const char *name; + GFile *file; /* "To disable a directory, point it to the homedir." * See http://freedesktop.org/wiki/Software/xdg-user-dirs @@ -7789,7 +7423,9 @@ desktop_folder_handler (GtkFileChooserWidget *impl) if (!g_strcmp0 (name, g_get_home_dir ())) return; - gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (impl), name); + file = g_file_new_for_path (name); + gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (impl), file, NULL); + g_object_unref (file); } /* Handler for the "search-shortcut" keybinding signal */ @@ -8254,7 +7890,6 @@ gtk_file_chooser_widget_class_init (GtkFileChooserWidgetClass *class) gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, browse_path_bar); gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, filter_combo_hbox); gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, filter_combo); - gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, preview_box); gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, extra_align); gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, extra_and_filters); gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, location_entry_box); @@ -8288,7 +7923,6 @@ gtk_file_chooser_widget_class_init (GtkFileChooserWidgetClass *class) gtk_widget_class_bind_template_callback (widget_class, file_list_query_tooltip_cb); gtk_widget_class_bind_template_callback (widget_class, list_row_activated); gtk_widget_class_bind_template_callback (widget_class, list_selection_changed); - gtk_widget_class_bind_template_callback (widget_class, list_cursor_changed); gtk_widget_class_bind_template_callback (widget_class, browse_files_tree_view_keynav_failed_cb); gtk_widget_class_bind_template_callback (widget_class, filter_combo_changed); gtk_widget_class_bind_template_callback (widget_class, path_bar_clicked); @@ -8396,8 +8030,7 @@ gtk_file_chooser_widget_set_save_entry (GtkFileChooserWidget *impl, priv->external_entry = entry; - if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE || - priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) + if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE) { save_widgets_destroy (impl); save_widgets_create (impl); @@ -8423,9 +8056,6 @@ gtk_file_chooser_widget_init (GtkFileChooserWidget *impl) access ("MARK: *** CREATE FILE CHOOSER", F_OK); #endif - priv->local_only = FALSE; - priv->preview_widget_active = TRUE; - priv->use_preview_label = TRUE; priv->select_multiple = FALSE; priv->show_hidden = FALSE; priv->show_size_column = TRUE; diff --git a/gtk/gtkplacessidebar.c b/gtk/gtkplacessidebar.c index eaf8fc8e2e..86b6e06a50 100644 --- a/gtk/gtkplacessidebar.c +++ b/gtk/gtkplacessidebar.c @@ -185,7 +185,6 @@ struct _GtkPlacesSidebar { guint show_other_locations : 1; guint show_trash : 1; guint show_starred_location : 1; - guint local_only : 1; }; struct _GtkPlacesSidebarClass { @@ -242,7 +241,6 @@ enum { PROP_SHOW_ENTER_LOCATION, PROP_SHOW_TRASH, PROP_SHOW_STARRED_LOCATION, - PROP_LOCAL_ONLY, PROP_SHOW_OTHER_LOCATIONS, NUM_PROPERTIES }; @@ -699,9 +697,6 @@ should_show_file (GtkPlacesSidebar *sidebar, { gchar *path; - if (!sidebar->local_only) - return TRUE; - path = g_file_get_path (file); if (path) { @@ -1103,7 +1098,7 @@ update_places (GtkPlacesSidebar *sidebar) } /* Trash */ - if (!sidebar->local_only && sidebar->show_trash) + if (sidebar->show_trash) { start_icon = _gtk_trash_monitor_get_icon (sidebar->trash_monitor); sidebar->trash_row = add_place (sidebar, PLACES_BUILT_IN, @@ -1408,9 +1403,6 @@ update_places (GtkPlacesSidebar *sidebar) if (_gtk_bookmarks_manager_get_is_builtin (sidebar->bookmarks_manager, root)) continue; - if (sidebar->local_only && !is_native) - continue; - clos = g_slice_new (BookmarkQueryClosure); clos->sidebar = sidebar; clos->index = index; @@ -1437,58 +1429,56 @@ update_places (GtkPlacesSidebar *sidebar) g_object_unref (new_bookmark_icon); /* network */ - if (!sidebar->local_only) + network_volumes = g_list_reverse (network_volumes); + for (l = network_volumes; l != NULL; l = l->next) { - network_volumes = g_list_reverse (network_volumes); - for (l = network_volumes; l != NULL; l = l->next) + volume = l->data; + mount = g_volume_get_mount (volume); + + if (mount != NULL) { - volume = l->data; - mount = g_volume_get_mount (volume); - - if (mount != NULL) - { - network_mounts = g_list_prepend (network_mounts, mount); - continue; - } - else - { - start_icon = g_volume_get_symbolic_icon (volume); - name = g_volume_get_name (volume); - tooltip = g_strdup_printf (_("Mount and open “%s”"), name); - - add_place (sidebar, PLACES_MOUNTED_VOLUME, - SECTION_MOUNTS, - name, start_icon, NULL, NULL, - NULL, volume, NULL, NULL, 0, tooltip); - g_object_unref (start_icon); - g_free (name); - g_free (tooltip); - } + network_mounts = g_list_prepend (network_mounts, mount); + continue; } - - network_mounts = g_list_reverse (network_mounts); - for (l = network_mounts; l != NULL; l = l->next) + else { - char *mount_uri; + start_icon = g_volume_get_symbolic_icon (volume); + name = g_volume_get_name (volume); + tooltip = g_strdup_printf (_("Mount and open “%s”"), name); - mount = l->data; - root = g_mount_get_default_location (mount); - start_icon = g_mount_get_symbolic_icon (mount); - mount_uri = g_file_get_uri (root); - name = g_mount_get_name (mount); - tooltip = g_file_get_parse_name (root); add_place (sidebar, PLACES_MOUNTED_VOLUME, SECTION_MOUNTS, - name, start_icon, NULL, mount_uri, - NULL, NULL, mount, NULL, 0, tooltip); - g_object_unref (root); + name, start_icon, NULL, NULL, + NULL, volume, NULL, NULL, 0, tooltip); g_object_unref (start_icon); g_free (name); - g_free (mount_uri); g_free (tooltip); } } + network_mounts = g_list_reverse (network_mounts); + for (l = network_mounts; l != NULL; l = l->next) + { + char *mount_uri; + + mount = l->data; + root = g_mount_get_default_location (mount); + start_icon = g_mount_get_symbolic_icon (mount); + mount_uri = g_file_get_uri (root); + name = g_mount_get_name (mount); + tooltip = g_file_get_parse_name (root); + add_place (sidebar, PLACES_MOUNTED_VOLUME, + SECTION_MOUNTS, + name, start_icon, NULL, mount_uri, + NULL, NULL, mount, NULL, 0, tooltip); + g_object_unref (root); + g_object_unref (start_icon); + g_free (name); + g_free (mount_uri); + g_free (tooltip); + } + + g_list_free_full (network_volumes, g_object_unref); g_list_free_full (network_mounts, g_object_unref); @@ -3970,7 +3960,6 @@ gtk_places_sidebar_init (GtkPlacesSidebar *sidebar) sidebar->cancellable = g_cancellable_new (); sidebar->show_trash = TRUE; - sidebar->local_only = TRUE; sidebar->show_other_locations = TRUE; sidebar->show_recent = TRUE; sidebar->show_desktop = TRUE; @@ -4116,10 +4105,6 @@ gtk_places_sidebar_set_property (GObject *obj, gtk_places_sidebar_set_show_starred_location (sidebar, g_value_get_boolean (value)); break; - case PROP_LOCAL_ONLY: - gtk_places_sidebar_set_local_only (sidebar, g_value_get_boolean (value)); - break; - default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, property_id, pspec); break; @@ -4168,10 +4153,6 @@ gtk_places_sidebar_get_property (GObject *obj, g_value_set_boolean (value, gtk_places_sidebar_get_show_starred_location (sidebar)); break; - case PROP_LOCAL_ONLY: - g_value_set_boolean (value, gtk_places_sidebar_get_local_only (sidebar)); - break; - default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, property_id, pspec); break; @@ -4599,12 +4580,6 @@ gtk_places_sidebar_class_init (GtkPlacesSidebarClass *class) P_("Whether the sidebar includes a builtin shortcut to manually enter a location"), FALSE, GTK_PARAM_READWRITE); - properties[PROP_LOCAL_ONLY] = - g_param_spec_boolean ("local-only", - P_("Local Only"), - P_("Whether the sidebar only includes local files"), - TRUE, - GTK_PARAM_READWRITE); properties[PROP_SHOW_TRASH] = g_param_spec_boolean ("show-trash", P_("Show “Trash”"), @@ -5023,44 +4998,6 @@ gtk_places_sidebar_get_show_trash (GtkPlacesSidebar *sidebar) return sidebar->show_trash; } -/* - * gtk_places_sidebar_set_local_only: - * @sidebar: a places sidebar - * @local_only: whether to show only local files - * - * Sets whether the @sidebar should only show local files. - */ -void -gtk_places_sidebar_set_local_only (GtkPlacesSidebar *sidebar, - gboolean local_only) -{ - g_return_if_fail (GTK_IS_PLACES_SIDEBAR (sidebar)); - - local_only = !!local_only; - if (sidebar->local_only != local_only) - { - sidebar->local_only = local_only; - update_places (sidebar); - g_object_notify_by_pspec (G_OBJECT (sidebar), properties[PROP_LOCAL_ONLY]); - } -} - -/* - * gtk_places_sidebar_get_local_only: - * @sidebar: a places sidebar - * - * Returns the value previously set with gtk_places_sidebar_set_local_only(). - * - * Returns: %TRUE if the sidebar will only show local files. - */ -gboolean -gtk_places_sidebar_get_local_only (GtkPlacesSidebar *sidebar) -{ - g_return_val_if_fail (GTK_IS_PLACES_SIDEBAR (sidebar), FALSE); - - return sidebar->local_only; -} - static GSList * find_shortcut_link (GtkPlacesSidebar *sidebar, GFile *location) diff --git a/gtk/gtkplacessidebarprivate.h b/gtk/gtkplacessidebarprivate.h index d520ee8a01..f81cba89f3 100644 --- a/gtk/gtkplacessidebarprivate.h +++ b/gtk/gtkplacessidebarprivate.h @@ -88,11 +88,6 @@ gboolean gtk_places_sidebar_get_show_enter_location (GtkPlacesSideb void gtk_places_sidebar_set_show_enter_location (GtkPlacesSidebar *sidebar, gboolean show_enter_location); -void gtk_places_sidebar_set_local_only (GtkPlacesSidebar *sidebar, - gboolean local_only); -gboolean gtk_places_sidebar_get_local_only (GtkPlacesSidebar *sidebar); - - void gtk_places_sidebar_add_shortcut (GtkPlacesSidebar *sidebar, GFile *location); void gtk_places_sidebar_remove_shortcut (GtkPlacesSidebar *sidebar, diff --git a/gtk/gtkplacesview.c b/gtk/gtkplacesview.c index c1af705cf7..8a54c1b3f3 100644 --- a/gtk/gtkplacesview.c +++ b/gtk/gtkplacesview.c @@ -89,7 +89,6 @@ struct _GtkPlacesViewPrivate GtkPlacesViewRow *row_for_action; - guint local_only : 1; guint should_open_location : 1; guint should_pulse_entry : 1; guint entry_pulse_timeout_id; @@ -126,7 +125,6 @@ G_DEFINE_TYPE_WITH_PRIVATE (GtkPlacesView, gtk_places_view, GTK_TYPE_BOX) /* GtkPlacesView properties & signals */ enum { PROP_0, - PROP_LOCAL_ONLY, PROP_OPEN_FLAGS, PROP_FETCHING_NETWORKS, PROP_LOADING, @@ -449,10 +447,6 @@ gtk_places_view_get_property (GObject *object, switch (prop_id) { - case PROP_LOCAL_ONLY: - g_value_set_boolean (value, gtk_places_view_get_local_only (self)); - break; - case PROP_LOADING: g_value_set_boolean (value, gtk_places_view_get_loading (self)); break; @@ -480,10 +474,6 @@ gtk_places_view_set_property (GObject *object, switch (prop_id) { - case PROP_LOCAL_ONLY: - gtk_places_view_set_local_only (self, g_value_get_boolean (value)); - break; - case PROP_OPEN_FLAGS: gtk_places_view_set_open_flags (self, g_value_get_flags (value)); break; @@ -1953,38 +1943,12 @@ on_listbox_row_activated (GtkPlacesView *view, activate_row (view, row, priv->current_open_flags); } -static gboolean -is_mount_locally_accessible (GMount *mount) -{ - GFile *base_file; - gchar *path; - - if (mount == NULL) - return FALSE; - - base_file = g_mount_get_root (mount); - - if (base_file == NULL) - return FALSE; - - path = g_file_get_path (base_file); - g_object_unref (base_file); - - if (path == NULL) - return FALSE; - - g_free (path); - return TRUE; -} - static gboolean listbox_filter_func (GtkListBoxRow *row, gpointer user_data) { GtkPlacesViewPrivate *priv; - gboolean is_network; gboolean is_placeholder; - gboolean is_local = FALSE; gboolean retval; gboolean searching; gchar *name; @@ -1994,25 +1958,8 @@ listbox_filter_func (GtkListBoxRow *row, retval = FALSE; searching = priv->search_query && priv->search_query[0] != '\0'; - is_network = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (row), "is-network")); is_placeholder = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (row), "is-placeholder")); - if (GTK_IS_PLACES_VIEW_ROW (row)) - { - GtkPlacesViewRow *placesviewrow; - GMount *mount; - - placesviewrow = GTK_PLACES_VIEW_ROW (row); - g_object_get(G_OBJECT (placesviewrow), "mount", &mount, NULL); - - is_local = is_mount_locally_accessible (mount); - - g_clear_object (&mount); - } - - if (is_network && priv->local_only && !is_local) - return FALSE; - if (is_placeholder && searching) return FALSE; @@ -2298,13 +2245,6 @@ gtk_places_view_class_init (GtkPlacesViewClass *klass) G_TYPE_STRING, G_TYPE_STRING); - properties[PROP_LOCAL_ONLY] = - g_param_spec_boolean ("local-only", - P_("Local Only"), - P_("Whether the sidebar only includes local files"), - FALSE, - GTK_PARAM_READWRITE); - properties[PROP_LOADING] = g_param_spec_boolean ("loading", P_("Loading"), @@ -2607,54 +2547,3 @@ gtk_places_view_set_fetching_networks (GtkPlacesView *view, g_object_notify_by_pspec (G_OBJECT (view), properties [PROP_FETCHING_NETWORKS]); } } - -/* - * gtk_places_view_get_local_only: - * @view: a #GtkPlacesView - * - * Returns %TRUE if only local volumes are shown, i.e. no networks - * are displayed. - * - * Returns: %TRUE if only local volumes are shown, %FALSE otherwise. - */ -gboolean -gtk_places_view_get_local_only (GtkPlacesView *view) -{ - GtkPlacesViewPrivate *priv; - - g_return_val_if_fail (GTK_IS_PLACES_VIEW (view), FALSE); - - priv = gtk_places_view_get_instance_private (view); - - return priv->local_only; -} - -/* - * gtk_places_view_set_local_only: - * @view: a #GtkPlacesView - * @local_only: %TRUE to hide remote locations, %FALSE to show. - * - * Sets the #GtkPlacesView::local-only property to @local_only. - */ -void -gtk_places_view_set_local_only (GtkPlacesView *view, - gboolean local_only) -{ - GtkPlacesViewPrivate *priv; - - g_return_if_fail (GTK_IS_PLACES_VIEW (view)); - - priv = gtk_places_view_get_instance_private (view); - - if (priv->local_only != local_only) - { - priv->local_only = local_only; - - gtk_widget_set_visible (priv->actionbar, !local_only); - update_places (view); - - update_view_mode (view); - - g_object_notify_by_pspec (G_OBJECT (view), properties [PROP_LOCAL_ONLY]); - } -} diff --git a/gtk/gtkplacesviewprivate.h b/gtk/gtkplacesviewprivate.h index 9400efa8b2..e2385a39ed 100644 --- a/gtk/gtkplacesviewprivate.h +++ b/gtk/gtkplacesviewprivate.h @@ -72,11 +72,6 @@ const gchar* gtk_places_view_get_search_query (GtkPlacesView void gtk_places_view_set_search_query (GtkPlacesView *view, const gchar *query_text); -gboolean gtk_places_view_get_local_only (GtkPlacesView *view); - -void gtk_places_view_set_local_only (GtkPlacesView *view, - gboolean local_only); - gboolean gtk_places_view_get_loading (GtkPlacesView *view); GtkWidget * gtk_places_view_new (void); diff --git a/gtk/gtkprinteroptionwidget.c b/gtk/gtkprinteroptionwidget.c index 13e8558beb..cdf434bc75 100644 --- a/gtk/gtkprinteroptionwidget.c +++ b/gtk/gtkprinteroptionwidget.c @@ -68,7 +68,7 @@ struct GtkPrinterOptionWidgetPrivate GtkWidget *button; /* the last location for save to file, that the user selected */ - gchar *last_location; + GFile *last_location; }; enum { @@ -485,42 +485,49 @@ dialog_response_callback (GtkDialog *dialog, GtkPrinterOptionWidget *widget) { GtkPrinterOptionWidgetPrivate *priv = widget->priv; - gchar *uri = NULL; - gchar *new_location = NULL; + GFile *new_location = NULL; + char *uri = NULL; if (response_id == GTK_RESPONSE_ACCEPT) { - gchar *filename; - gchar *filename_utf8; - gchar *filename_short; + GFileInfo *info; - new_location = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (dialog)); + new_location = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog)); + info = g_file_query_info (new_location, + "standard::display-name", + 0, + NULL, + NULL); + if (info != NULL) + { + const char *filename_utf8 = g_file_info_get_display_name (info); - filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); - filename_utf8 = g_filename_to_utf8 (filename, -1, NULL, NULL, NULL); - filename_short = trim_long_filename (filename_utf8); - gtk_button_set_label (GTK_BUTTON (priv->button), filename_short); - g_free (filename_short); - g_free (filename_utf8); - g_free (filename); + char *filename_short = trim_long_filename (filename_utf8); + gtk_button_set_label (GTK_BUTTON (priv->button), filename_short); + + g_free (filename_short); + g_object_unref (info); + } + + g_object_unref (new_location); } gtk_widget_destroy (GTK_WIDGET (dialog)); if (new_location) - uri = new_location; + uri = g_file_get_uri (new_location); else - uri = priv->last_location; + uri = g_file_get_uri (priv->last_location); - if (uri) + if (uri != NULL) { gtk_printer_option_set (priv->source, uri); emit_changed (widget); + g_free (uri); } - g_free (new_location); - g_free (priv->last_location); - priv->last_location = NULL; + g_object_unref (new_location); + g_clear_object (&priv->last_location); /* unblock the handler which was blocked in the filesave_choose_cb function */ g_signal_handler_unblock (priv->source, priv->source_changed_handler); @@ -531,7 +538,6 @@ filesave_choose_cb (GtkWidget *button, GtkPrinterOptionWidget *widget) { GtkPrinterOptionWidgetPrivate *priv = widget->priv; - gchar *last_location = NULL; GtkWidget *dialog; GtkWindow *toplevel; @@ -546,27 +552,22 @@ filesave_choose_cb (GtkWidget *button, _("_Select"), GTK_RESPONSE_ACCEPT, NULL); - /* The confirmation dialog will appear, when the user clicks print */ - gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), FALSE); - /* select the current filename in the dialog */ - if (priv->source != NULL) + if (priv->source != NULL && priv->source->value != NULL) { - priv->last_location = last_location = g_strdup (priv->source->value); - if (last_location) + priv->last_location = g_file_new_for_uri (priv->source->value); + if (priv->last_location) { - GFile *file; - gchar *basename; - gchar *basename_utf8; + char *basename; + char *basename_utf8; - gtk_file_chooser_select_uri (GTK_FILE_CHOOSER (dialog), last_location); - file = g_file_new_for_uri (last_location); - basename = g_file_get_basename (file); + gtk_file_chooser_select_file (GTK_FILE_CHOOSER (dialog), priv->last_location, NULL); + + basename = g_file_get_basename (priv->last_location); basename_utf8 = g_filename_to_utf8 (basename, -1, NULL, NULL, NULL); gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), basename_utf8); g_free (basename_utf8); g_free (basename); - g_object_unref (file); } } diff --git a/gtk/inspector/css-editor.c b/gtk/inspector/css-editor.c index 4cb20632d7..85028fc7e7 100644 --- a/gtk/inspector/css-editor.c +++ b/gtk/inspector/css-editor.c @@ -185,14 +185,22 @@ get_current_text (GtkTextBuffer *buffer) static void save_to_file (GtkInspectorCssEditor *ce, - const gchar *filename) + GFile *file) { - gchar *text; GError *error = NULL; + char *text; text = get_current_text (ce->priv->text); - if (!g_file_set_contents (filename, text, -1, &error)) + g_file_replace_contents (file, text, -1, + NULL, + FALSE, + G_FILE_CREATE_NONE, + NULL, + NULL, + &error); + + if (error != NULL) { GtkWidget *dialog; @@ -220,11 +228,9 @@ save_response (GtkWidget *dialog, if (response == GTK_RESPONSE_ACCEPT) { - gchar *filename; - - filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); - save_to_file (ce, filename); - g_free (filename); + GFile *file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog)); + save_to_file (ce, file); + g_object_unref (file); } gtk_widget_destroy (dialog); @@ -245,7 +251,6 @@ save_clicked (GtkButton *button, gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), "custom.css"); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT); gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); - gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE); g_signal_connect (dialog, "response", G_CALLBACK (save_response), ce); gtk_widget_show (dialog); } diff --git a/gtk/inspector/recorder.c b/gtk/inspector/recorder.c index a5412cc8ab..ac8e8d2380 100644 --- a/gtk/inspector/recorder.c +++ b/gtk/inspector/recorder.c @@ -1033,7 +1033,6 @@ render_node_save (GtkButton *button, g_free (filename); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT); gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); - gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE); g_signal_connect (dialog, "response", G_CALLBACK (render_node_save_response), node); gtk_widget_show (dialog); } diff --git a/gtk/ui/gtkfilechooserwidget.ui b/gtk/ui/gtkfilechooserwidget.ui index a1ee4f8573..4253c819a3 100644 --- a/gtk/ui/gtkfilechooserwidget.ui +++ b/gtk/ui/gtkfilechooserwidget.ui @@ -16,7 +16,6 @@ 1 - 1 1