Hello community,

here is the log from the commit of package gnome-calendar for openSUSE:Factory 
checked in at 2020-06-22 17:47:05
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gnome-calendar (Old)
 and      /work/SRC/openSUSE:Factory/.gnome-calendar.new.2956 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gnome-calendar"

Mon Jun 22 17:47:05 2020 rev:31 rq:816395 version:3.36.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/gnome-calendar/gnome-calendar.changes    
2020-04-23 18:31:09.172169835 +0200
+++ /work/SRC/openSUSE:Factory/.gnome-calendar.new.2956/gnome-calendar.changes  
2020-06-22 17:47:07.938077832 +0200
@@ -1,0 +2,11 @@
+Thu Jun 18 16:02:31 UTC 2020 - Bjørn Lie <bjorn....@gmail.com>
+
+- Update to version 3.36.2:
+  + Week view now properly translates the event to the local
+    timezone.
+  + Properly commit sequence after event changes, and prevent data
+    loss.
+  + Fix first weekday calculation.
+  + Updated translations.
+
+-------------------------------------------------------------------

Old:
----
  gnome-calendar-3.36.1.tar.xz

New:
----
  gnome-calendar-3.36.2.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ gnome-calendar.spec ++++++
--- /var/tmp/diff_new_pack.r9p0sV/_old  2020-06-22 17:47:08.598079902 +0200
+++ /var/tmp/diff_new_pack.r9p0sV/_new  2020-06-22 17:47:08.602079915 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           gnome-calendar
-Version:        3.36.1
+Version:        3.36.2
 Release:        0
 Summary:        A calendar application for GNOME
 License:        GPL-3.0-or-later

++++++ gnome-calendar-3.36.1.tar.xz -> gnome-calendar-3.36.2.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-calendar-3.36.1/NEWS 
new/gnome-calendar-3.36.2/NEWS
--- old/gnome-calendar-3.36.1/NEWS      2020-04-16 22:07:39.000000000 +0200
+++ new/gnome-calendar-3.36.2/NEWS      2020-06-18 02:35:17.539159000 +0200
@@ -1,3 +1,9 @@
+Major changes in 3.36.2:
+* Week view now properly translates the event to the local timezone (Douglas 
Fuller)
+* Properly commit sequence after event changes, and prevent data loss
+* Fix first weekday calculation (Evangelos Ribeiro Tzaras)
+* Updated translations
+
 Major changes in 3.36.1:
 * Introduce a new engine
 * Fix a lot of bugs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-calendar-3.36.1/data/appdata/org.gnome.Calendar.appdata.xml.in.in 
new/gnome-calendar-3.36.2/data/appdata/org.gnome.Calendar.appdata.xml.in.in
--- old/gnome-calendar-3.36.1/data/appdata/org.gnome.Calendar.appdata.xml.in.in 
2020-04-16 22:07:39.000000000 +0200
+++ new/gnome-calendar-3.36.2/data/appdata/org.gnome.Calendar.appdata.xml.in.in 
2020-06-18 02:35:17.539159000 +0200
@@ -49,6 +49,12 @@
   <project_group>GNOME</project_group>
 
   <releases>
+    <release date="2020-04-16" version="3.36.2">
+      <description>
+        <p> This is a stable release that fixes important bugs.</p>
+      </description>
+    </release>
+
     <release date="2020-04-16" version="3.36.1">
       <description>
         <p> This is a stable release that fixes a lot of bugs, and introduces 
a new engine for Calendar. This new engine should be more robust and stable.</p>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-calendar-3.36.1/meson.build 
new/gnome-calendar-3.36.2/meson.build
--- old/gnome-calendar-3.36.1/meson.build       2020-04-16 22:07:39.000000000 
+0200
+++ new/gnome-calendar-3.36.2/meson.build       2020-06-18 02:35:17.542492400 
+0200
@@ -1,7 +1,7 @@
 project(
   'gnome-calendar',
                'c',
-           version: '3.36.1',
+           version: '3.36.2',
            license: 'GPL3+',
      meson_version: '>= 0.50.0'
 )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-calendar-3.36.1/src/core/gcal-event.c 
new/gnome-calendar-3.36.2/src/core/gcal-event.c
--- old/gnome-calendar-3.36.1/src/core/gcal-event.c     2020-04-16 
22:07:39.000000000 +0200
+++ new/gnome-calendar-3.36.2/src/core/gcal-event.c     2020-06-18 
02:35:17.562492400 +0200
@@ -800,6 +800,28 @@
 }
 
 /**
+ * gcal_event_new:
+ * @self: a #GcalEvent
+ *
+ * Clones @event into a new #GcalEvent instance. This is useful
+ * for updating events.
+ *
+ * Returns: (transfer full)(nullable): a #GcalEvent
+ */
+GcalEvent*
+gcal_event_new_from_event (GcalEvent *self)
+{
+  g_autoptr (ECalComponent) component = NULL;
+
+  g_return_val_if_fail (GCAL_IS_EVENT (self), NULL);
+
+  component = e_cal_component_clone (self->component);
+  e_cal_component_commit_sequence (component);
+
+  return gcal_event_new (self->calendar, component, NULL);
+}
+
+/**
  * gcal_event_get_all_day:
  * @self: a #GcalEvent
  *
@@ -1179,6 +1201,8 @@
       g_hash_table_iter_remove (&iter);
     }
 
+  e_cal_component_commit_sequence (self->component);
+
   GCAL_EXIT;
 }
 
@@ -1223,6 +1247,8 @@
 
   e_cal_component_alarm_free (new_alarm);
 
+  e_cal_component_commit_sequence (self->component);
+
   GCAL_EXIT;
 }
 
@@ -1240,18 +1266,20 @@
 gcal_event_remove_alarm (GcalEvent *self,
                          guint      type)
 {
+  const gchar *alarm_uid;
+
   g_return_if_fail (GCAL_IS_EVENT (self));
 
+  alarm_uid = g_hash_table_lookup (self->alarms, GINT_TO_POINTER (type));
+
   /* Only 1 alarm per relative time */
