aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui/e-cal-model.c
diff options
context:
space:
mode:
authorMilan Crha <mcrha@src.gnome.org>2007-09-27 16:10:45 +0800
committerMilan Crha <mcrha@src.gnome.org>2007-09-27 16:10:45 +0800
commitca9ceb157cff46f1ecddd0b807d9b7776c0f7ca1 (patch)
tree4f84320315e1a58b7fa5d48c47405cfe6ab1b07d /calendar/gui/e-cal-model.c
parentfec468e9409d12dc2b37546d646908209da42fdd (diff)
downloadgsoc2013-evolution-ca9ceb157cff46f1ecddd0b807d9b7776c0f7ca1.tar.gz
gsoc2013-evolution-ca9ceb157cff46f1ecddd0b807d9b7776c0f7ca1.tar.zst
gsoc2013-evolution-ca9ceb157cff46f1ecddd0b807d9b7776c0f7ca1.zip
2007-09-27 mcrha Fix for bug #346686
svn path=/trunk/; revision=34315
Diffstat (limited to 'calendar/gui/e-cal-model.c')
-rw-r--r--calendar/gui/e-cal-model.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/calendar/gui/e-cal-model.c b/calendar/gui/e-cal-model.c
index a86c893cc6..36466c1ac1 100644
--- a/calendar/gui/e-cal-model.c
+++ b/calendar/gui/e-cal-model.c
@@ -710,6 +710,41 @@ ecm_set_value_at (ETableModel *etm, int col, int row, const void *value)
}
}
+/**
+ * e_cal_model_test_row_editable
+ * Checks if component at row 'row' is editable or not. It doesn't check bounds for 'row'.
+ *
+ * @param model Calendar model.
+ * @param row Row of our interest. -1 is editable only when default client is editable.
+ * @return Whether row is editable or not.
+ **/
+gboolean
+e_cal_model_test_row_editable (ECalModel *model, int row)
+{
+ gboolean readonly;
+ ECal *cal = NULL;
+
+ if (row != -1) {
+ ECalModelComponent *comp_data;
+
+ comp_data = e_cal_model_get_component_at (model, row);
+
+ if (comp_data)
+ cal = comp_data->client;
+
+ } else {
+ cal = e_cal_model_get_default_client (model);
+ }
+
+ readonly = cal == NULL;
+
+ if (!readonly)
+ if (!e_cal_is_read_only (cal, &readonly, NULL))
+ readonly = TRUE;
+
+ return !readonly;
+}
+
static gboolean
ecm_is_cell_editable (ETableModel *etm, int col, int row)
{
@@ -723,6 +758,9 @@ ecm_is_cell_editable (ETableModel *etm, int col, int row)
g_return_val_if_fail (col >= 0 && col <= E_CAL_MODEL_FIELD_LAST, FALSE);
g_return_val_if_fail (row >= -1 || (row >= 0 && row < priv->objects->len), FALSE);
+ if (!e_cal_model_test_row_editable (E_CAL_MODEL (etm), row))
+ return FALSE;
+
switch (col) {
case E_CAL_MODEL_FIELD_CATEGORIES :
case E_CAL_MODEL_FIELD_CLASSIFICATION :