The Glade DL

This is a general post on the Glade downlow, what’s been going on, and what is to be.

Lets start by discussing what’s the game plan for Glade and GTK+ 3.0, I’ve already detailed this in recent release mails and some bug reports it should also be discussed here.

Glade 3.8

This release of Glade will depend on GTK+ 2.24 and include libglade support, support for legacy catalogs such as libgnomeui and libbonoboui widgets and will still have the project conversion feature to convert your old libglade projects to use the GtkBuilder.

The theory behind releasing 2 Glades simultaneously is that Glade 3.8 will serve as a decent migration path to ease transition of projects transitioning from GTK+ 2 -> GTK+ 3, or from libglade -> GTK+ 2 -> GTK+ 3.

If an older project can be run with Glade 3.8, targeting GTK+ 2.24 and use no deprecated widgets, the glade file should then be ready to load up into Glade 3.10 and already usable with GtkBuilder in GTK+ 3.0.

Glade 3.10

This release will depend on GTK+ 3.0 and will not support libglade, will not support any of the old and deprecated widgets from the GTK+ 2.x line and will evidently, not have any conversion routine. Furthermore the libgladeui-2 core library will guarantee API and ABI stability so that IDE’s like Anjuta will never be broken by an upgrade to the underlying Glade core (not to mention, the code cleanup required to achieve an ABI stable core made the Glade sources considerably more readable, so it will be much easier from now on for you to contribute to Glade… which is what we’re counting on ;-)).

Both of these releases will be made simultaneously, we’re going to try our best to coordinate the release to be at the same date that GTK+ 3.0 is released.

Glade 3.8 and Glade 3.10 will be parallel installable.

