[gtk/wip/otte/for-main: 2/3] listitemfactory: Make this callback-based
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/otte/for-main: 2/3] listitemfactory: Make this callback-based
- Date: Tue, 28 Jun 2022 14:38:10 +0000 (UTC)
commit 57f2b5d2e68935ab3e27198351ce3e136c754451
Author: Benjamin Otte <otte redhat com>
Date: Tue Jun 28 16:34:24 2022 +0200
listitemfactory: Make this callback-based
This way, we no longer prescribe the use of either GtkListItem or
GtkListItemWidget.
This means we can use it in other places, such as for custom section
header objects or with my Canvas ideas.
gtk/gtkbuilderlistitemfactory.c | 12 ++-
gtk/gtkcolumnlistitemfactory.c | 40 +++++---
gtk/gtklistitemfactory.c | 74 +++++++-------
gtk/gtklistitemfactoryprivate.h | 41 +++++---
gtk/gtklistitemwidget.c | 214 +++++++++++++++++++++++++---------------
gtk/gtklistitemwidgetprivate.h | 10 --
gtk/gtksignallistitemfactory.c | 48 ++++-----
7 files changed, 254 insertions(+), 185 deletions(-)
---
diff --git a/gtk/gtkbuilderlistitemfactory.c b/gtk/gtkbuilderlistitemfactory.c
index 19c95f2776..b28cf7197a 100644
--- a/gtk/gtkbuilderlistitemfactory.c
+++ b/gtk/gtkbuilderlistitemfactory.c
@@ -85,22 +85,24 @@ static GParamSpec *properties[N_PROPS] = { NULL, };
static void
gtk_builder_list_item_factory_setup (GtkListItemFactory *factory,
- GtkListItemWidget *widget,
- GtkListItem *list_item)
+ GObject *item,
+ gboolean bind,
+ GFunc func,
+ gpointer data)
{
GtkBuilderListItemFactory *self = GTK_BUILDER_LIST_ITEM_FACTORY (factory);
GtkBuilder *builder;
GError *error = NULL;
- GTK_LIST_ITEM_FACTORY_CLASS (gtk_builder_list_item_factory_parent_class)->setup (factory, widget,
list_item);
+ GTK_LIST_ITEM_FACTORY_CLASS (gtk_builder_list_item_factory_parent_class)->setup (factory, item, bind,
func, data);
builder = gtk_builder_new ();
- gtk_builder_set_current_object (builder, G_OBJECT (list_item));
+ gtk_builder_set_current_object (builder, item);
if (self->scope)
gtk_builder_set_scope (builder, self->scope);
- if (!gtk_builder_extend_with_template (builder, G_OBJECT (list_item), G_OBJECT_TYPE (list_item),
+ if (!gtk_builder_extend_with_template (builder, G_OBJECT (item), G_OBJECT_TYPE (item),
(const char *)g_bytes_get_data (self->data, NULL),
g_bytes_get_size (self->data),
&error))
diff --git a/gtk/gtkcolumnlistitemfactory.c b/gtk/gtkcolumnlistitemfactory.c
index e6188cb4d4..9951a7c47a 100644
--- a/gtk/gtkcolumnlistitemfactory.c
+++ b/gtk/gtkcolumnlistitemfactory.c
@@ -43,10 +43,13 @@ G_DEFINE_TYPE (GtkColumnListItemFactory, gtk_column_list_item_factory, GTK_TYPE_
static void
gtk_column_list_item_factory_setup (GtkListItemFactory *factory,
- GtkListItemWidget *widget,
- GtkListItem *list_item)
+ GObject *item,
+ gboolean bind,
+ GFunc func,
+ gpointer data)
{
GtkColumnListItemFactory *self = GTK_COLUMN_LIST_ITEM_FACTORY (factory);
+ GtkListItemWidget *widget = data;
GListModel *columns;
guint i;
@@ -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);
+ GTK_LIST_ITEM_FACTORY_CLASS (gtk_column_list_item_factory_parent_class)->setup (factory, item, bind, func,
data);
columns = gtk_column_view_get_columns (self->view);
@@ -63,7 +66,7 @@ gtk_column_list_item_factory_setup (GtkListItemFactory *factory,
GtkColumnViewColumn *column = g_list_model_get_item (columns, i);
gtk_column_list_item_factory_add_column (self,
- list_item->owner,
+ widget,
column,
FALSE);
@@ -73,12 +76,15 @@ gtk_column_list_item_factory_setup (GtkListItemFactory *factory,
static void
gtk_column_list_item_factory_teardown (GtkListItemFactory *factory,
- GtkListItemWidget *widget,
- GtkListItem *list_item)
+ GObject *item,
+ gboolean unbind,
+ GFunc func,
+ gpointer data)
{
+ GtkListItemWidget *widget = data;
GtkWidget *child;
- GTK_LIST_ITEM_FACTORY_CLASS (gtk_column_list_item_factory_parent_class)->teardown (factory, widget,
list_item);
+ GTK_LIST_ITEM_FACTORY_CLASS (gtk_column_list_item_factory_parent_class)->teardown (factory, item, unbind,
func, data);
while ((child = gtk_widget_get_first_child (GTK_WIDGET (widget))))
{
@@ -88,21 +94,25 @@ gtk_column_list_item_factory_teardown (GtkListItemFactory *factory,
static void
gtk_column_list_item_factory_update (GtkListItemFactory *factory,
- GtkListItemWidget *widget,
- GtkListItem *list_item,
- guint position,
- gpointer item,
- gboolean selected)
+ GObject *item,
+ gboolean unbind,
+ gboolean bind,
+ GFunc func,
+ gpointer data)
{
+ GtkListItem *list_item = GTK_LIST_ITEM (item);
GtkWidget *child;
- GTK_LIST_ITEM_FACTORY_CLASS (gtk_column_list_item_factory_parent_class)->update (factory, widget,
list_item, position, item, selected);
+ GTK_LIST_ITEM_FACTORY_CLASS (gtk_column_list_item_factory_parent_class)->update (factory, item, unbind,
bind, func, data);
- for (child = gtk_widget_get_first_child (GTK_WIDGET (widget));
+ for (child = gtk_widget_get_first_child (GTK_WIDGET (list_item->owner));
child;
child = gtk_widget_get_next_sibling (child))
{
- gtk_list_item_widget_update (GTK_LIST_ITEM_WIDGET (child), position, item, selected);
+ gtk_list_item_widget_update (GTK_LIST_ITEM_WIDGET (child),
+ gtk_list_item_get_position (list_item),
+ gtk_list_item_get_item (list_item),
+ gtk_list_item_get_selected (list_item));
}
}
diff --git a/gtk/gtklistitemfactory.c b/gtk/gtklistitemfactory.c
index 48383f29de..4d6d75d5a7 100644
--- a/gtk/gtklistitemfactory.c
+++ b/gtk/gtklistitemfactory.c
@@ -80,31 +80,36 @@ G_DEFINE_TYPE (GtkListItemFactory, gtk_list_item_factory, G_TYPE_OBJECT)
static void
gtk_list_item_factory_default_setup (GtkListItemFactory *self,
- GtkListItemWidget *widget,
- GtkListItem *list_item)
+ GObject *item,
+ gboolean bind,
+ GFunc func,
+ gpointer data)
{
- gtk_list_item_widget_default_setup (widget, list_item);
+ if (func)
+ func (item, data);
}
static void
gtk_list_item_factory_default_teardown (GtkListItemFactory *self,
- GtkListItemWidget *widget,
- GtkListItem *list_item)
+ GObject *item,
+ gboolean unbind,
+ GFunc func,
+ gpointer data)
{
- gtk_list_item_widget_default_teardown (widget, list_item);
-
- gtk_list_item_set_child (list_item, NULL);
+ if (func)
+ func (item, data);
}
static void
gtk_list_item_factory_default_update (GtkListItemFactory *self,
- GtkListItemWidget *widget,
- GtkListItem *list_item,
- guint position,
- gpointer item,
- gboolean selected)
+ GObject *item,
+ gboolean unbind,
+ gboolean bind,
+ GFunc func,
+ gpointer data)
{
- gtk_list_item_widget_default_update (widget, list_item, position, item, selected);
+ if (func)
+ func (item, data);
}
static void
@@ -122,45 +127,38 @@ gtk_list_item_factory_init (GtkListItemFactory *self)
void
gtk_list_item_factory_setup (GtkListItemFactory *self,
- GtkListItemWidget *widget)
+ GObject *item,
+ gboolean bind,
+ GFunc func,
+ gpointer data)
{
- GtkListItem *list_item;
-
g_return_if_fail (GTK_IS_LIST_ITEM_FACTORY (self));
- list_item = gtk_list_item_new ();
-
- GTK_LIST_ITEM_FACTORY_GET_CLASS (self)->setup (self, widget, list_item);
+ GTK_LIST_ITEM_FACTORY_GET_CLASS (self)->setup (self, item, bind, func, data);
}
void
gtk_list_item_factory_teardown (GtkListItemFactory *self,
- GtkListItemWidget *widget)
+ GObject *item,
+ gboolean unbind,
+ GFunc func,
+ gpointer data)
{
- GtkListItem *list_item;
-
g_return_if_fail (GTK_IS_LIST_ITEM_FACTORY (self));
- list_item = gtk_list_item_widget_get_list_item (widget);
-
- GTK_LIST_ITEM_FACTORY_GET_CLASS (self)->teardown (self, widget, list_item);
-
- g_object_unref (list_item);
+ GTK_LIST_ITEM_FACTORY_GET_CLASS (self)->teardown (self, item, unbind, func, data);
}
void
gtk_list_item_factory_update (GtkListItemFactory *self,
- GtkListItemWidget *widget,
- guint position,
- gpointer item,
- gboolean selected)
+ GObject *item,
+ gboolean unbind,
+ gboolean bind,
+ GFunc func,
+ gpointer data)
{
- GtkListItem *list_item;
-
g_return_if_fail (GTK_IS_LIST_ITEM_FACTORY (self));
- g_return_if_fail (GTK_IS_LIST_ITEM_WIDGET (widget));
-
- list_item = gtk_list_item_widget_get_list_item (widget);
+ g_return_if_fail (G_IS_OBJECT (item));
- GTK_LIST_ITEM_FACTORY_GET_CLASS (self)->update (self, widget, list_item, position, item, selected);
+ GTK_LIST_ITEM_FACTORY_GET_CLASS (self)->update (self, item, unbind, bind, func, data);
}
diff --git a/gtk/gtklistitemfactoryprivate.h b/gtk/gtklistitemfactoryprivate.h
index 3ee5e5f088..a860987231 100644
--- a/gtk/gtklistitemfactoryprivate.h
+++ b/gtk/gtklistitemfactoryprivate.h
@@ -37,33 +37,44 @@ struct _GtkListItemFactoryClass
/* setup @list_item so it can be bound */
void (* setup) (GtkListItemFactory *self,
- GtkListItemWidget *widget,
- GtkListItem *list_item);
+ GObject *item,
+ gboolean bind,
+ GFunc func,
+ gpointer data);
/* undo the effects of GtkListItemFactoryClass::setup() */
void (* teardown) (GtkListItemFactory *self,
- GtkListItemWidget *widget,
- GtkListItem *list_item);
+ GObject *item,
+ gboolean unbind,
+ GFunc func,
+ gpointer data);
/* Update properties on @list_item to the given @item, which is in @position and @selected state.
* One or more of those properties might be unchanged. */
void (* update) (GtkListItemFactory *self,
- GtkListItemWidget *widget,
- GtkListItem *list_item,
- guint position,
- gpointer item,
- gboolean selected);
+ GObject *item,
+ gboolean unbind,
+ gboolean bind,
+ GFunc func,
+ gpointer data);
};
void gtk_list_item_factory_setup (GtkListItemFactory *self,
- GtkListItemWidget *widget);
+ GObject *item,
+ gboolean bind,
+ GFunc func,
+ gpointer data);
void gtk_list_item_factory_teardown (GtkListItemFactory *self,
- GtkListItemWidget *widget);
+ GObject *item,
+ gboolean unbind,
+ GFunc func,
+ gpointer data);
void gtk_list_item_factory_update (GtkListItemFactory *self,
- GtkListItemWidget *widget,
- guint position,
- gpointer item,
- gboolean selected);
+ GObject *item,
+ gboolean unbind,
+ gboolean bind,
+ GFunc func,
+ gpointer data);
G_END_DECLS
diff --git a/gtk/gtklistitemwidget.c b/gtk/gtklistitemwidget.c
index fc407fbd83..c62b59f3a2 100644
--- a/gtk/gtklistitemwidget.c
+++ b/gtk/gtklistitemwidget.c
@@ -140,6 +140,85 @@ gtk_list_item_widget_grab_focus (GtkWidget *widget)
return GTK_WIDGET_CLASS (gtk_list_item_widget_parent_class)->grab_focus (widget);
}
+static void
+gtk_list_item_widget_setup_func (gpointer object,
+ gpointer data)
+{
+ GtkListItemWidget *self = data;
+ GtkListItemWidgetPrivate *priv = gtk_list_item_widget_get_instance_private (self);
+ GtkListItem *list_item = object;
+
+ priv->list_item = list_item;
+ list_item->owner = self;
+
+ if (list_item->child)
+ gtk_list_item_widget_add_child (self, list_item->child);
+
+ gtk_list_item_widget_set_activatable (self, list_item->activatable);
+
+ gtk_list_item_do_notify (list_item,
+ priv->item != NULL,
+ priv->position != GTK_INVALID_LIST_POSITION,
+ priv->selected);
+}
+
+static void
+gtk_list_item_widget_setup_factory (GtkListItemWidget *self)
+{
+ GtkListItemWidgetPrivate *priv = gtk_list_item_widget_get_instance_private (self);
+ GtkListItem *list_item;
+
+ list_item = gtk_list_item_new ();
+
+ gtk_list_item_factory_setup (priv->factory,
+ G_OBJECT (list_item),
+ priv->item != NULL,
+ gtk_list_item_widget_setup_func,
+ self);
+
+ g_assert (priv->list_item == list_item);
+}
+
+static void
+gtk_list_item_widget_teardown_func (gpointer object,
+ gpointer data)
+{
+ GtkListItemWidget *self = data;
+ GtkListItemWidgetPrivate *priv = gtk_list_item_widget_get_instance_private (self);
+ GtkListItem *list_item = object;
+
+ g_assert (priv->list_item == list_item);
+
+ priv->list_item = NULL;
+ list_item->owner = NULL;
+
+ if (list_item->child)
+ gtk_list_item_widget_remove_child (self, list_item->child);
+
+ gtk_list_item_widget_set_activatable (self, FALSE);
+
+ gtk_list_item_do_notify (list_item,
+ priv->item != NULL,
+ priv->position != GTK_INVALID_LIST_POSITION,
+ priv->selected);
+
+ gtk_list_item_set_child (list_item, NULL);
+}
+
+static void
+gtk_list_item_widget_teardown_factory (GtkListItemWidget *self)
+{
+ GtkListItemWidgetPrivate *priv = gtk_list_item_widget_get_instance_private (self);
+
+ gtk_list_item_factory_teardown (priv->factory,
+ G_OBJECT (priv->list_item),
+ priv->item != NULL,
+ gtk_list_item_widget_teardown_func,
+ self);
+
+ g_assert (priv->list_item == NULL);
+}
+
static void
gtk_list_item_widget_root (GtkWidget *widget)
{
@@ -149,7 +228,7 @@ gtk_list_item_widget_root (GtkWidget *widget)
GTK_WIDGET_CLASS (gtk_list_item_widget_parent_class)->root (widget);
if (priv->factory)
- gtk_list_item_factory_setup (priv->factory, self);
+ gtk_list_item_widget_setup_factory (self);
}
static void
@@ -161,7 +240,7 @@ gtk_list_item_widget_unroot (GtkWidget *widget)
GTK_WIDGET_CLASS (gtk_list_item_widget_parent_class)->unroot (widget);
if (priv->list_item)
- gtk_list_item_factory_teardown (priv->factory, self);
+ gtk_list_item_widget_teardown_factory (self);
}
static void
@@ -474,6 +553,45 @@ gtk_list_item_widget_new (GtkListItemFactory *factory,
NULL);
}
+typedef struct {
+ GtkListItemWidget *widget;
+ guint position;
+ gpointer item;
+ gboolean selected;
+} GtkListItemWidgetUpdate;
+
+static void
+gtk_list_item_widget_update_func (gpointer object,
+ gpointer data)
+{
+ GtkListItemWidgetUpdate *update = data;
+ GtkListItem *list_item = object;
+ /* Track notify manually instead of freeze/thaw_notify for performance reasons. */
+ gboolean notify_item = FALSE, notify_position = FALSE, notify_selected = FALSE;
+ GtkListItemWidget *self = update->widget;
+ 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, update->item))
+ notify_item = TRUE;
+
+ if (priv->position != update->position)
+ {
+ priv->position = update->position;
+ notify_position = TRUE;
+ }
+
+ if (priv->selected != update->selected)
+ {
+ priv->selected = update->selected;
+ notify_selected = TRUE;
+ }
+
+ if (list_item)
+ gtk_list_item_do_notify (list_item, notify_item, notify_position, notify_selected);
+}
+
void
gtk_list_item_widget_update (GtkListItemWidget *self,
guint position,
@@ -481,14 +599,24 @@ gtk_list_item_widget_update (GtkListItemWidget *self,
gboolean selected)
{
GtkListItemWidgetPrivate *priv = gtk_list_item_widget_get_instance_private (self);
+ GtkListItemWidgetUpdate update = { self, position, item, selected };
gboolean was_selected;
was_selected = priv->selected;
if (priv->list_item)
- gtk_list_item_factory_update (priv->factory, self, position, item, selected);
+ {
+ gtk_list_item_factory_update (priv->factory,
+ G_OBJECT (priv->list_item),
+ priv->item != NULL,
+ item != NULL,
+ gtk_list_item_widget_update_func,
+ &update);
+ }
else
- gtk_list_item_widget_default_update (self, NULL, position, item, selected);
+ {
+ gtk_list_item_widget_update_func (NULL, &update);
+ }
/* don't look at selected variable, it's not reentrancy safe */
if (was_selected != priv->selected)
@@ -504,80 +632,6 @@ gtk_list_item_widget_update (GtkListItemWidget *self,
}
}
-void
-gtk_list_item_widget_default_setup (GtkListItemWidget *self,
- GtkListItem *list_item)
-{
- GtkListItemWidgetPrivate *priv = gtk_list_item_widget_get_instance_private (self);
-
- priv->list_item = list_item;
- list_item->owner = self;
-
- if (list_item->child)
- gtk_list_item_widget_add_child (self, list_item->child);
-
- gtk_list_item_widget_set_activatable (self, list_item->activatable);
-
- gtk_list_item_do_notify (list_item,
- priv->item != NULL,
- priv->position != GTK_INVALID_LIST_POSITION,
- priv->selected);
-}
-
-void
-gtk_list_item_widget_default_teardown (GtkListItemWidget *self,
- GtkListItem *list_item)
-{
- GtkListItemWidgetPrivate *priv = gtk_list_item_widget_get_instance_private (self);
-
- g_assert (priv->list_item == list_item);
-
- priv->list_item = NULL;
- list_item->owner = NULL;
-
- if (list_item->child)
- gtk_list_item_widget_remove_child (self, list_item->child);
-
- gtk_list_item_widget_set_activatable (self, FALSE);
-
- gtk_list_item_do_notify (list_item,
- priv->item != NULL,
- priv->position != GTK_INVALID_LIST_POSITION,
- priv->selected);
-}
-
-void
-gtk_list_item_widget_default_update (GtkListItemWidget *self,
- GtkListItem *list_item,
- guint position,
- 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))
- notify_item = TRUE;
-
- if (priv->position != position)
- {
- priv->position = position;
- notify_position = TRUE;
- }
-
- if (priv->selected != selected)
- {
- priv->selected = selected;
- notify_selected = TRUE;
- }
-
- if (list_item)
- gtk_list_item_do_notify (list_item, notify_item, notify_position, notify_selected);
-}
-
void
gtk_list_item_widget_set_factory (GtkListItemWidget *self,
GtkListItemFactory *factory)
@@ -590,7 +644,7 @@ gtk_list_item_widget_set_factory (GtkListItemWidget *self,
if (priv->factory)
{
if (priv->list_item)
- gtk_list_item_factory_teardown (factory, self);
+ gtk_list_item_widget_teardown_factory (self);
g_clear_object (&priv->factory);
}
@@ -599,7 +653,7 @@ gtk_list_item_widget_set_factory (GtkListItemWidget *self,
priv->factory = g_object_ref (factory);
if (gtk_widget_get_root (GTK_WIDGET (self)))
- gtk_list_item_factory_setup (factory, self);
+ gtk_list_item_widget_setup_factory (self);
}
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_FACTORY]);
diff --git a/gtk/gtklistitemwidgetprivate.h b/gtk/gtklistitemwidgetprivate.h
index eca2d21c6b..7ac53df413 100644
--- a/gtk/gtklistitemwidgetprivate.h
+++ b/gtk/gtklistitemwidgetprivate.h
@@ -59,16 +59,6 @@ void gtk_list_item_widget_update (GtkListItemWidg
gboolean selected);
GtkListItem * gtk_list_item_widget_get_list_item (GtkListItemWidget *self);
-void gtk_list_item_widget_default_setup (GtkListItemWidget *self,
- GtkListItem *list_item);
-void gtk_list_item_widget_default_teardown (GtkListItemWidget *self,
- GtkListItem *list_item);
-void gtk_list_item_widget_default_update (GtkListItemWidget *self,
- GtkListItem *list_item,
- guint position,
- gpointer item,
- gboolean selected);
-
void gtk_list_item_widget_set_factory (GtkListItemWidget *self,
GtkListItemFactory *factory);
void gtk_list_item_widget_set_single_click_activate
diff --git a/gtk/gtksignallistitemfactory.c b/gtk/gtksignallistitemfactory.c
index a2d0240ffe..d3a75c27eb 100644
--- a/gtk/gtksignallistitemfactory.c
+++ b/gtk/gtksignallistitemfactory.c
@@ -103,45 +103,49 @@ static guint signals[LAST_SIGNAL] = { 0 };
static void
gtk_signal_list_item_factory_setup (GtkListItemFactory *factory,
- GtkListItemWidget *widget,
- GtkListItem *list_item)
+ GObject *item,
+ gboolean bind,
+ GFunc func,
+ gpointer data)
{
- g_signal_emit (factory, signals[SETUP], 0, list_item);
+ g_signal_emit (factory, signals[SETUP], 0, item);
- GTK_LIST_ITEM_FACTORY_CLASS (gtk_signal_list_item_factory_parent_class)->setup (factory, widget,
list_item);
+ GTK_LIST_ITEM_FACTORY_CLASS (gtk_signal_list_item_factory_parent_class)->setup (factory, item, bind, func,
data);
- if (gtk_list_item_get_item (list_item))
- g_signal_emit (factory, signals[BIND], 0, list_item);
+ if (bind)
+ g_signal_emit (factory, signals[BIND], 0, item);
}
static void
gtk_signal_list_item_factory_update (GtkListItemFactory *factory,
- GtkListItemWidget *widget,
- GtkListItem *list_item,
- guint position,
- gpointer item,
- gboolean selected)
+ GObject *item,
+ gboolean unbind,
+ gboolean bind,
+ GFunc func,
+ gpointer data)
{
- if (gtk_list_item_get_item (list_item))
- g_signal_emit (factory, signals[UNBIND], 0, list_item);
+ if (unbind)
+ g_signal_emit (factory, signals[UNBIND], 0, item);
- GTK_LIST_ITEM_FACTORY_CLASS (gtk_signal_list_item_factory_parent_class)->update (factory, widget,
list_item, position, item, selected);
+ GTK_LIST_ITEM_FACTORY_CLASS (gtk_signal_list_item_factory_parent_class)->update (factory, item, unbind,
bind, func, data);
- if (item)
- g_signal_emit (factory, signals[BIND], 0, list_item);
+ if (bind)
+ g_signal_emit (factory, signals[BIND], 0, item);
}
static void
gtk_signal_list_item_factory_teardown (GtkListItemFactory *factory,
- GtkListItemWidget *widget,
- GtkListItem *list_item)
+ GObject *item,
+ gboolean unbind,
+ GFunc func,
+ gpointer data)
{
- if (gtk_list_item_get_item (list_item))
- g_signal_emit (factory, signals[UNBIND], 0, list_item);
+ if (unbind)
+ g_signal_emit (factory, signals[UNBIND], 0, item);
- GTK_LIST_ITEM_FACTORY_CLASS (gtk_signal_list_item_factory_parent_class)->teardown (factory, widget,
list_item);
+ GTK_LIST_ITEM_FACTORY_CLASS (gtk_signal_list_item_factory_parent_class)->teardown (factory, item, unbind,
func, data);
- g_signal_emit (factory, signals[TEARDOWN], 0, list_item);
+ g_signal_emit (factory, signals[TEARDOWN], 0, item);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]