view/month: Drop GtkBoolFilter from rows

They're slower and showed up in the profilings. Use a custom filter
for now.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/765>
This commit is contained in:
Georges Basile Stavracas Neto
2026-05-19 19:25:49 -03:00
parent f40c2cb0e9
commit 298593456a
+11 -22
View File
@@ -868,13 +868,14 @@ invalidate_layout_blocks (GcalMonthViewRow *self)
*/ */
static gboolean static gboolean
filter_by_range_cb (GcalEvent *event, filter_by_range_cb (gpointer item,
GcalRange *row_range, gpointer user_data)
GcalMonthViewRow *self)
{ {
GcalMonthViewRow *self = user_data;
GcalEvent *event = item;
g_assert (GCAL_IS_EVENT (event)); g_assert (GCAL_IS_EVENT (event));
g_assert (GCAL_IS_MONTH_VIEW_ROW (self)); g_assert (GCAL_IS_MONTH_VIEW_ROW (self));
g_assert (self->range == row_range);
if (!self->range) if (!self->range)
return FALSE; return FALSE;
@@ -1292,24 +1293,7 @@ gcal_month_view_row_class_init (GcalMonthViewRowClass *klass)
static void static void
gcal_month_view_row_init (GcalMonthViewRow *self) gcal_month_view_row_init (GcalMonthViewRow *self)
{ {
GtkExpression *expression; self->events = G_LIST_MODEL (gtk_filter_list_model_new (NULL, GTK_FILTER (gtk_custom_filter_new (filter_by_range_cb, self, NULL))));
GtkBoolFilter *filter;
expression = gtk_cclosure_expression_new (G_TYPE_BOOLEAN,
NULL,
1, (GtkExpression* [1]) {
gtk_property_expression_new (GCAL_TYPE_MONTH_VIEW_ROW,
gtk_constant_expression_new (GCAL_TYPE_MONTH_VIEW_ROW,
self,
NULL),
"range"),
},
G_CALLBACK (filter_by_range_cb),
self,
NULL);
filter = gtk_bool_filter_new (g_steal_pointer (&expression));
self->events = G_LIST_MODEL (gtk_filter_list_model_new (NULL, GTK_FILTER (filter)));
g_signal_connect (self->events, "items-changed", G_CALLBACK (events_changed_cb), self); g_signal_connect (self->events, "items-changed", G_CALLBACK (events_changed_cb), self);
self->layout_blocks = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, (GDestroyNotify) g_ptr_array_unref); self->layout_blocks = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, (GDestroyNotify) g_ptr_array_unref);
@@ -1354,6 +1338,7 @@ gcal_month_view_row_set_range (GcalMonthViewRow *self,
GcalRange *range) GcalRange *range)
{ {
g_autoptr (GDateTime) start = NULL; g_autoptr (GDateTime) start = NULL;
GtkFilter *filter;
g_return_if_fail (GCAL_IS_MONTH_VIEW_ROW (self)); g_return_if_fail (GCAL_IS_MONTH_VIEW_ROW (self));
g_return_if_fail (range != NULL); g_return_if_fail (range != NULL);
@@ -1373,6 +1358,10 @@ gcal_month_view_row_set_range (GcalMonthViewRow *self,
gcal_month_cell_set_date (GCAL_MONTH_CELL (self->day_cells[i]), day); gcal_month_cell_set_date (GCAL_MONTH_CELL (self->day_cells[i]), day);
} }
filter = gtk_filter_list_model_get_filter (GTK_FILTER_LIST_MODEL (self->events));
g_assert (GTK_IS_CUSTOM_FILTER (filter));
gtk_filter_changed (filter, GTK_FILTER_CHANGE_DIFFERENT);
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_RANGE]); g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_RANGE]);
GCAL_EXIT; GCAL_EXIT;