-  if (g_hash_table_contains (self->alarms, GINT_TO_POINTER (type)))
+  if (alarm_uid)
     {
-      const gchar *alarm_uid;
-
-      alarm_uid = g_hash_table_lookup (self->alarms, GINT_TO_POINTER (type));
-
       e_cal_component_remove_alarm (self->component, alarm_uid);
 
       g_hash_table_remove (self->alarms, GINT_TO_POINTER (type));
+
+      e_cal_component_commit_sequence (self->component);
     }
 }
 
@@ -1292,6 +1320,7 @@
   if (g_strcmp0 (current_location, location) != 0)
     {
       e_cal_component_set_location (self->component, (location && *location) ? 
location : NULL);
+      e_cal_component_commit_sequence (self->component);
 
       g_clear_pointer (&self->location, g_free);
       self->location = g_strdup (location ? location : "");
@@ -1621,6 +1650,8 @@
       i_cal_component_add_property (icalcomp, prop);
     }
 
+  e_cal_component_commit_sequence (self->component);
+
   g_clear_object (&rrule);
   g_clear_object (&prop);
 }
@@ -1789,6 +1820,8 @@
       i_cal_component_take_property (icalcomp, property);
     }
 
+  e_cal_component_commit_sequence (self->component);
+
   GCAL_EXIT;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-calendar-3.36.1/src/core/gcal-event.h 
new/gnome-calendar-3.36.2/src/core/gcal-event.h
--- old/gnome-calendar-3.36.1/src/core/gcal-event.h     2020-04-16 
22:07:39.000000000 +0200
+++ new/gnome-calendar-3.36.2/src/core/gcal-event.h     2020-06-18 
02:35:17.562492400 +0200
@@ -53,6 +53,8 @@
                                                                   
ECalComponent      *component,
                                                                   GError       
     **error);
 
+GcalEvent*           gcal_event_new_from_event                   (GcalEvent    
      *self);
+
 gboolean             gcal_event_get_all_day                      (GcalEvent    
      *self);
 
 void                 gcal_event_set_all_day                      (GcalEvent    
      *self,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-calendar-3.36.1/src/core/gcal-manager.c 
new/gnome-calendar-3.36.2/src/core/gcal-manager.c
--- old/gnome-calendar-3.36.1/src/core/gcal-manager.c   2020-04-16 
22:07:39.000000000 +0200
+++ new/gnome-calendar-3.36.2/src/core/gcal-manager.c   2020-06-18 
02:35:17.562492400 +0200
@@ -1099,6 +1099,8 @@
   clone = e_cal_component_clone (ecomponent);
   comp = e_cal_component_get_icalcomponent (clone);
 
+  g_assert (clone != NULL);
+
   e_cal_client_create_object_sync (gcal_calendar_get_client (calendar),
                                    comp,
                                    E_CAL_OPERATION_FLAG_NONE,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-calendar-3.36.1/src/gui/gcal-edit-dialog.c 
new/gnome-calendar-3.36.2/src/gui/gcal-edit-dialog.c
--- old/gnome-calendar-3.36.1/src/gui/gcal-edit-dialog.c        2020-04-16 
22:07:39.000000000 +0200
+++ new/gnome-calendar-3.36.2/src/gui/gcal-edit-dialog.c        2020-06-18 
02:35:17.572492400 +0200
@@ -387,6 +387,7 @@
 
   e_cal_component_set_recurid (comp, NULL);
   e_cal_component_set_rrules (comp, NULL);
+  e_cal_component_commit_sequence (comp);
 }
 
 static gchar*
@@ -654,6 +655,140 @@
     }
 }
 
