#include "gtkfilechoosernativeprivate.h"
#include "gtkdialogerror.h"
#include <glib/gi18n-lib.h>
+#include "gdk/gdkprivate.h"
#include "gdk/gdkdebugprivate.h"
/**
GObject parent_instance;
char *title;
+ char *accept_label;
unsigned int modal : 1;
GListModel *filters;
PROP_SHORTCUT_FOLDERS,
PROP_CURRENT_FILTER,
PROP_CURRENT_FOLDER,
+ PROP_ACCEPT_LABEL,
NUM_PROPERTIES
};
GtkFileDialog *self = GTK_FILE_DIALOG (object);
g_free (self->title);
+ g_free (self->accept_label);
g_clear_object (&self->filters);
g_clear_object (&self->shortcut_folders);
g_clear_object (&self->current_filter);
g_value_set_object (value, self->current_folder);
break;
+ case PROP_ACCEPT_LABEL:
+ g_value_set_string (value, self->accept_label);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
gtk_file_dialog_set_current_folder (self, g_value_get_object (value));
break;
+ case PROP_ACCEPT_LABEL:
+ gtk_file_dialog_set_accept_label (self, g_value_get_string (value));
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
G_TYPE_FILE,
G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS|G_PARAM_EXPLICIT_NOTIFY);
+ /**
+ * GtkFileDialog:accept-label: (attributes org.gtk.Property.get=gtk_file_dialog_get_accept_label org.gtk.Property.set=gtk_file_dialog_set_accept_label)
+ *
+ * Label for the file chooser's accept button.
+ *
+ * Since: 4.10
+ */
+ properties[PROP_ACCEPT_LABEL] =
+ g_param_spec_string ("accept-label", NULL, NULL,
+ NULL,
+ G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS|G_PARAM_EXPLICIT_NOTIFY);
+
g_object_class_install_properties (object_class, NUM_PROPERTIES, properties);
}
gboolean select_multiple)
{
GtkFileChooserNative *chooser;
- const char *accept;
+ const char *default_accept_label, *accept;
const char *default_title, *title;
GdkDisplay *display G_GNUC_UNUSED;
switch (action)
{
case GTK_FILE_CHOOSER_ACTION_OPEN:
- accept = _("_Open");
+ default_accept_label = _("_Open");
default_title = select_multiple ? _("Pick Files") : _("Pick a File");
break;
case GTK_FILE_CHOOSER_ACTION_SAVE:
- accept = _("_Save");
+ default_accept_label = _("_Save");
default_title = _("Save a File");
break;
case GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER:
- accept = _("_Select");
+ default_accept_label = _("_Select");
default_title = select_multiple ? _("Select Folders") : _("Select a Folder");
break;
else
title = default_title;
+ if (self->accept_label)
+ accept = self->accept_label;
+ else
+ accept = default_accept_label;
+
chooser = gtk_file_chooser_native_new (title, parent, action, accept, _("_Cancel"));
if (parent)
return finish_multiple_files_op (self, G_TASK (result), error);
}
+/**
+ * gtk_file_dialog_get_accept_label:
+ * @self: a `GtkFileDialog`
+ *
+ * Returns: (nullable): the label shown on the file chooser's accept button.
+ *
+ * Since: 4.10
+ */
+const char *
+gtk_file_dialog_get_accept_label (GtkFileDialog *self)
+{
+ g_return_val_if_fail (GTK_IS_FILE_DIALOG (self), NULL);
+
+ return self->accept_label;
+}
+
+/**
+ * gtk_file_dialog_set_accept_label:
+ * @self: a `GtkFileDialog`
+ * @accept_label: (nullable): the new accept label
+ *
+ * Sets the label shown on the file chooser's accept button.
+ *
+ * Leaving the accept label unset or setting it as `NULL` will fall back to
+ * a default label, depending on what API is used to launch the file dialog.
+ *
+ * Since: 4.10
+ */
+void
+gtk_file_dialog_set_accept_label (GtkFileDialog *self,
+ const char *accept_label)
+{
+ g_return_if_fail (GTK_IS_FILE_DIALOG (self));
+
+ if (g_set_str (&self->accept_label, accept_label))
+ g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_ACCEPT_LABEL]);
+}
+
/* }}} */
/* vim:set foldmethod=marker expandtab: */