Map of Glade 3.8 related files:

  • $prefix/bin/glade-3 (Glade’s frontend executable).
  • $prefix/lib/ (Glade’s core library)
  • $prefix/lib/glade3/modules/*.so (Glade’s plugin modules)
  • $prefix/share/glade3/catalogs/ (Catalogs for Glade)
  • $prefix/share/glade3/pixmaps/… (Glade’s graphical resources including widget icons)
  • (Will be the download location for 3.8 tarballs)

Map of Glade 3.10 related files:

  • $prefix/bin/glade (Glade’s frontend executable).
  • $prefix/lib/ (Glade’s core library)
  • $prefix/lib/glade/modules/*.so (Glade’s plugin modules)
  • $prefix/share/glade/catalogs/ (Catalogs for Glade)
  • $prefix/share/glade/pixmaps/… (Glade’s graphical resources including widget icons)
  • (Will be the download location for 3.10 tarballs)

Glade things renamed

In light of the coming renames of ‘glade-3’ exec to be ‘glade’ and the install directory changes, we’ve recently renamed the actual product and repository information to simply be ‘glade’ instead of ‘glade3’.

  • (Glade’s new git repository name)
  • (Glade’s new bugzilla product)

Other Glade news

Over the last month or two I’ve been working hard on Glade, the current buglist right now has only 195 bugs on it, where only a month or so ago the list was somewhere between 300 and 400 bugs long. Lots of crashers have been fixed and lots of refactoring done as specially for Glade 3.10.

But besides all that under-the-hood goodness there are a couple things I can show off with screen shots (unfortunately though; I dont have a sexy theme installed for my GTK+ 3.0 sandbox… maybe someone can eventually fix that for me).

Glade loading progress bars

Alot of Glade files only contain a few widgets, or a few hundred widgets… but alot of the time Glade files can contain > 1000 widgets. Loading speed for these files can be slightly optimized but there is a limit to that optimization.

So to avoid freezing the UI completely we’ve added a progress bar so that you can continue your work and have some reliable feedback about when your project will finish loading up:

Loading a project with a progress bar

As you can see, a notebook tab is by far the best place to put a progress bar (I don’t think I’ve seen this done before but I think it looks just perfect).

Ok moving on to something a little more useful…

Glade allows you to edit GtkActionGroup

Using Juan Pablo Ugarte’s original menu editor, which has been reused to edit GtkTreeView and add GtkCellRenderers and has not failed me yet, I simply applied the code towards editing action groups and allowing the user to add actions to groups:

The GtkActionGroup editor

Users who are already familiar with this editor which we use more and more in Glade will find it very easy to setup an action group with this, I suspect.

Glade allows you to add tags to a GtkTextTagTable

This has been a long standing feature request, GtkTextTagTable is not directly useful in a Glade project however for programs that might use a GtkTextView; setting up a text tag table and symbolic text tags can be useful to apply text attributes to a region of a GtkTextView/GtkTextBuffer (i.e., lets say I want to call this paragraph “Important” and next month I want important text to be green and italic instead of purple and bold, I just go and edit the “Important” tag in the Glade file and I’m done).

The GtkTextTagTable editor

Glade now supports editing the GtkToolPalette widget

Editing a GtkToolPalette

To edit a GtkToolPalette we use the same editor as above, in the same way that we use it to edit GtkToolBar or GtkMenuBar, only in this case we support adding GtkToolItemGroups to a GtkToolPalette and then support adding GtkToolItems to GtkToolItemGroup.

Note here that the GtkToolItemGroup supports use of a custom ‘label-widget’, the above screenshot shows us adding a GtkFrame as the group’s label widget and then adding a label to it, of course it’s not a realistic example of how that might be used, perhaps someone would add a horizontal box with an image and label though.

New GladeSignalEditor

Johannes Schmid has written new code for Glade’s signal editor. Currently the UI looks just about the same as the old signal editor with some minor improvements. However the underlying code has drastically changed so that GladeWidget uses a delegate object to report the signals via a GtkTreeModel interface implementation. This was supposedly the missing link that will allow Anjuta to support Drag’n’Drop of signals from Glade’s signal editor into other active portions of Anjuta’s UI (I suspect probably to automatically create function prototypes in a given language for the signal callback dragged into the GtkSourceView or fancy things like that will happen).

Glade is starting on a Preview feature

Preview Feature

The new preview feature by Diego Aurélio Mesquita is in it’s preliminary stages but currently works to the specs that I originally wanted, mainly it runs out of process and uses a ‘glade-previewer’ program that responds to some very basic IPC commands sent to it via stdio to update itself at some appropriate times and to exit when requested. The main reason that I wanted this to be out of process is because there is always the possibility that GtkBuilder can crash while loading the xml, yes it’s highly unlikely but possible.

Some things we want to add to the preview feature:

  • Override desktop settings, it will be nice to allow the user to configure various desktop settings to see how the app will look and feel on different desktop configurations.
  • Override theme, this would allow the user to see how their app will look with a specific theme, it should be particularly interesting for example, if the application developed in Glade is targeting a specific handheld device and the user wants to know how the app looks with the hand-held’s theme before compiling it and installing it onto the said device (this can even be interesting for theme authors to see how their theme pans out with various glade files and widget configurations loaded).
  • Report errors reliably, if for any reason GtkBuilder has some problems with the loaded xml, the previewer program can report back the stdout and it can be displayed to the user in a warning window.


Dolean Samuel has started working on some new icons for the palette, this work was initiated by a google code-in task and we’re tracking that work in this bug. Hopefully Glade for GTK+ 3.0 will come with all the much needed icons as a result.

Well, I think this covers most of the recent developments on Glade.

As usual, Openismus deserves our thanks for tasking me full time on Glade.

Lets make GTK+3 rock !

8 thoughts on “The Glade DL”

  1. Yum!

    I appreciate the defensiveness against crashes while previewing. Do you have any plans to defend against crashes in the main application? A browser-like session restore function, for example?

  2. @Marius:
    Glade should be a controlled environment at least enough to avoid crashes inside the main application.

    I know, there have been lots of crashes in the past, many of them were
    simply my own fault and some of them had to do with how GTK+ handles
    properties that are set unexpectedly etc (hence my defensiveness with
    previews), but we try our best to avoid those crashes by simply not setting
    widget properties to values that are known to crash version X of GTK+,
    and also improve GTK+ to handle some odd property configurations along
    the way (so we fix the issues from both sides really, usually it happens
    that when we find such a crash, we need to fix it in upstream GTK+ but
    also handle it in Glade so that Glade versions dont crash with older
    versions of GTK+).

    Ideally speaking though, any crash in Glade is Glade’s fault and we should
    fix it in Glade.

    My main priority… is that your experience with Glade 3.10 will be crash

Leave a Reply

Your email address will not be published. Required fields are marked *