+static void
+apply_changes_to_event (GcalEditDialog *self)
+{
+  GcalRecurrenceFrequency freq;
+  GcalRecurrence *old_recur;
+  GDateTime *start_date, *end_date;
+  gboolean was_all_day;
+  gboolean all_day;
+  gchar *note_text;
+  gsize i;
+
+  /* Update summary */
+  gcal_event_set_summary (self->event, gtk_entry_get_text (GTK_ENTRY 
(self->summary_entry)));
+
+  /* Update description */
+  g_object_get (G_OBJECT (gtk_text_view_get_buffer (GTK_TEXT_VIEW 
(self->notes_text))),
+                "text", &note_text,
+                NULL);
+
+  gcal_event_set_description (self->event, note_text);
+  g_free (note_text);
+
+  all_day = gtk_switch_get_active (self->all_day_switch);
+  was_all_day = gcal_event_get_all_day (self->event);
+
+  if (!was_all_day && all_day)
+    gcal_event_save_original_timezones (self->event);
+
+  /*
+   * Update start & end dates. The dates are already translated to the current
+   * timezone (unless the event used to be all day, but no longer is).
+   */
+  start_date = get_date_start (self);
+  end_date = get_date_end (self);
+
+#ifdef GCAL_ENABLE_TRACE
+    {
+      g_autofree gchar *start_dt_string = g_date_time_format (start_date, "%x 
%X %z");
+      g_autofree gchar *end_dt_string = g_date_time_format (end_date, "%x %X 
%z");
+
+      g_debug ("New start date: %s", start_dt_string);
+      g_debug ("New end date: %s", end_dt_string);
+    }
+#endif
+
+  gcal_event_set_all_day (self->event, all_day);
+
+  /*
+   * The end date for multi-day events is exclusive, so we bump it by a day.
+   * This fixes the discrepancy between the end day of the event and how it
+   * is displayed in the month view. See bug 769300.
+   */
+  if (all_day)
+    {
+      GDateTime *fake_end_date = g_date_time_add_days (end_date, 1);
+
+      g_clear_pointer (&end_date, g_date_time_unref);
+      end_date = fake_end_date;
+    }
+  else if (!all_day && was_all_day)
+    {
+      /* When an all day event is changed to be not an all day event, we
+       * need to correct for the fact that the event's timezone was until
+       * now set to UTC. That means we need to change the timezone to
+       * localtime now, or else it will be saved incorrectly.
+       */
+      GDateTime *localtime_date;
+
+      localtime_date = g_date_time_to_local (start_date);
+      g_clear_pointer (&start_date, g_date_time_unref);
+      start_date = localtime_date;
+
+      localtime_date = g_date_time_to_local (end_date);
+      g_clear_pointer (&end_date, g_date_time_unref);
+      end_date = localtime_date;
+    }
+
+  gcal_event_set_date_start (self->event, start_date);
+  gcal_event_set_date_end (self->event, end_date);
+
+  g_clear_pointer (&start_date, g_date_time_unref);
+  g_clear_pointer (&end_date, g_date_time_unref);
+
+  /* Update alarms */
+  gcal_event_remove_all_alarms (self->event);
+
+  for (i = 0; i < self->alarms->len; i++)
+    gcal_event_add_alarm (self->event, g_ptr_array_index (self->alarms, i));
+
+  clear_alarms (self);
+
+  /* Check Repeat popover and set recurrence-rules accordingly */
+  old_recur = gcal_event_get_recurrence (self->event);
+  freq = gtk_combo_box_get_active (GTK_COMBO_BOX (self->repeat_combo));
+
+  if (freq != GCAL_RECURRENCE_NO_REPEAT)
+    {
+      GcalRecurrence *recur;
+
+      recur = gcal_recurrence_new ();
+      recur->frequency = freq;
+      recur->limit_type = gtk_combo_box_get_active (GTK_COMBO_BOX 
(self->repeat_duration_combo));
+
+      if (recur->limit_type == GCAL_RECURRENCE_UNTIL)
+        recur->limit.until = gcal_date_selector_get_date (GCAL_DATE_SELECTOR 
(self->until_date_selector));
+      else if (recur->limit_type == GCAL_RECURRENCE_COUNT)
+        recur->limit.count = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON 
(self->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))
+        {
+          /* Remove the previous recurrence... */
+          remove_recurrence_properties (self->event);
+
+          /* ... and set the new one */
+          gcal_event_set_recurrence (self->event, recur);
+
+          self->recurrence_changed = TRUE;
+        }
+
+      g_clear_pointer (&recur, gcal_recurrence_unref);
+    }
+  else
+    {
+      /* When NO_REPEAT is set, make sure to remove the old recurrent */
+      remove_recurrence_properties (self->event);
+
+      /* If the recurrence from an recurrent event was removed, mark it as 
changed */
+      if (old_recur && old_recur->frequency != GCAL_RECURRENCE_NO_REPEAT)
+        self->recurrence_changed = TRUE;
+    }
+}
+
+
 /*
  * Callbacks
  */
@@ -791,138 +926,16 @@
     }
   else
     {
-      GcalRecurrenceFrequency freq;
-      GcalRecurrence *old_recur;
       GcalCalendar *calendar;
-      GDateTime *start_date, *end_date;
-      gboolean was_all_day;
-      gboolean all_day;
-      gchar *note_text;
-      gsize i;
-
-      /* Update summary */
-      gcal_event_set_summary (self->event, gtk_entry_get_text (GTK_ENTRY 
(self->summary_entry)));
-
-      /* Update description */
-      g_object_get (G_OBJECT (gtk_text_view_get_buffer (GTK_TEXT_VIEW 
(self->notes_text))),
-                    "text", &note_text,
-                    NULL);
-
-      gcal_event_set_description (self->event, note_text);
-      g_free (note_text);
-
-      all_day = gtk_switch_get_active (self->all_day_switch);
-      was_all_day = gcal_event_get_all_day (self->event);
-
-      if (!was_all_day && all_day)
-        gcal_event_save_original_timezones (self->event);
-
-      /*
-       * Update start & end dates. The dates are already translated to the 
current
-       * timezone (unless the event used to be all day, but no longer is).
-       */
-      start_date = get_date_start (self);
-      end_date = get_date_end (self);
-
-#ifdef GCAL_ENABLE_TRACE
-        {
-          g_autofree gchar *start_dt_string = g_date_time_format (start_date, 
"%x %X %z");
-          g_autofree gchar *end_dt_string = g_date_time_format (end_date, "%x 
%X %z");
-
-          g_debug ("New start date: %s", start_dt_string);
-          g_debug ("New end date: %s", end_dt_string);
-        }
-#endif
-
-      gcal_event_set_all_day (self->event, all_day);
-
-      /*
-       * The end date for multi-day events is exclusive, so we bump it by a 
day.
-       * This fixes the discrepancy between the end day of the event and how it
-       * is displayed in the month view. See bug 769300.
-       */
-      if (all_day)
-        {
-          GDateTime *fake_end_date = g_date_time_add_days (end_date, 1);
-
-          g_clear_pointer (&end_date, g_date_time_unref);
-          end_date = fake_end_date;
-        }
-      else if (!all_day && was_all_day)
-        {
-          /* When an all day event is changed to be not an all day event, we
-           * need to correct for the fact that the event's timezone was until
-           * now set to UTC. That means we need to change the timezone to
-           * localtime now, or else it will be saved incorrectly.
-           */
-          GDateTime *localtime_date;
-
-          localtime_date = g_date_time_to_local (start_date);
-          g_clear_pointer (&start_date, g_date_time_unref);
-          start_date = localtime_date;
-
-          localtime_date = g_date_time_to_local (end_date);
-          g_clear_pointer (&end_date, g_date_time_unref);
-          end_date = localtime_date;
-        }
-
-      gcal_event_set_date_start (self->event, start_date);
-      gcal_event_set_date_end (self->event, end_date);
-
-      g_clear_pointer (&start_date, g_date_time_unref);
-      g_clear_pointer (&end_date, g_date_time_unref);
-
-      /* Update alarms */
-      gcal_event_remove_all_alarms (self->event);
-
-      for (i = 0; i < self->alarms->len; i++)
-        gcal_event_add_alarm (self->event, g_ptr_array_index (self->alarms, 
i));
-
-      clear_alarms (self);
-
-      /* Check Repeat popover and set recurrence-rules accordingly */
-      old_recur = gcal_event_get_recurrence (self->event);
-      freq = gtk_combo_box_get_active (GTK_COMBO_BOX (self->repeat_combo));
-
-      if (freq != GCAL_RECURRENCE_NO_REPEAT)
-        {
-          GcalRecurrence *recur;
+      gint response;
 
-          recur = gcal_recurrence_new ();
-          recur->frequency = freq;
-          recur->limit_type = gtk_combo_box_get_active (GTK_COMBO_BOX 
(self->repeat_duration_combo));
-
-          if (recur->limit_type == GCAL_RECURRENCE_UNTIL)
-            recur->limit.until = gcal_date_selector_get_date 
(GCAL_DATE_SELECTOR (self->until_date_selector));
-          else if (recur->limit_type == GCAL_RECURRENCE_COUNT)
-            recur->limit.count = gtk_spin_button_get_value_as_int 
(GTK_SPIN_BUTTON (self->number_of_occurrences_spin));
+      apply_changes_to_event (self);
 
-          /* Only apply the new recurrence if it's different from the old one 
*/
-          if (!gcal_recurrence_is_equal (old_recur, recur))
-            {
-              /* Remove the previous recurrence... */
-              remove_recurrence_properties (self->event);
-
-              /* ... and set the new one */
-              gcal_event_set_recurrence (self->event, recur);
-
-              self->recurrence_changed = TRUE;
-            }
-
-          g_clear_pointer (&recur, gcal_recurrence_unref);
-        }
-      else
-        {
-          /* When NO_REPEAT is set, make sure to remove the old recurrent */
-          remove_recurrence_properties (self->event);
-
-          /* If the recurrence from an recurrent event was removed, mark it as 
changed */
-          if (old_recur && old_recur->frequency != GCAL_RECURRENCE_NO_REPEAT)
-            self->recurrence_changed = TRUE;
-        }
+      response = self->event_is_new ? GCAL_RESPONSE_CREATE_EVENT : 
GCAL_RESPONSE_SAVE_EVENT;
 
       /* Update the source if needed */
       calendar = gcal_event_get_calendar (self->event);
+
       if (self->selected_calendar && calendar != self->selected_calendar)
         {
           if (self->event_is_new)
@@ -934,14 +947,14 @@
               gcal_manager_move_event_to_source (gcal_context_get_manager 
(self->context),
                                                  self->event,
                                                  gcal_calendar_get_source 
(self->selected_calendar));
+              response = GTK_RESPONSE_CANCEL;
             }
         }
 
       self->selected_calendar = NULL;
 
       /* Send the response */
-      gtk_dialog_response (GTK_DIALOG (self),
-                           self->event_is_new ? GCAL_RESPONSE_CREATE_EVENT : 
GCAL_RESPONSE_SAVE_EVENT);
+      gtk_dialog_response (GTK_DIALOG (self), response);
     }
 
   GCAL_EXIT;
