quick-add-popover: Move to GcalRange and fix title for all day event
This commit is contained in:
committed by
Georges Basile Stavracas Neto
parent
933cd131fe
commit
b4000be398
@@ -36,8 +36,7 @@ struct _GcalQuickAddPopover
|
|||||||
GtkWidget *title_label;
|
GtkWidget *title_label;
|
||||||
|
|
||||||
/* Internal data */
|
/* Internal data */
|
||||||
GDateTime *date_start;
|
GcalRange *range;
|
||||||
GDateTime *date_end;
|
|
||||||
|
|
||||||
GtkWidget *selected_row;
|
GtkWidget *selected_row;
|
||||||
|
|
||||||
@@ -48,8 +47,7 @@ G_DEFINE_TYPE (GcalQuickAddPopover, gcal_quick_add_popover, GTK_TYPE_POPOVER)
|
|||||||
|
|
||||||
enum {
|
enum {
|
||||||
PROP_0,
|
PROP_0,
|
||||||
PROP_DATE_START,
|
PROP_RANGE,
|
||||||
PROP_DATE_END,
|
|
||||||
PROP_CONTEXT,
|
PROP_CONTEXT,
|
||||||
N_PROPS
|
N_PROPS
|
||||||
};
|
};
|
||||||
@@ -418,25 +416,30 @@ update_header (GcalQuickAddPopover *self)
|
|||||||
{
|
{
|
||||||
gboolean multiday_or_timed;
|
gboolean multiday_or_timed;
|
||||||
gchar *title_date;
|
gchar *title_date;
|
||||||
|
GDateTime *date_start, *date_end;
|
||||||
|
|
||||||
if (!self->date_start)
|
|
||||||
|
if (!self->range)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
multiday_or_timed = self->date_end &&
|
date_start = gcal_range_get_start (self->range);
|
||||||
(g_date_time_difference (self->date_end, self->date_start) / G_TIME_SPAN_DAY > 1 ||
|
date_end = gcal_range_get_end (self->range);
|
||||||
g_date_time_difference (self->date_end, self->date_start) / G_TIME_SPAN_MINUTE > 1);
|
|
||||||
|
multiday_or_timed = date_end &&
|
||||||
|
(g_date_time_difference (date_end, date_start) / G_TIME_SPAN_DAY > 1 ||
|
||||||
|
g_date_time_difference (date_end, date_start) / G_TIME_SPAN_MINUTE > 1);
|
||||||
|
|
||||||
if (multiday_or_timed)
|
if (multiday_or_timed)
|
||||||
{
|
{
|
||||||
gboolean all_day;
|
gboolean all_day;
|
||||||
|
|
||||||
all_day = gcal_date_time_is_date (self->date_start) && (self->date_end ? gcal_date_time_is_date (self->date_end) : TRUE);
|
all_day = gcal_date_time_is_date (date_start) && (date_end ? gcal_date_time_is_date (date_end) : TRUE);
|
||||||
|
|
||||||
if (all_day &&
|
if (all_day &&
|
||||||
(g_date_time_difference (self->date_end, self->date_start) / G_TIME_SPAN_DAY > 1 &&
|
(g_date_time_difference (date_end, date_start) / G_TIME_SPAN_DAY > 1 &&
|
||||||
g_date_time_difference (self->date_end, self->date_start) / G_TIME_SPAN_MINUTE > 1))
|
g_date_time_difference (date_end, date_start) / G_TIME_SPAN_MINUTE > 1))
|
||||||
{
|
{
|
||||||
title_date = get_date_string_for_multiday (self->date_start, g_date_time_add_days (self->date_end, -1));
|
title_date = get_date_string_for_multiday (date_start, g_date_time_add_days (date_end, -1));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -453,21 +456,30 @@ update_header (GcalQuickAddPopover *self)
|
|||||||
else
|
else
|
||||||
hour_format = "%I:%M %P";
|
hour_format = "%I:%M %P";
|
||||||
|
|
||||||
start_hour = g_date_time_format (self->date_start, hour_format);
|
start_hour = g_date_time_format (date_start, hour_format);
|
||||||
end_hour = g_date_time_format (self->date_end, hour_format);
|
end_hour = g_date_time_format (date_end, hour_format);
|
||||||
|
|
||||||
|
event_date_name = get_date_string_for_day (date_start);
|
||||||
|
|
||||||
|
if (all_day)
|
||||||
|
{
|
||||||
|
title_date = g_strdup (event_date_name);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Translators: %1$s is the event name, %2$s is the start hour, and %3$s is the end hour */
|
||||||
|
title_date = g_strdup_printf (_("%1$s, %2$s – %3$s"),
|
||||||
|
event_date_name,
|
||||||
|
start_hour,
|
||||||
|
end_hour);
|
||||||
|
}
|
||||||
|
|
||||||
event_date_name = get_date_string_for_day (self->date_start);
|
|
||||||
/* Translators: %1$s is the event name, %2$s is the start hour, and %3$s is the end hour */
|
|
||||||
title_date = g_strdup_printf (_("%1$s, %2$s – %3$s"),
|
|
||||||
event_date_name,
|
|
||||||
start_hour,
|
|
||||||
end_hour);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_autofree gchar *event_date_name = NULL;
|
g_autofree gchar *event_date_name = NULL;
|
||||||
event_date_name = get_date_string_for_day (self->date_start);
|
event_date_name = get_date_string_for_day (date_start);
|
||||||
title_date = g_strdup_printf ("%s", event_date_name);
|
title_date = g_strdup_printf ("%s", event_date_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -628,6 +640,7 @@ edit_or_create_event (GcalQuickAddPopover *self,
|
|||||||
GcalCalendar *calendar;
|
GcalCalendar *calendar;
|
||||||
GcalManager *manager;
|
GcalManager *manager;
|
||||||
GDateTime *date_start, *date_end;
|
GDateTime *date_start, *date_end;
|
||||||
|
GDateTime *self_date_start, *self_date_end;
|
||||||
GTimeZone *tz;
|
GTimeZone *tz;
|
||||||
GcalEvent *event;
|
GcalEvent *event;
|
||||||
const gchar *summary;
|
const gchar *summary;
|
||||||
@@ -636,32 +649,35 @@ edit_or_create_event (GcalQuickAddPopover *self,
|
|||||||
if (!self->selected_row)
|
if (!self->selected_row)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
self_date_start = gcal_range_get_start (self->range);
|
||||||
|
self_date_end = gcal_range_get_end (self->range);
|
||||||
|
|
||||||
manager = gcal_context_get_manager (self->context);
|
manager = gcal_context_get_manager (self->context);
|
||||||
calendar = g_object_get_data (G_OBJECT (self->selected_row), "calendar");
|
calendar = g_object_get_data (G_OBJECT (self->selected_row), "calendar");
|
||||||
|
|
||||||
single_day = gcal_date_time_compare_date (self->date_end, self->date_start) == 0;
|
single_day = gcal_date_time_compare_date (self_date_end, self_date_start) == 0;
|
||||||
all_day = gcal_date_time_compare_date (self->date_end, self->date_start) > 1 ||
|
all_day = gcal_date_time_compare_date (self_date_end, self_date_start) > 1 ||
|
||||||
g_date_time_compare (self->date_end, self->date_start) == 0;
|
g_date_time_compare (self_date_end, self_date_start) == 0;
|
||||||
tz = all_day ? g_time_zone_new_utc () : g_time_zone_new_local ();
|
tz = all_day ? g_time_zone_new_utc () : g_time_zone_new_local ();
|
||||||
|
|
||||||
/* Gather start date */
|
/* Gather start date */
|
||||||
date_start = g_date_time_new (tz,
|
date_start = g_date_time_new (tz,
|
||||||
g_date_time_get_year (self->date_start),
|
g_date_time_get_year (self_date_start),
|
||||||
g_date_time_get_month (self->date_start),
|
g_date_time_get_month (self_date_start),
|
||||||
g_date_time_get_day_of_month (self->date_start),
|
g_date_time_get_day_of_month (self_date_start),
|
||||||
g_date_time_get_hour (self->date_start),
|
g_date_time_get_hour (self_date_start),
|
||||||
g_date_time_get_minute (self->date_start),
|
g_date_time_get_minute (self_date_start),
|
||||||
0);
|
0);
|
||||||
|
|
||||||
/* Gather date end */
|
/* Gather date end */
|
||||||
if (self->date_end)
|
if (self_date_end)
|
||||||
{
|
{
|
||||||
date_end = g_date_time_new (tz,
|
date_end = g_date_time_new (tz,
|
||||||
g_date_time_get_year (self->date_end),
|
g_date_time_get_year (self_date_end),
|
||||||
g_date_time_get_month (self->date_end),
|
g_date_time_get_month (self_date_end),
|
||||||
g_date_time_get_day_of_month (self->date_end) + (single_day && all_day ? 1 : 0),
|
g_date_time_get_day_of_month (self_date_end) + (single_day && all_day ? 1 : 0),
|
||||||
g_date_time_get_hour (self->date_end),
|
g_date_time_get_hour (self_date_end),
|
||||||
g_date_time_get_minute (self->date_end),
|
g_date_time_get_minute (self_date_end),
|
||||||
0);
|
0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -736,12 +752,8 @@ gcal_quick_add_popover_get_property (GObject *object,
|
|||||||
|
|
||||||
switch (prop_id)
|
switch (prop_id)
|
||||||
{
|
{
|
||||||
case PROP_DATE_END:
|
case PROP_RANGE:
|
||||||
g_value_set_boxed (value, self->date_end);
|
g_value_set_object (value, self->range);
|
||||||
break;
|
|
||||||
|
|
||||||
case PROP_DATE_START:
|
|
||||||
g_value_set_boxed (value, self->date_start);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PROP_CONTEXT:
|
case PROP_CONTEXT:
|
||||||
@@ -763,12 +775,8 @@ gcal_quick_add_popover_set_property (GObject *object,
|
|||||||
|
|
||||||
switch (prop_id)
|
switch (prop_id)
|
||||||
{
|
{
|
||||||
case PROP_DATE_END:
|
case PROP_RANGE:
|
||||||
gcal_quick_add_popover_set_date_end (self, g_value_get_boxed (value));
|
gcal_quick_add_popover_set_range (self, g_value_get_boxed (value));
|
||||||
break;
|
|
||||||
|
|
||||||
case PROP_DATE_START:
|
|
||||||
gcal_quick_add_popover_set_date_start (self, g_value_get_boxed (value));
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PROP_CONTEXT:
|
case PROP_CONTEXT:
|
||||||
@@ -819,8 +827,7 @@ gcal_quick_add_popover_closed (GtkPopover *popover)
|
|||||||
/* Select the default row again */
|
/* Select the default row again */
|
||||||
update_default_calendar_row (self);
|
update_default_calendar_row (self);
|
||||||
|
|
||||||
g_clear_pointer (&self->date_start, g_date_time_unref);
|
g_clear_pointer (&self->range, gcal_range_unref);
|
||||||
g_clear_pointer (&self->date_end, g_date_time_unref);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -852,28 +859,15 @@ gcal_quick_add_popover_class_init (GcalQuickAddPopoverClass *klass)
|
|||||||
GCAL_TYPE_EVENT);
|
GCAL_TYPE_EVENT);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GcalQuickAddPopover::date-end:
|
* GcalQuickAddPopover::range:
|
||||||
*
|
*
|
||||||
* The end date of the new event.
|
* The range of the new event.
|
||||||
*/
|
*/
|
||||||
g_object_class_install_property (object_class,
|
g_object_class_install_property (object_class,
|
||||||
PROP_DATE_END,
|
PROP_RANGE,
|
||||||
g_param_spec_boxed ("date-end",
|
g_param_spec_boxed ("range",
|
||||||
"End date of the event",
|
"Range of the new event",
|
||||||
"The end date of the new event",
|
"The range of the new event",
|
||||||
G_TYPE_DATE_TIME,
|
|
||||||
G_PARAM_READWRITE));
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GcalQuickAddPopover::date-start:
|
|
||||||
*
|
|
||||||
* The start date of the new event.
|
|
||||||
*/
|
|
||||||
g_object_class_install_property (object_class,
|
|
||||||
PROP_DATE_START,
|
|
||||||
g_param_spec_boxed ("date-start",
|
|
||||||
"Start date of the event",
|
|
||||||
"The start date of the new event",
|
|
||||||
G_TYPE_DATE_TIME,
|
G_TYPE_DATE_TIME,
|
||||||
G_PARAM_READWRITE));
|
G_PARAM_READWRITE));
|
||||||
|
|
||||||
@@ -923,85 +917,43 @@ gcal_quick_add_popover_new (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gcal_quick_add_popover_get_date_start:
|
* gcal_quick_add_popover_get_range:
|
||||||
* @self: a #GcalQuickAddPopover
|
* @self: a #GcalQuickAddPopover
|
||||||
*
|
*
|
||||||
* Retrieves the start date of @self.
|
* Retrieves the range of @self.
|
||||||
*
|
*
|
||||||
* Returns: (transfer none): a #GDateTime
|
* Returns: (transfer none): a #GcalRange
|
||||||
*/
|
*/
|
||||||
GDateTime*
|
GcalRange*
|
||||||
gcal_quick_add_popover_get_date_start (GcalQuickAddPopover *self)
|
gcal_quick_add_popover_get_range (GcalQuickAddPopover *self)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (GCAL_IS_QUICK_ADD_POPOVER (self), NULL);
|
g_return_val_if_fail (GCAL_IS_QUICK_ADD_POPOVER (self), NULL);
|
||||||
|
|
||||||
return self->date_start;
|
return self->range;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gcal_quick_add_popover_set_date_start:
|
* gcal_quick_add_popover_set_range:
|
||||||
* @self: a #GcalQuickAddPopover
|
* @self: a #GcalQuickAddPopover
|
||||||
* @dt: a #GDateTime
|
* @range: a #GcalRange
|
||||||
*
|
*
|
||||||
* Sets the start date of the to-be-created event.
|
* Sets the range of the to-be-created event.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
gcal_quick_add_popover_set_date_start (GcalQuickAddPopover *self,
|
gcal_quick_add_popover_set_range (GcalQuickAddPopover *self,
|
||||||
GDateTime *dt)
|
GcalRange *range)
|
||||||
{
|
{
|
||||||
g_return_if_fail (GCAL_IS_QUICK_ADD_POPOVER (self));
|
g_return_if_fail (GCAL_IS_QUICK_ADD_POPOVER (self));
|
||||||
|
|
||||||
if (self->date_start != dt &&
|
if (self->range != range &&
|
||||||
(!self->date_start || !dt ||
|
(!self->range || !range ||
|
||||||
(self->date_start && dt && !g_date_time_equal (self->date_start, dt))))
|
(self->range && range && gcal_range_compare (self->range, range) != 0)))
|
||||||
{
|
{
|
||||||
g_clear_pointer (&self->date_start, g_date_time_unref);
|
g_clear_pointer (&self->range, gcal_range_unref);
|
||||||
self->date_start = g_date_time_ref (dt);
|
self->range = gcal_range_ref (range);
|
||||||
|
|
||||||
update_header (self);
|
update_header (self);
|
||||||
|
|
||||||
g_object_notify (G_OBJECT (self), "date-start");
|
g_object_notify (G_OBJECT (self), "range");
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* gcal_quick_add_popover_get_date_end:
|
|
||||||
* @self: a #GcalQuickAddPopover
|
|
||||||
*
|
|
||||||
* Retrieves the end date of @self.
|
|
||||||
*
|
|
||||||
* Returns: (transfer none): a #GDateTime
|
|
||||||
*/
|
|
||||||
GDateTime*
|
|
||||||
gcal_quick_add_popover_get_date_end (GcalQuickAddPopover *self)
|
|
||||||
{
|
|
||||||
g_return_val_if_fail (GCAL_IS_QUICK_ADD_POPOVER (self), NULL);
|
|
||||||
|
|
||||||
return self->date_end;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* gcal_quick_add_popover_set_date_end:
|
|
||||||
* @self: a #GcalQuickAddPopover
|
|
||||||
* @dt: a #GDateTime
|
|
||||||
*
|
|
||||||
* Sets the end date of the to-be-created event.
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
gcal_quick_add_popover_set_date_end (GcalQuickAddPopover *self,
|
|
||||||
GDateTime *dt)
|
|
||||||
{
|
|
||||||
g_return_if_fail (GCAL_IS_QUICK_ADD_POPOVER (self));
|
|
||||||
|
|
||||||
if (self->date_end != dt &&
|
|
||||||
(!self->date_end || !dt ||
|
|
||||||
(self->date_end && dt && !g_date_time_equal (self->date_end, dt))))
|
|
||||||
{
|
|
||||||
g_clear_pointer (&self->date_end, g_date_time_unref);
|
|
||||||
self->date_end = g_date_time_ref (dt);
|
|
||||||
|
|
||||||
update_header (self);
|
|
||||||
|
|
||||||
g_object_notify (G_OBJECT (self), "date-end");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,15 +33,10 @@ G_DECLARE_FINAL_TYPE (GcalQuickAddPopover, gcal_quick_add_popover, GCAL, QUICK_A
|
|||||||
|
|
||||||
GtkWidget* gcal_quick_add_popover_new (void);
|
GtkWidget* gcal_quick_add_popover_new (void);
|
||||||
|
|
||||||
GDateTime* gcal_quick_add_popover_get_date_start (GcalQuickAddPopover *self);
|
GcalRange* gcal_quick_add_popover_get_range (GcalQuickAddPopover *self);
|
||||||
|
|
||||||
void gcal_quick_add_popover_set_date_start (GcalQuickAddPopover *self,
|
void gcal_quick_add_popover_set_range (GcalQuickAddPopover *self,
|
||||||
GDateTime *dt);
|
GcalRange *range);
|
||||||
|
|
||||||
GDateTime* gcal_quick_add_popover_get_date_end (GcalQuickAddPopover *self);
|
|
||||||
|
|
||||||
void gcal_quick_add_popover_set_date_end (GcalQuickAddPopover *self,
|
|
||||||
GDateTime *dt);
|
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user