Remove overwrite confirmation machinery from GtkFileChooser

Overwrite confirmation should not be optional, and it should not loop
into application code to create their own dialog and user response.
This commit is contained in:
Emmanuele Bassi 2020-02-21 15:52:47 +00:00
parent d505573ee6
commit 063ad28b1a
18 changed files with 15 additions and 348 deletions

View File

@ -461,7 +461,6 @@ save_cb (GtkWidget *button,
gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE);
GFile *cwd = g_file_new_for_path ("."); GFile *cwd = g_file_new_for_path (".");
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), cwd, NULL); gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), cwd, NULL);
@ -583,7 +582,6 @@ export_image_cb (GtkWidget *button,
gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); 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); g_signal_connect (dialog, "response", G_CALLBACK (export_image_response_cb), texture);
gtk_widget_show (dialog); gtk_widget_show (dialog);
} }

View File

@ -1134,8 +1134,6 @@ gtk_file_chooser_set_select_multiple
gtk_file_chooser_get_select_multiple gtk_file_chooser_get_select_multiple
gtk_file_chooser_set_show_hidden gtk_file_chooser_set_show_hidden
gtk_file_chooser_get_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_set_create_folders
gtk_file_chooser_get_create_folders gtk_file_chooser_get_create_folders
gtk_file_chooser_set_current_name gtk_file_chooser_set_current_name

View File

