aboutsummaryrefslogtreecommitdiffstats
path: root/calendar
diff options
context:
space:
mode:
authorFabiano FidĂȘncio <fidencio@redhat.com>2013-06-27 02:17:27 +0800
committerFabiano FidĂȘncio <fidencio@redhat.com>2013-06-28 20:07:01 +0800
commitbf7292b45c2adcb88dd2cabf07b73eb121b92cc9 (patch)
tree25a3119adc8e78d74b1bf750222d4e8b1f45cada /calendar
parent447f7d38f3c759de7ccd999b6ef99795239f806d (diff)
downloadgsoc2013-evolution-bf7292b45c2adcb88dd2cabf07b73eb121b92cc9.tar
gsoc2013-evolution-bf7292b45c2adcb88dd2cabf07b73eb121b92cc9.tar.gz
gsoc2013-evolution-bf7292b45c2adcb88dd2cabf07b73eb121b92cc9.tar.bz2
gsoc2013-evolution-bf7292b45c2adcb88dd2cabf07b73eb121b92cc9.tar.lz
gsoc2013-evolution-bf7292b45c2adcb88dd2cabf07b73eb121b92cc9.tar.xz
gsoc2013-evolution-bf7292b45c2adcb88dd2cabf07b73eb121b92cc9.tar.zst
gsoc2013-evolution-bf7292b45c2adcb88dd2cabf07b73eb121b92cc9.zip
Bug #703053 - Error on setting reminder 'after start of appointment'
Check if the client supports setting 'after start' reminder and disable it if necessary (and also disabling 'before end of appoint')
Diffstat (limited to 'calendar')
-rw-r--r--calendar/gui/dialogs/alarm-dialog.c119
-rw-r--r--calendar/gui/dialogs/alarm-dialog.ui42
2 files changed, 90 insertions, 71 deletions
diff --git a/calendar/gui/dialogs/alarm-dialog.c b/calendar/gui/dialogs/alarm-dialog.c
index 42411f9af7..71852c50d0 100644
--- a/calendar/gui/dialogs/alarm-dialog.c
+++ b/calendar/gui/dialogs/alarm-dialog.c
@@ -182,6 +182,34 @@ clear_widgets (Dialog *dialog)
gtk_notebook_set_current_page (GTK_NOTEBOOK (dialog->option_notebook), 0);
}
+static void
+populate_relative_time_combobox_widget (GtkWidget *combobox,
+ ECalClient *cal_client,
+ const gint *map,
+ gint prop)
+{
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ gboolean valid;
+ gboolean alarm_after_start;
+ gint i;
+
+ alarm_after_start = !e_client_check_capability (
+ E_CLIENT (cal_client), CAL_STATIC_CAPABILITY_NO_ALARM_AFTER_START);
+ model = gtk_combo_box_get_model (GTK_COMBO_BOX (combobox));
+ valid = gtk_tree_model_get_iter_first (model, &iter);
+
+ for (i = 0; valid && map[i] != -1; i++) {
+ gtk_list_store_set (
+ GTK_LIST_STORE (model),
+ &iter,
+ 1,
+ alarm_after_start ? TRUE : (map[i] == prop ? FALSE : TRUE),
+ -1);
+ valid = gtk_tree_model_iter_next (model, &iter);
+ }
+}
+
/* fill_widgets handler for the alarm page */
static void
alarm_to_dialog (Dialog *dialog)
@@ -205,10 +233,13 @@ alarm_to_dialog (Dialog *dialog)
GTK_LIST_STORE (model), &iter,
1, !e_client_check_capability (E_CLIENT (dialog->cal_client), action_map_cap[i]),
-1);
-
valid = gtk_tree_model_iter_next (model, &iter);
}
+ populate_relative_time_combobox_widget (dialog->relative_combo, dialog->cal_client, relative_map, AFTER);
+ populate_relative_time_combobox_widget (
+ dialog->time_combo, dialog->cal_client, time_map, E_CAL_COMPONENT_ALARM_TRIGGER_RELATIVE_END);
+
/* Set a default address if possible */
if (!e_client_check_capability (E_CLIENT (dialog->cal_client), CAL_STATIC_CAPABILITY_NO_EMAIL_ALARMS)
&& !e_cal_component_alarm_has_attendees (dialog->alarm)
@@ -775,6 +806,44 @@ dialog_to_alarm (Dialog *dialog)
}
}
+static void
+build_combobox_widget (GtkWidget *combobox,
+ const gchar *actions[])
+{
+ GtkComboBox *combo = GTK_COMBO_BOX (combobox);
+ GtkCellRenderer *cell;
+ GtkListStore *store;
+ gint i;
+
+ g_return_val_if_fail (combo != NULL, FALSE);
+ g_return_val_if_fail (GTK_IS_COMBO_BOX (combo), FALSE);
+
+ store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_BOOLEAN);
+ gtk_combo_box_set_model (combo, GTK_TREE_MODEL (store));
+ g_object_unref (store);
+
+ gtk_cell_layout_clear (GTK_CELL_LAYOUT (combo));
+
+ cell = gtk_cell_renderer_text_new ();
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), cell, TRUE);
+ gtk_cell_layout_set_attributes (
+ GTK_CELL_LAYOUT (combo), cell,
+ "text", 0,
+ "sensitive", 1,
+ NULL);
+
+ for (i = 0; actions[i] != NULL; i++) {
+ GtkTreeIter iter;
+
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (
+ store, &iter,
+ 0, _(actions[i]),
+ 1, TRUE,
+ -1);
+ }
+}
+
/* Gets the widgets from the XML file and returns TRUE if they are all available. */
static gboolean
get_widgets (Dialog *dialog)
@@ -820,41 +889,31 @@ get_widgets (Dialog *dialog)
N_("Pop up an alert"),
N_("Play a sound"),
N_("Run a program"),
- N_("Send an email")
+ N_("Send an email"),
+ NULL
};
- GtkComboBox *combo = (GtkComboBox *) dialog->action_combo;
- GtkCellRenderer *cell;
- GtkListStore *store;
- gint i;
-
- g_return_val_if_fail (combo != NULL, FALSE);
- g_return_val_if_fail (GTK_IS_COMBO_BOX (combo), FALSE);
-
- store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_BOOLEAN);
- gtk_combo_box_set_model (combo, GTK_TREE_MODEL (store));
- g_object_unref (store);
+ build_combobox_widget (dialog->action_combo, actions);
+ }
- gtk_cell_layout_clear (GTK_CELL_LAYOUT (combo));
+ if (dialog->relative_combo) {
+ const gchar *actions[] = {
+ N_("before"),
+ N_("after"),
+ NULL
+ };
- cell = gtk_cell_renderer_text_new ();
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), cell, TRUE);
- gtk_cell_layout_set_attributes (
- GTK_CELL_LAYOUT (combo), cell,
- "text", 0,
- "sensitive", 1,
- NULL);
+ build_combobox_widget (dialog->relative_combo, actions);
+ }
- for (i = 0; i < G_N_ELEMENTS (actions); i++) {
- GtkTreeIter iter;
+ if (dialog->time_combo) {
+ const gchar *actions[] = {
+ N_("start of appointmenet"),
+ N_("end of appointment"),
+ NULL
+ };
- gtk_list_store_append (store, &iter);
- gtk_list_store_set (
- store, &iter,
- 0, _(actions[i]),
- 1, TRUE,
- -1);
- }
+ build_combobox_widget (dialog->time_combo, actions);
}
return (dialog->action_combo
diff --git a/calendar/gui/dialogs/alarm-dialog.ui b/calendar/gui/dialogs/alarm-dialog.ui
index ba2d7abbd3..c7c03106f4 100644
--- a/calendar/gui/dialogs/alarm-dialog.ui
+++ b/calendar/gui/dialogs/alarm-dialog.ui
@@ -47,32 +47,6 @@
</columns>
<data>
<row>
- <col id="0" translatable="yes">before</col>
- </row>
- <row>
- <col id="0" translatable="yes">after</col>
- </row>
- </data>
- </object>
- <object class="GtkListStore" id="model3">
- <columns>
- <column type="gchararray"/>
- </columns>
- <data>
- <row>
- <col id="0" translatable="yes">start of appointment</col>
- </row>
- <row>
- <col id="0" translatable="yes">end of appointment</col>
- </row>
- </data>
- </object>
- <object class="GtkListStore" id="model4">
- <columns>
- <column type="gchararray"/>
- </columns>
- <data>
- <row>
<col id="0" translatable="yes">minutes</col>
</row>
<row>
@@ -256,13 +230,6 @@
<property name="visible">True</property>
<property name="add_tearoffs">False</property>
<property name="focus_on_click">True</property>
- <property name="model">model2</property>
- <child>
- <object class="GtkCellRendererText" id="renderer2"/>
- <attributes>
- <attribute name="text">0</attribute>
- </attributes>
- </child>
</object>
<packing>
<property name="padding">0</property>
@@ -275,13 +242,6 @@
<property name="visible">True</property>
<property name="add_tearoffs">False</property>
<property name="focus_on_click">True</property>
- <property name="model">model3</property>
- <child>
- <object class="GtkCellRendererText" id="renderer3"/>
- <attributes>
- <attribute name="text">0</attribute>
- </attributes>
- </child>
</object>
<packing>
<property name="padding">0</property>
@@ -449,7 +409,7 @@
<property name="visible">True</property>
<property name="add_tearoffs">False</property>
<property name="focus_on_click">True</property>
- <property name="model">model4</property>
+ <property name="model">model2</property>
<child>
<object class="GtkCellRendererText" id="renderer4"/>
<attributes>