diff --git a/src/gcal-edit-dialog.c b/src/gcal-edit-dialog.c index ee5bc86d..62a253a6 100644 --- a/src/gcal-edit-dialog.c +++ b/src/gcal-edit-dialog.c @@ -607,6 +607,7 @@ gcal_edit_dialog_set_event (GcalEditDialog *dialog, if (!event) goto out; + all_day = gcal_event_get_all_day (event); source = gcal_event_get_source (event); /* Clear event data */ @@ -636,8 +637,11 @@ gcal_edit_dialog_set_event (GcalEditDialog *dialog, e_source_get_display_name (source)); /* retrieve start and end dates */ - date_start = g_date_time_to_local (gcal_event_get_date_start (event)); - date_end = g_date_time_to_local (gcal_event_get_date_end (event)); + date_start = gcal_event_get_date_start (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 = all_day ? g_date_time_ref (date_end) : g_date_time_to_local (date_end); /* date */ gcal_date_selector_set_date (GCAL_DATE_SELECTOR (dialog->start_date_selector), date_start); @@ -648,8 +652,6 @@ gcal_edit_dialog_set_event (GcalEditDialog *dialog, gcal_time_selector_set_time (GCAL_TIME_SELECTOR (dialog->end_time_selector), date_end); /* all_day */ - all_day = gcal_event_get_all_day (event); - gtk_widget_set_sensitive (dialog->start_time_selector, dialog->writable && !all_day); gtk_widget_set_sensitive (dialog->end_time_selector, dialog->writable && !all_day); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->all_day_check), all_day); diff --git a/src/gcal-event.c b/src/gcal-event.c index cb562d60..2ccd946e 100644 --- a/src/gcal-event.c +++ b/src/gcal-event.c @@ -1000,28 +1000,31 @@ gcal_event_set_timezone (GcalEvent *self, if (self->timezone != timezone) { - GDateTime *new_dtstart; - g_clear_pointer (&self->timezone, g_time_zone_unref); self->timezone = g_time_zone_ref (timezone); /* Swap the timezone from the component start & end dates*/ - new_dtstart = g_date_time_to_timezone (self->dt_start, timezone); - gcal_event_set_date_start (self, new_dtstart); - - if (self->dt_end) + if (!self->all_day) { - GDateTime *new_dtend; + GDateTime *new_dtstart; - new_dtend = g_date_time_to_timezone (self->dt_end, timezone); - gcal_event_set_date_end (self, new_dtend); + new_dtstart = g_date_time_to_timezone (self->dt_start, timezone); + gcal_event_set_date_start (self, new_dtstart); + + if (self->dt_end) + { + GDateTime *new_dtend; + + new_dtend = g_date_time_to_timezone (self->dt_end, timezone); + gcal_event_set_date_end (self, new_dtend); + + g_clear_pointer (&new_dtstart, g_date_time_unref); + } g_clear_pointer (&new_dtstart, g_date_time_unref); } g_object_notify (G_OBJECT (self), "timezone"); - - g_clear_pointer (&new_dtstart, g_date_time_unref); } } diff --git a/src/gcal-month-view.c b/src/gcal-month-view.c index ca87a508..ba2b66ee 100644 --- a/src/gcal-month-view.c +++ b/src/gcal-month-view.c @@ -264,8 +264,8 @@ show_popover_for_position (GcalMonthView *view, { GDateTime *start_dt, *end_dt; - start_dt = g_date_time_new_local (priv->date->year, priv->date->month, start_day, 0, 0, 0); - end_dt = g_date_time_new_local (priv->date->year, priv->date->month, end_day + 1, 0, 0, 0); + start_dt = g_date_time_new_utc (priv->date->year, priv->date->month, start_day, 0, 0, 0); + end_dt = g_date_time_new_utc (priv->date->year, priv->date->month, end_day + 1, 0, 0, 0); /* Swap dates if start > end */ if (start_day > end_day) @@ -750,7 +750,7 @@ add_new_event_button_cb (GtkWidget *button, gtk_widget_hide (priv->overflow_popover); day = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (priv->overflow_popover), "selected-day")); - start_date = g_date_time_new_local (priv->date->year, priv->date->month, day, 0, 0, 0); + start_date = g_date_time_new_utc (priv->date->year, priv->date->month, day, 0, 0, 0); g_signal_emit_by_name (GCAL_VIEW (user_data), "create-event-detailed", start_date, NULL); @@ -1081,7 +1081,7 @@ gcal_month_view_size_allocate (GtkWidget *widget, for (l = ppriv->multi_cell_children; l != NULL; l = g_list_next (l)) { gint first_cell, last_cell, first_row, last_row, start, end; - gboolean visible; + gboolean visible, all_day; GDateTime *date; GcalEvent *event; @@ -1090,6 +1090,7 @@ gcal_month_view_size_allocate (GtkWidget *widget, child_widget = (GtkWidget*) l->data; event = gcal_event_widget_get_event (l->data); uuid = gcal_event_get_uid (event); + all_day = gcal_event_get_all_day (event); if (!gtk_widget_is_visible (child_widget) && !g_hash_table_contains (ppriv->hidden_as_overflow, uuid)) continue; @@ -1103,7 +1104,8 @@ gcal_month_view_size_allocate (GtkWidget *widget, * month. Otherwise, the first cell is the 1st day of the month. */ j = 1; - date = g_date_time_to_local (gcal_event_get_date_start (event)); + date = gcal_event_get_date_start (event); + date = all_day ? g_date_time_ref (date) : g_date_time_to_local (date); if (g_date_time_get_month (date) == priv->date->month) j = g_date_time_get_day_of_month (date); @@ -1123,14 +1125,15 @@ gcal_month_view_size_allocate (GtkWidget *widget, * if the event is all day or not. */ j = icaltime_days_in_month (priv->date->month, priv->date->year); - date = g_date_time_to_local (gcal_event_get_date_end (event)); + date = gcal_event_get_date_end (event); + date = all_day ? g_date_time_ref (date) : g_date_time_to_local (date); if (g_date_time_get_month (date) == priv->date->month) { j = g_date_time_get_day_of_month (date); /* If the event is all day, we have to subtract 1 to find the the real date */ - if (gcal_event_get_all_day (event)) + if (all_day) j--; } j += priv->days_delay; @@ -1855,11 +1858,20 @@ gcal_month_view_get_child_cell (GcalSubscriberView *subscriber, gint cell; event = gcal_event_widget_get_event (child); - dt = g_date_time_to_local (gcal_event_get_date_start (event)); + dt = gcal_event_get_date_start (event); - cell = g_date_time_get_day_of_month (dt); + /* Don't adjust the date when the event is all day */ + if (gcal_event_get_all_day (event)) + { + cell = g_date_time_get_day_of_month (dt); + } + else + { + dt = g_date_time_to_local (dt); + cell = g_date_time_get_day_of_month (dt); - g_clear_pointer (&dt, g_date_time_unref); + g_clear_pointer (&dt, g_date_time_unref); + } return cell; } diff --git a/src/gcal-quick-add-popover.c b/src/gcal-quick-add-popover.c index 744afc1d..81948c7c 100644 --- a/src/gcal-quick-add-popover.c +++ b/src/gcal-quick-add-popover.c @@ -406,7 +406,9 @@ edit_or_create_event (GcalQuickAddPopover *self, /* Create an ECalComponent from the data above */ component = build_component_from_details (summary, date_start, date_end); + event = gcal_event_new (source, component); + gcal_event_set_all_day (event, TRUE); /* If we clicked edit button, send a signal; otherwise, create the event */ if (button == self->add_button)