### Interface

# GtkBuildable

#### Description [src]

    interface Gtk.Buildable : GObject.Object

`GtkBuildable` allows objects to extend and customize their deserialization from ui files.

The interface includes methods for setting names and properties of objects, parsing custom tags and constructing child objects.

The `GtkBuildable` interface is implemented by all widgets and many of the non-widget objects that are provided by GTK. The main user of this interface is `GtkBuilder`. There should be very little need for applications to call any of these functions directly.

An object only needs to implement this interface if it needs to extend the `GtkBuilder` XML format or run any extra routines at deserialization time.

#### Prerequisite

In order to implement Buildable, your type must inherit from`GObject`.

#### Implementations

- GtkAboutDialog
- GtkActionBar
- GtkAnyFilter
- GtkAppChooserButton
- GtkAppChooserDialog
- GtkAppChooserWidget
- GtkApplicationWindow
- GtkAspectFrame
- GtkAssistant
- GtkBox
- GtkButton
- GtkCalendar
- GtkCellArea
- GtkCellAreaBox
- GtkCellView
- GtkCenterBox
- GtkCheckButton
- GtkColorButton
- GtkColorChooserDialog
- GtkColorChooserWidget
- GtkColorDialogButton
- GtkColumnView
- GtkComboBox
- GtkComboBoxText
- GtkConstraintLayout
- GtkDialog
- GtkDragIcon
- GtkDrawingArea
- GtkDropDown
- GtkEditableLabel
- GtkEmojiChooser
- GtkEntry
- GtkEntryCompletion
- GtkEveryFilter
- GtkExpander
- GtkFileChooserDialog
- GtkFileChooserWidget
- GtkFileFilter
- GtkFixed
- GtkFlowBox
- GtkFlowBoxChild
- GtkFontButton
- GtkFontChooserDialog
- GtkFontChooserWidget
- GtkFontDialogButton
- GtkFrame
- GtkGLArea
- GtkGraphicsOffload
- GtkGrid
- GtkGridView
- GtkHeaderBar
- GtkIconView
- GtkImage
- GtkInfoBar
- GtkInscription
- GtkLabel
- GtkLevelBar
- GtkLinkButton
- GtkListBase
- GtkListBox
- GtkListBoxRow
- GtkListStore
- GtkListView
- GtkLockButton
- GtkMediaControls
- GtkMenuButton
- GtkMessageDialog
- GtkMultiFilter
- GtkMultiSorter
- GtkNotebook
- GtkOverlay
- GtkPageSetupUnixDialog
- GtkPaned
- GtkPasswordEntry
- GtkPicture
- GtkPopover
- GtkPopoverMenu
- GtkPopoverMenuBar
- GtkPrintUnixDialog
- GtkProgressBar
- GtkRange
- GtkRevealer
- GtkScale
- GtkScaleButton
- GtkScrollbar
- GtkScrolledWindow
- GtkSearchBar
- GtkSearchEntry
- GtkSeparator
- GtkShortcutController
- GtkShortcutLabel
- GtkShortcutsGroup
- GtkShortcutsSection
- GtkShortcutsShortcut
- GtkShortcutsWindow
- GtkSizeGroup
- GtkSpinButton
- GtkSpinner
- GtkStack
- GtkStackSidebar
- GtkStackSwitcher
- GtkStatusbar
- GtkStringList
- GtkSwitch
- GtkText
- GtkTextTagTable
- GtkTextView
- GtkToggleButton
- GtkTreeExpander
- GtkTreeStore
- GtkTreeView
- GtkTreeViewColumn
- GtkVideo
- GtkViewport
- GtkVolumeButton
- GtkWidget
- GtkWindow
- GtkWindowControls
- GtkWindowHandle

#### Instance methods

###### gtk_buildable_get_buildable_id

Gets the ID of the `buildable` object.

#### Interface structure

    struct GtkBuildableIface {
      GTypeInterface g_iface;
      void (* set_id) (
        GtkBuildable* buildable,
        const char* id
      );
      const char* (* get_id) (
        GtkBuildable* buildable
      );
      void (* add_child) (
        GtkBuildable* buildable,
        GtkBuilder* builder,
        GObject* child,
        const char* type
      );
      void (* set_buildable_property) (
        GtkBuildable* buildable,
        GtkBuilder* builder,
        const char* name,
        const GValue* value
      );
      GObject* (* construct_child) (
        GtkBuildable* buildable,
        GtkBuilder* builder,
        const char* name
      );
      gboolean (* custom_tag_start) (
        GtkBuildable* buildable,
        GtkBuilder* builder,
        GObject* child,
        const char* tagname,
        GtkBuildableParser* parser,
        gpointer* data
      );
      void (* custom_tag_end) (
        GtkBuildable* buildable,
        GtkBuilder* builder,
        GObject* child,
        const char* tagname,
        gpointer data
      );
      void (* custom_finished) (
        GtkBuildable* buildable,
        GtkBuilder* builder,
        GObject* child,
        const char* tagname,
        gpointer data
      );
      void (* parser_finished) (
        GtkBuildable* buildable,
        GtkBuilder* builder
      );
      GObject* (* get_internal_child) (
        GtkBuildable* buildable,
        GtkBuilder* builder,
        const char* childname
      );

    }

