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) 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 static void
gtk_column_list_item_factory_setup (GtkListItemFactory *factory, gtk_column_list_item_factory_setup (GtkListItemFactory *factory,
GtkListItemWidget *widget, GtkListItemWidget *widget,
@@ -54,7 +57,7 @@ gtk_column_list_item_factory_setup (GtkListItemFactory *factory,
gtk_widget_set_layout_manager (GTK_WIDGET (widget), gtk_widget_set_layout_manager (GTK_WIDGET (widget),
gtk_column_view_layout_new (self->view)); 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); columns = gtk_column_view_get_columns (self->view);
@@ -76,13 +79,14 @@ gtk_column_list_item_factory_teardown (GtkListItemFactory *factory,
GtkListItemWidget *widget, GtkListItemWidget *widget,
GtkListItem *list_item) GtkListItem *list_item)
{ {
GtkWidget *w = GTK_WIDGET (widget);
GtkWidget *child; 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, gpointer item,
gboolean selected) gboolean selected)
{ {
GtkWidget *w = GTK_WIDGET (widget);
GtkWidget *child; 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;
child = gtk_widget_get_next_sibling (child)) child = gtk_widget_get_next_sibling (child))
{ {
@@ -142,7 +147,7 @@ gtk_column_list_item_factory_add_column (GtkColumnListItemFactory *factory,
GtkWidget *cell; GtkWidget *cell;
cell = gtk_column_view_cell_new (column); 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_update (GTK_LIST_ITEM_WIDGET (cell),
gtk_list_item_widget_get_position (list_item), gtk_list_item_widget_get_position (list_item),
gtk_list_item_widget_get_item (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) 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 GParamSpec *properties[N_PROPS] = { NULL, };
static void static void
@@ -72,7 +74,7 @@ gtk_list_item_dispose (GObject *object)
g_assert (self->owner == NULL); /* would hold a reference */ g_assert (self->owner == NULL); /* would hold a reference */
g_clear_object (&self->child); g_clear_object (&self->child);
G_OBJECT_CLASS (gtk_list_item_parent_class)->dispose (object); parent_class->dispose (object);
} }
static void static void

View File

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

View File

@@ -62,6 +62,9 @@ enum
G_DEFINE_TYPE_WITH_PRIVATE (GtkListItemWidget, gtk_list_item_widget, GTK_TYPE_WIDGET) 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 GParamSpec *properties[N_PROPS] = { NULL, };
static guint signals[LAST_SIGNAL] = { 0 }; static guint signals[LAST_SIGNAL] = { 0 };
@@ -137,7 +140,7 @@ gtk_list_item_widget_grab_focus (GtkWidget *widget)
!priv->list_item->selectable) !priv->list_item->selectable)
return FALSE; return FALSE;
return GTK_WIDGET_CLASS (gtk_list_item_widget_parent_class)->grab_focus (widget); return parent_class->grab_focus (widget);
} }
static void static void
@@ -146,7 +149,7 @@ gtk_list_item_widget_root (GtkWidget *widget)
GtkListItemWidget *self = GTK_LIST_ITEM_WIDGET (widget); GtkListItemWidget *self = GTK_LIST_ITEM_WIDGET (widget);
GtkListItemWidgetPrivate *priv = gtk_list_item_widget_get_instance_private (self); 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) if (priv->factory)
gtk_list_item_factory_setup (priv->factory, self); 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); GtkListItemWidget *self = GTK_LIST_ITEM_WIDGET (widget);
GtkListItemWidgetPrivate *priv = gtk_list_item_widget_get_instance_private (self); 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) if (priv->list_item)
gtk_list_item_factory_teardown (priv->factory, self); 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->item);
g_clear_object (&priv->factory); g_clear_object (&priv->factory);
G_OBJECT_CLASS (gtk_list_item_widget_parent_class)->dispose (object); ancestor_class(GObject)->dispose (object);
} }
static void static void