diff options
author | Milan Crha <mcrha@src.gnome.org> | 2007-09-27 16:10:45 +0800 |
---|---|---|
committer | Milan Crha <mcrha@src.gnome.org> | 2007-09-27 16:10:45 +0800 |
commit | ca9ceb157cff46f1ecddd0b807d9b7776c0f7ca1 (patch) | |
tree | 4f84320315e1a58b7fa5d48c47405cfe6ab1b07d /calendar/gui/e-cal-model.c | |
parent | fec468e9409d12dc2b37546d646908209da42fdd (diff) | |
download | gsoc2013-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.c | 38 |
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 : |