The `GtkBuildableIface` interface contains methods that are necessary to allow `GtkBuilder` to construct an object from a `GtkBuilder` UI definition.

###### Interface members

`g_iface`

    GTypeInterface

| The parent class.

`set_id`

    void (* set_id) (
        GtkBuildable* buildable,
        const char* id
      )

| Stores the id attribute given in the `GtkBuilder` UI definition. `GtkWidget` stores the name as object data. Implement this method if your object has some notion of “ID” and it makes sense to map the XML id attribute to it.

`get_id`

    const char* (* get_id) (
        GtkBuildable* buildable
      )

| The getter corresponding to `set_id`. Implement this if you implement `set_id`.

`add_child`

    void (* add_child) (
        GtkBuildable* buildable,
        GtkBuilder* builder,
        GObject* child,
        const char* type
      )

| Adds a child. The `type` parameter can be used to differentiate the kind of child. `GtkWidget` implements this to add event controllers to the widget, `GtkNotebook` uses the `type` to distinguish between page labels (of type “page-label”) and normal children.

`set_buildable_property`

    void (* set_buildable_property) (
        GtkBuildable* buildable,
        GtkBuilder* builder,
        const char* name,
        const GValue* value
      )

| Sets a property of a buildable object. It is normally not necessary to implement this, `g_object_set_property()` is used by default. `GtkWindow` implements this to delay showing itself (i.e. setting the `GtkWidget:visible` property) until the whole interface is created.

`construct_child`

    GObject* (* construct_child) (
        GtkBuildable* buildable,
        GtkBuilder* builder,
        const char* name
      )

| Constructs a child of a buildable that has been specified as “constructor” in the UI definition. This can be used to reference a widget created in a `<ui>` tag which is outside of the normal GtkBuilder UI definition hierarchy. A reference to the constructed object is returned and becomes owned by the caller.

`custom_tag_start`

    gboolean (* custom_tag_start) (
        GtkBuildable* buildable,
        GtkBuilder* builder,
        GObject* child,
        const char* tagname,
        GtkBuildableParser* parser,
        gpointer* data
      )

| Implement this if the buildable needs to parse content below `<child>`. To handle an element, the implementation must fill in the `parser` and `user_data` and return `TRUE`. `GtkWidget` implements this to parse accessible attributes specified in `<accessibility>` elements. Note that `user_data` must be freed in `custom_tag_end` or `custom_finished`.

`custom_tag_end`

    void (* custom_tag_end) (
        GtkBuildable* buildable,
        GtkBuilder* builder,
        GObject* child,
        const char* tagname,
        gpointer data
      )

| Called for the end tag of each custom element that is handled by the buildable (see `custom_tag_start`).

`custom_finished`

    void (* custom_finished) (
        GtkBuildable* buildable,
        GtkBuilder* builder,
        GObject* child,
        const char* tagname,
        gpointer data
      )

| Called for each custom tag handled by the buildable when the builder finishes parsing (see `custom_tag_start`)

`parser_finished`

    void (* parser_finished) (
        GtkBuildable* buildable,
        GtkBuilder* builder
      )

| Called when a builder finishes the parsing of a UI definition. It is normally not necessary to implement this, unless you need to perform special cleanup actions. `GtkWindow` sets the `GtkWidget:visible` property here.

`get_internal_child`

    GObject* (* get_internal_child) (
        GtkBuildable* buildable,
        GtkBuilder* builder,
        const char* childname
      )

| Returns an internal child of a buildable. `GtkDialog` implements this to give access to its `vbox`, making it possible to add children to the vbox in a UI definition. Implement this if the buildable has internal children that may need to be accessed from a UI definition.

#### Virtual methods

###### Gtk.Buildable.add_child

Adds a child to `buildable`. `type` is an optional string describing how the child should be added.

###### Gtk.Buildable.construct_child

Constructs a child of a buildable that has been specified as “constructor” in the UI definition. This can be used to reference a widget created in a `<ui>` tag which is outside of the normal GtkBuilder UI definition hierarchy. A reference to the constructed object is returned and becomes owned by the caller.

###### Gtk.Buildable.custom_finished

Similar to `gtk_buildable_parser_finished()` but is called once for each custom tag handled by the `buildable`.

###### Gtk.Buildable.custom_tag_end

Called at the end of each custom element handled by the buildable.

###### Gtk.Buildable.custom_tag_start

Called for each unknown element under `<child>`.

###### Gtk.Buildable.get_id

The getter corresponding to `set_id`. Implement this if you implement `set_id`.

###### Gtk.Buildable.get_internal_child

Retrieves the internal child called `childname` of the `buildable` object.

###### Gtk.Buildable.parser_finished

Called when a builder finishes the parsing of a UI definition. It is normally not necessary to implement this, unless you need to perform special cleanup actions. `GtkWindow` sets the `GtkWidget:visible` property here.

###### Gtk.Buildable.set_buildable_property

Sets a property of a buildable object. It is normally not necessary to implement this, `g_object_set_property()` is used by default. `GtkWindow` implements this to delay showing itself (i.e. setting the `GtkWidget:visible` property) until the whole interface is created.

###### Gtk.Buildable.set_id

Stores the id attribute given in the `GtkBuilder` UI definition. `GtkWidget` stores the name as object data. Implement this method if your object has some notion of “ID” and it makes sense to map the XML id attribute to it.