@ -132,22 +132,6 @@
typedef GtkFileChooserIface GtkFileChooserInterface; typedef GtkFileChooserIface GtkFileChooserInterface;
G_DEFINE_INTERFACE (GtkFileChooser, gtk_file_chooser, G_TYPE_OBJECT); 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 static void
gtk_file_chooser_default_init (GtkFileChooserInterface *iface) gtk_file_chooser_default_init (GtkFileChooserInterface *iface)
{ {
@ -253,84 +237,6 @@ gtk_file_chooser_default_init (GtkFileChooserInterface *iface)
NULL, NULL,
G_TYPE_NONE, 0); 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}
*
* |[<!-- language="C" -->
* static GtkFileChooserConfirmation
* confirm_overwrite_callback (GtkFileChooser *chooser, gpointer data)
* {
* g_autoptr(GFile) file = gtk_file_chooser_get_file (chooser);
*
* // file_is_read_only() is defined elsewhere
* if (file_is_read_only (file))
* {
* // user_wants_to_replace_read_only_file() is defined elsewhere
* if (user_wants_to_replace_read_only_file (file))
* return GTK_FILE_CHOOSER_CONFIRMATION_ACCEPT_FILENAME;
* else
* return GTK_FILE_CHOOSER_CONFIRMATION_SELECT_AGAIN;
* }
* else
* {
* // fall back to the default dialog
* return GTK_FILE_CHOOSER_CONFIRMATION_CONFIRM;
* }
* }
*
* ...
*
* 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_file (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_object_interface_install_property (iface,
g_param_spec_enum ("action", g_param_spec_enum ("action",
P_("Action"), P_("Action"),
@ -382,21 +288,6 @@ gtk_file_chooser_default_init (GtkFileChooserInterface *iface)
FALSE, FALSE,
GTK_PARAM_READWRITE)); 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_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));
/** /**
* GtkFileChooser:create-folders: * GtkFileChooser:create-folders:
@ -1241,54 +1132,6 @@ gtk_file_chooser_get_show_hidden (GtkFileChooser *chooser)
return show_hidden; 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: * gtk_file_chooser_add_choice:
* @chooser: a #GtkFileChooser * @chooser: a #GtkFileChooser

View File

@ -59,28 +59,6 @@ typedef enum
GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER
} GtkFileChooserAction; } 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 users 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 users 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 GDK_AVAILABLE_IN_ALL
GType gtk_file_chooser_get_type (void) G_GNUC_CONST; GType gtk_file_chooser_get_type (void) G_GNUC_CONST;
@ -136,12 +114,6 @@ void gtk_file_chooser_set_show_hidden (GtkFileChooser
GDK_AVAILABLE_IN_ALL GDK_AVAILABLE_IN_ALL
gboolean gtk_file_chooser_get_show_hidden (GtkFileChooser *chooser); 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 GDK_AVAILABLE_IN_ALL
void gtk_file_chooser_set_create_folders (GtkFileChooser *chooser, void gtk_file_chooser_set_create_folders (GtkFileChooser *chooser,
gboolean create_folders); gboolean create_folders);

View File

@ -926,7 +926,6 @@ gtk_file_chooser_button_set_property (GObject *object,
case GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET_ACTIVE: case GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET_ACTIVE:
case GTK_FILE_CHOOSER_PROP_USE_PREVIEW_LABEL: case GTK_FILE_CHOOSER_PROP_USE_PREVIEW_LABEL:
case GTK_FILE_CHOOSER_PROP_SHOW_HIDDEN: case GTK_FILE_CHOOSER_PROP_SHOW_HIDDEN:
case GTK_FILE_CHOOSER_PROP_DO_OVERWRITE_CONFIRMATION:
case GTK_FILE_CHOOSER_PROP_CREATE_FOLDERS: case GTK_FILE_CHOOSER_PROP_CREATE_FOLDERS:
g_object_set_property (G_OBJECT (priv->chooser), pspec->name, value); g_object_set_property (G_OBJECT (priv->chooser), pspec->name, value);
break; break;
@ -972,7 +971,6 @@ gtk_file_chooser_button_get_property (GObject *object,
case GTK_FILE_CHOOSER_PROP_USE_PREVIEW_LABEL: case GTK_FILE_CHOOSER_PROP_USE_PREVIEW_LABEL:
case GTK_FILE_CHOOSER_PROP_SELECT_MULTIPLE: case GTK_FILE_CHOOSER_PROP_SELECT_MULTIPLE:
case GTK_FILE_CHOOSER_PROP_SHOW_HIDDEN: case GTK_FILE_CHOOSER_PROP_SHOW_HIDDEN:
case GTK_FILE_CHOOSER_PROP_DO_OVERWRITE_CONFIRMATION:
case GTK_FILE_CHOOSER_PROP_CREATE_FOLDERS: case GTK_FILE_CHOOSER_PROP_CREATE_FOLDERS:
g_object_get_property (G_OBJECT (priv->chooser), pspec->name, value); g_object_get_property (G_OBJECT (priv->chooser), pspec->name, value);
break; break;

View File

@ -111,8 +111,6 @@
* NULL); * NULL);
* chooser = GTK_FILE_CHOOSER (dialog); * chooser = GTK_FILE_CHOOSER (dialog);
* *
* gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE);
*
* if (user_edited_a_new_document) * 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 * else

View File

@ -105,8 +105,6 @@
* "_Cancel"); * "_Cancel");
* chooser = GTK_FILE_CHOOSER (native); * chooser = GTK_FILE_CHOOSER (native);
* *
* gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE);
*
* if (user_edited_a_new_document) * if (user_edited_a_new_document)
* gtk_file_chooser_set_current_name (chooser, * gtk_file_chooser_set_current_name (chooser,
* _("Untitled document")); * _("Untitled document"));
@ -147,7 +145,6 @@
* * #GtkFileChooser::current-folder-changed * * #GtkFileChooser::current-folder-changed
* * #GtkFileChooser::selection-changed * * #GtkFileChooser::selection-changed
* * #GtkFileChooser::file-activated * * #GtkFileChooser::file-activated
* * #GtkFileChooser::confirm-overwrite
* *
* You can also not use the methods that directly control user navigation: * You can also not use the methods that directly control user navigation:
* * gtk_file_chooser_unselect_filename() * * gtk_file_chooser_unselect_filename()

View File

@ -54,7 +54,6 @@ typedef struct {
gboolean folder; gboolean folder;
gboolean create_folders; gboolean create_folders;
gboolean modal; gboolean modal;
gboolean overwrite_confirmation;
gboolean select_multiple; gboolean select_multiple;
gboolean show_hidden; gboolean show_hidden;
gboolean running; gboolean running;
@ -507,10 +506,6 @@ gtk_file_chooser_native_quartz_show (GtkFileChooserNative *self)
gtk_file_chooser_get_select_multiple (GTK_FILE_CHOOSER (self->dialog))) gtk_file_chooser_get_select_multiple (GTK_FILE_CHOOSER (self->dialog)))
data->select_multiple = TRUE; 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))) if (gtk_file_chooser_get_show_hidden (GTK_FILE_CHOOSER (self->dialog)))
data->show_hidden = TRUE; data->show_hidden = TRUE;

View File

@ -61,7 +61,6 @@ typedef struct {
gboolean save; gboolean save;
gboolean folder; gboolean folder;
gboolean modal; gboolean modal;
gboolean overwrite_confirmation;
gboolean select_multiple; gboolean select_multiple;
gboolean show_hidden; gboolean show_hidden;
@ -500,10 +499,7 @@ filechooser_win32_thread (gpointer _data)
if (data->show_hidden) if (data->show_hidden)
flags |= FOS_FORCESHOWHIDDEN; flags |= FOS_FORCESHOWHIDDEN;
if (data->overwrite_confirmation) flags |= FOS_OVERWRITEPROMPT;
flags |= FOS_OVERWRITEPROMPT;
else
flags &= ~(FOS_OVERWRITEPROMPT);
hr = IFileDialog_SetOptions (pfd, flags); hr = IFileDialog_SetOptions (pfd, flags);
if (FAILED (hr)) if (FAILED (hr))
@ -927,9 +923,6 @@ gtk_file_chooser_native_win32_show (GtkFileChooserNative *self)
gtk_file_chooser_get_select_multiple (GTK_FILE_CHOOSER (self->dialog))) gtk_file_chooser_get_select_multiple (GTK_FILE_CHOOSER (self->dialog)))
data->select_multiple = TRUE; 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))) if (gtk_file_chooser_get_show_hidden (GTK_FILE_CHOOSER (self->dialog)))
data->show_hidden = TRUE; data->show_hidden = TRUE;

View File

@ -94,7 +94,6 @@ struct _GtkFileChooserIface
void (*selection_changed) (GtkFileChooser *chooser); void (*selection_changed) (GtkFileChooser *chooser);
void (*update_preview) (GtkFileChooser *chooser); void (*update_preview) (GtkFileChooser *chooser);
void (*file_activated) (GtkFileChooser *chooser); void (*file_activated) (GtkFileChooser *chooser);
GtkFileChooserConfirmation (*confirm_overwrite) (GtkFileChooser *chooser);
/* 3.22 additions */ /* 3.22 additions */
void (*add_choice) (GtkFileChooser *chooser, void (*add_choice) (GtkFileChooser *chooser,

View File

@ -66,8 +66,6 @@ static void delegate_update_preview (GtkFileChooser *choose
static void delegate_file_activated (GtkFileChooser *chooser, static void delegate_file_activated (GtkFileChooser *chooser,
gpointer data); gpointer data);
static GtkFileChooserConfirmation delegate_confirm_overwrite (GtkFileChooser *chooser,
gpointer data);
static void delegate_add_choice (GtkFileChooser *chooser, static void delegate_add_choice (GtkFileChooser *chooser,
const char *id, const char *id,
const char *label, const char *label,
@ -120,9 +118,6 @@ _gtk_file_chooser_install_properties (GObjectClass *klass)
g_object_class_override_property (klass, g_object_class_override_property (klass,
GTK_FILE_CHOOSER_PROP_SHOW_HIDDEN, GTK_FILE_CHOOSER_PROP_SHOW_HIDDEN,
"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, g_object_class_override_property (klass,
GTK_FILE_CHOOSER_PROP_CREATE_FOLDERS, GTK_FILE_CHOOSER_PROP_CREATE_FOLDERS,
"create-folders"); "create-folders");
@ -194,8 +189,6 @@ _gtk_file_chooser_set_delegate (GtkFileChooser *receiver,
G_CALLBACK (delegate_update_preview), receiver); G_CALLBACK (delegate_update_preview), receiver);
g_signal_connect (delegate, "file-activated", g_signal_connect (delegate, "file-activated",
G_CALLBACK (delegate_file_activated), receiver); G_CALLBACK (delegate_file_activated), receiver);
g_signal_connect (delegate, "confirm-overwrite",
G_CALLBACK (delegate_confirm_overwrite), receiver);
} }
GQuark GQuark
@ -371,16 +364,6 @@ delegate_file_activated (GtkFileChooser *chooser,
g_signal_emit_by_name (data, "file-activated"); 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 * GSettings *
_gtk_file_chooser_get_settings_for_widget (GtkWidget *widget) _gtk_file_chooser_get_settings_for_widget (GtkWidget *widget)
{ {

View File

@ -36,7 +36,6 @@ typedef enum {
GTK_FILE_CHOOSER_PROP_USE_PREVIEW_LABEL, GTK_FILE_CHOOSER_PROP_USE_PREVIEW_LABEL,
GTK_FILE_CHOOSER_PROP_SELECT_MULTIPLE, GTK_FILE_CHOOSER_PROP_SELECT_MULTIPLE,
GTK_FILE_CHOOSER_PROP_SHOW_HIDDEN, GTK_FILE_CHOOSER_PROP_SHOW_HIDDEN,
GTK_FILE_CHOOSER_PROP_DO_OVERWRITE_CONFIRMATION,
GTK_FILE_CHOOSER_PROP_CREATE_FOLDERS, GTK_FILE_CHOOSER_PROP_CREATE_FOLDERS,
GTK_FILE_CHOOSER_PROP_LAST = GTK_FILE_CHOOSER_PROP_CREATE_FOLDERS GTK_FILE_CHOOSER_PROP_LAST = GTK_FILE_CHOOSER_PROP_CREATE_FOLDERS
} GtkFileChooserProp; } GtkFileChooserProp;

View File

@ -367,7 +367,6 @@ struct _GtkFileChooserWidgetPrivate {
guint show_hidden_set : 1; guint show_hidden_set : 1;
guint sort_directories_first : 1; guint sort_directories_first : 1;
guint show_time : 1; guint show_time : 1;
guint do_overwrite_confirmation : 1;
guint list_sort_ascending : 1; guint list_sort_ascending : 1;
guint shortcuts_current_folder_active : 1; guint shortcuts_current_folder_active : 1;
guint show_size_column : 1; guint show_size_column : 1;
@ -3337,13 +3336,6 @@ gtk_file_chooser_widget_set_property (GObject *object,
set_show_hidden (impl, g_value_get_boolean (value)); set_show_hidden (impl, g_value_get_boolean (value));
break; 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: case GTK_FILE_CHOOSER_PROP_CREATE_FOLDERS:
{ {
gboolean create_folders = g_value_get_boolean (value); gboolean create_folders = g_value_get_boolean (value);
@ -3409,10 +3401,6 @@ gtk_file_chooser_widget_get_property (GObject *object,
g_value_set_boolean (value, priv->show_hidden); g_value_set_boolean (value, priv->show_hidden);
break; 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: case GTK_FILE_CHOOSER_PROP_CREATE_FOLDERS:
g_value_set_boolean (value, priv->create_folders); g_value_set_boolean (value, priv->create_folders);
break; break;
@ -6296,49 +6284,24 @@ should_respond_after_confirm_overwrite (GtkFileChooserWidget *impl,
GFile *parent_file) GFile *parent_file)
{ {
GtkFileChooserWidgetPrivate *priv = gtk_file_chooser_widget_get_instance_private (impl); GtkFileChooserWidgetPrivate *priv = gtk_file_chooser_widget_get_instance_private (impl);
GtkFileChooserConfirmation conf; struct GetDisplayNameData *data;
if (!priv->do_overwrite_confirmation) g_assert (file_part != NULL);
return TRUE;
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) priv->should_respond_get_info_cancellable =
{ _gtk_file_system_get_info (priv->file_system, parent_file,
case GTK_FILE_CHOOSER_CONFIRMATION_CONFIRM: "standard::display-name",
{ confirmation_confirm_get_info_cb,
struct GetDisplayNameData *data; data);
set_busy_cursor (data->impl, TRUE);
g_assert (file_part != NULL); return FALSE;
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;
}
} }
static void static void

View File

@ -552,9 +552,6 @@ filesave_choose_cb (GtkWidget *button,
_("_Select"), GTK_RESPONSE_ACCEPT, _("_Select"), GTK_RESPONSE_ACCEPT,
NULL); 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 */ /* select the current filename in the dialog */
if (priv->source != NULL && priv->source->value != NULL) if (priv->source != NULL && priv->source->value != NULL)
{ {

View File

@ -251,7 +251,6 @@ save_clicked (GtkButton *button,
gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), "custom.css"); gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), "custom.css");
gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); 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); g_signal_connect (dialog, "response", G_CALLBACK (save_response), ce);
gtk_widget_show (dialog); gtk_widget_show (dialog);
} }

View File

@ -1033,7 +1033,6 @@ render_node_save (GtkButton *button,
g_free (filename); g_free (filename);
gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); 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); g_signal_connect (dialog, "response", G_CALLBACK (render_node_save_response), node);
gtk_widget_show (dialog); gtk_widget_show (dialog);
} }

View File

@ -490,55 +490,6 @@ notify_multiple_cb (GtkWidget *dialog,
gtk_widget_set_sensitive (button, multiple); gtk_widget_set_sensitive (button, multiple);
} }
static GtkFileChooserConfirmation
confirm_overwrite_cb (GtkFileChooser *chooser,
gpointer data)
{
GtkWidget *dialog;
GtkWidget *button;
int response;
GtkFileChooserConfirmation conf;
dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_root (GTK_WIDGET (chooser))),
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_QUESTION,
GTK_BUTTONS_NONE,
"What do you want to do?");
button = gtk_button_new_with_label ("Use the stock confirmation dialog");
gtk_widget_show (button);
gtk_dialog_add_action_widget (GTK_DIALOG (dialog), button, 1);
button = gtk_button_new_with_label ("Type a new file name");
gtk_widget_show (button);
gtk_dialog_add_action_widget (GTK_DIALOG (dialog), button, 2);
button = gtk_button_new_with_label ("Accept the file name");
gtk_widget_show (button);
gtk_dialog_add_action_widget (GTK_DIALOG (dialog), button, 3);
response = gtk_dialog_run (GTK_DIALOG (dialog));
switch (response)
{
case 1:
conf = GTK_FILE_CHOOSER_CONFIRMATION_CONFIRM;
break;
case 3:
conf = GTK_FILE_CHOOSER_CONFIRMATION_ACCEPT_FILENAME;
break;
default:
conf = GTK_FILE_CHOOSER_CONFIRMATION_SELECT_AGAIN;
break;
}
gtk_widget_destroy (dialog);
return conf;
}
int int
main (int argc, char **argv) main (int argc, char **argv)
{ {
@ -642,8 +593,6 @@ main (int argc, char **argv)
G_CALLBACK (print_current_folder), NULL); G_CALLBACK (print_current_folder), NULL);
g_signal_connect (dialog, "response", g_signal_connect (dialog, "response",
G_CALLBACK (response_cb), &done); G_CALLBACK (response_cb), &done);
g_signal_connect (dialog, "confirm-overwrite",
G_CALLBACK (confirm_overwrite_cb), NULL);
/* Filters */ /* Filters */
filter = gtk_file_filter_new (); filter = gtk_file_filter_new ();