@@ -1430,6 +1443,7 @@
 gcal_edit_dialog_set_event (GcalEditDialog *self,
                             GcalEvent      *event)
 {
+  g_autoptr (GcalEvent) cloned_event = NULL;
   GcalRecurrenceLimitType limit_type;
   GcalRecurrenceFrequency frequency;
   GcalRecurrence *recur;
@@ -1445,7 +1459,7 @@
 
   g_return_if_fail (GCAL_IS_EDIT_DIALOG (self));
 
-  g_set_object (&self->event, event);
+  g_clear_object (&self->event);
 
   self->setting_event = TRUE;
 
@@ -1459,8 +1473,11 @@
   if (!event)
     GCAL_GOTO (out);
 
+  cloned_event = gcal_event_new_from_event (event);
+  self->event = g_object_ref (cloned_event);
+
   /* Recurrences */
-  recur = gcal_event_get_recurrence (event);
+  recur = gcal_event_get_recurrence (cloned_event);
   frequency = recur ? recur->frequency : GCAL_RECURRENCE_NO_REPEAT;
   limit_type = recur ? recur->limit_type : GCAL_RECURRENCE_FOREVER;
 
@@ -1492,8 +1509,8 @@
       break;
     }
 
-  all_day = gcal_event_get_all_day (event);
-  calendar = gcal_event_get_calendar (event);
+  all_day = gcal_event_get_all_day (cloned_event);
+  calendar = gcal_event_get_calendar (cloned_event);
 
   /* Clear event data */
   gcal_edit_dialog_clear_data (self);
