Join GitHub today
GitHub is home to over 50 million developers working together to host and review code, manage projects, and build software together.Sign up
LIBGLADE ======== Author: James Henstridge <email@example.com> This library allows you to load glade interface files in a program at runtime. It doesn't require GLADE to be used, but GLADE is by far the easiest way to create the interface files. For an idea of how to use the library, see test-libglade.c and glade/glade-xml.h. To compile, you will need the libxml package (aka the gnome-xml module in CVS) which can be found on the GNOME FTP site or its mirrors. If you want GNOME support, you will also need the gnome-libs package installed. When I started developing this library, I was using a 486, and did not have any problems with the speed. Since then, I have reduced its memory usage and increased its speed a bit, so you should not have problems with the library's speed :) I would like to thank Damon Chaplin for writing GLADE, which is one of the best user interface builders I have used. LIBGLADE INTERNALS ================== If you are interested in how libglade works, here is a small description: When glade_xml_new is called, the XML file is loaded using libxml. Libglade uses the SAX interface because it is faster and allows me to store the data in a more compact representation. The data in the XML file is cached, so that if you load the interface again, the file does not need to be reparsed. If the file has changed though, it will be reparsed. The styles in the glade file are first passed to the GTK RC system, so they can be applied to the widgets when the interface is built. Note that newer versions of GLADE have removed the widget style code. Now glade_xml_build_widget is called for all the toplevel widgets in the interface (or if the second argument to glade_xml_new was non NULL, the widget it refers to is treated as the toplevel). For each of these widgets, they are created by a function specific to the widget type, and then glade_xml_build_widget is called for each child widget, which is then packed into its parent. This is done recursively, so the whole interface is constructed. New widget types are added to the widget class hash with the glade_register_widgets function. For an example, see the end of glade-gtk.c. The automatic signal connection system uses the introspective capabilities of dynamic linking. By openning a handle on NULL, we can get at all the global symbols (global functions, global variables) in the executable, and the libraries it is linked against. This is used to find the address of a signal handler from its name, so that gtk_signal_connect can be called automatically for you. Of course, there are other ways of connecting the signals if your platform doesn't support this feature.