quick-add-popover: fix event creation again

This commit is contained in:
Georges Basile Stavracas Neto
2016-02-18 04:02:46 -02:00
parent 21aa8ecde4
commit fd6d6e97c9
4 changed files with 44 additions and 25 deletions
+6 -4
View File
@@ -607,6 +607,7 @@ gcal_edit_dialog_set_event (GcalEditDialog *dialog,
if (!event) if (!event)
goto out; goto out;
all_day = gcal_event_get_all_day (event);
source = gcal_event_get_source (event); source = gcal_event_get_source (event);
/* Clear event data */ /* Clear event data */
@@ -636,8 +637,11 @@ gcal_edit_dialog_set_event (GcalEditDialog *dialog,
e_source_get_display_name (source)); e_source_get_display_name (source));
/* retrieve start and end dates */ /* retrieve start and end dates */
date_start = g_date_time_to_local (gcal_event_get_date_start (event)); date_start = gcal_event_get_date_start (event);
date_end = g_date_time_to_local (gcal_event_get_date_end (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 */ /* date */
gcal_date_selector_set_date (GCAL_DATE_SELECTOR (dialog->start_date_selector), date_start); 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); gcal_time_selector_set_time (GCAL_TIME_SELECTOR (dialog->end_time_selector), date_end);
/* all_day */ /* 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->start_time_selector, dialog->writable && !all_day);
gtk_widget_set_sensitive (dialog->end_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); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->all_day_check), all_day);
+14 -11
View File
@@ -1000,28 +1000,31 @@ gcal_event_set_timezone (GcalEvent *self,
if (self->timezone != timezone) if (self->timezone != timezone)
{ {
GDateTime *new_dtstart;
g_clear_pointer (&self->timezone, g_time_zone_unref); g_clear_pointer (&self->timezone, g_time_zone_unref);
self->timezone = g_time_zone_ref (timezone); self->timezone = g_time_zone_ref (timezone);
/* Swap the timezone from the component start & end dates*/ /* Swap the timezone from the component start & end dates*/
new_dtstart = g_date_time_to_timezone (self->dt_start, timezone); if (!self->all_day)
gcal_event_set_date_start (self, new_dtstart);
if (self->dt_end)
{ {
GDateTime *new_dtend; GDateTime *new_dtstart;
new_dtend = g_date_time_to_timezone (self->dt_end, timezone); new_dtstart = g_date_time_to_timezone (self->dt_start, timezone);
gcal_event_set_date_end (self, new_dtend); 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_clear_pointer (&new_dtstart, g_date_time_unref);
} }
g_object_notify (G_OBJECT (self), "timezone"); g_object_notify (G_OBJECT (self), "timezone");
g_clear_pointer (&new_dtstart, g_date_time_unref);
} }
} }
+22 -10
View File
@@ -264,8 +264,8 @@ show_popover_for_position (GcalMonthView *view,
{ {
GDateTime *start_dt, *end_dt; GDateTime *start_dt, *end_dt;
start_dt = g_date_time_new_local (priv->date->year, priv->date->month, start_day, 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_local (priv->date->year, priv->date->month, end_day + 1, 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 */ /* Swap dates if start > end */
if (start_day > end_day) if (start_day > end_day)
@@ -750,7 +750,7 @@ add_new_event_button_cb (GtkWidget *button,
gtk_widget_hide (priv->overflow_popover); gtk_widget_hide (priv->overflow_popover);
day = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (priv->overflow_popover), "selected-day")); 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); 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)) for (l = ppriv->multi_cell_children; l != NULL; l = g_list_next (l))
{ {
gint first_cell, last_cell, first_row, last_row, start, end; gint first_cell, last_cell, first_row, last_row, start, end;
gboolean visible; gboolean visible, all_day;
GDateTime *date; GDateTime *date;
GcalEvent *event; GcalEvent *event;
@@ -1090,6 +1090,7 @@ gcal_month_view_size_allocate (GtkWidget *widget,
child_widget = (GtkWidget*) l->data; child_widget = (GtkWidget*) l->data;
event = gcal_event_widget_get_event (l->data); event = gcal_event_widget_get_event (l->data);
uuid = gcal_event_get_uid (event); 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)) if (!gtk_widget_is_visible (child_widget) && !g_hash_table_contains (ppriv->hidden_as_overflow, uuid))
continue; continue;
@@ -1103,7 +1104,8 @@ gcal_month_view_size_allocate (GtkWidget *widget,
* month. Otherwise, the first cell is the 1st day of the month. * month. Otherwise, the first cell is the 1st day of the month.
*/ */
j = 1; 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) if (g_date_time_get_month (date) == priv->date->month)
j = g_date_time_get_day_of_month (date); 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. * if the event is all day or not.
*/ */
j = icaltime_days_in_month (priv->date->month, priv->date->year); 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) if (g_date_time_get_month (date) == priv->date->month)
{ {
j = g_date_time_get_day_of_month (date); 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 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--;
} }
j += priv->days_delay; j += priv->days_delay;
@@ -1855,11 +1858,20 @@ gcal_month_view_get_child_cell (GcalSubscriberView *subscriber,
gint cell; gint cell;
event = gcal_event_widget_get_event (child); 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; return cell;
} }
+2
View File
@@ -406,7 +406,9 @@ edit_or_create_event (GcalQuickAddPopover *self,
/* Create an ECalComponent from the data above */ /* Create an ECalComponent from the data above */
component = build_component_from_details (summary, date_start, date_end); component = build_component_from_details (summary, date_start, date_end);
event = gcal_event_new (source, component); 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 we clicked edit button, send a signal; otherwise, create the event */
if (button == self->add_button) if (button == self->add_button)