week-header: use g_date_time_add_days for dnd date calculation
Dnd at week header crashes with segmentation fault The problem, calculation of dnd_date returns NULL when week_start is in previous month. Fix that by using g_date_time_add_days() function https://bugzilla.gnome.org/show_bug.cgi?id=781955
This commit is contained in:
committed by
Georges Basile Stavracas Neto
parent
f9454b6a8a
commit
a54e91a9b3
@@ -1353,6 +1353,7 @@ gcal_week_header_drag_drop (GtkWidget *widget,
|
|||||||
g_autoptr (GDateTime) week_start;
|
g_autoptr (GDateTime) week_start;
|
||||||
g_autoptr (GDateTime) dnd_date;
|
g_autoptr (GDateTime) dnd_date;
|
||||||
g_autoptr (GDateTime) new_end;
|
g_autoptr (GDateTime) new_end;
|
||||||
|
g_autoptr (GDateTime) tmp_dt;
|
||||||
GDateTime *start_date;
|
GDateTime *start_date;
|
||||||
GDateTime *end_date;
|
GDateTime *end_date;
|
||||||
GTimeSpan difference;
|
GTimeSpan difference;
|
||||||
@@ -1372,6 +1373,7 @@ gcal_week_header_drag_drop (GtkWidget *widget,
|
|||||||
week_start = NULL;
|
week_start = NULL;
|
||||||
dnd_date = NULL;
|
dnd_date = NULL;
|
||||||
new_end = NULL;
|
new_end = NULL;
|
||||||
|
tmp_dt = NULL;
|
||||||
|
|
||||||
if (!GCAL_IS_EVENT_WIDGET (event_widget))
|
if (!GCAL_IS_EVENT_WIDGET (event_widget))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@@ -1393,21 +1395,22 @@ gcal_week_header_drag_drop (GtkWidget *widget,
|
|||||||
* The only case where we don't touch the timezone is for
|
* The only case where we don't touch the timezone is for
|
||||||
* timed, multiday events.
|
* timed, multiday events.
|
||||||
*/
|
*/
|
||||||
dnd_date = g_date_time_new (gcal_event_get_timezone (event),
|
tmp_dt = g_date_time_new (gcal_event_get_timezone (event),
|
||||||
g_date_time_get_year (week_start),
|
g_date_time_get_year (week_start),
|
||||||
g_date_time_get_month (week_start),
|
g_date_time_get_month (week_start),
|
||||||
g_date_time_get_day_of_month (week_start) + drop_cell,
|
g_date_time_get_day_of_month (week_start),
|
||||||
g_date_time_get_hour (start_date),
|
g_date_time_get_hour (start_date),
|
||||||
g_date_time_get_minute (start_date),
|
g_date_time_get_minute (start_date),
|
||||||
0);
|
0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
dnd_date = g_date_time_new_utc (g_date_time_get_year (week_start),
|
tmp_dt = g_date_time_new_utc (g_date_time_get_year (week_start),
|
||||||
g_date_time_get_month (week_start),
|
g_date_time_get_month (week_start),
|
||||||
g_date_time_get_day_of_month (week_start) + drop_cell,
|
g_date_time_get_day_of_month (week_start),
|
||||||
0, 0, 0);
|
0, 0, 0);
|
||||||
}
|
}
|
||||||
|
dnd_date = g_date_time_add_days (tmp_dt, drop_cell);
|
||||||
|
|
||||||
/* End date */
|
/* End date */
|
||||||
difference = turn_all_day ? 24 : g_date_time_difference (end_date, start_date) / G_TIME_SPAN_HOUR;
|
difference = turn_all_day ? 24 : g_date_time_difference (end_date, start_date) / G_TIME_SPAN_HOUR;
|
||||||
|
|||||||
Reference in New Issue
Block a user