quick-add-popover: Move to GcalRange and fix title for all day event

This commit is contained in:
Rami Alkawadri
2024-01-15 19:31:56 +00:00
committed by Georges Basile Stavracas Neto
parent 933cd131fe
commit b4000be398
2 changed files with 82 additions and 135 deletions
+79 -127
View File
@@ -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");
} }
} }
+3 -8
View File
@@ -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