From 6db25eacd6906084ac20f3b32c296762eaf40109 Mon Sep 17 00:00:00 2001 From: Yash Singh Date: Fri, 14 Jul 2017 23:20:16 +0530 Subject: [PATCH] edit-dialog: remove unnecessary condition check An unnecessary condition check for assigning recurrence-changed property of edit-dialog was causing a segmentation fault. This patch removes this condition check and assigns the recurrence-changed property correctly. https://bugzilla.gnome.org/show_bug.cgi?id=782755 --- src/gcal-edit-dialog.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/src/gcal-edit-dialog.c b/src/gcal-edit-dialog.c index 156e970d..eefa6ef9 100644 --- a/src/gcal-edit-dialog.c +++ b/src/gcal-edit-dialog.c @@ -810,11 +810,6 @@ gcal_edit_dialog_action_button_clicked (GtkWidget *widget, old_recur = gcal_event_get_recurrence (dialog->event); freq = gtk_combo_box_get_active (GTK_COMBO_BOX (dialog->repeat_combo)); - remove_recurrence_properties (dialog->event); - - if ((!old_recur && freq != GCAL_RECURRENCE_NO_REPEAT) || old_recur->frequency != freq) - dialog->recurrence_changed = TRUE; - if (freq != GCAL_RECURRENCE_NO_REPEAT) { GcalRecurrence *recur; @@ -828,11 +823,29 @@ gcal_edit_dialog_action_button_clicked (GtkWidget *widget, else if (recur->limit_type == GCAL_RECURRENCE_COUNT) recur->limit.count = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (dialog->number_of_occurrences_spin)); + /* Only apply the new recurrence if it's different from the old one */ if (!gcal_recurrence_is_equal (old_recur, recur)) - gcal_event_set_recurrence (dialog->event, recur); + { + /* Remove the previous recurrence... */ + remove_recurrence_properties (dialog->event); + + /* ... and set the new one */ + gcal_event_set_recurrence (dialog->event, recur); + + dialog->recurrence_changed = TRUE; + } g_clear_pointer (&recur, gcal_recurrence_free); } + else + { + /* When NO_REPEAT is set, make sure to remove the old recurrent */ + remove_recurrence_properties (dialog->event); + + /* If the recurrence from an recurrent event was removed, mark it as changed */ + if (old_recur && old_recur->frequency != GCAL_RECURRENCE_NO_REPEAT) + dialog->recurrence_changed = TRUE; + } /* Update the source if needed */ if (dialog->selected_source &&