@@ -1506,7 +1523,7 @@
 
   /* Load new event data */
   /* summary */
-  summary = gcal_event_get_summary (event);
+  summary = gcal_event_get_summary (cloned_event);
 
   if (g_strcmp0 (summary, "") == 0)
     gtk_entry_set_text (GTK_ENTRY (self->summary_entry), _("Unnamed event"));
@@ -1514,7 +1531,7 @@
     gtk_entry_set_text (GTK_ENTRY (self->summary_entry), summary);
 
   /* dialog titlebar's title & subtitle */
-  surface = get_circle_surface_from_color (gcal_event_get_color (event), 10);
+  surface = get_circle_surface_from_color (gcal_event_get_color 
(cloned_event), 10);
   gtk_image_set_from_surface (GTK_IMAGE (self->source_image), surface);
   g_clear_pointer (&surface, cairo_surface_destroy);
 
@@ -1522,10 +1539,10 @@
   self->selected_calendar = calendar;
 
   /* retrieve start and end dates */
-  date_start = gcal_event_get_date_start (event);
+  date_start = gcal_event_get_date_start (cloned_event);
   date_start = all_day ? g_date_time_ref (date_start) : g_date_time_to_local 
(date_start);
 
-  date_end = gcal_event_get_date_end (event);
+  date_end = gcal_event_get_date_end (cloned_event);
   /*
    * This is subtracting what has been added in action_button_clicked ().
    * See bug 769300.
@@ -1561,11 +1578,11 @@
   self->recurrence_changed = FALSE;
 
   /* location */
-  gtk_entry_set_text (GTK_ENTRY (self->location_entry), 
gcal_event_get_location (event));
+  gtk_entry_set_text (GTK_ENTRY (self->location_entry), 
gcal_event_get_location (cloned_event));
 
   /* notes */
   gtk_text_buffer_set_text (gtk_text_view_get_buffer (GTK_TEXT_VIEW 
(self->notes_text)),
-                            gcal_event_get_description (event),
+                            gcal_event_get_description (cloned_event),
                             -1);
 
   set_writable (self, !gcal_calendar_is_read_only (calendar));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-calendar-3.36.1/src/utils/gcal-date-time-utils.c 
new/gnome-calendar-3.36.2/src/utils/gcal-date-time-utils.c
--- old/gnome-calendar-3.36.1/src/utils/gcal-date-time-utils.c  2020-04-16 
22:07:39.000000000 +0200
+++ new/gnome-calendar-3.36.2/src/utils/gcal-date-time-utils.c  2020-06-18 
02:35:17.575825700 +0200
@@ -84,7 +84,7 @@
 
   first_weekday = get_first_weekday ();
   weekday = g_date_time_get_day_of_week (date) % 7;
-  n_days_after_week_start = (weekday - first_weekday) % 7;
+  n_days_after_week_start = (7 + weekday - first_weekday) % 7;
 
   start_of_week = g_date_time_add_days (date, -n_days_after_week_start);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-calendar-3.36.1/src/views/gcal-month-cell.c 
