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
filter_by_range_cb (GcalEvent *event,
GcalRange *row_range,
GcalMonthViewRow *self)
filter_by_range_cb (gpointer item,
gpointer user_data)
{
GcalMonthViewRow *self = user_data;
GcalEvent *event = item;
g_assert (GCAL_IS_EVENT (event));
g_assert (GCAL_IS_MONTH_VIEW_ROW (self));
g_assert (self->range == row_range);
if (!self->range)
return FALSE;
@@ -1292,24 +1293,7 @@ gcal_month_view_row_class_init (GcalMonthViewRowClass *klass)
static void
gcal_month_view_row_init (GcalMonthViewRow *self)
{
GtkExpression *expression;
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)));
self->events = G_LIST_MODEL (gtk_filter_list_model_new (NULL, GTK_FILTER (gtk_custom_filter_new (filter_by_range_cb, self, NULL))));
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);
@@ -1354,6 +1338,7 @@ gcal_month_view_row_set_range (GcalMonthViewRow *self,
GcalRange *range)
{
g_autoptr (GDateTime) start = NULL;
GtkFilter *filter;
g_return_if_fail (GCAL_IS_MONTH_VIEW_ROW (self));
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);
}
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]);
GCAL_EXIT;