GtkComboBoxPrivate *priv = gtk_combo_box_get_instance_private (combo_box);
g_return_if_fail (GTK_IS_COMBO_BOX (combo_box));
- g_return_if_fail (child == NULL || GTK_IS_WIDGET (child));
+ g_return_if_fail (child == NULL || gtk_widget_get_parent (child) == NULL);
if (priv->child)
gtk_combo_box_remove (combo_box, priv->child);
GtkWidget *child)
{
g_return_if_fail (GTK_IS_ASPECT_FRAME (self));
- g_return_if_fail (child == NULL || GTK_IS_WIDGET (child));
+ g_return_if_fail (child == NULL || self->child == child || gtk_widget_get_parent (child) == NULL);
if (self->child == child)
return;
GtkButtonPrivate *priv = gtk_button_get_instance_private (button);
g_return_if_fail (GTK_IS_BUTTON (button));
- g_return_if_fail (child == NULL || GTK_IS_WIDGET (child));
+ g_return_if_fail (child == NULL || priv->child == child || gtk_widget_get_parent (child) == NULL);
+
+ if (priv->child == child)
+ return;
g_clear_pointer (&priv->child, gtk_widget_unparent);
{
GtkLayoutManager *layout_manager;
+ g_return_if_fail (GTK_IS_CENTER_BOX (self));
+ g_return_if_fail (child == NULL || self->start_widget == child || gtk_widget_get_parent (child) == NULL);
+
+ if (self->start_widget == child)
+ return;
+
if (self->start_widget)
gtk_widget_unparent (self->start_widget);
{
GtkLayoutManager *layout_manager;
+ g_return_if_fail (GTK_IS_CENTER_BOX (self));
+ g_return_if_fail (child == NULL || self->center_widget == child || gtk_widget_get_parent (child) == NULL);
+
+ if (self->center_widget == child)
+ return;
+
if (self->center_widget)
gtk_widget_unparent (self->center_widget);
{
GtkLayoutManager *layout_manager;
+ g_return_if_fail (GTK_IS_CENTER_BOX (self));
+ g_return_if_fail (child == NULL || self->end_widget == child || gtk_widget_get_parent (child) == NULL);
+
+ if (self->end_widget == child)
+ return;
+
if (self->end_widget)
gtk_widget_unparent (self->end_widget);
gtk_check_button_set_child (GtkCheckButton *button,
GtkWidget *child)
{
+ GtkCheckButtonPrivate *priv = gtk_check_button_get_instance_private (button);
+
g_return_if_fail (GTK_IS_CHECK_BUTTON (button));
- g_return_if_fail (child == NULL || GTK_IS_WIDGET (child));
+ g_return_if_fail (child == NULL || priv->child == child || gtk_widget_get_parent (child) == NULL);
+
+ if (priv->child == child)
+ return;
g_object_freeze_notify (G_OBJECT (button));
GtkWidget *child)
{
g_return_if_fail (GTK_IS_DRAG_ICON (self));
- g_return_if_fail (child == NULL || GTK_IS_WIDGET (child));
+ g_return_if_fail (child == NULL || gtk_widget_get_parent (child) == NULL);
if (self->child == child)
return;
PROP_LABEL_WIDGET,
g_param_spec_object ("label-widget", NULL, NULL,
GTK_TYPE_WIDGET,
- GTK_PARAM_READWRITE));
+ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY));
/**
* GtkExpander:resize-toplevel: (attributes org.gtk.Property.get=gtk_expander_get_resize_toplevel org.gtk.Property.set=gtk_expander_set_resize_toplevel)
PROP_CHILD,
g_param_spec_object ("child", NULL, NULL,
GTK_TYPE_WIDGET,
- GTK_PARAM_READWRITE));
+ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY));
/**
* GtkExpander::activate:
GtkWidget *widget;
g_return_if_fail (GTK_IS_EXPANDER (expander));
- g_return_if_fail (label_widget == NULL || GTK_IS_WIDGET (label_widget));
- g_return_if_fail (label_widget == NULL || gtk_widget_get_parent (label_widget) == NULL);
+ g_return_if_fail (label_widget == NULL || expander->label_widget == label_widget || gtk_widget_get_parent (label_widget) == NULL);
if (expander->label_widget == label_widget)
return;
GtkWidget *child)
{
g_return_if_fail (GTK_IS_EXPANDER (expander));
- g_return_if_fail (child == NULL || GTK_IS_WIDGET (child));
+ g_return_if_fail (child == NULL || expander->child == child || gtk_widget_get_parent (child) == NULL);
if (expander->child == child)
return;
{
GtkFlowBoxChildPrivate *priv = CHILD_PRIV (self);
+ g_return_if_fail (GTK_IS_FLOW_BOX_CHILD (self));
+ g_return_if_fail (child == NULL || priv->child == child || gtk_widget_get_parent (child) == NULL);
+
+ if (priv->child == child)
+ return;
+
g_clear_pointer (&priv->child, gtk_widget_unparent);
priv->child = child;
frame_props[PROP_LABEL_WIDGET] =
g_param_spec_object ("label-widget", NULL, NULL,
GTK_TYPE_WIDGET,
- GTK_PARAM_READWRITE);
+ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
/**
* GtkFrame:child: (attributes org.gtk.Property.get=gtk_frame_get_child org.gtk.Property.set=gtk_frame_set_child)
frame_props[PROP_CHILD] =
g_param_spec_object ("child", NULL, NULL,
GTK_TYPE_WIDGET,
- GTK_PARAM_READWRITE);
+ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
g_object_class_install_properties (gobject_class, LAST_PROP, frame_props);
GtkFramePrivate *priv = gtk_frame_get_instance_private (frame);
g_return_if_fail (GTK_IS_FRAME (frame));
- g_return_if_fail (label_widget == NULL || GTK_IS_WIDGET (label_widget));
- g_return_if_fail (label_widget == NULL || gtk_widget_get_parent (label_widget) == NULL);
+ g_return_if_fail (label_widget == NULL || priv->label_widget == label_widget || gtk_widget_get_parent (label_widget) == NULL);
if (priv->label_widget == label_widget)
return;
GtkFramePrivate *priv = gtk_frame_get_instance_private (frame);
g_return_if_fail (GTK_IS_FRAME (frame));
- g_return_if_fail (child == NULL || GTK_IS_WIDGET (child));
+ g_return_if_fail (child == NULL || priv->child == child || gtk_widget_get_parent (child) == NULL);
if (priv->child == child)
return;
GtkWidget *title_widget)
{
g_return_if_fail (GTK_IS_HEADER_BAR (bar));
- if (title_widget)
- g_return_if_fail (GTK_IS_WIDGET (title_widget));
+ g_return_if_fail (title_widget == NULL || bar->title_widget == title_widget || gtk_widget_get_parent (title_widget) == NULL);
/* No need to do anything if the title widget stays the same */
if (bar->title_widget == title_widget)
header_bar_props[PROP_TITLE_WIDGET] =
g_param_spec_object ("title-widget", NULL, NULL,
GTK_TYPE_WIDGET,
- G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS);
+ G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS|G_PARAM_EXPLICIT_NOTIFY);
/**
* GtkHeaderBar:show-title-buttons: (attributes org.gtk.Property.get=gtk_header_bar_get_show_title_buttons org.gtk.Property.set=gtk_header_bar_set_show_title_buttons)
label_props[PROP_MNEMONIC_WIDGET] =
g_param_spec_object ("mnemonic-widget", NULL, NULL,
GTK_TYPE_WIDGET,
- GTK_PARAM_READWRITE);
+ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
/**
* GtkLabel:ellipsize: (attributes org.gtk.Property.get=gtk_label_get_ellipsize org.gtk.Property.set=gtk_label_set_ellipsize)
GtkWidget *widget)
{
g_return_if_fail (GTK_IS_LABEL (self));
+ g_return_if_fail (widget == NULL || GTK_IS_WIDGET (widget));
- if (widget)
- g_return_if_fail (GTK_IS_WIDGET (widget));
+ if (self->mnemonic_widget == widget)
+ return;
if (self->mnemonic_widget)
{
{
GtkListBoxRowPrivate *priv = ROW_PRIV (row);
+ g_return_if_fail (GTK_IS_LIST_BOX_ROW (row));
+ g_return_if_fail (child == NULL || priv->child == child || gtk_widget_get_parent (child) == NULL);
+
+ if (priv->child == child)
+ return;
+
g_clear_pointer (&priv->child, gtk_widget_unparent);
priv->child = child;
GtkWidget *child)
{
g_return_if_fail (GTK_IS_LIST_ITEM (self));
- g_return_if_fail (child == NULL || GTK_IS_WIDGET (child));
+ g_return_if_fail (child == NULL || gtk_widget_get_parent (child) == NULL);
if (self->child == child)
return;
GtkWidget *box, *arrow;
g_return_if_fail (GTK_IS_MENU_BUTTON (menu_button));
- g_return_if_fail (child == NULL || GTK_IS_WIDGET (child));
+ g_return_if_fail (child == NULL || menu_button->child == child || gtk_widget_get_parent (child) == NULL);
+
+ if (menu_button->child == child)
+ return;
g_object_freeze_notify (G_OBJECT (menu_button));
arrow = gtk_builtin_icon_new ("arrow");
menu_button->arrow_widget = arrow;
- gtk_box_append (GTK_BOX (box), child);
+ if (child)
+ gtk_box_append (GTK_BOX (box), child);
gtk_box_append (GTK_BOX (box), arrow);
gtk_button_set_child (GTK_BUTTON (menu_button->button), box);
GtkWidget *child)
{
g_return_if_fail (GTK_IS_OVERLAY (overlay));
- g_return_if_fail (child == NULL || GTK_IS_WIDGET (child));
+ g_return_if_fail (child == NULL || overlay->child == child || gtk_widget_get_parent (child) == NULL);
+
+ if (overlay->child == child)
+ return;
g_clear_pointer (&overlay->child, gtk_widget_unparent);
* If @child is `NULL`, the existing child will be removed.
*/
void
-gtk_paned_set_start_child (GtkPaned *paned,
+gtk_paned_set_start_child (GtkPaned *paned,
GtkWidget *child)
{
g_return_if_fail (GTK_IS_PANED (paned));
- g_return_if_fail (child == NULL || GTK_IS_WIDGET (child));
+ g_return_if_fail (child == NULL || paned->start_child == child || gtk_widget_get_parent (child) == NULL);
+
+ if (paned->start_child == child)
+ return;
g_clear_pointer (&paned->start_child, gtk_widget_unparent);
* If @child is `NULL`, the existing child will be removed.
*/
void
-gtk_paned_set_end_child (GtkPaned *paned,
+gtk_paned_set_end_child (GtkPaned *paned,
GtkWidget *child)
{
g_return_if_fail (GTK_IS_PANED (paned));
- g_return_if_fail (child == NULL || GTK_IS_WIDGET (child));
+ g_return_if_fail (child == NULL || paned->end_child == child || gtk_widget_get_parent (child) == NULL);
+
+ if (paned->end_child == child)
+ return;
g_clear_pointer (&paned->end_child, gtk_widget_unparent);
GtkPopoverPrivate *priv = gtk_popover_get_instance_private (popover);
g_return_if_fail (GTK_IS_POPOVER (popover));
- g_return_if_fail (child == NULL || GTK_IS_WIDGET (child));
+ g_return_if_fail (child == NULL || priv->child == child || gtk_widget_get_parent (child) == NULL);
if (priv->child == child)
return;
GtkWidget *child)
{
g_return_if_fail (GTK_IS_REVEALER (revealer));
- g_return_if_fail (child == NULL || GTK_IS_WIDGET (child));
+ g_return_if_fail (child == NULL || revealer->child == child || gtk_widget_get_parent (child) == NULL);
+
+ if (revealer->child == child)
+ return;
g_clear_pointer (&revealer->child, gtk_widget_unparent);
GtkWidget *scrollable_child;
g_return_if_fail (GTK_IS_SCROLLED_WINDOW (scrolled_window));
+ g_return_if_fail (child == NULL ||
+ priv->child == child ||
+ (priv->auto_added_viewport && gtk_viewport_get_child (GTK_VIEWPORT (priv->child)) == child) ||
+ gtk_widget_get_parent (child) == NULL);
+
+ if (priv->child == child ||
+ (priv->auto_added_viewport && gtk_viewport_get_child (GTK_VIEWPORT (priv->child)) == child))
+ return;
if (priv->child)
{
gtk_search_bar_set_child (GtkSearchBar *bar,
GtkWidget *child)
{
+ g_return_if_fail (GTK_IS_SEARCH_BAR (bar));
+ g_return_if_fail (child == NULL || bar->child == child || gtk_widget_get_parent (child) == NULL);
+
+ if (bar->child == child)
+ return;
+
if (bar->child)
{
if (GTK_IS_EDITABLE (bar->child))
GtkWidget *child)
{
g_return_if_fail (GTK_IS_TREE_EXPANDER (self));
- g_return_if_fail (child == NULL || GTK_IS_WIDGET (child));
+ g_return_if_fail (child == NULL || self->child == child || gtk_widget_get_parent (child) == NULL);
if (self->child == child)
return;
PROP_CHILD,
g_param_spec_object ("child", NULL, NULL,
GTK_TYPE_WIDGET,
- GTK_PARAM_READWRITE));
+ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY));
gtk_widget_class_set_css_name (widget_class, I_("viewport"));
gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_GROUP);
GtkWidget *child)
{
g_return_if_fail (GTK_IS_VIEWPORT (viewport));
- g_return_if_fail (child == NULL || GTK_IS_WIDGET (child));
+ g_return_if_fail (child == NULL || viewport->child == child || gtk_widget_get_parent (child) == NULL);
if (viewport->child == child)
return;
GtkWindowPrivate *priv = gtk_window_get_instance_private (window);
g_return_if_fail (GTK_IS_WINDOW (window));
- g_return_if_fail (child == NULL || GTK_IS_WIDGET (child));
+ g_return_if_fail (child == NULL || priv->child == child || gtk_widget_get_parent (child) == NULL);
+
+ if (priv->child == child)
+ return;
g_clear_pointer (&priv->child, gtk_widget_unparent);
GtkWidget *child)
{
g_return_if_fail (GTK_IS_WINDOW_HANDLE (self));
- g_return_if_fail (child == NULL || GTK_IS_WIDGET (child));
+ g_return_if_fail (child == NULL || self->child == child || gtk_widget_get_parent (child) == NULL);
if (self->child == child)
return;
g_object_set (instance, pspec->name, value, NULL);
assert_notifies (instance, pspec->name, data.count, 1);
+ g_object_set (instance, pspec->name, value, NULL);
+ assert_notifies (instance, pspec->name, data.count, 1);
+
+ g_object_set (instance, pspec->name, NULL, NULL);
+ assert_notifies (instance, pspec->name, data.count, 2);
+
g_signal_handler_disconnect (instance, id);
}
else
g_str_equal (pspec->name, "expanded"))
continue;
- /* can't select items without an underlying, populated model */
- if (g_type_is_a (type, GTK_TYPE_SINGLE_SELECTION) &&
- (g_str_equal (pspec->name, "selected") ||
- g_str_equal (pspec->name, "selected-item")))
- continue;
+ /* can't select items without an underlying, populated model */
+ if (g_type_is_a (type, GTK_TYPE_SINGLE_SELECTION) &&
+ (g_str_equal (pspec->name, "selected") ||
+ g_str_equal (pspec->name, "selected-item")))
+ continue;
- /* can't select items without an underlying, populated model */
- if (g_type_is_a (type, GTK_TYPE_DROP_DOWN) &&
- g_str_equal (pspec->name, "selected"))
- continue;
+ /* can't select items without an underlying, populated model */
+ if (g_type_is_a (type, GTK_TYPE_DROP_DOWN) &&
+ g_str_equal (pspec->name, "selected"))
+ continue;
/* can't set position without a notebook */
- if (g_type_is_a (type, GTK_TYPE_NOTEBOOK_PAGE) &&
- g_str_equal (pspec->name, "position"))
- continue;
+ if (g_type_is_a (type, GTK_TYPE_NOTEBOOK_PAGE) &&
+ g_str_equal (pspec->name, "position"))
+ continue;
/* This one is special */
- if (g_str_equal (pspec->name, "focus-widget"))
- continue;
+ if (g_str_equal (pspec->name, "focus-widget"))
+ continue;
+
+ if (pspec->owner_type == GTK_TYPE_TREE_VIEW_COLUMN &&
+ g_str_equal (pspec->name, "widget"))
+ continue;
if (g_test_verbose ())
g_print ("Property %s.%s\n", g_type_name (pspec->owner_type), pspec->name);