views: Redraw month view rows after changing week-start-day
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/822>
This commit is contained in:
@@ -344,6 +344,33 @@ dump_row_ranges (GcalMonthView *self)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
redraw_month_view_rows (GcalMonthView *self)
|
||||||
|
{
|
||||||
|
gint n_weeks_before = 0;
|
||||||
|
|
||||||
|
g_assert (GCAL_IS_MONTH_VIEW (self));
|
||||||
|
|
||||||
|
n_weeks_before = N_ROWS_PER_PAGE * (N_PAGES - 1) / 2;
|
||||||
|
|
||||||
|
for (gint i = 0; i < self->week_rows->len; i++)
|
||||||
|
{
|
||||||
|
g_autoptr (GDateTime) week_start = NULL;
|
||||||
|
g_autoptr (GDateTime) week_end = NULL;
|
||||||
|
g_autoptr (GcalRange) range = NULL;
|
||||||
|
g_autoptr (GDateTime) date = NULL;
|
||||||
|
GcalMonthViewRow *row;
|
||||||
|
|
||||||
|
date = g_date_time_add_weeks (self->date, i - n_weeks_before);
|
||||||
|
week_start = gcal_date_time_get_start_of_week (date);
|
||||||
|
week_end = g_date_time_add_weeks (week_start, 1);
|
||||||
|
range = gcal_range_new (week_start, week_end, GCAL_RANGE_DEFAULT);
|
||||||
|
|
||||||
|
row = g_ptr_array_index (self->week_rows, i);
|
||||||
|
gcal_month_view_row_set_range (row, range);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
update_week_ranges (GcalMonthView *self,
|
update_week_ranges (GcalMonthView *self,
|
||||||
GDateTime *new_date)
|
GDateTime *new_date)
|
||||||
@@ -389,22 +416,7 @@ update_week_ranges (GcalMonthView *self,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (gint i = 0; i < self->week_rows->len; i++)
|
redraw_month_view_rows (self);
|
||||||
{
|
|
||||||
g_autoptr (GDateTime) week_start = NULL;
|
|
||||||
g_autoptr (GDateTime) week_end = NULL;
|
|
||||||
g_autoptr (GcalRange) range = NULL;
|
|
||||||
g_autoptr (GDateTime) date = NULL;
|
|
||||||
GcalMonthViewRow *row;
|
|
||||||
|
|
||||||
date = g_date_time_add_weeks (self->date, i - n_weeks_before);
|
|
||||||
week_start = gcal_date_time_get_start_of_week (date);
|
|
||||||
week_end = g_date_time_add_weeks (week_start, 1);
|
|
||||||
range = gcal_range_new (week_start, week_end, GCAL_RANGE_DEFAULT);
|
|
||||||
|
|
||||||
row = g_ptr_array_index (self->week_rows, i);
|
|
||||||
gcal_month_view_row_set_range (row, range);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
maybe_popdown_overflow_popover (self);
|
maybe_popdown_overflow_popover (self);
|
||||||
@@ -1612,7 +1624,6 @@ gcal_month_view_get_next_date (GcalView *view)
|
|||||||
return g_date_time_new_local (year, month, 1, 0, 0, 0);
|
return g_date_time_new_local (year, month, 1, 0, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static GDateTime*
|
static GDateTime*
|
||||||
gcal_month_view_get_previous_date (GcalView *view)
|
gcal_month_view_get_previous_date (GcalView *view)
|
||||||
{
|
{
|
||||||
@@ -1627,6 +1638,19 @@ gcal_month_view_get_previous_date (GcalView *view)
|
|||||||
return g_date_time_new_local (year, month, 1, 0, 0, 0);
|
return g_date_time_new_local (year, month, 1, 0, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gcal_month_view_first_weekday_changed (GcalView *view)
|
||||||
|
{
|
||||||
|
GcalMonthView *self = GCAL_MONTH_VIEW (view);
|
||||||
|
|
||||||
|
update_weekday_labels (self);
|
||||||
|
update_week_ranges (self, self->date);
|
||||||
|
redraw_month_view_rows (self);
|
||||||
|
update_visible_rows (self);
|
||||||
|
|
||||||
|
gcal_timeline_subscriber_range_changed (GCAL_TIMELINE_SUBSCRIBER (view));
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gcal_view_interface_init (GcalViewInterface *iface)
|
gcal_view_interface_init (GcalViewInterface *iface)
|
||||||
{
|
{
|
||||||
@@ -1636,6 +1660,7 @@ gcal_view_interface_init (GcalViewInterface *iface)
|
|||||||
iface->get_children_by_uuid = gcal_month_view_get_children_by_uuid;
|
iface->get_children_by_uuid = gcal_month_view_get_children_by_uuid;
|
||||||
iface->get_next_date = gcal_month_view_get_next_date;
|
iface->get_next_date = gcal_month_view_get_next_date;
|
||||||
iface->get_previous_date = gcal_month_view_get_previous_date;
|
iface->get_previous_date = gcal_month_view_get_previous_date;
|
||||||
|
iface->first_weekday_changed = gcal_month_view_first_weekday_changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user