new/gnome-calendar-3.36.2/src/views/gcal-month-cell.c
--- old/gnome-calendar-3.36.1/src/views/gcal-month-cell.c       2020-04-16 
22:07:39.000000000 +0200
+++ new/gnome-calendar-3.36.2/src/views/gcal-month-cell.c       2020-06-18 
02:35:17.575825700 +0200
@@ -22,6 +22,7 @@
 #include "config.h"
 #include "gcal-application.h"
 #include "gcal-clock.h"
+#include "gcal-debug.h"
 #include "gcal-event-widget.h"
 #include "gcal-utils.h"
 #include "gcal-month-cell.h"
@@ -203,6 +204,7 @@
                            gint            y,
                            guint           time)
 {
+  g_autoptr (GcalEvent) changed_event = NULL;
   GcalRecurrenceModType mod;
   GcalMonthCell *self;
   GcalCalendar *calendar;
@@ -218,24 +220,27 @@
   event_widget = gtk_drag_get_source_widget (context);
   mod = GCAL_RECURRENCE_MOD_THIS_ONLY;
 
+  GCAL_ENTRY;
+
   if (!GCAL_IS_EVENT_WIDGET (event_widget))
-    return FALSE;
+    GCAL_RETURN (FALSE);
 
   if (self->different_month)
-    return FALSE;
+    GCAL_RETURN (FALSE);
 
   event = gcal_event_widget_get_event (GCAL_EVENT_WIDGET (event_widget));
-  calendar = gcal_event_get_calendar (event);
+  changed_event = gcal_event_new_from_event (event);
+  calendar = gcal_event_get_calendar (changed_event);
 
-  if (gcal_event_has_recurrence (event) &&
+  if (gcal_event_has_recurrence (changed_event) &&
       !ask_recurrence_modification_type (widget, &mod, calendar))
     {
-      goto out;
+      GCAL_GOTO (out);
     }
 
   /* Move the event's date */
-  start_dt = gcal_event_get_date_start (event);
-  end_dt = gcal_event_get_date_end (event);
+  start_dt = gcal_event_get_date_start (changed_event);
+  end_dt = gcal_event_get_date_end (changed_event);
 
   start_month = g_date_time_get_month (start_dt);
   start_year = g_date_time_get_year (start_dt);
@@ -260,18 +265,18 @@
 
        new_start = g_date_time_add_days (start_dt, diff);
 
-      gcal_event_set_date_start (event, new_start);
+      gcal_event_set_date_start (changed_event, new_start);
 
       /* The event may have a NULL end date, so we have to check it here */
       if (end_dt)
         {
           GDateTime *new_end = g_date_time_add (new_start, timespan);
 
-          gcal_event_set_date_end (event, new_end);
+          gcal_event_set_date_end (changed_event, new_end);
           g_clear_pointer (&new_end, g_date_time_unref);
         }
 
-      gcal_manager_update_event (gcal_context_get_manager (self->context), 
event, mod);
+      gcal_manager_update_event (gcal_context_get_manager (self->context), 
changed_event, mod);
     }
 
   g_clear_pointer (&start_dt, g_date_time_unref);
@@ -281,7 +286,7 @@
   gtk_drag_unhighlight (widget);
   gtk_drag_finish (context, TRUE, FALSE, time);
 
-  return TRUE;
+  GCAL_RETURN (TRUE);
 }
 
 static void
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-calendar-3.36.1/src/views/gcal-week-grid.c 
new/gnome-calendar-3.36.2/src/views/gcal-week-grid.c
--- old/gnome-calendar-3.36.1/src/views/gcal-week-grid.c        2020-04-16 
22:07:39.000000000 +0200
+++ new/gnome-calendar-3.36.2/src/views/gcal-week-grid.c        2020-06-18 
02:35:17.579159000 +0200
@@ -575,12 +575,12 @@
 
       for (j = 0; widgets_data && j < widgets_data->len; j++)
         {
+          g_autoptr (GDateTime) event_start = NULL;
+          g_autoptr (GDateTime) event_end = NULL;
           GtkStyleContext *context;
           GtkAllocation child_allocation;
           GtkWidget *event_widget;
           GcalRange *event_range;
-          GDateTime *event_start;
-          GDateTime *event_end;
           ChildData *data;
           GtkBorder margin;
           guint64 events_at_range;
@@ -594,8 +594,8 @@
           data =  g_ptr_array_index (widgets_data, j);
           event_widget = data->widget;
           event_range = gcal_event_get_range (data->event);
-          event_start = gcal_event_get_date_start (data->event);
-          event_end = gcal_event_get_date_end (data->event);
+          event_start = g_date_time_to_local (gcal_event_get_date_start 
(data->event));
+          event_end = g_date_time_to_local (gcal_event_get_date_end 
(data->event));
           context = gtk_widget_get_style_context (event_widget);
 
           /* The total number of events available in this range */
@@ -900,11 +900,12 @@
                           gint            y,
                           guint           time)
 {
+  g_autoptr (GDateTime) week_start = NULL;
+  g_autoptr (GDateTime) dnd_date = NULL;
+  g_autoptr (GDateTime) new_end = NULL;
+  g_autoptr (GcalEvent) changed_event = NULL;
   GcalRecurrenceModType mod;
   GcalWeekGrid *self;
-  g_autoptr (GDateTime) week_start;
-  g_autoptr (GDateTime) dnd_date;
-  g_autoptr (GDateTime) new_end;
   GcalCalendar *calendar;
   GtkWidget *event_widget;
   GcalEvent *event;
@@ -918,9 +919,6 @@
   event_widget = gtk_drag_get_source_widget (context);
 
   mod = GCAL_RECURRENCE_MOD_THIS_ONLY;
-  week_start = NULL;
-  dnd_date = NULL;
-  new_end = NULL;
 
   if (!GCAL_IS_EVENT_WIDGET (event_widget))
     return FALSE;
@@ -937,9 +935,10 @@
     }
 
   event = gcal_event_widget_get_event (GCAL_EVENT_WIDGET (event_widget));
