forked from AuroraMiddleware/gtk
Add gtk_container_child_notify
This is a variant of gtk_widget_child_notify() that takes an explicit container, instead of relying on widget->parent to be the correct container to use.
This commit is contained in:
parent
c8c1075cfe
commit
deb271d355
@ -764,6 +764,68 @@ gtk_container_child_type (GtkContainer *container)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* --- GtkContainer child property mechanism --- */
|
/* --- GtkContainer child property mechanism --- */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gtk_container_child_notify:
|
||||||
|
* @container: the #GtkContainer
|
||||||
|
* @widget: the child widget
|
||||||
|
* @child_property: the name of a chld property installed on
|
||||||
|
* the class of @container
|
||||||
|
*
|
||||||
|
* Emits a #GtkWidget::child-notify signal for the
|
||||||
|
* <link linkend="child-properties">child property</link>
|
||||||
|
* @child_property on widget.
|
||||||
|
*
|
||||||
|
* This is an analogue of g_object_notify() for child properties.
|
||||||
|
*
|
||||||
|
* Also see gtk_widget_child_notify().
|
||||||
|
*
|
||||||
|
* Since: 3.2
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
gtk_container_child_notify (GtkContainer *container,
|
||||||
|
GtkWidget *widget,
|
||||||
|
const gchar *child_property)
|
||||||
|
{
|
||||||
|
GObject *obj;
|
||||||
|
GParamSpec *pspec;
|
||||||
|
|
||||||
|
g_return_if_fail (GTK_IS_CONTAINER (container));
|
||||||
|
g_return_if_fail (GTK_IS_WIDGET (widget));
|
||||||
|
g_return_if_fail (child_property != NULL);
|
||||||
|
|
||||||
|
obj = G_OBJECT (widget);
|
||||||
|
|
||||||
|
if (obj->ref_count == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
g_object_ref (obj);
|
||||||
|
|
||||||
|
pspec = g_param_spec_pool_lookup (_gtk_widget_child_property_pool,
|
||||||
|
child_property,
|
||||||
|
G_OBJECT_TYPE (container),
|
||||||
|
TRUE);
|
||||||
|
|
||||||
|
if (pspec == NULL)
|
||||||
|
{
|
||||||
|
g_warning ("%s: container class `%s' has no child property named `%s'",
|
||||||
|
G_STRLOC,
|
||||||
|
G_OBJECT_TYPE_NAME (container),
|
||||||
|
child_property);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
GObjectNotifyQueue *nqueue;
|
||||||
|
|
||||||
|
nqueue = g_object_notify_queue_freeze (obj, _gtk_widget_child_property_notify_context);
|
||||||
|
|
||||||
|
g_object_notify_queue_add (obj, nqueue, pspec);
|
||||||
|
g_object_notify_queue_thaw (obj, nqueue);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_object_unref (obj);
|
||||||
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
container_get_child_property (GtkContainer *container,
|
container_get_child_property (GtkContainer *container,
|
||||||
GtkWidget *child,
|
GtkWidget *child,
|
||||||
|
@ -195,7 +195,11 @@ void gtk_container_child_set_property (GtkContainer *container,
|
|||||||
void gtk_container_child_get_property (GtkContainer *container,
|
void gtk_container_child_get_property (GtkContainer *container,
|
||||||
GtkWidget *child,
|
GtkWidget *child,
|
||||||
const gchar *property_name,
|
const gchar *property_name,
|
||||||
GValue *value);
|
GValue *value);
|
||||||
|
|
||||||
|
void gtk_container_child_notify (GtkContainer *container,
|
||||||
|
GtkWidget *child,
|
||||||
|
const gchar *property_name);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GTK_CONTAINER_WARN_INVALID_CHILD_PROPERTY_ID:
|
* GTK_CONTAINER_WARN_INVALID_CHILD_PROPERTY_ID:
|
||||||
|
@ -3587,37 +3587,17 @@ gtk_widget_freeze_child_notify (GtkWidget *widget)
|
|||||||
* on @widget.
|
* on @widget.
|
||||||
*
|
*
|
||||||
* This is the analogue of g_object_notify() for child properties.
|
* This is the analogue of g_object_notify() for child properties.
|
||||||
**/
|
*
|
||||||
|
* Also see gtk_container_child_notify().
|
||||||
|
*/
|
||||||
void
|
void
|
||||||
gtk_widget_child_notify (GtkWidget *widget,
|
gtk_widget_child_notify (GtkWidget *widget,
|
||||||
const gchar *child_property)
|
const gchar *child_property)
|
||||||
{
|
{
|
||||||
GtkWidgetPrivate *priv = widget->priv;
|
if (widget->priv->parent == NULL)
|
||||||
GParamSpec *pspec;
|
|
||||||
|
|
||||||
g_return_if_fail (GTK_IS_WIDGET (widget));
|
|
||||||
g_return_if_fail (child_property != NULL);
|
|
||||||
if (!G_OBJECT (widget)->ref_count || !priv->parent)
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
g_object_ref (widget);
|
gtk_container_child_notify (GTK_CONTAINER (widget->priv->parent), widget, child_property);
|
||||||
pspec = g_param_spec_pool_lookup (_gtk_widget_child_property_pool,
|
|
||||||
child_property,
|
|
||||||
G_OBJECT_TYPE (priv->parent),
|
|
||||||
TRUE);
|
|
||||||
if (!pspec)
|
|
||||||
g_warning ("%s: container class `%s' has no child property named `%s'",
|
|
||||||
G_STRLOC,
|
|
||||||
G_OBJECT_TYPE_NAME (priv->parent),
|
|
||||||
child_property);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
GObjectNotifyQueue *nqueue = g_object_notify_queue_freeze (G_OBJECT (widget), _gtk_widget_child_property_notify_context);
|
|
||||||
|
|
||||||
g_object_notify_queue_add (G_OBJECT (widget), nqueue, pspec);
|
|
||||||
g_object_notify_queue_thaw (G_OBJECT (widget), nqueue);
|
|
||||||
}
|
|
||||||
g_object_unref (widget);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user