View File

@ -5778,14 +5778,6 @@ native_multi_select_toggle (GtkWidget *checkbutton,
gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(checkbutton))); gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(checkbutton)));
} }
static void
native_overwrite_confirmation_toggle (GtkWidget *checkbutton,
GtkFileChooserNative *native)
{
gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (native),
gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(checkbutton)));
}
static void static void
native_visible_notify_show (GObject *object, native_visible_notify_show (GObject *object,
GParamSpec *pspec, GParamSpec *pspec,
@ -6004,11 +5996,6 @@ create_native_dialogs (GtkWidget *widget)
G_CALLBACK (native_multi_select_toggle), native); G_CALLBACK (native_multi_select_toggle), native);
gtk_container_add (GTK_CONTAINER (box), check_button); gtk_container_add (GTK_CONTAINER (box), check_button);
check_button = gtk_check_button_new_with_label ("Confirm overwrite");
g_signal_connect (check_button, "toggled",
G_CALLBACK (native_overwrite_confirmation_toggle), native);
gtk_container_add (GTK_CONTAINER (box), check_button);
show_button = gtk_button_new_with_label ("Show"); show_button = gtk_button_new_with_label ("Show");
hide_button = gtk_button_new_with_label ("Hide"); hide_button = gtk_button_new_with_label ("Hide");
gtk_widget_set_sensitive (hide_button, FALSE); gtk_widget_set_sensitive (hide_button, FALSE);