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:
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user