diff options
author | Matthew Barnes <mbarnes@redhat.com> | 2014-03-19 22:19:38 +0800 |
---|---|---|
committer | Matthew Barnes <mbarnes@redhat.com> | 2014-03-27 08:24:33 +0800 |
commit | 76247306741e88fdb92780989751fc42c65c231a (patch) | |
tree | 38d1a6ee1c6de3b3063f545058adb5e408759d6b /mail | |
parent | c70e8e9ea2b9b4319e6b2f6f5b31bbbfbffe9c91 (diff) | |
download | gsoc2013-evolution-76247306741e88fdb92780989751fc42c65c231a.tar gsoc2013-evolution-76247306741e88fdb92780989751fc42c65c231a.tar.gz gsoc2013-evolution-76247306741e88fdb92780989751fc42c65c231a.tar.bz2 gsoc2013-evolution-76247306741e88fdb92780989751fc42c65c231a.tar.lz gsoc2013-evolution-76247306741e88fdb92780989751fc42c65c231a.tar.xz gsoc2013-evolution-76247306741e88fdb92780989751fc42c65c231a.tar.zst gsoc2013-evolution-76247306741e88fdb92780989751fc42c65c231a.zip |
EMFolderSelector: Add a "default-button-label" property.
Replaces the 'oklabel' argument when creating a new dialog, and can be
changed after the dialog is created.
This makes EMFolderSelector a little more "subclassable".
Diffstat (limited to 'mail')
-rw-r--r-- | mail/e-mail-reader.c | 8 | ||||
-rw-r--r-- | mail/em-composer-utils.c | 2 | ||||
-rw-r--r-- | mail/em-folder-selection-button.c | 3 | ||||
-rw-r--r-- | mail/em-folder-selector.c | 102 | ||||
-rw-r--r-- | mail/em-folder-selector.h | 8 | ||||
-rw-r--r-- | mail/em-folder-utils.c | 3 | ||||
-rw-r--r-- | mail/em-vfolder-editor-rule.c | 4 |
7 files changed, 109 insertions, 21 deletions
diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 77fa229676..7ffda86799 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -343,11 +343,11 @@ action_mail_copy_cb (GtkAction *action, model = em_folder_tree_model_get_default (); dialog = em_folder_selector_new ( - window, model, - _("Copy to Folder"), _("C_opy")); + window, model, _("Copy to Folder")); selector = EM_FOLDER_SELECTOR (dialog); em_folder_selector_set_can_create (selector, TRUE); + em_folder_selector_set_default_button_label (selector, _("C_opy")); folder_tree = em_folder_selector_get_folder_tree (selector); @@ -844,11 +844,11 @@ action_mail_move_cb (GtkAction *action, model = em_folder_tree_model_get_default (); dialog = em_folder_selector_new ( - window, model, - _("Move to Folder"), _("_Move")); + window, model, _("Move to Folder")); selector = EM_FOLDER_SELECTOR (dialog); em_folder_selector_set_can_create (selector, TRUE); + em_folder_selector_set_default_button_label (selector, _("_Move")); folder_tree = em_folder_selector_get_folder_tree (selector); diff --git a/mail/em-composer-utils.c b/mail/em-composer-utils.c index 7cc8fa5e8f..c8f57f064a 100644 --- a/mail/em-composer-utils.c +++ b/mail/em-composer-utils.c @@ -3037,7 +3037,7 @@ post_header_clicked_cb (EComposerPostHeader *header, dialog = em_folder_selector_new ( /* FIXME GTK_WINDOW (composer) */ NULL, - model, _("Posting destination"), NULL); + model, _("Posting destination")); selector = EM_FOLDER_SELECTOR (dialog); em_folder_selector_set_can_create (selector, TRUE); diff --git a/mail/em-folder-selection-button.c b/mail/em-folder-selection-button.c index e95835b98e..7ba1a1d9f9 100644 --- a/mail/em-folder-selection-button.c +++ b/mail/em-folder-selection-button.c @@ -269,8 +269,7 @@ folder_selection_button_clicked (GtkButton *button) if (model == NULL) model = g_object_ref (em_folder_tree_model_get_default ()); - dialog = em_folder_selector_new ( - parent, model, priv->title, NULL); + dialog = em_folder_selector_new (parent, model, priv->title); g_object_unref (model); diff --git a/mail/em-folder-selector.c b/mail/em-folder-selector.c index 51a2f55288..7f1274c885 100644 --- a/mail/em-folder-selector.c +++ b/mail/em-folder-selector.c @@ -24,7 +24,7 @@ #include <config.h> #include <string.h> -#include <glib/gi18n.h> +#include <glib/gi18n-lib.h> #include <e-util/e-util.h> #include <libemail-engine/libemail-engine.h> @@ -42,6 +42,8 @@ /* Dialog response code. */ #define EM_FOLDER_SELECTOR_RESPONSE_NEW 1 +#define DEFAULT_BUTTON_LABEL N_("_OK") + struct _EMFolderSelectorPrivate { EMFolderTree *folder_tree; /* not referenced */ EMFolderTreeModel *model; @@ -53,12 +55,14 @@ struct _EMFolderSelectorPrivate { gboolean can_create; gchar *caption; + gchar *default_button_label; }; enum { PROP_0, PROP_CAN_CREATE, PROP_CAPTION, + PROP_DEFAULT_BUTTON_LABEL, PROP_MODEL }; @@ -103,6 +107,12 @@ folder_selector_set_property (GObject *object, g_value_get_string (value)); return; + case PROP_DEFAULT_BUTTON_LABEL: + em_folder_selector_set_default_button_label ( + EM_FOLDER_SELECTOR (object), + g_value_get_string (value)); + return; + case PROP_MODEL: folder_selector_set_model ( EM_FOLDER_SELECTOR (object), @@ -134,6 +144,13 @@ folder_selector_get_property (GObject *object, EM_FOLDER_SELECTOR (object))); return; + case PROP_DEFAULT_BUTTON_LABEL: + g_value_set_string ( + value, + em_folder_selector_get_default_button_label ( + EM_FOLDER_SELECTOR (object))); + return; + case PROP_MODEL: g_value_set_object ( value, @@ -169,6 +186,7 @@ folder_selector_finalize (GObject *object) g_free (priv->selected_uri); g_free (priv->caption); + g_free (priv->default_button_label); /* Chain up to parent's finalize() method. */ G_OBJECT_CLASS (em_folder_selector_parent_class)->finalize (object); @@ -276,6 +294,17 @@ em_folder_selector_class_init (EMFolderSelectorClass *class) g_object_class_install_property ( object_class, + PROP_DEFAULT_BUTTON_LABEL, + g_param_spec_string ( + "default-button-label", + "Default Button Label", + "Label for the dialog's default button", + NULL, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property ( + object_class, PROP_MODEL, g_param_spec_object ( "model", @@ -297,6 +326,9 @@ static void em_folder_selector_init (EMFolderSelector *selector) { selector->priv = EM_FOLDER_SELECTOR_GET_PRIVATE (selector); + + selector->priv->default_button_label = + g_strdup (gettext (DEFAULT_BUTTON_LABEL)); } static void @@ -347,8 +379,7 @@ folder_activated_cb (EMFolderTree *emft, } static GtkWidget * -folder_selector_construct (EMFolderSelector *selector, - const gchar *oklabel) +folder_selector_construct (EMFolderSelector *selector) { EMailSession *session; EMFolderTreeModel *model; @@ -376,7 +407,7 @@ folder_selector_construct (EMFolderSelector *selector, GTK_DIALOG (selector), _("_New"), EM_FOLDER_SELECTOR_RESPONSE_NEW, _("_Cancel"), GTK_RESPONSE_CANCEL, - oklabel ? oklabel : _("_OK"), GTK_RESPONSE_OK, NULL); + selector->priv->default_button_label, GTK_RESPONSE_OK, NULL); gtk_dialog_set_response_sensitive ( GTK_DIALOG (selector), GTK_RESPONSE_OK, FALSE); @@ -391,6 +422,15 @@ folder_selector_construct (EMFolderSelector *selector, widget, "visible", G_BINDING_SYNC_CREATE); + widget = gtk_dialog_get_widget_for_response ( + GTK_DIALOG (selector), GTK_RESPONSE_OK); + + /* No need to synchronize properties. */ + g_object_bind_property ( + selector, "default-button-label", + widget, "label", + G_BINDING_DEFAULT); + widget = e_alert_bar_new (); gtk_box_pack_end (GTK_BOX (container), widget, FALSE, FALSE, 0); selector->priv->alert_bar = g_object_ref (widget); @@ -444,8 +484,7 @@ folder_selector_construct (EMFolderSelector *selector, GtkWidget * em_folder_selector_new (GtkWindow *parent, EMFolderTreeModel *model, - const gchar *title, - const gchar *oklabel) + const gchar *title) { EMFolderSelector *selector; @@ -456,7 +495,7 @@ em_folder_selector_new (GtkWindow *parent, "transient-for", parent, "title", title, "model", model, NULL); - folder_selector_construct (selector, oklabel); + folder_selector_construct (selector); return GTK_WIDGET (selector); } @@ -507,9 +546,10 @@ em_folder_selector_create_new (GtkWindow *parent, EM_TYPE_FOLDER_SELECTOR, "transient-for", parent, "title", title, - "model", model, NULL); + "model", model, + "default-button-label", _("C_reate"), NULL); - container = folder_selector_construct (selector, _("C_reate")); + container = folder_selector_construct (selector); folder_tree = em_folder_selector_get_folder_tree (selector); em_folder_tree_set_excluded (folder_tree, EMFT_EXCLUDE_NOINFERIORS); @@ -631,6 +671,50 @@ em_folder_selector_set_caption (EMFolderSelector *selector, g_object_notify (G_OBJECT (selector), "caption"); } +/** + * em_folder_selector_get_default_button_label: + * @selector: an #EMFolderSelector + * + * Returns the label for the dialog's default button, which triggers a + * #GTK_RESPONSE_OK response ID. + * + * Returns: the label for the default button + **/ +const gchar * +em_folder_selector_get_default_button_label (EMFolderSelector *selector) +{ + g_return_val_if_fail (EM_IS_FOLDER_SELECTOR (selector), NULL); + + return selector->priv->default_button_label; +} + +/** + * em_folder_selector_set_default_button_label: + * @selector: an #EMFolderSelector + * @button_label: the label for the default button, or %NULL + * + * Sets the label for the dialog's default button, which triggers a + * #GTK_RESPONSE_OK response ID. If @button_label is %NULL, the default + * button's label is reset to "OK". + **/ +void +em_folder_selector_set_default_button_label (EMFolderSelector *selector, + const gchar *button_label) +{ + g_return_if_fail (EM_IS_FOLDER_SELECTOR (selector)); + + if (button_label == NULL) + button_label = gettext (DEFAULT_BUTTON_LABEL); + + if (g_strcmp0 (button_label, selector->priv->default_button_label) == 0) + return; + + g_free (selector->priv->default_button_label); + selector->priv->default_button_label = g_strdup (button_label); + + g_object_notify (G_OBJECT (selector), "default-button-label"); +} + EMFolderTreeModel * em_folder_selector_get_model (EMFolderSelector *selector) { diff --git a/mail/em-folder-selector.h b/mail/em-folder-selector.h index a06572c450..a6e78de8bd 100644 --- a/mail/em-folder-selector.h +++ b/mail/em-folder-selector.h @@ -63,8 +63,7 @@ struct _EMFolderSelectorClass { GType em_folder_selector_get_type (void); GtkWidget * em_folder_selector_new (GtkWindow *parent, EMFolderTreeModel *model, - const gchar *title, - const gchar *oklabel); + const gchar *title); GtkWidget * em_folder_selector_create_new (GtkWindow *parent, EMFolderTreeModel *model, const gchar *title); @@ -76,6 +75,11 @@ void em_folder_selector_set_can_create const gchar * em_folder_selector_get_caption (EMFolderSelector *selector); void em_folder_selector_set_caption (EMFolderSelector *selector, const gchar *caption); +const gchar * em_folder_selector_get_default_button_label + (EMFolderSelector *selector); +void em_folder_selector_set_default_button_label + (EMFolderSelector *selector, + const gchar *button_label); EMFolderTreeModel * em_folder_selector_get_model (EMFolderSelector *selector); EMFolderTree * em_folder_selector_get_folder_tree diff --git a/mail/em-folder-utils.c b/mail/em-folder-utils.c index 0eea5fe567..15f6919b7f 100644 --- a/mail/em-folder-utils.c +++ b/mail/em-folder-utils.c @@ -507,10 +507,11 @@ em_folder_utils_copy_folder (GtkWindow *parent, model = em_folder_tree_model_get_default (); - dialog = em_folder_selector_new (parent, model, title, label); + dialog = em_folder_selector_new (parent, model, title); selector = EM_FOLDER_SELECTOR (dialog); em_folder_selector_set_can_create (selector, TRUE); + em_folder_selector_set_default_button_label (selector, label); folder_tree = em_folder_selector_get_folder_tree (selector); diff --git a/mail/em-vfolder-editor-rule.c b/mail/em-vfolder-editor-rule.c index 8eac42d80d..7296d368c7 100644 --- a/mail/em-vfolder-editor-rule.c +++ b/mail/em-vfolder-editor-rule.c @@ -387,11 +387,11 @@ source_add (GtkWidget *widget, model = em_folder_tree_model_get_default (); - dialog = em_folder_selector_new ( - parent, model, _("Add Folder"), _("_Add")); + dialog = em_folder_selector_new (parent, model, _("Add Folder")); selector = EM_FOLDER_SELECTOR (dialog); em_folder_selector_set_can_create (selector, TRUE); + em_folder_selector_set_default_button_label (selector, _("_Add")); folder_tree = em_folder_selector_get_folder_tree (selector); |