Compare commits

...

1 Commits

Author SHA1 Message Date
Matthias Clasen
937ccf152b Cut down on type-checking overhead
We *know* what the parent class is. There is
no point in checking every time we want to
chain up. We only do this because the
foo_parent_class that the G_DEFINE_TYPE macro
provides for us is a generic pointer. And that
is just because we don't have the C name for
the parent type available there.

Just cast things, and avoid taking type system
locks.
2022-05-17 07:55:13 -04:00
4 changed files with 23 additions and 13 deletions

View File

@@ -41,6 +41,9 @@ struct _GtkColumnListItemFactoryClass
G_DEFINE_TYPE (GtkColumnListItemFactory, gtk_column_list_item_factory, GTK_TYPE_LIST_ITEM_FACTORY)
#define ancestor_class(T_N) ((T_N##Class *)gtk_column_list_item_factory_parent_class)
#define parent_class ancestor_class(GtkListItemFactory)
static void
gtk_column_list_item_factory_setup (GtkListItemFactory *factory,
GtkListItemWidget *widget,
@@ -54,7 +57,7 @@ gtk_column_list_item_factory_setup (GtkListItemFactory *factory,
gtk_widget_set_layout_manager (GTK_WIDGET (widget),
gtk_column_view_layout_new (self->view));
GTK_LIST_ITEM_FACTORY_CLASS (gtk_column_list_item_factory_parent_class)->setup (factory, widget, list_item);
parent_class->setup (factory, widget, list_item);
columns = gtk_column_view_get_columns (self->view);
@@ -76,13 +79,14 @@ gtk_column_list_item_factory_teardown (GtkListItemFactory *factory,
GtkListItemWidget *widget,
GtkListItem *list_item)
{
GtkWidget *w = GTK_WIDGET (widget);
GtkWidget *child;
GTK_LIST_ITEM_FACTORY_CLASS (gtk_column_list_item_factory_parent_class)->teardown (factory, widget, list_item);
parent_class->teardown (factory, widget, list_item);
while ((child = gtk_widget_get_first_child (GTK_WIDGET (widget))))
while ((child = gtk_widget_get_first_child (w)))
{
gtk_list_item_widget_remove_child (GTK_LIST_ITEM_WIDGET (widget), child);
gtk_list_item_widget_remove_child (widget, child);
}
}
@@ -94,11 +98,12 @@ gtk_column_list_item_factory_update (GtkListItemFactory *factory,
gpointer item,
gboolean selected)
{
GtkWidget *w = GTK_WIDGET (widget);
GtkWidget *child;
GTK_LIST_ITEM_FACTORY_CLASS (gtk_column_list_item_factory_parent_class)->update (factory, widget, list_item, position, item, selected);
parent_class->update (factory, widget, list_item, position, item, selected);
for (child = gtk_widget_get_first_child (GTK_WIDGET (widget));
for (child = gtk_widget_get_first_child (w);
child;
child = gtk_widget_get_next_sibling (child))
{
@@ -142,7 +147,7 @@ gtk_column_list_item_factory_add_column (GtkColumnListItemFactory *factory,
GtkWidget *cell;
cell = gtk_column_view_cell_new (column);
gtk_list_item_widget_add_child (GTK_LIST_ITEM_WIDGET (list_item), GTK_WIDGET (cell));
gtk_list_item_widget_add_child (list_item, cell);
gtk_list_item_widget_update (GTK_LIST_ITEM_WIDGET (cell),
gtk_list_item_widget_get_position (list_item),
gtk_list_item_widget_get_item (list_item),

View File

@@ -62,6 +62,8 @@ enum
G_DEFINE_TYPE (GtkListItem, gtk_list_item, G_TYPE_OBJECT)
#define parent_class ((GObjectClass *)gtk_list_item_parent_class)
static GParamSpec *properties[N_PROPS] = { NULL, };
static void
@@ -72,7 +74,7 @@ gtk_list_item_dispose (GObject *object)
g_assert (self->owner == NULL); /* would hold a reference */
g_clear_object (&self->child);
G_OBJECT_CLASS (gtk_list_item_parent_class)->dispose (object);
parent_class->dispose (object);
}
static void

View File

@@ -96,7 +96,7 @@ gtk_list_item_factory_default_teardown (GtkListItemFactory *self,
gtk_list_item_set_child (list_item, NULL);
}
static void
static void
gtk_list_item_factory_default_update (GtkListItemFactory *self,
GtkListItemWidget *widget,
GtkListItem *list_item,

View File

@@ -62,6 +62,9 @@ enum
G_DEFINE_TYPE_WITH_PRIVATE (GtkListItemWidget, gtk_list_item_widget, GTK_TYPE_WIDGET)
#define ancestor_class(T_N) ((T_N##Class *)gtk_list_item_widget_parent_class)
#define parent_class ancestor_class(GtkWidget)
static GParamSpec *properties[N_PROPS] = { NULL, };
static guint signals[LAST_SIGNAL] = { 0 };
@@ -137,7 +140,7 @@ gtk_list_item_widget_grab_focus (GtkWidget *widget)
!priv->list_item->selectable)
return FALSE;
return GTK_WIDGET_CLASS (gtk_list_item_widget_parent_class)->grab_focus (widget);
return parent_class->grab_focus (widget);
}
static void
@@ -146,7 +149,7 @@ gtk_list_item_widget_root (GtkWidget *widget)
GtkListItemWidget *self = GTK_LIST_ITEM_WIDGET (widget);
GtkListItemWidgetPrivate *priv = gtk_list_item_widget_get_instance_private (self);
GTK_WIDGET_CLASS (gtk_list_item_widget_parent_class)->root (widget);
parent_class->root (widget);
if (priv->factory)
gtk_list_item_factory_setup (priv->factory, self);
@@ -158,7 +161,7 @@ gtk_list_item_widget_unroot (GtkWidget *widget)
GtkListItemWidget *self = GTK_LIST_ITEM_WIDGET (widget);
GtkListItemWidgetPrivate *priv = gtk_list_item_widget_get_instance_private (self);
GTK_WIDGET_CLASS (gtk_list_item_widget_parent_class)->unroot (widget);
parent_class->unroot (widget);
if (priv->list_item)
gtk_list_item_factory_teardown (priv->factory, self);
@@ -199,7 +202,7 @@ gtk_list_item_widget_dispose (GObject *object)
g_clear_object (&priv->item);
g_clear_object (&priv->factory);
G_OBJECT_CLASS (gtk_list_item_widget_parent_class)->dispose (object);
ancestor_class(GObject)->dispose (object);
}
static void