aboutsummaryrefslogtreecommitdiffstats
path: root/addressbook/gui/component/select-names/e-select-names-model.c
diff options
context:
space:
mode:
Diffstat (limited to 'addressbook/gui/component/select-names/e-select-names-model.c')
-rw-r--r--addressbook/gui/component/select-names/e-select-names-model.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/addressbook/gui/component/select-names/e-select-names-model.c b/addressbook/gui/component/select-names/e-select-names-model.c
index 3fd5249a26..f102421f0e 100644
--- a/addressbook/gui/component/select-names/e-select-names-model.c
+++ b/addressbook/gui/component/select-names/e-select-names-model.c
@@ -56,6 +56,8 @@ struct _ESelectNamesModelPrivate {
GList *data; /* of EDestination */
gchar *text;
gchar *addr_text;
+
+ gint limit;
};
@@ -148,6 +150,8 @@ static void
e_select_names_model_init (ESelectNamesModel *model)
{
model->priv = g_new0 (struct _ESelectNamesModelPrivate, 1);
+
+ model->priv->limit = -1;
}
static void
@@ -239,6 +243,8 @@ e_select_names_model_duplicate (ESelectNamesModel *old)
model->priv->data = g_list_append (model->priv->data, dup);
}
+ model->priv->limit = old->priv->limit;
+
return model;
}
@@ -318,6 +324,33 @@ e_select_names_model_count (ESelectNamesModel *model)
return g_list_length (model->priv->data);
}
+gint
+e_select_names_model_get_limit (ESelectNamesModel *model)
+{
+ g_return_val_if_fail (model != NULL, 0);
+ g_return_val_if_fail (E_IS_SELECT_NAMES_MODEL (model), 0);
+
+ return model->priv->limit;
+}
+
+void
+e_select_names_model_set_limit (ESelectNamesModel *model, gint limit)
+{
+ g_return_if_fail (model != NULL);
+ g_return_if_fail (E_IS_SELECT_NAMES_MODEL (model));
+
+ model->priv->limit = MAX (limit, -1);
+}
+
+gboolean
+e_select_names_model_at_limit (ESelectNamesModel *model)
+{
+ g_return_val_if_fail (model != NULL, TRUE);
+ g_return_val_if_fail (E_IS_SELECT_NAMES_MODEL (model), TRUE);
+
+ return model->priv->limit >= 0 && g_list_length (model->priv->data) >= model->priv->limit;
+}
+
const EDestination *
e_select_names_model_get_destination (ESelectNamesModel *model, gint index)
{
@@ -419,6 +452,12 @@ e_select_names_model_insert (ESelectNamesModel *model, gint index, EDestination
g_return_if_fail (0 <= index && index <= g_list_length (model->priv->data));
g_return_if_fail (dest && E_IS_DESTINATION (dest));
+ if (e_select_names_model_at_limit (model)) {
+ /* FIXME: This is bad. */
+ gtk_object_unref (GTK_OBJECT (dest));
+ return;
+ }
+
model->priv->data = g_list_insert (model->priv->data, dest, index);
gtk_object_ref (GTK_OBJECT (dest));
@@ -433,6 +472,12 @@ e_select_names_model_append (ESelectNamesModel *model, EDestination *dest)
g_return_if_fail (model && E_IS_SELECT_NAMES_MODEL (model));
g_return_if_fail (dest && E_IS_DESTINATION (dest));
+ if (e_select_names_model_at_limit (model)) {
+ /* FIXME: This is bad. */
+ gtk_object_unref (GTK_OBJECT (dest));
+ return;
+ }
+
model->priv->data = g_list_append (model->priv->data, dest);
gtk_object_ref (GTK_OBJECT (dest));