aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Barnes <mbarnes@redhat.com>2012-06-15 20:21:30 +0800
committerMatthew Barnes <mbarnes@redhat.com>2012-06-15 20:22:52 +0800
commita3048b477f44f3d854c32cb12cbf3022c2ca7336 (patch)
tree852a47fd1c63628d60278d5e9db13343ac6e382a
parent503b211d3d598316fc1040775f7a6669c32a47b1 (diff)
downloadgsoc2013-evolution-a3048b477f44f3d854c32cb12cbf3022c2ca7336.tar.gz
gsoc2013-evolution-a3048b477f44f3d854c32cb12cbf3022c2ca7336.tar.zst
gsoc2013-evolution-a3048b477f44f3d854c32cb12cbf3022c2ca7336.zip
ESourceConfig: Lock down name when editing a collection member.
-rw-r--r--widgets/misc/e-source-config.c43
1 files changed, 36 insertions, 7 deletions
diff --git a/widgets/misc/e-source-config.c b/widgets/misc/e-source-config.c
index 25e7923a4d..8372da1448 100644
--- a/widgets/misc/e-source-config.c
+++ b/widgets/misc/e-source-config.c
@@ -44,6 +44,7 @@ struct _ESourceConfigPrivate {
GtkWidget *type_label;
GtkWidget *type_combo;
+ GtkWidget *name_label;
GtkWidget *name_entry;
GtkWidget *backend_box;
GtkSizeGroup *size_group;
@@ -434,6 +435,11 @@ source_config_dispose (GObject *object)
priv->type_combo = NULL;
}
+ if (priv->name_label != NULL) {
+ g_object_unref (priv->name_label);
+ priv->name_label = NULL;
+ }
+
if (priv->name_entry != NULL) {
g_object_unref (priv->name_entry);
priv->name_entry = NULL;
@@ -502,9 +508,17 @@ source_config_constructed (GObject *object)
config, NULL, _("Type:"),
config->priv->type_combo);
- e_source_config_insert_widget (
- config, NULL, _("Name:"),
- config->priv->name_entry);
+ /* If the original source is part of a collection then we assume
+ * the display name is server-assigned and not user-assigned, at
+ * least not assigned through Evolution. */
+ if (collection_source != NULL)
+ e_source_config_insert_widget (
+ config, NULL, _("Name:"),
+ config->priv->name_label);
+ else
+ e_source_config_insert_widget (
+ config, NULL, _("Name:"),
+ config->priv->name_entry);
source_config_init_backends (config);
}
@@ -568,6 +582,11 @@ source_config_init_candidate (ESourceConfig *config,
{
g_object_bind_property (
scratch_source, "display-name",
+ config->priv->name_label, "label",
+ G_BINDING_SYNC_CREATE);
+
+ g_object_bind_property (
+ scratch_source, "display-name",
config->priv->name_entry, "text",
G_BINDING_BIDIRECTIONAL |
G_BINDING_SYNC_CREATE);
@@ -780,15 +799,15 @@ e_source_config_init (ESourceConfig *config)
config->priv->candidates = candidates;
config->priv->size_group = size_group;
- /* Either the combo box or the label is shown, never both.
- * But we create both widgets and keep them both up-to-date
- * regardless just because it makes the logic simpler. */
-
attr_list = pango_attr_list_new ();
attr = pango_attr_weight_new (PANGO_WEIGHT_BOLD);
pango_attr_list_insert (attr_list, attr);
+ /* Either the source type combo box or the label is shown,
+ * never both. But we create both widgets and keep them
+ * both up-to-date because it makes the logic simpler. */
+
widget = gtk_label_new (NULL);
gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5);
gtk_label_set_attributes (GTK_LABEL (widget), attr_list);
@@ -799,6 +818,16 @@ e_source_config_init (ESourceConfig *config)
config->priv->type_combo = g_object_ref_sink (widget);
gtk_widget_show (widget);
+ /* Similarly for the display name. Either the text entry
+ * or the label is shown, depending on whether the source
+ * is a collection member (new sources never are). */
+
+ widget = gtk_label_new (NULL);
+ gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5);
+ gtk_label_set_attributes (GTK_LABEL (widget), attr_list);
+ config->priv->name_label = g_object_ref_sink (widget);
+ gtk_widget_show (widget);
+
widget = gtk_entry_new ();
gtk_entry_set_activates_default (GTK_ENTRY (widget), TRUE);
config->priv->name_entry = g_object_ref_sink (widget);