sysprof: cleanup n-items handling

This commit is contained in:
Christian Hergert
2023-08-15 17:40:49 -07:00
parent efee8bda79
commit 9792759ba9

View File

@ -27,7 +27,7 @@ struct _SysprofSampledModel
GObject parent_instance; GObject parent_instance;
GListModel *model; GListModel *model;
guint max_items; guint max_items;
guint n_items; guint real_n_items;
}; };
enum { enum {
@ -54,7 +54,7 @@ sysprof_sampled_model_get_n_items (GListModel *model)
SysprofSampledModel *self = (SysprofSampledModel *)model; SysprofSampledModel *self = (SysprofSampledModel *)model;
if (self->model != NULL) if (self->model != NULL)
return MIN (self->max_items, g_list_model_get_n_items (self->model)); return MIN (self->max_items, self->real_n_items);
return 0; return 0;
} }
@ -69,10 +69,10 @@ sysprof_sampled_model_get_item (GListModel *model,
if (self->model == NULL) if (self->model == NULL)
return NULL; return NULL;
if (self->n_items <= self->max_items) if (self->real_n_items <= self->max_items)
return g_list_model_get_item (self->model, position); return g_list_model_get_item (self->model, position);
new_position = position / (double)g_list_model_get_n_items (G_LIST_MODEL (self)) * self->n_items; new_position = position / (double)g_list_model_get_n_items (G_LIST_MODEL (self)) * self->real_n_items;
return g_list_model_get_item (self->model, new_position); return g_list_model_get_item (self->model, new_position);
} }
@ -97,10 +97,12 @@ sysprof_sampled_model_items_changed (SysprofSampledModel *self,
guint added, guint added,
GListModel *model) GListModel *model)
{ {
guint old_n_items = self->n_items; guint old_n_items;
guint new_n_items = MIN (self->max_items, g_list_model_get_n_items (model)); guint new_n_items;
self->n_items = g_list_model_get_n_items (model); old_n_items = g_list_model_get_n_items (G_LIST_MODEL (self));
self->real_n_items = g_list_model_get_n_items (model);
new_n_items = g_list_model_get_n_items (G_LIST_MODEL (self));
g_list_model_items_changed (G_LIST_MODEL (self), 0, old_n_items, new_n_items); g_list_model_items_changed (G_LIST_MODEL (self), 0, old_n_items, new_n_items);
} }
@ -265,7 +267,7 @@ sysprof_sampled_model_set_model (SysprofSampledModel *self,
if (self->model) if (self->model)
{ {
self->n_items = 0; self->real_n_items = 0;
g_signal_handlers_disconnect_by_func (self->model, g_signal_handlers_disconnect_by_func (self->model,
G_CALLBACK (sysprof_sampled_model_items_changed), G_CALLBACK (sysprof_sampled_model_items_changed),
self); self);
@ -275,7 +277,7 @@ sysprof_sampled_model_set_model (SysprofSampledModel *self,
if (self->model) if (self->model)
{ {
self->n_items = g_list_model_get_n_items (self->model); self->real_n_items = g_list_model_get_n_items (self->model);
g_signal_connect_object (self->model, g_signal_connect_object (self->model,
"items-changed", "items-changed",
G_CALLBACK (sysprof_sampled_model_items_changed), G_CALLBACK (sysprof_sampled_model_items_changed),