## Migrating from libglade to GtkBuilder

Since version 2.12, GTK+ provides GtkBuilder to construct user interfaces from XML descriptions, similar to the functionality provided by GladeXML in the libglade library.

A good way to start a migration from libglade to GtkBuilder is to run the gtk-builder-convert utility on your glade file, and inspect the resulting output. If your code uses the `root` parameter of `glade_xml_new()`, you may want to split your glade file into multiple GtkBuilder files by using the `--root` option of gtk-builder-convert. Alternatively, you can use `gtk_builder_add_objects_from_file()` to construct only certain objects from a GtkBuilder file.

Alternatively, you can open the glade file with glade3 and then save it in GtkBuilder format. This is supported by glade3 since version 3.6.

Table 1. Step-by-step instructions for porting code from libglade to GtkBuilder

libglade | GtkBuilder
--- | ---
#include <glade/glade.h> | not needed

    GladeXML*

    GtkBuilder*

    glade_xml_new (FILE, "first_widget", NULL)

    GError* error = NULL;
    GtkBuilder* builder = gtk_builder_new ();
    if (!gtk_builder_add_from_file (builder, FILE, &error))
      {
        g_warning ("Couldn't load builder file: s", error->message);
        g_error_free (error);
      }

    glade_xml_get_widget (gxml, “widget_name”)

    GTK_WIDGET (gtk_builder_get_object (builder, “widget_name”))

    glade_get_widget_name (widget)

    gtk_widget_get_name (widget)

    glade_xml_get_widget_prefix (gxml, “prefix”)

can be emulated by `gtk_builder_get_objects (builder)` together with manual filtering. It returns a GSList* instead of a GList* though.

While GtkBuilder strives to be a complete replacement for libglade, there are a number of areas where it is currently still behind libglade:

- GtkBuilder supports context information in translatable properties in a slightly different way than libglade. Intltool does not yet support this; see bug 454894 for the current status of intltool support for GtkBuilder files. Thankfully, context in translations is a rarely used feature, and if you are not using it, intltools glade format support works just fine for GtkBuilder files.

- While libglade can often tolerate multiple widgets having the same id in a glade file, GtkBuilder will not accept duplicate object ids. Both gtk-builder-convert and the GtkBuilder parser emit warnings when they see duplicate ids.