forked from AuroraMiddleware/gtk
listitemfactory: Track notify manually instead of freeze/thaw
freeze/thaw_notify () showed up on the perf trace for rapid ColumnView scrolling. Track the three properties manually to make it a little faster. Related: https://gitlab.gnome.org/GNOME/gtk/-/issues/3334
This commit is contained in:
parent
361e8ac076
commit
d65e7c9d05
@ -162,9 +162,5 @@ gtk_list_item_factory_update (GtkListItemFactory *self,
|
||||
|
||||
list_item = gtk_list_item_widget_get_list_item (widget);
|
||||
|
||||
g_object_freeze_notify (G_OBJECT (list_item));
|
||||
|
||||
GTK_LIST_ITEM_FACTORY_GET_CLASS (self)->update (self, widget, list_item, position, item, selected);
|
||||
|
||||
g_object_thaw_notify (G_OBJECT (list_item));
|
||||
}
|
||||
|
@ -554,27 +554,34 @@ gtk_list_item_widget_default_update (GtkListItemWidget *self,
|
||||
gpointer item,
|
||||
gboolean selected)
|
||||
{
|
||||
/* Track notify manually instead of freeze/thaw_notify for performance reasons. */
|
||||
gboolean notify_item = FALSE, notify_position = FALSE, notify_selected = FALSE;
|
||||
GtkListItemWidgetPrivate *priv = gtk_list_item_widget_get_instance_private (self);
|
||||
|
||||
/* FIXME: It's kinda evil to notify external objects from here... */
|
||||
|
||||
if (g_set_object (&priv->item, item))
|
||||
{
|
||||
if (list_item)
|
||||
g_object_notify (G_OBJECT (list_item), "item");
|
||||
}
|
||||
notify_item = TRUE;
|
||||
|
||||
if (priv->position != position)
|
||||
{
|
||||
priv->position = position;
|
||||
if (list_item)
|
||||
g_object_notify (G_OBJECT (list_item), "position");
|
||||
notify_position = TRUE;
|
||||
}
|
||||
|
||||
if (priv->selected != selected)
|
||||
{
|
||||
priv->selected = selected;
|
||||
if (list_item)
|
||||
notify_selected = TRUE;
|
||||
}
|
||||
|
||||
if (list_item)
|
||||
{
|
||||
if (notify_item)
|
||||
g_object_notify (G_OBJECT (list_item), "item");
|
||||
if (notify_position)
|
||||
g_object_notify (G_OBJECT (list_item), "position");
|
||||
if (notify_selected)
|
||||
g_object_notify (G_OBJECT (list_item), "selected");
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user