views: ask for recurrence when dropping recurrent events
While dragging and dropping a recurrent event, pop up the recurrence-dialog to allow the user to choose the set of events to which the changes should be applied. https://bugzilla.gnome.org/show_bug.cgi?id=782755
This commit is contained in:
committed by
Georges Basile Stavracas Neto
parent
a7add6d6be
commit
be9da0cbda
@@ -778,6 +778,8 @@ gcal_month_view_drag_drop (GtkWidget *widget,
|
|||||||
GtkWidget *event_widget;
|
GtkWidget *event_widget;
|
||||||
GDateTime *start_dt, *end_dt, *current_dt;
|
GDateTime *start_dt, *end_dt, *current_dt;
|
||||||
GcalEvent *event;
|
GcalEvent *event;
|
||||||
|
ECalObjModType mod;
|
||||||
|
ESource *source;
|
||||||
gint cell, diff;
|
gint cell, diff;
|
||||||
gint start_month, current_month;
|
gint start_month, current_month;
|
||||||
gint start_year, current_year;
|
gint start_year, current_year;
|
||||||
@@ -785,11 +787,19 @@ gcal_month_view_drag_drop (GtkWidget *widget,
|
|||||||
|
|
||||||
cell = get_dnd_cell (widget, x, y);
|
cell = get_dnd_cell (widget, x, y);
|
||||||
event_widget = gtk_drag_get_source_widget (context);
|
event_widget = gtk_drag_get_source_widget (context);
|
||||||
|
mod = E_CAL_OBJ_MOD_THIS;
|
||||||
|
|
||||||
if (!GCAL_IS_EVENT_WIDGET (event_widget))
|
if (!GCAL_IS_EVENT_WIDGET (event_widget))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
event = gcal_event_widget_get_event (GCAL_EVENT_WIDGET (event_widget));
|
event = gcal_event_widget_get_event (GCAL_EVENT_WIDGET (event_widget));
|
||||||
|
source = gcal_event_get_source (event);
|
||||||
|
|
||||||
|
if (gcal_event_has_recurrence (event) &&
|
||||||
|
!ask_recurrence_modification_type (widget, &mod, source))
|
||||||
|
{
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
/* Move the event's date */
|
/* Move the event's date */
|
||||||
start_dt = gcal_event_get_date_start (event);
|
start_dt = gcal_event_get_date_start (event);
|
||||||
@@ -831,7 +841,7 @@ gcal_month_view_drag_drop (GtkWidget *widget,
|
|||||||
g_clear_pointer (&new_end, g_date_time_unref);
|
g_clear_pointer (&new_end, g_date_time_unref);
|
||||||
}
|
}
|
||||||
|
|
||||||
gcal_manager_update_event (self->manager, event, E_CAL_OBJ_MOD_THIS);
|
gcal_manager_update_event (self->manager, event, mod);
|
||||||
|
|
||||||
g_clear_pointer (&new_start, g_date_time_unref);
|
g_clear_pointer (&new_start, g_date_time_unref);
|
||||||
|
|
||||||
@@ -840,6 +850,7 @@ gcal_month_view_drag_drop (GtkWidget *widget,
|
|||||||
|
|
||||||
g_clear_pointer (&start_dt, g_date_time_unref);
|
g_clear_pointer (&start_dt, g_date_time_unref);
|
||||||
|
|
||||||
|
out:
|
||||||
/* Cancel the DnD */
|
/* Cancel the DnD */
|
||||||
self->dnd_cell = -1;
|
self->dnd_cell = -1;
|
||||||
gtk_drag_unhighlight (widget);
|
gtk_drag_unhighlight (widget);
|
||||||
|
|||||||
@@ -956,7 +956,9 @@ gcal_week_grid_drag_drop (GtkWidget *widget,
|
|||||||
g_autoptr (GDateTime) dnd_date;
|
g_autoptr (GDateTime) dnd_date;
|
||||||
g_autoptr (GDateTime) new_end;
|
g_autoptr (GDateTime) new_end;
|
||||||
GtkWidget *event_widget;
|
GtkWidget *event_widget;
|
||||||
|
ECalObjModType mod;
|
||||||
GcalEvent *event;
|
GcalEvent *event;
|
||||||
|
ESource *source;
|
||||||
GTimeSpan timespan = 0;
|
GTimeSpan timespan = 0;
|
||||||
gboolean ltr;
|
gboolean ltr;
|
||||||
gint drop_cell;
|
gint drop_cell;
|
||||||
@@ -966,6 +968,7 @@ gcal_week_grid_drag_drop (GtkWidget *widget,
|
|||||||
drop_cell = get_dnd_cell (widget, x, y);
|
drop_cell = get_dnd_cell (widget, x, y);
|
||||||
event_widget = gtk_drag_get_source_widget (context);
|
event_widget = gtk_drag_get_source_widget (context);
|
||||||
|
|
||||||
|
mod = E_CAL_OBJ_MOD_THIS;
|
||||||
week_start = NULL;
|
week_start = NULL;
|
||||||
dnd_date = NULL;
|
dnd_date = NULL;
|
||||||
new_end = NULL;
|
new_end = NULL;
|
||||||
@@ -985,6 +988,14 @@ gcal_week_grid_drag_drop (GtkWidget *widget,
|
|||||||
}
|
}
|
||||||
|
|
||||||
event = gcal_event_widget_get_event (GCAL_EVENT_WIDGET (event_widget));
|
event = gcal_event_widget_get_event (GCAL_EVENT_WIDGET (event_widget));
|
||||||
|
source = gcal_event_get_source (event);
|
||||||
|
|
||||||
|
if (gcal_event_has_recurrence (event) &&
|
||||||
|
!ask_recurrence_modification_type (widget, &mod, source))
|
||||||
|
{
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
week_start = get_start_of_week (self->active_date);
|
week_start = get_start_of_week (self->active_date);
|
||||||
dnd_date = g_date_time_add_minutes (week_start, drop_cell * 30);
|
dnd_date = g_date_time_add_minutes (week_start, drop_cell * 30);
|
||||||
|
|
||||||
@@ -1007,8 +1018,10 @@ gcal_week_grid_drag_drop (GtkWidget *widget,
|
|||||||
gcal_event_set_date_end (event, new_end);
|
gcal_event_set_date_end (event, new_end);
|
||||||
|
|
||||||
/* Commit the changes */
|
/* Commit the changes */
|
||||||
gcal_manager_update_event (self->manager, event, E_CAL_OBJ_MOD_THIS);
|
|
||||||
|
|
||||||
|
gcal_manager_update_event (self->manager, event, mod);
|
||||||
|
|
||||||
|
out:
|
||||||
/* Cancel the DnD */
|
/* Cancel the DnD */
|
||||||
self->dnd_cell = -1;
|
self->dnd_cell = -1;
|
||||||
gtk_drag_unhighlight (widget);
|
gtk_drag_unhighlight (widget);
|
||||||
|
|||||||
@@ -1488,12 +1488,23 @@ navigator_drag_drop_cb (GcalYearView *self,
|
|||||||
if (!is_title)
|
if (!is_title)
|
||||||
{
|
{
|
||||||
GcalEventWidget *event_widget;
|
GcalEventWidget *event_widget;
|
||||||
|
ECalObjModType mod;
|
||||||
GcalEvent *event;
|
GcalEvent *event;
|
||||||
GDateTime *start_dt, *end_dt;
|
GDateTime *start_dt, *end_dt;
|
||||||
GDateTime *drop_date;
|
GDateTime *drop_date;
|
||||||
|
ESource *source;
|
||||||
|
|
||||||
event_widget = GCAL_EVENT_WIDGET (gtk_drag_get_source_widget (context));
|
event_widget = GCAL_EVENT_WIDGET (gtk_drag_get_source_widget (context));
|
||||||
event = gcal_event_widget_get_event (event_widget);
|
event = gcal_event_widget_get_event (event_widget);
|
||||||
|
source = gcal_event_get_source (event);
|
||||||
|
mod = E_CAL_OBJ_MOD_THIS;
|
||||||
|
|
||||||
|
if (gcal_event_has_recurrence (event) &&
|
||||||
|
!ask_recurrence_modification_type (GTK_WIDGET (self), &mod, source))
|
||||||
|
{
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
start_dt = gcal_event_get_date_start (event);
|
start_dt = gcal_event_get_date_start (event);
|
||||||
end_dt = gcal_event_get_date_end (event);
|
end_dt = gcal_event_get_date_end (event);
|
||||||
|
|
||||||
@@ -1522,7 +1533,7 @@ navigator_drag_drop_cb (GcalYearView *self,
|
|||||||
g_clear_pointer (&new_end, g_date_time_unref);
|
g_clear_pointer (&new_end, g_date_time_unref);
|
||||||
}
|
}
|
||||||
|
|
||||||
gcal_manager_update_event (self->manager, event, E_CAL_OBJ_MOD_THIS);
|
gcal_manager_update_event (self->manager, event, mod);
|
||||||
|
|
||||||
g_clear_pointer (&new_start, g_date_time_unref);
|
g_clear_pointer (&new_start, g_date_time_unref);
|
||||||
}
|
}
|
||||||
@@ -1531,6 +1542,7 @@ navigator_drag_drop_cb (GcalYearView *self,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
out:
|
||||||
/* Cancel the DnD after the event is dropped */
|
/* Cancel the DnD after the event is dropped */
|
||||||
self->selected_data->dnd_day = -1;
|
self->selected_data->dnd_day = -1;
|
||||||
self->selected_data->dnd_month = -1;
|
self->selected_data->dnd_month = -1;
|
||||||
|
|||||||
Reference in New Issue
Block a user