gtk_container_add (GTK_CONTAINER (priv->revealer), priv->center_box);
}
+static GtkBuildableIface *parent_buildable_iface;
+
static void
gtk_action_bar_buildable_add_child (GtkBuildable *buildable,
GtkBuilder *builder,
if (type && strcmp (type, "center") == 0)
gtk_action_bar_set_center_widget (action_bar, GTK_WIDGET (child));
- else if (!type)
- gtk_container_add (GTK_CONTAINER (buildable), GTK_WIDGET (child));
else
- GTK_BUILDER_WARN_INVALID_CHILD_TYPE (action_bar, type);
+ parent_buildable_iface->add_child (buildable, builder, child, type);
}
-static GtkBuildableIface *parent_buildable_iface;
-
static void
gtk_action_bar_buildable_interface_init (GtkBuildableIface *iface)
{
gtk_widget_class_set_css_name (widget_class, I_("cellview"));
}
+static void
+gtk_cell_view_buildable_add_child (GtkBuildable *buildable,
+ GtkBuilder *builder,
+ GObject *child,
+ const gchar *type)
+{
+ if (GTK_IS_CELL_RENDERER (child))
+ _gtk_cell_layout_buildable_add_child (buildable, builder, child, type);
+ else
+ parent_buildable_iface->add_child (buildable, builder, child, type);
+}
+
static void
gtk_cell_view_buildable_init (GtkBuildableIface *iface)
{
parent_buildable_iface = g_type_interface_peek_parent (iface);
- iface->add_child = _gtk_cell_layout_buildable_add_child;
+ iface->add_child = gtk_cell_view_buildable_add_child;
iface->custom_tag_start = gtk_cell_view_buildable_custom_tag_start;
iface->custom_tag_end = gtk_cell_view_buildable_custom_tag_end;
}
PROP_ORIENTATION
};
+static GtkBuildableIface *parent_buildable_iface;
+
static void gtk_center_box_buildable_init (GtkBuildableIface *iface);
G_DEFINE_TYPE_WITH_CODE (GtkCenterBox, gtk_center_box, GTK_TYPE_WIDGET,
else if (g_strcmp0 (type, "end") == 0)
gtk_center_box_set_end_widget (GTK_CENTER_BOX (buildable), GTK_WIDGET (child));
else
- GTK_BUILDER_WARN_INVALID_CHILD_TYPE (GTK_CENTER_BOX (buildable), type);
+ parent_buildable_iface->add_child (buildable, builder, child, type);
}
static void
gtk_center_box_buildable_init (GtkBuildableIface *iface)
{
+ parent_buildable_iface = g_type_interface_peek_parent (iface);
+
iface->add_child = gtk_center_box_buildable_add_child;
}
GObject *child,
const gchar *type)
{
- if (GTK_IS_WIDGET (child))
- {
- parent_buildable_iface->add_child (buildable, builder, child, type);
- return;
- }
-
- _gtk_cell_layout_buildable_add_child (buildable, builder, child, type);
+ if (GTK_IS_CELL_RENDERER (child))
+ _gtk_cell_layout_buildable_add_child (buildable, builder, child, type);
+ else
+ parent_buildable_iface->add_child (buildable, builder, child, type);
}
static gboolean
GObject *child,
const gchar *type)
{
- if (type)
+ if (GTK_IS_WIDGET (child) &&
+ _gtk_widget_get_parent (GTK_WIDGET (child)) == NULL)
{
- GTK_BUILDER_WARN_INVALID_CHILD_TYPE (buildable, type);
+ if (type)
+ {
+ GTK_BUILDER_WARN_INVALID_CHILD_TYPE (buildable, type);
+ }
+ else
+ {
+ gtk_container_add (GTK_CONTAINER (buildable), GTK_WIDGET (child));
+ }
}
- else if (GTK_IS_WIDGET (child) &&
- _gtk_widget_get_parent (GTK_WIDGET (child)) == NULL)
+ else
{
- gtk_container_add (GTK_CONTAINER (buildable), GTK_WIDGET (child));
+ parent_buildable_iface->add_child (buildable, builder, child, type);
}
- else
- g_warning ("Cannot add an object of type %s to a container of type %s",
- g_type_name (G_OBJECT_TYPE (child)), g_type_name (G_OBJECT_TYPE (buildable)));
}
static inline void
GtkDialogPrivate *priv = dialog->priv;
if (type == NULL)
- gtk_container_add (GTK_CONTAINER (buildable), GTK_WIDGET (child));
+ parent_buildable_iface->add_child (buildable, builder, child, type);
else if (g_str_equal (type, "titlebar"))
{
priv->headerbar = GTK_WIDGET (child);
GTK_PHASE_BUBBLE);
}
+static GtkBuildableIface *parent_buildable_iface;
+
static void
gtk_expander_buildable_add_child (GtkBuildable *buildable,
GtkBuilder *builder,
GObject *child,
const gchar *type)
{
- if (!type)
- gtk_container_add (GTK_CONTAINER (buildable), GTK_WIDGET (child));
- else if (strcmp (type, "label") == 0)
+ if (g_strcmp0 (type, "label") == 0)
gtk_expander_set_label_widget (GTK_EXPANDER (buildable), GTK_WIDGET (child));
else
- GTK_BUILDER_WARN_INVALID_CHILD_TYPE (GTK_EXPANDER (buildable), type);
+ parent_buildable_iface->add_child (buildable, builder, child, type);
}
static void
gtk_expander_buildable_init (GtkBuildableIface *iface)
{
+ parent_buildable_iface = g_type_interface_peek_parent (iface);
+
iface->add_child = gtk_expander_buildable_add_child;
}
gtk_widget_class_set_css_name (widget_class, I_("frame"));
}
+static GtkBuildableIface *parent_buildable_iface;
+
static void
gtk_frame_buildable_init (GtkBuildableIface *iface)
{
+ parent_buildable_iface = g_type_interface_peek_parent (iface);
+
iface->add_child = gtk_frame_buildable_add_child;
}
{
if (type && strcmp (type, "label") == 0)
gtk_frame_set_label_widget (GTK_FRAME (buildable), GTK_WIDGET (child));
- else if (!type)
- gtk_container_add (GTK_CONTAINER (buildable), GTK_WIDGET (child));
else
- GTK_BUILDER_WARN_INVALID_CHILD_TYPE (GTK_FRAME (buildable), type);
+ parent_buildable_iface->add_child (buildable, builder, child, type);
}
static void
construct_label_box (bar);
}
+static GtkBuildableIface *parent_buildable_iface;
+
static void
gtk_header_bar_buildable_add_child (GtkBuildable *buildable,
GtkBuilder *builder,
{
if (type && strcmp (type, "title") == 0)
gtk_header_bar_set_custom_title (GTK_HEADER_BAR (buildable), GTK_WIDGET (child));
- else if (!type)
- gtk_container_add (GTK_CONTAINER (buildable), GTK_WIDGET (child));
else
- GTK_BUILDER_WARN_INVALID_CHILD_TYPE (GTK_HEADER_BAR (buildable), type);
+ parent_buildable_iface->add_child (buildable, builder, child, type);
}
static void
gtk_header_bar_buildable_init (GtkBuildableIface *iface)
{
+ parent_buildable_iface = g_type_interface_peek_parent (iface);
+
iface->add_child = gtk_header_bar_buildable_add_child;
}
gtk_widget_class_set_css_name (widget_class, I_("iconview"));
}
+static void
+gtk_icon_view_buildable_add_child (GtkBuildable *buildable,
+ GtkBuilder *builder,
+ GObject *child,
+ const gchar *type)
+{
+ if (GTK_IS_CELL_RENDERER (child))
+ _gtk_cell_layout_buildable_add_child (buildable, builder, child, type);
+ else
+ parent_buildable_iface->add_child (buildable, builder, child, type);
+}
+
static void
gtk_icon_view_buildable_init (GtkBuildableIface *iface)
{
parent_buildable_iface = g_type_interface_peek_parent (iface);
- iface->add_child = _gtk_cell_layout_buildable_add_child;
+ iface->add_child = gtk_icon_view_buildable_add_child;
iface->custom_tag_start = gtk_icon_view_buildable_custom_tag_start;
iface->custom_tag_end = gtk_icon_view_buildable_custom_tag_end;
}
#define BOX_PRIV(box) ((GtkListBoxPrivate*)gtk_list_box_get_instance_private ((GtkListBox*)(box)))
#define ROW_PRIV(row) ((GtkListBoxRowPrivate*)gtk_list_box_row_get_instance_private ((GtkListBoxRow*)(row)))
+static GtkBuildableIface *parent_buildable_iface;
+
static void gtk_list_box_buildable_interface_init (GtkBuildableIface *iface);
static void gtk_list_box_row_actionable_iface_init (GtkActionableInterface *iface);
{
if (type && strcmp (type, "placeholder") == 0)
gtk_list_box_set_placeholder (GTK_LIST_BOX (buildable), GTK_WIDGET (child));
- else if (!type)
- gtk_container_add (GTK_CONTAINER (buildable), GTK_WIDGET (child));
else
- GTK_BUILDER_WARN_INVALID_CHILD_TYPE (buildable, type);
+ parent_buildable_iface->add_child (buildable, builder, child, type);
}
static void
gtk_list_box_buildable_interface_init (GtkBuildableIface *iface)
{
+ parent_buildable_iface = g_type_interface_peek_parent (iface);
+
iface->add_child = gtk_list_box_buildable_add_child;
}
GTK_STYLE_CLASS_FRAME);
}
+static GtkBuildableIface *parent_buildable_iface;
+
static void
gtk_notebook_buildable_init (GtkBuildableIface *iface)
{
+ parent_buildable_iface = g_type_interface_peek_parent (iface);
+
iface->add_child = gtk_notebook_buildable_add_child;
}
{
GtkNotebook *notebook = GTK_NOTEBOOK (buildable);
- if (type && strcmp (type, "tab") == 0)
+ if (GTK_IS_WIDGET (child))
{
- GtkWidget * page;
-
- page = gtk_notebook_get_nth_page (notebook, -1);
- /* To set the tab label widget, we must have already a child
- * inside the tab container. */
- g_assert (page != NULL);
- /* warn when Glade tries to overwrite label */
- if (gtk_notebook_get_tab_label (notebook, page))
- g_warning ("Overriding tab label for notebook");
- gtk_notebook_set_tab_label (notebook, page, GTK_WIDGET (child));
- }
- else if (type && strcmp (type, "action-start") == 0)
- {
- gtk_notebook_set_action_widget (notebook, GTK_WIDGET (child), GTK_PACK_START);
+ if (type && strcmp (type, "tab") == 0)
+ {
+ GtkWidget * page;
+
+ page = gtk_notebook_get_nth_page (notebook, -1);
+ /* To set the tab label widget, we must have already a child
+ * inside the tab container. */
+ g_assert (page != NULL);
+ /* warn when Glade tries to overwrite label */
+ if (gtk_notebook_get_tab_label (notebook, page))
+ g_warning ("Overriding tab label for notebook");
+ gtk_notebook_set_tab_label (notebook, page, GTK_WIDGET (child));
+ }
+ else if (type && strcmp (type, "action-start") == 0)
+ {
+ gtk_notebook_set_action_widget (notebook, GTK_WIDGET (child), GTK_PACK_START);
+ }
+ else if (type && strcmp (type, "action-end") == 0)
+ {
+ gtk_notebook_set_action_widget (notebook, GTK_WIDGET (child), GTK_PACK_END);
+ }
+ else if (!type)
+ gtk_notebook_append_page (notebook, GTK_WIDGET (child), NULL);
+ else
+ GTK_BUILDER_WARN_INVALID_CHILD_TYPE (notebook, type);
}
- else if (type && strcmp (type, "action-end") == 0)
+ else
{
- gtk_notebook_set_action_widget (notebook, GTK_WIDGET (child), GTK_PACK_END);
+ parent_buildable_iface->add_child (buildable, builder, child, type);
}
- else if (!type)
- gtk_notebook_append_page (notebook, GTK_WIDGET (child), NULL);
- else
- GTK_BUILDER_WARN_INVALID_CHILD_TYPE (notebook, type);
}
static gboolean
gtk_widget_set_has_surface (GTK_WIDGET (overlay), FALSE);
}
+static GtkBuildableIface *parent_buildable_iface;
+
static void
gtk_overlay_buildable_add_child (GtkBuildable *buildable,
GtkBuilder *builder,
GObject *child,
const gchar *type)
{
- if (type && strcmp (type, "overlay") == 0)
- gtk_overlay_add_overlay (GTK_OVERLAY (buildable), GTK_WIDGET (child));
- else if (!type)
+ if (GTK_IS_WIDGET (child))
{
- /* Make sure the main-child node is the first one */
- gtk_widget_insert_after (GTK_WIDGET (child), GTK_WIDGET (buildable), NULL);
- _gtk_bin_set_child (GTK_BIN (buildable), GTK_WIDGET (child));
+ if (type && strcmp (type, "overlay") == 0)
+ gtk_overlay_add_overlay (GTK_OVERLAY (buildable), GTK_WIDGET (child));
+ else if (!type)
+ {
+ /* Make sure the main-child node is the first one */
+ gtk_widget_insert_after (GTK_WIDGET (child), GTK_WIDGET (buildable), NULL);
+ _gtk_bin_set_child (GTK_BIN (buildable), GTK_WIDGET (child));
+ }
+ else
+ GTK_BUILDER_WARN_INVALID_CHILD_TYPE (buildable, type);
}
else
- GTK_BUILDER_WARN_INVALID_CHILD_TYPE (buildable, type);
+ {
+ parent_buildable_iface->add_child (buildable, builder, child, type);
+ }
}
static void
gtk_overlay_buildable_init (GtkBuildableIface *iface)
{
+ parent_buildable_iface = g_type_interface_peek_parent (iface);
+
iface->add_child = gtk_overlay_buildable_add_child;
}
GObject *child,
const gchar *type)
{
- gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), GTK_TREE_VIEW_COLUMN (child));
+ if (GTK_IS_TREE_VIEW_COLUMN (child))
+ gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), GTK_TREE_VIEW_COLUMN (child));
+ else
+ parent_buildable_iface->add_child (tree_view, builder, child, type);
}
static GObject *
GObject *child,
const gchar *type)
{
- gtk_widget_set_parent (GTK_WIDGET (child), GTK_WIDGET (buildable));
+ if (type != NULL)
+ {
+ GTK_BUILDER_WARN_INVALID_CHILD_TYPE (buildable, type);
+ }
+ if (GTK_IS_WIDGET (child))
+ {
+ gtk_widget_set_parent (GTK_WIDGET (child), GTK_WIDGET (buildable));
+ }
+ else if (GTK_IS_EVENT_CONTROLLER (child))
+ {
+ gtk_widget_add_controller (GTK_WIDGET (buildable), g_object_ref (GTK_EVENT_CONTROLLER (child)));
+ }
+ else
+ {
+ g_warning ("Cannot add an object of type %s to a widget of type %s",
+ g_type_name (G_OBJECT_TYPE (child)), g_type_name (G_OBJECT_TYPE (buildable)));
+ }
}
static void
{
if (type && strcmp (type, "titlebar") == 0)
gtk_window_set_titlebar (GTK_WINDOW (buildable), GTK_WIDGET (child));
- else if (!type)
- gtk_container_add (GTK_CONTAINER (buildable), GTK_WIDGET (child));
else
- GTK_BUILDER_WARN_INVALID_CHILD_TYPE (buildable, type);
+ parent_buildable_iface->add_child (buildable, builder, child, type);
}
static void