-  calendar = gcal_event_get_calendar (event);
+  changed_event = gcal_event_new_from_event (event);
+  calendar = gcal_event_get_calendar (changed_event);
 
-  if (gcal_event_has_recurrence (event) &&
+  if (gcal_event_has_recurrence (changed_event) &&
       !ask_recurrence_modification_type (widget, &mod, calendar))
     {
       goto out;
@@ -952,23 +951,23 @@
    * Calculate the diff between the dropped cell and the event's start date,
    * so we can update the end date accordingly.
    */
-  timespan = g_date_time_difference (gcal_event_get_date_end (event), 
gcal_event_get_date_start (event));
+  timespan = g_date_time_difference (gcal_event_get_date_end (changed_event), 
gcal_event_get_date_start (changed_event));
 
   /*
    * Set the event's start and end dates. Since the event may have a
    * NULL end date, so we have to check it here
    */
-  gcal_event_set_all_day (event, FALSE);
-  gcal_event_set_date_start (event, dnd_date);
+  gcal_event_set_all_day (changed_event, FALSE);
+  gcal_event_set_date_start (changed_event, dnd_date);
 
 
   /* Setup the new end date */
   new_end = g_date_time_add (dnd_date, timespan);
-  gcal_event_set_date_end (event, new_end);
+  gcal_event_set_date_end (changed_event, new_end);
 
   /* Commit the changes */
 
-  gcal_manager_update_event (gcal_context_get_manager (self->context), event, 
mod);
+  gcal_manager_update_event (gcal_context_get_manager (self->context), 
changed_event, mod);
 
 out:
   /* Cancel the DnD */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-calendar-3.36.1/src/views/gcal-week-header.c 
new/gnome-calendar-3.36.2/src/views/gcal-week-header.c
--- old/gnome-calendar-3.36.1/src/views/gcal-week-header.c      2020-04-16 
22:07:39.000000000 +0200
+++ new/gnome-calendar-3.36.2/src/views/gcal-week-header.c      2020-06-18 
02:35:17.579159000 +0200
@@ -1525,11 +1525,12 @@
                             gint            y,
                             guint           time)
 {
+  g_autoptr (GDateTime) week_start = NULL;
+  g_autoptr (GDateTime) dnd_date = NULL;
+  g_autoptr (GDateTime) new_end = NULL;
+  g_autoptr (GDateTime) tmp_dt = NULL;
+  g_autoptr (GcalEvent) changed_event = NULL;
   GcalWeekHeader *self;
-  g_autoptr (GDateTime) week_start;
-  g_autoptr (GDateTime) dnd_date;
-  g_autoptr (GDateTime) new_end;
-  g_autoptr (GDateTime) tmp_dt;
   GDateTime *start_date;
   GDateTime *end_date;
   GTimeSpan difference;
@@ -1546,11 +1547,6 @@
   drop_cell = get_dnd_cell (widget, x, y);
   event_widget = gtk_drag_get_source_widget (context);
 
-  week_start = NULL;
-  dnd_date = NULL;
-  new_end = NULL;
-  tmp_dt = NULL;
-
   if (!GCAL_IS_EVENT_WIDGET (event_widget))
     return FALSE;
 
@@ -1559,11 +1555,12 @@
     drop_cell = 6 - drop_cell;
 
   event = gcal_event_widget_get_event (GCAL_EVENT_WIDGET (event_widget));
-  start_date = gcal_event_get_date_start (event);
-  end_date = gcal_event_get_date_end (event);
+  changed_event = gcal_event_new_from_event (event);
+  start_date = gcal_event_get_date_start (changed_event);
+  end_date = gcal_event_get_date_end (changed_event);
   week_start = gcal_date_time_get_start_of_week (self->active_date);
 
-  turn_all_day = !gcal_event_is_multiday (event) || gcal_event_get_all_day 
(event);
+  turn_all_day = !gcal_event_is_multiday (changed_event) || 
gcal_event_get_all_day (changed_event);
 
   if (!turn_all_day)
     {
@@ -1592,20 +1589,20 @@
   difference = turn_all_day ? 24 : g_date_time_difference (end_date, 
start_date) / G_TIME_SPAN_HOUR;
 
   new_end = g_date_time_add_hours (dnd_date, difference);
-  gcal_event_set_date_end (event, new_end);
+  gcal_event_set_date_end (changed_event, new_end);
 
   /*
    * Set the start date ~after~ the end date, so we can compare
    * the event's start and end dates above
    */
-  gcal_event_set_date_start (event, dnd_date);
+  gcal_event_set_date_start (changed_event, dnd_date);
 
   if (turn_all_day)
-    gcal_event_set_all_day (event, TRUE);
+    gcal_event_set_all_day (changed_event, TRUE);
 
   /* Commit the changes */
   gcal_manager_update_event (gcal_context_get_manager (self->context),
-                             event,
+                             changed_event,
                              GCAL_RECURRENCE_MOD_THIS_ONLY);
 
   /* Cancel the DnD */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-calendar-3.36.1/src/views/gcal-year-view.c 
new/gnome-calendar-3.36.2/src/views/gcal-year-view.c
--- old/gnome-calendar-3.36.1/src/views/gcal-year-view.c        2020-04-16 
22:07:39.000000000 +0200
+++ new/gnome-calendar-3.36.2/src/views/gcal-year-view.c        2020-06-18 
02:35:17.579159000 +0200
@@ -1485,6 +1485,7 @@
 
       if (!is_title)
         {
+          g_autoptr (GcalEvent) changed_event = NULL;
           GcalRecurrenceModType mod;
           GcalEventWidget *event_widget;
           GcalCalendar *calendar;
@@ -1494,17 +1495,18 @@
 
           event_widget = GCAL_EVENT_WIDGET (gtk_drag_get_source_widget 
(context));
           event = gcal_event_widget_get_event (event_widget);
-          calendar = gcal_event_get_calendar (event);
+          changed_event = gcal_event_new_from_event (event);
+          calendar = gcal_event_get_calendar (changed_event);
           mod = GCAL_RECURRENCE_MOD_THIS_ONLY;
 
-          if (gcal_event_has_recurrence (event) &&
+          if (gcal_event_has_recurrence (changed_event) &&
               !ask_recurrence_modification_type (GTK_WIDGET (self), &mod, 
calendar))
             {
               goto out;
             }
 
-          start_dt = gcal_event_get_date_start (event);
-          end_dt = gcal_event_get_date_end (event);
+          start_dt = gcal_event_get_date_start (changed_event);
+          end_dt = gcal_event_get_date_end (changed_event);
 
           drop_date = g_date_time_add_full (start_dt,
                                             g_date_time_get_year (self->date) 
- g_date_time_get_year (start_dt),
@@ -1518,7 +1520,7 @@
               GDateTime *new_start;
 
               new_start = g_date_time_add (start_dt, diff);
-              gcal_event_set_date_start (event, new_start);
+              gcal_event_set_date_start (changed_event, new_start);
 
               /* The event may have a NULL end date, so we have to check it 
here */
               if (end_dt)
@@ -1526,12 +1528,14 @@
                   GDateTime *new_end;
 
                   new_end = g_date_time_add (end_dt, diff);
-                  gcal_event_set_date_end (event, new_end);
+                  gcal_event_set_date_end (changed_event, new_end);
 
                   g_clear_pointer (&new_end, g_date_time_unref);
                 }
 
-              gcal_manager_update_event (gcal_context_get_manager 
(self->context), event, mod);
+              gcal_manager_update_event (gcal_context_get_manager 
(self->context),
+                                         changed_event,
+                                         mod);
 
               g_clear_pointer (&new_start, g_date_time_unref);
             }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-calendar-3.36.1/tests/test-event.c 
new/gnome-calendar-3.36.2/tests/test-event.c
--- old/gnome-calendar-3.36.1/tests/test-event.c        2020-04-16 
22:07:39.000000000 +0200
+++ new/gnome-calendar-3.36.2/tests/test-event.c        2020-06-18 
02:35:17.579159000 +0200
@@ -82,6 +82,31 @@
 
/*********************************************************************************************************************/
 
 static void
+event_clone (void)
+{
+  g_autoptr (GcalEvent) clone1 = NULL;
+  g_autoptr (GcalEvent) clone2 = NULL;
+  g_autoptr (GcalEvent) event = NULL;
+  g_autoptr (GError) error = NULL;
+
+  event = create_event_for_string (STUB_EVENT, &error);
+
+  g_assert_no_error (error);
+  g_assert_nonnull (event);
+
+  clone1 = gcal_event_new_from_event (event);
+  g_assert_nonnull (clone1);
+
+  gcal_event_set_summary (event, "Another summary");
+
+  clone2 = gcal_event_new_from_event (event);
+  g_assert_nonnull (clone2);
+}
+
+
+/*********************************************************************************************************************/
+
+static void
 event_uid (void)
 {
   g_autoptr (GcalEvent) event = NULL;
@@ -227,6 +252,7 @@
   g_test_init (&argc, &argv, NULL);
 
   g_test_add_func ("/event/new", event_new);
+  g_test_add_func ("/event/clone", event_clone);
   g_test_add_func ("/event/uid", event_uid);
   g_test_add_func ("/event/summary", event_summary);
   g_test_add_func ("/event/date/start", event_date_start);
@@ -236,4 +262,3 @@
 
   return g_test_run ();
 }
-


Reply via email to